我正在使用以编程方式生成的 Ansible 剧本。一般来说,因为 playbook 只是 YAML,所以这很简单。但是,当使用“简单”key=value形式时,剧本不是纯粹的shlexYAML——它们包含嵌入可解析形式的内容。
为了避免这种形式的歧义(该key=value配对是命令的参数还是 ansible 的参数?),并且只有一种格式可以解析和生成,我无条件地使用ansible 中示例演示的复杂 args 机制-示例存储库。
这使用以下类型的语法:
action: module-name
args:
key1: value1
key2: value2
Run Code Online (Sandbox Code Playgroud)
......这很好。但是,当尝试将这种形式用于shellorcommand模块(其文档将实际命令描述为在名为 的参数中传递free_form)时,这不能很好地工作:
action: shell
args:
free_form: echo hello_world >/tmp/something
creates: /tmp/something
Run Code Online (Sandbox Code Playgroud)
调用时,它运行以下内容:
/bin/sh -c " free_form='echo hello_world >/tmp/something' "
Run Code Online (Sandbox Code Playgroud)
......这不是我想要完成的。
使用纯 YAML 语法使用采用“自由格式”命令的 Ansible 模块的正确方法是什么?
根据launchctl(强调我的)手册页:
-w 覆盖 Disabled 键并将其设置为 false。在以前的版本中,此选项会修改配置文件。现在禁用密钥的状态存储在磁盘上的其他地方。
由于禁用标志的当前状态不再在.plist文件本身中设置,因此检查Disabled密钥不再是判断服务是否会在下次启动时运行的准确方法。
这个“磁盘上的其他地方”在哪里?更重要的是(更重要的是),如何检查是否设置了此标志?
另外,是否可以将服务设置为在下次启动时运行而不强制它立即启动(如launchctl load -w /Library/LaunchDaemons/my-service.plist)?
如何在 MacOS X 上定义一条通过重启持续存在的静态路由?我在谷歌上找到的唯一建议是设置一个启动服务以在启动时运行,这似乎是一个可怕的黑客(例如,它是否可以在不重启的情况下在网络重启后幸存下来?)
要设置我临时需要的路线,我可以运行以下命令:
route add -net ${network} ${gateway} ${netmask}
Run Code Online (Sandbox Code Playgroud)
我将如何使这种情况持续下去?