ansible主机名替换为三位数的IP

时间:2016-10-17 12:37:22

标签: ansible hostname

如何使用IP地址的最后三位数替换主机名:

示例:

IP: 192.168.0.1
Hostname: webserver001

我希望根据IP地址的最后三位数来替换我的主机名,但我得到的是webserver1而不是webserver001,我如何填充前导零。

下面是我使用的代码。

- hostname: name={{ hostname.replace('*', ansible_all_ipv4_addresses[0].split('.')[3]) }}

1 个答案:

答案 0 :(得分:1)

我认为你想要的是

name={{ "webserver%03d"|format(ansible_default_ipv4.address.split(".")[3]|int) }}

使用format过滤器和int过滤器,允许用零填充数字。

test.yml

为例
- hosts: localhost
  tasks:
    - name: test jinja capabilities
      debug: msg={{ "webserver%03d"|format(ansible_default_ipv4.address.split(".")[2]|int) }}

运行时,它会给出

$ ansible-playbook -i localhost, test.yml    

PLAY     ***************************************************************************

TASK [setup]     *******************************************************************
ok: [localhost]

TASK [test jinja capabilities] *************************************************
ok: [localhost] => {
    "msg": "webserver001"
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0        failed=0

表示具有IP 127.0.0.1的localhost。