Ansible:如何通过与“连接”来构造FQDN的变量&引用;在变量之间;名称“;和变量“;域名“;
首先,我是Ansible和DevOps的新手。第二,感谢所有为这个社区做出贡献的人,让学习和帮助变得有用。 我的目标是从两个动态变量创建一个新变量。假设新变量是FQDN,我需要在这两个变量之间加一个“.”(句号/句点) 我将以下有效负载作为JSON输入Ansible:如何通过与“连接”来构造FQDN的变量&引用;在变量之间;名称“;和变量“;域名“;,ansible,ansible-facts,Ansible,Ansible Facts,首先,我是Ansible和DevOps的新手。第二,感谢所有为这个社区做出贡献的人,让学习和帮助变得有用。 我的目标是从两个动态变量创建一个新变量。假设新变量是FQDN,我需要在这两个变量之间加一个“.”(句号/句点) 我将以下有效负载作为JSON输入 { "extra_vars": { "operation": "add", "target_subnet": "17
{
"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
试试这个
-设置事实:
objectName:“{{extra_vars.dns_name~'.~extra_vars.dns_domain}”
下一个选择是
-设置事实:
objectName:“{{extra_vars.dns_name}}.{{{extra_vars.dns_domain}”
如果项目在列表中,则可以加入它们。例如,下面的任务给出了相同的结果
-设置事实:
objectName:{{fqdn |连接('.')}”
变量:
fqdn:
-我的服务器
-伊萨多曼
-com
示例。给定有效负载
shell>cat extra-vars.json
{
“额外变量”:{
“操作”:“添加”,
“目标子网”:“172.16.10.0”,
“dns_名称”:“myserver”,
“dns_域”:“itsadomain.com”
}
}
剧本
shell>cat playbook.yml
-主机:本地主机
vars_文件:
extra-vars.json
任务:
-设定事实:
objectName:“{{extra_vars.dns_name~'.~extra_vars.dns_domain}”
-调试:
var:objectName
-设定事实:
objectName:“{{extra_vars.dns_name}}.{{{extra_vars.dns_domain}”
-调试:
var:objectName
给出(节略)
objectName:myserver.itsadomain.com
对象名称:myserver.itsadomain.com
试试这个
-设置事实:
objectName:“{{extra_vars.dns_name~'.~extra_vars.dns_domain}”
下一个选择是
-设置事实:
objectName:“{{extra_vars.dns_name}}.{{{extra_vars.dns_domain}”
如果项目在列表中,则可以加入它们。例如,下面的任务给出了相同的结果
-设置事实:
objectName:{{fqdn |连接('.')}”
变量:
fqdn:
-我的服务器
-伊萨多曼
-com
示例。给定有效负载
shell>cat extra-vars.json
{
“额外变量”:{
“操作”:“添加”,
“目标子网”:“172.16.10.0”,
“dns_名称”:“myserver”,
“dns_域”:“itsadomain.com”
}
}
剧本
shell>cat playbook.yml
-主机:本地主机
vars_文件:
extra-vars.json
任务:
-设定事实:
objectName:“{{extra_vars.dns_name~'.~extra_vars.dns_domain}”
-调试:
var:objectName
-设定事实:
objectName:“{{extra_vars.dns_name}}.{{{extra_vars.dns_domain}”
-调试:
var:objectName
给出(节略)
objectName:myserver.itsadomain.com
对象名称:myserver.itsadomain.com
感谢@VladimirBotka的上述支持。
我尝试了选项1和选项2,但似乎“extra.vars”是不可接受的,而是一个未知变量。
然而,对备选方案1稍作修改就行了
工作解决方案是
- set_fact:
objectName: "{{ dns_name ~ '.' ~ dns_domain }}"
感谢@VladimirBotka的上述支持。 我尝试了选项1和选项2,但似乎“extra.vars”是不可接受的,而是一个未知变量。 然而,对备选方案1稍作修改就行了 工作解决方案是
- set_fact:
objectName: "{{ dns_name ~ '.' ~ dns_domain }}"
不客气。这取决于数据来自哪里。下次注意避免模棱两可。不客气。这取决于数据来自哪里。请参阅以避免下次出现歧义。