如何在我的 ansible 剧本中引用 AWX 凭据

How to refer to AWX credentials in my ansible playbook

我是 ansible 新手。我正在尝试使用现有的剧本,但使用单独的凭据将其部署到不同的 Azure 帐户,但我 运行 遇到了一些问题。我使用 client_id、tenant_id、subscription_id 和秘密通过 AWX 门户创建了一个新凭证,但我无法弄清楚如何让我的剧本提取此凭证而不是当前凭证使用.

我的 playbook 身份验证角色像这样进行身份验证

- name: 'Authenticating against Azure'
  command: >
    az login --service-principal
    -u '{{ vault_azure_client_id }}'
    -p '{{ vault_azure_client_secret }}'
    -t '{{ vault_azure_tenant_id }}' 

然后有一个秘密文件夹,里面有一个保险库文件,其中包含看起来像加密字符串的内容,并以下面的开头

$ANSIBLE_VAULT;1.1

我的主文件声明变量如下

  # Environment Variables
  environment:
    AZURE_CLIENT_ID: '{{ vault_azure_client_id }}'
    AZURE_SECRET: '{{ vault_azure_client_secret }}'
    AZURE_TENANT: '{{ vault_azure_tenant_id }}'

我如何编辑主文件和角色以指向我通过控制台创建的凭据,而不是存储在 ansible 保险库中的凭据?

假设您的“秘密文件夹”中未加密的“保管库文件”如下所示:

vault_azure_client_id: foo
vault_azure_client_secret: bar
vault_azure_tenant_id : baz

你有两个选择:

  • 停止使用此文件并在 AWX 中配置这些变量。您没有将这些变量定义为 AWX 中的凭据,您需要在调用剧本的作业模板中定义它们。
  • 重写您的“保险库文件”,将您的秘密变量内联。例如:
vault_azure_client_id: !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          30613...
vault_azure_client_secret: !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          30613...
vault_azure_tenant_id : !vault |
          $ANSIBLE_VAULT;1.2;AES256;dev
          30613...

AWX 的局限性是无法解密加密文件中的变量,但它可以解密内联加密的变量。

这是因为默认情况下,您的剧本文件从保险库文件中获取凭据。指向您的主文件以获取凭据而不是默认文件(Vault 文件)。

变量可以来自不同的来源,例如剧本文件本身或剧本中导入的外部变量文件。 Special precedence rules 将适用于使用定义同名变量的多个变量源。

建议 1: 如果您在 playbook 文件本身中使用变量,您可以像这样使用变量。

vars:  
- AZURE_CLIENT_ID: Client ID  
- AZURE_SECRET: Client Secret Value
- AZURE_TENANT: Tenant ID  
tasks:  
- name: 'Authenticating against Azure'  
command: >  
az login --service-principal  
-u '{{ AZURE_CLIENT_ID}}'  
-p '{{ AZURE_SECRET }}'  
-t '{{ AZURE_TENANT}}'

参考:https://www.digitalocean.com/community/tutorials/how-to-use-variables-in-ansible-playbooks

建议 2: 您还可以使用

将额外变量传递给 Ansible 剧本
--extra-vars or -e option while running the Ansible playbook, as seen below.
#ansible-playbook myplaybook.yaml --extra-vars "nodes=webgroup”

你可以参考这个Document从外部传递变量。