Ansible:如何通过与“.”连接来为 FQDN 构造变量在变量 "name" 和变量 "domain" 之间
Ansible: how to construct a variable for a FQDN by concatenated with a "." between variable "name" and variable "domain"
首先,我是 Ansible 和 DevOps 的新手。其次感谢所有为这个社区做出贡献的人,使学习和帮助变得有用。
我的目标是从两个动态变量创建一个新变量。鉴于新变量是 FQDN,我需要在两者之间加入“.”(句号/句点)。
我有以下有效负载作为 JSON
{
"extra_vars": {
"operation": "add",
"target_subnet": "172.16.10.0",
"dns_name": "myserver",
"dns_domain": "itsadomain.com"
}
}
我希望 Ansible 获取上述信息并创建变量 objectName。 objectName 然后我们为后端系统构造一个 URL 以可能检查该 objectName 是否正在使用。
我对剧本的这个特定部分的最新变体如下:
- set_fact: objectName = {{[dns_name].[dns_domain]}}
- name: show objectName
debug: msg={{ objectName }
我得到的回复如下
}
TASK [set_fact] ****************************************************************
task path: /var/lib/awx/projects/myproject/myplaybook.yml:42
fatal: [ipamapp.mydomain]: FAILED! => {
"msg": "template error while templating string: expected name or number. String: objectName = {{[dns_name].[dns_domain]}}"
}
请注意,我已经获取了两个传入变量,并在它们之间放置了一个“.”。
我已经查看了其他帖子,例如 - 29276198,但我想我的帖子有点不同,因为它有两个动态变量,并通过使用句号“。 ” 字符
预期的结果是我可以为 objectName 创建“myserver.itsadomain.com”并稍后在下面的播放中使用它
- name: "Build my hostname search URL"
set_fact:
search_url_name: "https://ipamapp.mydomain/search.json?name={{objectName}}"
when:
- operation_converted == "add"
- process_request
试试这个
- set_fact:
objectName: "{{ extra_vars.dns_name ~ '.' ~ extra_vars.dns_domain }}"
下一个选项是
- set_fact:
objectName: "{{ extra_vars.dns_name }}.{{ extra_vars.dns_domain }}"
如果项目在列表中,则可以加入它们。例如,下面的任务给出相同的结果
- set_fact:
objectName: "{{ fqdn|join('.') }}"
vars:
fqdn:
- myserver
- itsadomain
- com
示例。给定有效载荷
shell> cat extra-vars.json
{
"extra_vars": {
"operation": "add",
"target_subnet": "172.16.10.0",
"dns_name": "myserver",
"dns_domain": "itsadomain.com"
}
}
剧本
shell> cat playbook.yml
- hosts: localhost
vars_files:
extra-vars.json
tasks:
- set_fact:
objectName: "{{ extra_vars.dns_name ~ '.' ~ extra_vars.dns_domain }}"
- debug:
var: objectName
- set_fact:
objectName: "{{ extra_vars.dns_name }}.{{ extra_vars.dns_domain }}"
- debug:
var: objectName
给出(删节)
objectName: myserver.itsadomain.com
objectName: myserver.itsadomain.com
感谢@VladimirBotka 提供的上述内容。
我尝试了选项 1 和选项 2,但似乎“extra.vars”是不可接受的,而是一个未知变量。
但是,对选项 1 稍作修改确实有效
工作解决方案是
- set_fact:
objectName: "{{ dns_name ~ '.' ~ dns_domain }}"
首先,我是 Ansible 和 DevOps 的新手。其次感谢所有为这个社区做出贡献的人,使学习和帮助变得有用。 我的目标是从两个动态变量创建一个新变量。鉴于新变量是 FQDN,我需要在两者之间加入“.”(句号/句点)。
我有以下有效负载作为 JSON
{
"extra_vars": {
"operation": "add",
"target_subnet": "172.16.10.0",
"dns_name": "myserver",
"dns_domain": "itsadomain.com"
}
}
我希望 Ansible 获取上述信息并创建变量 objectName。 objectName 然后我们为后端系统构造一个 URL 以可能检查该 objectName 是否正在使用。
我对剧本的这个特定部分的最新变体如下:
- set_fact: objectName = {{[dns_name].[dns_domain]}}
- name: show objectName
debug: msg={{ objectName }
我得到的回复如下
}
TASK [set_fact] ****************************************************************
task path: /var/lib/awx/projects/myproject/myplaybook.yml:42
fatal: [ipamapp.mydomain]: FAILED! => {
"msg": "template error while templating string: expected name or number. String: objectName = {{[dns_name].[dns_domain]}}"
}
请注意,我已经获取了两个传入变量,并在它们之间放置了一个“.”。 我已经查看了其他帖子,例如 - 29276198,但我想我的帖子有点不同,因为它有两个动态变量,并通过使用句号“。 ” 字符
预期的结果是我可以为 objectName 创建“myserver.itsadomain.com”并稍后在下面的播放中使用它
- name: "Build my hostname search URL"
set_fact:
search_url_name: "https://ipamapp.mydomain/search.json?name={{objectName}}"
when:
- operation_converted == "add"
- process_request
试试这个
- set_fact:
objectName: "{{ extra_vars.dns_name ~ '.' ~ extra_vars.dns_domain }}"
下一个选项是
- set_fact:
objectName: "{{ extra_vars.dns_name }}.{{ extra_vars.dns_domain }}"
如果项目在列表中,则可以加入它们。例如,下面的任务给出相同的结果
- set_fact:
objectName: "{{ fqdn|join('.') }}"
vars:
fqdn:
- myserver
- itsadomain
- com
示例。给定有效载荷
shell> cat extra-vars.json
{
"extra_vars": {
"operation": "add",
"target_subnet": "172.16.10.0",
"dns_name": "myserver",
"dns_domain": "itsadomain.com"
}
}
剧本
shell> cat playbook.yml
- hosts: localhost
vars_files:
extra-vars.json
tasks:
- set_fact:
objectName: "{{ extra_vars.dns_name ~ '.' ~ extra_vars.dns_domain }}"
- debug:
var: objectName
- set_fact:
objectName: "{{ extra_vars.dns_name }}.{{ extra_vars.dns_domain }}"
- debug:
var: objectName
给出(删节)
objectName: myserver.itsadomain.com
objectName: myserver.itsadomain.com
感谢@VladimirBotka 提供的上述内容。 我尝试了选项 1 和选项 2,但似乎“extra.vars”是不可接受的,而是一个未知变量。 但是,对选项 1 稍作修改确实有效 工作解决方案是
- set_fact:
objectName: "{{ dns_name ~ '.' ~ dns_domain }}"