我正在使用 ansible-pull (在cron上运行)与Ansible合作 .
ansible-pull
我可以在没有登录到所有计算机的情况下从Ansible Galaxy安装Ansible角色(只需向我的Ansible playbook添加命令)吗?
如果我理解正确,那么您可能会尝试从命令行下载并安装来自Ansible Galaxy的角色,这可能是一次又一次(通过 cron ) . 如果是这种情况,请按照以下步骤操作 .
cron
# download the roles ansible-galaxy install --ignore-errors f500.elasticsearch groover.packerio # run ansible-playbook to install the roles downloaded from Ansible Galaxy ansible-playbook -i localhost, -c local <(echo -e '- hosts: localhost\n roles:\n - { role: f500.elasticsearch, elasticsearch_cluster_name: "my elasticsearch cluster" }\n - { role: groover.packerio, packerio_version: 0.6.1 }\n')
Explanation / FYI :
要从Ansible Galaxy下载角色,请使用 ansible-galaxy ,而不是 ansible-pull . 有关详细信息,请参阅the manual . 您可以一次下载多个角色 .
ansible-galaxy
如果先前已下载角色,则使用 ansible-galaxy install 重复尝试下载将导致错误 . 如果您希望重复调用此命令(例如从cron),请使用 --ignore-errors (跳过角色并转到下一个项目)或 --force (强制覆盖)来解决此问题 .
ansible-galaxy install
--ignore-errors
--force
运行 ansible-playbook 时,我们可以避免使用 -i localhost, 创建库存文件(末尾的逗号表示我们提供的是列表,而不是文件) .
ansible-playbook
-i localhost,
-c local (与 --connection=local 相同)意味着我们不会远程连接,而是在localhost上执行命令 .
-c local
--connection=local
<() 功能是 process substitution . 该命令的输出显示为文件,因此我们可以将"virtual playbook file"提供给 ansible-playbook 命令而不将该剧本首先保存到磁盘(例如,playbookname.yml) .
<()
如图所示,可以嵌入角色变量,例如 packerio_version: 0.6.1 ,并在单个命令中应用多个角色 .
packerio_version: 0.6.1
注意在playbooks中的 whitespace is significant (它们是YAML文件) . 就像在Python代码中一样,要小心缩进 . 使用 echo -e 和 \n (换行符)很容易在长行中输入拼写错误 .
echo -e
\n
您可以分别从Ansible Galaxy和 ansible-playbook 运行角色更新 .
有点神奇,您不必创建库存文件或剧本(有时这可能很有用) . 通过推送远程安装Galaxy角色的解决方案不那么hacky /更干净但是如果你更喜欢使用 cron 并拉动,那么这可以提供帮助 .
是的你可以 .
# install Ansible Galaxy requirements via the pull playbook itself - hosts: localhost tasks: - command: ansible-galaxy install -r requirements.yml
2 回答
如果我理解正确,那么您可能会尝试从命令行下载并安装来自Ansible Galaxy的角色,这可能是一次又一次(通过
cron
) . 如果是这种情况,请按照以下步骤操作 .Explanation / FYI :
要从Ansible Galaxy下载角色,请使用
ansible-galaxy
,而不是ansible-pull
. 有关详细信息,请参阅the manual . 您可以一次下载多个角色 .如果先前已下载角色,则使用
ansible-galaxy install
重复尝试下载将导致错误 . 如果您希望重复调用此命令(例如从cron),请使用--ignore-errors
(跳过角色并转到下一个项目)或--force
(强制覆盖)来解决此问题 .运行
ansible-playbook
时,我们可以避免使用-i localhost,
创建库存文件(末尾的逗号表示我们提供的是列表,而不是文件) .-c local
(与--connection=local
相同)意味着我们不会远程连接,而是在localhost上执行命令 .<()
功能是 process substitution . 该命令的输出显示为文件,因此我们可以将"virtual playbook file"提供给ansible-playbook
命令而不将该剧本首先保存到磁盘(例如,playbookname.yml) .如图所示,可以嵌入角色变量,例如
packerio_version: 0.6.1
,并在单个命令中应用多个角色 .注意在playbooks中的 whitespace is significant (它们是YAML文件) . 就像在Python代码中一样,要小心缩进 . 使用
echo -e
和\n
(换行符)很容易在长行中输入拼写错误 .您可以分别从Ansible Galaxy和
ansible-playbook
运行角色更新 .有点神奇,您不必创建库存文件或剧本(有时这可能很有用) . 通过推送远程安装Galaxy角色的解决方案不那么hacky /更干净但是如果你更喜欢使用
cron
并拉动,那么这可以提供帮助 .是的你可以 .