Ansible增加IP地址

时间:2016-01-07 21:41:34

标签: yaml ip-address jinja2 ansible

我正在使用--extra-vars "lan=10.10.10.1"

将变量传递给ansible

我现在需要增加这个ip地址,以便最后一个八位字节是.2所以它等于10.10.10.2。

如何在ansible中实现这一目标?

5 个答案:

答案 0 :(得分:2)

在一行中:

- set_fact: new_ip="{{ lan | regex_replace('(^.*\.).*$', '\\1') }}{{lan.split('.')[3] | int + 1 }}"

它是如何运作的?

  tasks:
  - name: Echo the passed IP
    debug: var={{lan}}

  - name: Extract the last octet, increment it and store it
    set_fact: octet={{lan.split('.')[3] | int + 1 }}
  - debug: var=octet

  - name: Append the incremented octet to the first 3 octets
    set_fact: new_ip="{{ lan | regex_replace('(^.*\.).*$', '\\1') }}{{octet}}"
  - debug: var=new_ip

输出

TASK: [Echo the passed IP] ****************************************************
ok: [127.0.0.1] => {
    "127.0.0.1": "{{ 127.0.0.1 }}"
}
TASK: [Extract the last octet, increment it and store it] *********************
ok: [127.0.0.1] => {"ansible_facts": {"octet": "2"}}

TASK: [debug var=octet] *******************************************************
ok: [127.0.0.1] => {
    "octet": "2"
}
TASK: [Append the incremented octet to the first 3 octets] ********************
ok: [127.0.0.1] => {"ansible_facts": {"new_ip": "127.0.0.2"}}

TASK: [debug var=new_ip] ******************************************************
ok: [127.0.0.1] => {
    "new_ip": "127.0.0.2"
}

答案 1 :(得分:2)

从Ansible 2.7开始,可以使用IP Math

Field<String> f = DSL.field(
    "group_concat(distinct {0}, ', ')", 
    SQLDataType.VARCHAR, 
    MY_COLUMN
);

答案 2 :(得分:1)

您可能需要查看ipaddr filter

答案 3 :(得分:1)

在Ansible 2.7之前

使用ipaddr filter

{{ ((lan | ipaddr('int')) + 1) | ipaddr }}

小心Jinja2的运算符优先级,它非常时髦。

Ansible 2.7 +

使用ipmath() filter。请参阅the answer by Lars Francke

答案 4 :(得分:0)

如果您想通过子网执行此操作,这会很有帮助。

- name: Give IP addresses sequentially from a subnet
  debug:
     msg: "{{ '10.10.1.48/28' | next_nth_usable(loop_index) }}" 
  loop: "{{ list }}"
  loop_control:
     index_var: loop_index

请不要忘记在通过以下方式运行剧本之前安装“netaddr”Python 库:

pip install netaddr

最后,请记住index_var0开始,所以如果你想从第一个IP地址开始,切换msg 行:

msg: "{{ '10.10.1.48/28' | next_nth_usable(loop_index |int + 1) }}"