如何在我的 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从外部传递变量。
我是 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从外部传递变量。