Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible Playbook,每个主机具有特定的环回IP_Ansible - Fatal编程技术网

Ansible Playbook,每个主机具有特定的环回IP

Ansible Playbook,每个主机具有特定的环回IP,ansible,Ansible,我正在尝试创建一个剧本,在200多台主机上配置相同的配置,但配置的一部分特定于每台主机(ip地址第四个八位字节)。示例如下: 当主机r1=192.168.0.1时,对于r2、r3等,环回IP地址应为10.0.0.1,依此类推 想知道如何使用主机文件变量,但有点超出了我的深度 --- -名称:添加环回剧本 主持人:r1 收集事实:错误 连接:本地 变量: cli: 用户名:思科 密码:思科 认证通行证:思科 任务: -名称:添加环回接口 ios_配置: 提供程序:“{{cli}}” 授权人:是的

我正在尝试创建一个剧本,在200多台主机上配置相同的配置,但配置的一部分特定于每台主机(ip地址第四个八位字节)。示例如下:

当主机r1=192.168.0.1时,对于r2、r3等,环回IP地址应为10.0.0.1,依此类推

想知道如何使用主机文件变量,但有点超出了我的深度

---
-名称:添加环回剧本
主持人:r1
收集事实:错误
连接:本地
变量:
cli:
用户名:思科
密码:思科
认证通行证:思科
任务:
-名称:添加环回接口
ios_配置:
提供程序:“{{cli}}”
授权人:是的
验证过程:“{{cli}}”
父:接口环回1
线:
-说明***管理界面***
-ip地址10.0.0.1255.255.255.255

如果您的所有主机都在一个组中(我们称之为
路由器),您可以获取组中主机的索引,并使用该索引生成ip地址。例如,假设我们有一个清单文件,看起来像:

all:
  children:
    routers:
      hosts:
        r1:
        r2:
        r3:
        r4:
        r5:
我们可以这样写剧本:

---
- name: Add Loopback Playbook
  hosts: routers
  gather_facts: false
  connection: local

  vars:
    cli:
      username: cisco
      password: cisco
      auth_pass: cisco

  tasks:
    - name: Add Loopback Interface
      debug:
        msg: "ip address for {{ inventory_hostname }} is {{ address }}"
      vars:
        address: "10.0.0.{{groups.routers.index(inventory_hostname)+1}}"
这将输出:


PLAY [Add Loopback Playbook] ******************************************************************

TASK [Add Loopback Interface] *****************************************************************
ok: [r2] => {
    "msg": "ip address for r2 is 10.0.0.2"
}
ok: [r3] => {
    "msg": "ip address for r3 is 10.0.0.3"
}
ok: [r4] => {
    "msg": "ip address for r4 is 10.0.0.4"
}
ok: [r1] => {
    "msg": "ip address for r1 is 10.0.0.1"
}
ok: [r5] => {
    "msg": "ip address for r5 is 10.0.0.5"
}


如果您的所有主机都在一个组中(我们称之为
路由器
),则可以获取组中主机的索引,并使用该索引生成ip地址。例如,假设我们有一个清单文件,看起来像:

all:
  children:
    routers:
      hosts:
        r1:
        r2:
        r3:
        r4:
        r5:
我们可以这样写剧本:

---
- name: Add Loopback Playbook
  hosts: routers
  gather_facts: false
  connection: local

  vars:
    cli:
      username: cisco
      password: cisco
      auth_pass: cisco

  tasks:
    - name: Add Loopback Interface
      debug:
        msg: "ip address for {{ inventory_hostname }} is {{ address }}"
      vars:
        address: "10.0.0.{{groups.routers.index(inventory_hostname)+1}}"
这将输出:


PLAY [Add Loopback Playbook] ******************************************************************

TASK [Add Loopback Interface] *****************************************************************
ok: [r2] => {
    "msg": "ip address for r2 is 10.0.0.2"
}
ok: [r3] => {
    "msg": "ip address for r3 is 10.0.0.3"
}
ok: [r4] => {
    "msg": "ip address for r4 is 10.0.0.4"
}
ok: [r1] => {
    "msg": "ip address for r1 is 10.0.0.1"
}
ok: [r5] => {
    "msg": "ip address for r5 is 10.0.0.5"
}


