首页 > 解决方案 > How to make generic AWX Job templates applicable for machines with different username to SSH?

问题描述

I have a workflow in AWX that runs multiple Job templates sequentially. I want to make those Job templates generic for both prod and non-prod environment. The machine credentials are given at Job template level and not on job workflow level, thus, only 1 machine credential can be provided. I also do not want prompt on launch option as with this you loose scheduling functionality. Is there a way I can make my Job templates generic (playbooks)? which can run on multiple machines having different username to ssh to ?
Note: I do not have access to AWX server. Only the UI. I'm not system admin.

标签: ansibleansible-awx

解决方案


以下是为实现这一目标所做的更改 -

  1. 制作特定于环境的清单- 重要的是不要更改任何其他环境的节点部分的状态,因此有助于避免运行时出现意外。https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#example-one-inventory-per-environment

  2. 移动凭据信息。从剧本到库存- 您可以设置环境。库存级别的特定变量以及魔术变量。Ansible 知道魔术变量。例如 -
    ansible_connection、ansible_user、ansible_ssh_pass。Ansible 明白,它必须使用ansible_user, ansible_ssh_pass通过ssh登录机器。 这样您就不必在 AWX 作业模板中提及凭据,并且很乐意在模板级别将机器凭据选项留空。https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html#magic。 这是我在库存级别定义的变量的快照。

    在此处输入图像描述

  3. 变量和保险库- 请注意凭证部分包含作为变量的值。显然,我们不想将任何凭证公开为明文。因此,遵循 Ansible 最佳实践非常重要,让 Ansible 找到未加密文件中的变量,并且所有敏感变量都来自加密文件。https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#variables-and-vaults
    我维护一个变量文件,即配置文件以及 Vault,以便在运行时在 playbook 中呈现。您可以创建一个子目录说vars并将作为库存变量中的值提到的变量映射到vars/var.yml文件。vars.yml 可以将键定义为 -

    ssh_secret_dev: "{{ vault_secret_pass }}"
    ssh_user_dev: 用户名
    和加密的保管库文件可以有最终值 -

    vault_secret_pass:very_secret_password

为什么是大舞会?为什么不直接定义保险库中的所有内容并将库存变量与保险库连接?这提供了额外的安全层,您可以在其中映射变量文件中的安全凭证和保险库中的额外机密。显然保管库将被加密,因此您需要在作业模板级别提及保管库凭据。作业模板级别的凭据部分将仅包含保管库凭据在此处输入图像描述

  1. 在作业模板级别为库存选择启动时提示- 因为我们使工作流环境特定于作业模板,因此,我们可以在工作流级别提及库存并在作业模板级别选择启动时提示选项以允许库存应用于所有作业模板有启动选项提示。
  2. 编辑 Playbook 以加载这两个变量文件(vault.yml 和 vars.yml)。
- hosts: localhost
  vars_files:
    - ./vars/vault.yml
    - ./vars/vars.yml
  gather_facts: no
  no_log: true
  tasks:
     - .....some tasks...... 

您还可以使用您在库存中定义的任何变量(这不是特殊的 ansible 变量)并在您的剧本中使用它们,其值可以从变量文件中选取。


推荐阅读