在Cloud Config中write_files指令的正确语法是什么?

9
我正在尝试在DigitalOcean droplet上使用云配置脚本,但目前我正在本地的lxc容器上进行测试。
我一直面临的一个持续性问题是,我无法让“write_files”指令同时正常工作超过一个文件。它似乎表现出我无法理解的奇怪行为。
例如,这个配置是不正确的,并且只会在“/tmp”中输出单个文件(“.tarsnaprc”)。
#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"

然而,如果我交换 write_files 数组中的两个项目,则它会像魔术般地工作,并创建 .tarsnaprc 和 lxc 两个文件。我做错了什么?是否有语法错误?
3个回答

11

我可能错过了,但是我在日志中没有找到关于这个错误的记录,但是正如你所说,删除所有者解决了我的问题。 - Peter

5

2

因为使用 canonicals multipass 所以来到这里。如今,@rvelaz@Christian 的回答仍然指向正确的方向。修正后的示例应该像这样:

#cloud-config
users:
  - name: julian
    shell: /bin/bash
    ssh_authorized_keys:
      - ssh-rsa myrsakeygoeshere julian@hostname
write_files:
  # not writing to /tmp
  - path: /data/.tarsnaprc
    permissions: "0644"
    content: |
      cachedir /home/julian/tarsnap-cache
      keyfile /home/julian/tarsnap.key
      nodump
      print-stats
      checkpoint-bytes 1G
  # at execution time, this owner does not yet exist (see runcmd)
  #   owner: julian:julian
  - path: /data/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"
runcmd:
  - "chown julian:julian /data/lxc /data/.tarsnaprc"

这对我也没有用,文件仍然是由root拥有。 - Sudhir N

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接