5

我正在尝试让云配置脚本与我的 DigitalOcean 液滴一起正常工作,但我正在临时测试本地 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"

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

4

3 回答 3

9

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

于 2016-12-16T12:04:55.507 回答
4

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

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

于 2018-07-18T12:42:26.387 回答
1

来到这里是因为使用规范多通道。如今@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"
于 2021-10-25T07:36:41.600 回答