[英]Reformat ip from ansible_facts without filter
我正在尝试动态更新和重新格式化主机IP地址以供模板使用。 我需要获取主机IP,并将其从典型格式重新格式化为不支持过滤器的格式。
我对ansible很陌生。 很新
但是,根据我的收集...
我应该能够从我的剧本中获取主机ip“事实”。 我正在努力使其能够运行的语法中,但我非常有信心这是我将能够做到的。
有了IP后,我需要将其从11.22.33.44重新格式化为11 \\\\。22 \\\\。33 \\\\。44。
到目前为止,我什至无法掌握正确的ip语法,更不用说重新格式化了。 关于格式,我已经对过滤器进行了搜索,但是没有找到任何(明确的)描述来表明过滤器方法可以按照我需要的方式进行格式化(尽管...我怀疑它存在)。
name: "test gathering a fact"
debug: var= "{{ hostvars[groups['webservers'][0]]['ansible_eth0']['ipv4']['address'] }}"
我期望...
11.22.33.44
但我得到:
错误! 加载YAML时的语法错误。 找不到预期的密钥
该错误似乎出在'/home/my_playbook.yml'中:第14行,第13列,但可能在文件的其他位置,具体取决于确切的语法问题。
令人反感的行似乎是:
- name: "test gathering a fact"
debug: var= "{{ hostvars[groups['webservers'][0]]['ansible_eth0']['ipv4']['address'] }}"
^ here
我们可能是错的,但是这看起来可能是缺少引号的问题。 当模板表达式括号开始值时,请始终用引号引起来。 例如:
with_items:
- {{ foo }}
应写为:
with_items:
- "{{ foo }}""
有了IP后,我需要将其从11.22.33.44重新格式化为11 \\\\。22 \\\\。33 \\\\。44。
- debug:
msg: >-
{{ the_host.ansible_default_ipv4.address | regex_replace('\.', '\\\\.') }}
# watch out if you choose not to use the `>-` syntax
# as then yaml quoting will become a real PITA
vars:
the_host: '{{ hostvars[groups.webservers[0]] }}'
对于不总是使用eth0
(这是一些现代的ubuntu风格,freebsd等),使用ansible_default_ipv4.address
而不是ansible_eth0.ipv4.address
也可能会更快乐。 也就是说,您可能关心的是计算机的网络身份,而不是(特别是)将什么地址绑定到名为eth0
的NIC上。
缩进是错误的。 代替
- name: "test gathering a fact"
debug: var= ...
正确的语法是
- name: "test gathering a fact"
debug: var= ...
我更喜欢使用点符号:
- name: first debug
debug:
msg: "{{ hostvars[groups['webservers'][0]].ansible_enp0s25.ipv4.address }}"
该代码在输出中返回:
TASK [first debug] **********************************************************************
ok: [localhost] => {
"msg": "192.168.65.105"
}
因此,将它们合并到本剧本中:
---
- hosts: all
gather_facts: true
tasks:
- name: first debug
debug:
msg: "{{ hostvars[groups['webservers'][0]].ansible_enp0s25.ipv4.address }}"
- name: second debug
debug:
msg: >-
{{ hostvars[groups['webservers'][0]].ansible_enp0s25.ipv4.address | regex_replace('\.', '\\\\.') }}
给出以下输出:
PLAY [all] ******************************************************************************
TASK [Gathering Facts] ******************************************************************
ok: [localhost]
TASK [first debug] **********************************************************************
ok: [localhost] => {
"msg": "192.168.65.105"
}
TASK [second debug] *********************************************************************
ok: [localhost] => {
"msg": "192\\\\.168\\\\.65\\\\.105"
}
PLAY RECAP ******************************************************************************
localhost : ok=3 changed=0 unreachable=0 failed=0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.