首页 文章

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

提问于
浏览
1

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

我可以在没有登录到所有计算机的情况下从Ansible Galaxy安装Ansible角色(只需向我的Ansible playbook添加命令)吗?

2 回答

  • 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')
    

    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 并拉动,那么这可以提供帮助 .

  • 0

    是的你可以 .

    # install Ansible Galaxy requirements via the pull playbook itself
    - hosts: localhost
      tasks:
        - command: ansible-galaxy install -r requirements.yml
    

相关问题