如何在Systemd Unitconfiguration条件下使用'when'

如何在CoreOS上使用systemd单元的'when'或'if'条件语句?

例如:我想挂载一个目录,只有当一个variables设置为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 

仅仅build立一个单位并不能说明何时和在什么情况下该单位被激活; 激活是你在这里关心的 – 所以一个解决scheme可以像其他代码一样只是告诉systemd来启动安装单元,如果你想要启动的话。

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

 [Unit] ConditionPathExists=/etc/mount-docker 

只会在/etc/mount-docker存在的情况下导致文件系统被挂载。 同样,您可以根据在该层运行的逻辑决定是否从Ansible启用安装点的单位。

如果你想做一些有条件的事情,而这些事情不能在CoreOS上使用systemd来完成,那么他们的cloud-config工具有一个write_file指令。 使用它,你可以写一个bash脚本到包含你想要的条件逻辑的磁盘。 然后你可以创build一个启动该bash脚本的systemd服务。 bash脚本可以反过来调用systemctl start ...来启动其他systemd服务或挂载。