如何使用'当'有条件的Systemd Unit配置

时间:2017-03-07 18:11:36

标签: linux docker systemd coreos

我如何使用'何时'或者'如果'在CoreOS上使用systemd单位的条件语句?

例如:我只想在变量设置为True时挂载目录(比如说A == "True"

所以喜欢:

- name: var-lib-docker.mount
  contents: |
    [Unit]
    Description=Mount ephemeral to /var/lib/docker
    [Mount]
     if (A == "true") # This part I'm not sure where and how to put.
       What=/dev/xvd1
       Where=/var/lib/docker
       Type=ext4

2 个答案:

答案 0 :(得分:0)

仅仅创建一个单元并不能描述该单元何时以及在何种情况下被激活;激活是你在这里所关心的 - 所以解决方案就像让其他代码只告诉systemd启动手头的mount单元一样简单,如果你想要它就可以了。

如果您希望设备在启动时执行自己的条件评估,请参阅man systemd.unit以获取用于此目的的各种标志。例如:

[Unit]
ConditionPathExists=/etc/mount-docker
如果/etc/mount-docker存在,

将导致仅挂载文件系统。同样,您可以根据在该层运行的逻辑来决定是否从Ansible启用装载点的单元。

答案 1 :(得分:0)

如果您想在CoreOS上使用systemd无法执行某些有条件的操作,则他们的cloud-config工具会有write_file指令。使用它,您可以将bash脚本写入包含所需条件逻辑的磁盘。然后,您可以创建一个启动该bash脚本的systemd服务。 bash脚本可以依次拨打systemctl start ...来启动其他systemd服务或安装。