pla*_*mer 12 variables ip shell ansible
我有以下问题:
我在Ansible的命令行上编写用于设置IP地址的playbook.让我们说10.10.10.x. 我需要获取我的公共IP的最后一部分,然后说xxx15并将其分配给私有:10.10.10.15.这有变量吗?我能抓到一些吗?我试过用类似的东西:
shell: "ip addr show | grep inet ...."
register: host_ip
Run Code Online (Sandbox Code Playgroud)
但这不是我需要的.它可以工作,但仅限于有限数量的服务器.
整个事情应该是这样的:
"shell: /dir/script --options 10.10.10.{{ var }}"
Run Code Online (Sandbox Code Playgroud)
并{{ var }}应成为公共知识产权的主机部分.
编辑:
谢谢!这是我的最终解决方案:
- name: Get the host part of the IP
shell: host {{ ansible_fqdn }} | awk '{print $4}'
register: host_ip
Run Code Online (Sandbox Code Playgroud)
和
{{ host_ip.stdout.split('.')[3] }}
Run Code Online (Sandbox Code Playgroud)
稍后在剧本中使用它.
jar*_*arv 12
您可以使用ansible 事实代替使用系统实用程序,但您会发现接口名称因服务器而异.
您特别提到了我公共IP的最后一部分
如果您的确意味着您的公共IP,则需要使用外部服务来获取它,因为您的服务器可能位于NAT后面.这是一个选择
shell: wget -qO- http://ipecho.net/plain ; echo
register: host_ip
Run Code Online (Sandbox Code Playgroud)
这将给你的公共IP,接下来得到你可以做的最后一个八位字节:
{{ host_ip.stdout.split('.')[3] }}
Run Code Online (Sandbox Code Playgroud)
Wil*_*ich 12
正如jarv所提到的,这可以通过使用事实来获得.
这可以通过以下方式完成:
有关所有ipv4地址的列表:
{{ ansible_all_ipv4_addresses }}
Run Code Online (Sandbox Code Playgroud)
对于默认的ipv4地址:
{{ ansible_default_ipv4.address }}
Run Code Online (Sandbox Code Playgroud)
如果你知道ip地址在eth0接口上:
{{ ansible_eth0.ipv4.address }}
Run Code Online (Sandbox Code Playgroud)
然后,您可以将该.split('.')[3]方法附加到变量以获取适当的输出,例如{{ ansible_default_ipv4.address.split('.')[3] }}
| 归档时间: |
|
| 查看次数: |
32452 次 |
| 最近记录: |