一、常用系统变量

  1. loop   #表示循环,去读循环体里的变量固定使用{{item}},item是个字典对象item.key=value,例如如下playbook内容:

---
- name: test loop
hosts: localhost
connection: local
gather_facts: no tasks:
- name: debug loop
debug:
msg: "{{item.A1}}"
loop:
- A: a
A1: a1
A2: a2
- B: b
A1: b1
A2: b2
- C: c
A1: c1
A2: c2
- D: d
A1: d1
A2: d2
A: a
A1: a1
A2: a2
以上成为一块,即一个item,符号"-"为循环体块的标志,{{item.A1}}的值,即分别为a1,b1,c1,d1

   结果输出:

  

playbook文件print_info2.yaml信息如下:
---
- name: test loop
hosts: localhost
connection: local
gather_facts: no
vars:
my_list:
- a
- b
- c
- 1 tasks:
- name: debug loop output
debug:
msg: "The {{index}} one is {{item}}"
loop: "{{my_list}}"
loop_control:
index_var: index

循环列表,打印元素索引号

  2. when   当条件满足时,执行

  官方文档说明:https://docs.ansible.com/ansible/2.7/user_guide/playbooks_conditionals.html#playbooks-conditionals

二、在主机列表文件里定义变量

  默认主机列表文件位置/etc/ansible/hosts,可自定义局部主机配置文件位置

  如上图,展示了两种变量表现形式:

  1.基于组的变量:组内部的所有成员主机都获得此变量

[ios:vars]    #代表基于ios组的变量集
passwd=123456 #变量名passwd,值123456,由组内成员共享
ansible_connection=network_cli #2.5版本后推出新的连接方式,代替provider
ansible_network_os=ios #告知ansible是基于ios的系统
ansible_use=cisco #ssh用户名cisco
ansible_ssh_pass=cisco #ssh登录密码cisco
ansible_become=yes #是否进入特权模式,yes是
ansible_become_method=enable #进入方法:enable
ansible_become_pass=cisco #enable密码cisco #注意:ansible_开头一般都是众所周知的变量名

  2.基于单个主机的变量

  每一台主机设备所在行,直接变量=值的方式表示

r5a ansible_host=192.168.62.45 user=r5  #主机名r5a,变量ansible_host=192.168.62.45 ,变量user=r5

    

三、在playbook里定义变量

 

四、 在host_vars,group_vars文件中定义变量

  4.1 此方法可定义较复杂变量,定义方法如下:

#1.创建host_vars和group_vars两个文件夹
(ps:上述两个文件夹要么创建于playbook下,要么创建于my_inventory此类文件设备同目录下。一般情况,playbook和inventory主机配置文件都是在同一目录下,所以无需太在意)
[root@localhost test_ansible]# pwd
/root/test_ansible
[root@localhost test_ansible]#
[root@localhost test_ansible]# mkdir group_vars
[root@localhost test_ansible]#
[root@localhost test_ansible]# mkdir host_vars #2.文件夹内创建对应文件
##2.1 group_vars存放基于组名的文件
例如:在我们的inventory主机配置清单里,定义了ios组,则关于这个组的变量定义,创建一个ios.yaml的YAML文件,文件定义的变量就会应用到整个ios组,以及组下的所有成员 ##2.2 host_vars存放基于设备主机的文件
例如:在inventory主机配置清单里,有一台主机r1,创建一个r1.yaml的YAML文件,文件定义的变量就会自动与r1关联

  4.2 示例说明

  在host_vars/localhost.yaml文件里

---
content: hello world!
physical_port:
- int_name: GE1/0/1
int_ip: 192.168.12.2/24
neighbor_name: r3 - int_name: GE1/0/2
int_ip: 192.168.23.2/24
neighbor_name: r1

  编辑playbook文件loop2.yaml

---
- name: test loop
hosts: localhost
connection: local
gather_facts: no tasks:
- name: debug loop
debug:
msg: "{{content}}"

  结果截图:

五、不同位置变量优先执行顺序

playbook里的定义的vars > host_vars目录下的主机文件  > inventory清单主机文件里的主机行变量 > group_vars目录下的组文件 > inventory清单主机文件里的组[xx:vars]组变量

六、变量注意事项

#1.ansible_xx一般为内部变量,有些可被自动调用,例如ansible_user和ansible_ssh_pass会自动被ansible_connection:network_cli调用

#2.在playbook里定义host:为主机名a而非组名A时,如果该主机a归属在组名A里,则组A的组变量也能被a调用

#3.自定义ansible.cfg为b,存放在要运行playbook的目录下,配置文件b里的变量只需定义与主配置文件ansible.cfg不一样的即可,因为ansible在运行时,在配置文件b找不到会去ansible.cfg里找

