我正在使用ansible-pull
(在cron上运行)与Ansible合作。
我是否可以从Ansible Galaxy安装Ansible角色而无需登录所有计算机(只需向我的Ansible剧本添加命令)?
答案 0 :(得分:3)
如果我理解正确,那么您可能会尝试从命令行下载并安装来自Ansible Galaxy的角色,可能会重复(通过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')
说明/ FYI :
ansible-galaxy
,而不是ansible-pull
。有关详细信息,请参阅the manual。您可以一次下载多个角色。ansible-galaxy install
重复尝试下载将导致错误。如果您希望重复调用此命令(例如,来自cron),请使用--ignore-errors
(跳过角色并转到下一个项目)或--force
(强制覆盖)来解决此问题。ansible-playbook
时,我们可以避免使用-i localhost,
创建清单文件(结尾处的逗号表示我们提供的是列表,而不是文件)。-c local
(与--connection=local
相同)表示我们不会远程连接,但会在localhost上执行命令。<()
功能是流程替换。该命令的输出显示为文件,因此我们可以将“虚拟playbook文件”提供给ansible-playbook
命令而不将该剧本首先保存到磁盘(例如,playbookname.yml)。packerio_version: 0.6.1
,并在单个命令中应用多个角色。echo -e
和\n
(换行符)可以很容易地排除错误。ansible-playbook
运行角色更新。有点神奇,你不必创建库存文件或剧本(这有时很有用)。通过推送远程安装Galaxy角色的解决方案不那么hacky / clean,但如果您更喜欢使用cron
并拉动,那么这可以提供帮助。
答案 1 :(得分:0)
我通常将来自银河系的角色作为子模块添加到我自己的存储库中;这样,我就可以控制何时更新它们,并且ansible-pull将自动获取它们-无需运行 ansible-galaxy 。
例如:
mkdir roles
git submodule add https://github.com/groover/ansible-role-packerio roles/groover.packerio
答案 2 :(得分:-1)
是的,你可以。
# install Ansible Galaxy requirements via the pull playbook itself
- hosts: localhost
tasks:
- command: ansible-galaxy install -r requirements.yml