2017-03-07 89 views
0

如何在CoreOS上对systemd单元使用'when'或'if'条件语句?如何在Systemd单元配置条件下使用'when'

例如:我想安装一个目录只有一个变量被设置为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 
+0

我还没有摆弄很多单位......他们不明白像 [“$ A”=“TRUE”] &&回声“做这个”的常见测试 – louigi600

+0

你可以链接到你正在关注的CoreOS文档?我以前没有见过用于systemd配置的YAML格式。 –

+0

@ankit你用什么来创建这个文件?它是否可靠? – Matt

回答

1

仅仅创建一个单元不没有说明何时以及在该单位何时启动;激活就是你在乎的 - 所以一个解决方案可以像其他代码一样简单地告诉systemd如果你希望启动安装单元在手边。

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

[Unit] 
ConditionPathExists=/etc/mount-docker 

将导致如果/etc/mount-docker存在仅被安装在文件系统。同样,您可以根据在该层运行的逻辑决定是否从Ansible启用安装点的单位。

0

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

相关问题