有很多选择。环回IP可以从主机名派生。例如,给定库存

shell>cat主机
r11
r12
r13
下面的任务

-设置事实:
环回:“{{inventory\u主机名|
regex_replace(my_regex,my_replace)}”
变量:
my_regex:“^r(.*)”
my_replace:'10.1.0.\1'
-调试:
回送
给予

ok:[r12]=>{
“环回”:“10.1.0.12”
}
确定:[r11]=>{
“环回”:“10.1.0.11”
}
确定:[r13]=>{
“环回”:“10.1.0.13”
}

如果前缀中没有数字,则可以简化此操作。例如,下面的任务给出了相同的结果

-设置事实:
环回:“{{inventory\u主机名|
选择('匹配','[0-9]')|
列表| join()}”

一个更强大的解决方案是在第一个游戏中动态创建组,并在第二个游戏中使用它。例如,下面的剧本也给出了相同的结果

shell>cat playbook.yml
-主机:本地主机
变量:
前缀:r
开始:11
车站:13
任务:
-添加\u主机:
组:
-我的团队
主机名:“{{prefix}}{{item}”
环回:“10.1.0.{{item}”
循环:{range(start,stop | int+1)| list}
-主持人:我的团队
收集事实:错误
任务:
-调试:
回送

下一个选项是创建库存。例如,下面的剧本

shell>cat playbook.yml
-主机:本地主机
变量:
前缀:r
开始:11
车站:13
任务:
-副本:
目的地:主机
内容:|
{范围内的i的百分比(开始、停止+1)%}
{{prefix}{{i}}环回=10.1.0.{{i}
{%endfor%}
创建库存

shell>cat主机
r11环回=10.1.0.11
r12环回=10.1.0.12
r13环回=10.1.0.13
下面的剧本也给出了同样的结果

shell>cat playbook.yml
-主持人:全部
收集事实:错误
任务:
-调试:
回送
shell>ansible playbook-我托管playbook.yml

同样,也可以在组变量中创建字典。例如,下面的剧本

shell>cat playbook.yml
-主机:本地主机
变量:
前缀:r
起点:1
车站:255
任务:
-副本:
dest:group_vars/router/loopback.yml
内容:|
环回:
{范围内的i的百分比(开始、停止+1)%}
{{prefix}{{i}}:10.1.0.{{i}
{%endfor%}
使用
group\u vars

shell>cat group\u vars/routers/loopback.yml
环回:
r1:10.1.0.1
r2:10.1.0.2
r3:10.1.0.3
...
然后是下面的剧本

shell>cat playbook.yml
-主机:路由器
收集事实:错误
任务:
-调试:
var:loopback[目录\主机名]
给予

ok:[r2]=>{
“环回[inventory_hostname]:“10.1.0.2”
}
确定:[r4]=>{
“环回[inventory_hostname]:“10.1.0.4”
}
确定:[r1]=>{
“环回[inventory_hostname]:“10.1.0.1”
}
确定:[r3]=>{
“环回[inventory_hostname]:“10.1.0.3”
}
确定:[r5]=>{
“环回[inventory_hostname]:“10.1.0.5”
}

有很多选择。环回IP可以从主机名派生。例如,给定库存

shell>cat主机
r11
r12
r13
下面的任务

-设置事实:
环回:“{{inventory\u主机名|
regex_replace(my_regex,my_replace)}”
变量:
my_regex:“^r(.*)”
my_replace:'10.1.0.\1'
-调试:
回送
给予

ok:[r12]=>{
“环回”:“10.1.0.12”
}
确定:[r11]=>{
“环回”:“10.1.0.11”
}
确定:[r13]=>{
“环回”:“10.1.0.13”
}

如果前缀中没有数字,则可以简化此操作。例如,下面的任务给出了相同的结果

-设置事实:
环回:“{{inventory\u主机名|
选择('匹配','[0-9]')|
列表| join()}”

一个更强大的解决方案是在第一个游戏中动态创建组,并在第二个游戏中使用它。例如,下面的剧本也给出了相同的结果

shell>cat playbook.yml
-主机:本地主机
变量:
前缀:r
开始:11
车站:13
任务:
-添加\u主机: