作为具有超级用户访问权限的 Tower 管理员,您可以使用类似 YAML/JSON 的定义以标准格式定义自定义凭据类型,允许将新的凭据类型分配给作业和清单更新。这允许您定义以类似于现有凭据类型的方式工作的自定义凭据类型。例如,您可以创建一个自定义凭据类型,将第三方 Web 服务的 API 令牌注入环境变量,您的剧本或自定义清单脚本可以消耗它。
自定义凭据支持以下注入其身份验证信息的方式
环境变量
Ansible 额外变量
基于文件的模板(即,生成.ini
或.conf
包含凭据值的文件)
您可以将一个 SSH 和多个云凭据附加到作业模板。每个云凭据必须是不同类型。换句话说,只允许一个 AWS 凭据、一个 GCE 凭据等。在 Ansible Tower 3.2 及更高版本中,保管库凭据和机器凭据是独立的实体。
注意
创建新的凭据类型时,您有责任避免extra_vars
、env
和文件命名空间中的冲突。此外,避免以ANSIBLE_
开头的环境变量或额外变量名称,因为它们是保留的。您必须具有超级用户权限才能创建和编辑凭据类型(CredentialType
)并能够查看CredentialType.injection
字段。
在 3.8 中,Tower 引入了一种新的“由 Tower 管理”的凭据类型 kind=galaxy
,它代表一个内容源,用于在运行项目更新时(例如,galaxy.ansible.com、cloud.redhat.com、内部部署 Automation Hub)获取在 requirements.yml
中定义的集合。这种新类型将代表一个 URL 和(可选)身份验证详细信息,这些信息在项目更新运行ansible-galaxy collection install
时构建环境变量,如 Ansible 文档中所述,配置 Ansible Galaxy 客户端。它具有直接映射到公开给 Ansible Galaxy CLI 的配置选项的字段,例如,每台服务器。Tower API 中的一个端点反映了这些凭据在组织级别的有序列表
/api/v2/organizations/N/galaxy_credentials/
Ansible Tower 3.8 的安装会以这样一种方式迁移现有的面向 Galaxy 的设置值,即在升级后,会创建正确的凭据并附加到 Tower 安装中的每个组织。升级到 3.8 后,升级之前存在的每个组织现在都与它关联了一系列(一个或多个)“Galaxy”凭据。
此外,升级后,这些设置将不再可见(或可编辑)/api/v2/settings/jobs/
端点。
Tower 应该仍然继续直接从公共 Galaxy 获取角色,即使 galaxy.ansible.com 不是组织列表中的第一个凭据。全局“Galaxy”设置不再在作业级别配置,而是在 Tower 用户界面的组织级别配置。组织的添加和编辑窗口有一个可选的 **凭据** 查找字段,用于 kind=galaxy
的凭据。
指定这些凭据的顺序非常重要,因为顺序设置了内容同步和查找的优先级。有关更多信息,请参阅创建新组织。有关如何使用集合设置项目的详细信息,请参阅在 Tower 中使用集合。
对 API 版本 2 的支持(api/v2/
)意味着作业模板与凭据之间的多对一关系(包括多云支持)。可以使用 v2 API 过滤凭据
$ curl "https://tower.example.org/api/v2/credentials/?credential_type__namespace=aws"
在 V2 CredentialType 模型中,关系定义如下
机器 |
SSH |
保管库 |
保管库 |
网络 |
设置环境变量(例如, |
SCM |
源代码控制 |
云 |
EC2,AWS |
很多其他 |
|
Insights |
Insights |
Galaxy |
galaxy.ansible.com,cloud.redhat.com |
内部部署 Automation Hub |
从左侧导航栏的凭据类型 () 图标中访问凭据。如果未创建自定义凭据类型,则凭据类型视图将没有任何内容显示,并提示您添加一个。
如果已创建凭据类型,则此页面将显示所有现有且可用的凭据类型的列表。
要查看有关凭据类型的更多信息,请单击其名称或操作列中的编辑 () 按钮。
每个凭据类型在输入配置字段和注入器配置字段(如果适用)中显示其自身的独特配置。配置字段支持 YAML 和 JSON 格式。
要创建新的凭据类型
单击凭据类型屏幕右上角的 按钮。
在名称和描述字段中输入相应的详细信息。
注意
创建新的凭据类型时,请勿对INPUT和INJECTOR名称和 ID 使用以ANSIBLE_
开头的保留变量名,因为它们对自定义凭据类型无效。
在输入配置字段中,指定一个输入模式,该模式定义了该类型的一组有序字段。格式可以是 YAML 或 JSON,如下所示
YAML
fields: - type: string id: username label: Username - type: string id: password label: Password secret: true required: - username - password在http://www.yaml.org/start.html查看更多 YAML 示例。
JSON
{ "fields": [ { "type": "string", "id": "username", "label": "Username" }, { "secret": true, "type": "string", "id": "password", "label": "Password" } ], "required": ["username", "password"] }在www.json.org查看更多 JSON 示例。
以下 JSON 格式的配置显示了每个字段及其使用方法
{ "fields": [{ "id": "api_token", # required - a unique name used to # reference the field value "label": "API Token", # required - a unique label for the # field "help_text": "User-facing short text describing the field.", "type": ("string" | "boolean") # defaults to 'string' "choices": ["A", "B", "C"] # (only applicable to `type=string`) "format": "ssh_private_key" # optional, can be used to enforce data # format validity for SSH private key # data (only applicable to `type=string`) "secret": true, # if true, the field value will be encrypted "multiline": false # if true, the field should be rendered # as multi-line for input entry # (only applicable to `type=string`) },{ # field 2... },{ # field 3... }], "required": ["api_token"] # optional; one or more fields can be marked as required },
当type=string
时,字段可以选择指定多个选项
{ "fields": [{ "id": "api_token", # required - a unique name used to reference the field value "label": "API Token", # required - a unique label for the field "type": "string", "choices": ["A", "B", "C"] }] },
在注入器配置字段中,输入环境变量或指定凭据类型可以注入的值的额外变量。格式可以是 YAML 或 JSON(参见上一步中的示例)。以下 JSON 格式的配置显示了每个字段及其使用方法
{
"file": {
"template": "[mycloud]\ntoken={{ api_token }}"
},
"env": {
"THIRD_PARTY_CLOUD_API_TOKEN": "{{ api_token }}"
},
"extra_vars": {
"some_extra_var": "{{ username }}:{{ password }}"
}
}
凭据类型还可以生成临时文件以支持 .ini 文件或证书/密钥数据
{
"file": {
"template": "[mycloud]\ntoken={{ api_token }}"
},
"env": {
"MY_CLOUD_INI_FILE": "{{ tower.filename }}"
}
}
在此示例中,Tower 将写入一个包含以下内容的临时文件:
[mycloud]\ntoken=SOME_TOKEN_VALUE
生成文件的绝对文件路径将存储在名为MY_CLOUD_INI_FILE
的环境变量中。
在自定义凭据模板中引用多个文件的示例如下
输入
{
"fields": [{
"id": "cert",
"label": "Certificate",
"type": "string"
},{
"id": "key",
"label": "Key",
"type": "string"
}]
}
注入器
{
"file": {
"template.cert_file": "[mycert]\n{{ cert }}",
"template.key_file": "[mykey]\n{{ key }}"
},
"env": {
"MY_CERT_INI_FILE": "{{ tower.filename.cert_file }}",
"MY_KEY_INI_FILE": "{{ tower.filename.key_file }}"
}
}
完成后,单击保存。
向下滚动到屏幕底部,您新创建的凭据类型将出现在凭据类型列表中
单击 修改或 删除操作列下的凭据类型选项。
注意
如果要删除正在被凭据使用的凭据类型,则必须从使用该凭据类型的所有凭据中删除该凭据类型,然后才能删除它。以下是一个此类消息的示例
验证在创建新凭据时,是否可以从凭据类型选择窗口中选择新创建的凭据类型
有关如何创建新凭据的详细信息,请参见凭据.