我可以使用ansible-pull从Galaxy安装(或删除)Ansible角色吗?

时间:2014-08-14 07:43:14

标签: ansible

我正在使用ansible-pull(在cron上运行)与Ansible合作。

我是否可以从Ansible Galaxy安装Ansible角色而无需登录所有计算机(只需向我的Ansible剧本添加命令)?

3 个答案:

答案 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-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,并在单个命令中应用多个角色。
  • 请注意,剧本中的空白是重要的(它们是YAML文件)。就像在Python代码中一样,要小心缩进。使用echo -e\n(换行符)可以很容易地排除错误。
  • 您可以分别从Ansible Galaxy和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