Ansible:如何通过与“连接”来构造FQDN的变量&引用;在变量之间;名称“;和变量“;域名“;

Ansible:如何通过与“连接”来构造FQDN的变量&引用;在变量之间;名称“;和变量“;域名“;,ansible,ansible-facts,Ansible,Ansible Facts,首先,我是Ansible和DevOps的新手。第二,感谢所有为这个社区做出贡献的人,让学习和帮助变得有用。 我的目标是从两个动态变量创建一个新变量。假设新变量是FQDN,我需要在这两个变量之间加一个“.”(句号/句点) 我将以下有效负载作为JSON输入 { "extra_vars": { "operation": "add", "target_subnet": "17

首先,我是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
试试这个

-设置事实:
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 }}"

不客气。这取决于数据来自哪里。下次注意避免模棱两可。不客气。这取决于数据来自哪里。请参阅以避免下次出现歧义。