云配置中 write_files 指令的正确语法?

Jul*_*Lam 4 yaml lxc cloud-init ubuntu-cloud

我正在尝试让云配置脚本与我的 DigitalOcean Droplet 一起正常工作,但我在此期间正在本地 lxc 容器上进行测试。

我一直遇到的一个问题是,我永远无法让write_files指令对多个文件正常工作。它似乎以我无法理解的奇怪方式行事

比如这个配置不正确,只输出了一个文件(.tarsnaprc/tmp

#cloud-config
users:
  - name: julian
    shell: /bin/bash
    ssh_authorized_keys:
      - ssh-rsa myrsakeygoeshere julian@hostname
write_files:
  - path: /tmp/.tarsnaprc
    permissions: "0644"
    content: |
      cachedir /home/julian/tarsnap-cache
      keyfile /home/julian/tarsnap.key
      nodump
      print-stats
      checkpoint-bytes 1G
    owner: julian:julian
  - path: /tmp/lxc
    content: |
      lxc.id_map = u 0 100000 65536
      lxc.id_map = g 0 100000 65536
      lxc.network.type = veth
      lxc.network.link = lxcbr0
    permissions: "0644"
Run Code Online (Sandbox Code Playgroud)

但是,如果我交换write_files数组中的两个项目,它会神奇地工作,并创建两个文件.tarsnaprclxc. 我做错了什么,我有语法错误吗?

rve*_*laz 6

可能为时已晚,因为它是 1 年前发布的。问题是在 /tmp/.tarsnaprc 中设置所有者,因为创建文件时用户不存在。检查cloud-init:cloud-config 指令的执行顺序是什么?清楚地解释了 cloud-config 指令顺序的答案。


Chr*_*ian 5

启动期间不要在 /tmp 下写入文件,因为与 systemd-tmpfiles-clean 的竞争可能会导致临时文件在早期启动过程中被清理。使用 /run/somedir 来避免竞争 LP:1707222。

参考:https://cloudinit.readthedocs.io/en/latest/topics/modules.html#write-files