我有一个 bash 脚本,正在使用脚本模块在 ansible 中运行。但是,它需要将特定的位置参数指定为服务器名称才能在本例中充当 $1。我试图在 ansible 中找到一种方法来做到这一点,但到目前为止还没有成功。我很乐意使用内置模块来完成此操作,但是 selinux 需要在目标计算机上安装才能启用此功能,并且这不会在生产服务器上运行。 :(
下面是我在没有 ansible 的情况下运行脚本的方式:
bash selinux-disabler-ans.sh <servername>
上面的内容本身运行得很好。但是,我将如何在 ansible 剧本中提供?这是我在下面的部分中使用的内容:
- name: Remediate/Disable selinux, it will only harm configurations right now, and should be disabled.
script: /opt/selinux-disabler-ans.sh
我不能只是硬编码脚本的参数,因为我需要它能够更改,因为这将在整个主机领域运行。我真的很希望它能够在运行时获取位置参数,可能使用当前正在运行的主机,或者可能通过 --limit 指定?现在我正在用我自己的临时自动化运行这个脚本,但我真的希望 ansible 能够做到这一点。有人有主意吗?
答案1
首先我会尝试帮助ansible。您可以使用变量,例如您可以编写如下内容:
- name: Remediate/Disable selinux, it will only harm configurations right now, and should be disabled.
script: /opt/selinux-disabler-ans.sh "{{ ansible_hostname }}"
它将使用在剧本的“设置”阶段从主机收集的主机名。查看 ansible 从远程机器为您收集的变量这里。当然,您可以设置自己的变量。选择 ansible 的在线文档- 太好了!
现在发表一些评论。我不知道为什么您的脚本采用参数作为服务器名称。请注意,根据文档script 模块获取本地脚本(运行 ansible 的主机的本地脚本),将其复制到远程主机并在那里运行。所以,也许你甚至不需要这个论点:)
如果您从 ansible 开始,请尝试从一开始就使用角色编写剧本。它们并不难获得,并且对在更复杂的环境中管理代码有很大帮助。