ansible之变量的更多相关文章

  1. ansible 列表变量、字典变量

    ansible的变量不仅可以是单个的值,也可以为列表. - hosts: localhost gather_facts: no vars: - list: [1,2,3] tasks: - name: ...

  2. Ansible Playbook 变量与 register 详解

    ansible 定义变量方式与[多层]变量引用,以及 register 详解 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录 ...

  3. Ansible Facts 变量详解

    Ansible Facts 变量详解与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: 3. ...

  4. 006.Ansible自定义变量

    ansible支持变量,用于存储会在整个项目中重复使用到的一些值.以简化项目的创建与维护,降低出错的机率. 变量的定义: 变量名应该由字母.数字下划数组成 变量名必须以字母开头 ansible内置关键 ...

  5. ansible基础-变量

    一 变量的命名规范 变量的命名应该符如下合两个规范: 变量应该由字母.数字.下划线组成 变量应该以字母开头 例如:host_port.HOST_PORT.var5是符合命名规范的,foo-port. ...

  6. ansible playbook 变量

    变量优先级 在命令中定义的变量(-e参数指定的) 在inventory中定义的变量(ansible_ssh_user等) 其他变量(role中.play中) 系统通过father_facts定义的变量 ...

  7. 【Ansible】记一次技术博客害死人的经历——ansible模板变量注入探究

    风和日丽,夏天的北京湿热并举,睁不开的眼睛里,横竖都看着是“吃人”. 带薪学习的日子不好过,要在几天内迅速掌握导师下发要求学习的技能,看着以前一起蹲IT坑的同事人来人往,用隔壁同性黄同学的话来说,就是 ...

  8. ansible 魔法变量

    hostvars 可以让你调用其他host的变量和facts,  即使你没有在这个机器上执行过playbook, 你仍然可以访问变量, 但是不能访问facts. 例如: {{ hostvars['te ...

  9. 部署etcd中使用ansible进行变量初始化

    ansible-playbook 要进行默认变量的生产,可以依靠jinja 的模板渲染功能 看几个官方给出的例子 调用setup 中的变量 例如 setup 中的变量层级为 ansible_eth0_ ...

随机推荐

  1. html css 布局小细节

    学了两个月的html和css每天都重复一样的生活,敲着大同小异的代码,这样的生活枯燥无味.我腻了,我也累了!小米首页算是我写的第三个静态页面,写了好久,很多细节都把握不好,下面的这个简单的布局细节是我 ...

  2. nuxt项目打包上线,以及nuxt项目基础代码分享

    nuxt的项目部署到线上环境,有多种方法,这里分享我使用的方法,一步步照着配置,就可以配置成功~ (1)项目先执行npm run build 打包好   (2)服务器安装node 和pm2依赖 服务器 ...

  3. /data/src/dragon/bidder_mod//src/proto_adapters/dragon_wax_adapter.h:11:对‘vtable for DragonWaxAdapter’未定义的引用

    dragon/bidder_mod/config中增加: $ngx_addon_dir/src/proto_adapters/dragon_wax_adapter.cc \

  4. David与Vincent的博弈游戏[树型DP]

    \(\mathcal{Description}\) \(\mathcal{Solution}\) 根据题意,我们知道 根节点深度为1,深度为 奇数 的节点由\(David\)移动,我们称为\(D\)点 ...

  5. 并发,并行,线程,进程,GIL锁

    1.并发和并行 并发: 同时做某些事,但是强调同一时段做多件事 如:同一路口,发生了车辆要同时通过路面的时间. 并行: 互不干扰的在同一时刻做多件事 如:同一时刻,同时有多辆车在多条车道上跑,即同时发 ...

  6. 解读Android MediaPlayer 详细使用方法

        MediaPlayer具有非常强大的功能,对音视频的播放均提供了支持,为了保证播放期间系统的正常工作,需要设置"android.permission.WAKE_LOCK"权 ...

  7. springboot整合mybatis时无法读取xml文件解决方法(必读)

    转    http://baijiahao.baidu.com/s?id=1588136004120071836&wfr=spider&for=pc 在springboot整合myba ...

  8. Swagger UI使用指南

    1:认识Swagger Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法 ...

  9. 异常 Java oop

    1.捕获异常 try——执行可能产生异常的代码 catch——捕获异常 finally——无论是否发生异常,代码总能执行 2.声明异常 throws——声明方法可能要要抛出的各种异常 3.抛出异常—— ...

  10. web设计_5_自由的框式组件

    1. CSS3 border-radius 圆角矩形框 圆角矩形框组件是页面布局中常常用到的,利用CSS3的border-radius可非常方便的创建. 并且在横向纵向上面都有很好的扩展性和灵活性. ...