目录

一、变量命名

二、变量级别

三、变量设定和使用方式

1、使用变量

2、在playbook中直接定义变量

3、在文件中定义变量

4、设定主机变量和清单变量

5、目录设定变量

6.用命令覆盖变量

7.使用数组设定变量

8.注册变量

9.事实变量——ansible_facts

10.魔法变量

四、JINJA2模板

j2模板书写规则

五、Ansible的加密控制


一、变量命名

只能包含数字,下划线,字母
只能用下划线或字母开头 

二、变量级别

全局

从命令行或配置文件中设定的

主机

由清单,事实收集或注册的任务

paly

在play和相关结构中设定的

变量优先级设定:狭窄范围优先于广域范围(play > 主机 > 全局)

三、变量设定和使用方式

1、使用变量

ansible密码登录 ansible创建用户设置密码_linq

 

2、在playbook中直接定义变量

1 ---
  2 - name: test yml                #项目名称
  3   hosts: westos                 #远程主机名单
  4   vars:                         #定义变量
  5     NAME: zzh
  6   tasks:
  7     - name: create user         #定义子项目
  8       user:
  9         name: "{{NAME}}"        #使用变量

用法: 

ansible密码登录 ansible创建用户设置密码_ansible密码登录_02

3、在文件中定义变量

1 ---
  2 - name: test yml
  3   hosts: westos
  4   vars_files: user.yml            #调用变量的文件
  5   tasks:
  6     - name: create user
  7       user:
  8         name: "{{NAME}}"

ansible密码登录 ansible创建用户设置密码_debian_03

用法:先创建一个<user.yml>文件,文件中写入变量名。在剧本中按如下方式调用文件中的变量。

ansible密码登录 ansible创建用户设置密码_p2p_04

 

4、设定主机变量和清单变量

1 ---
  2 - name: test yml
  3   hosts: test                    #要指定的变量就在组中
  4   tasks:
  5     - name: create user
  6       user:
  7         name: "{{NAME}}"

在清单中添加变量,则变量只对具体的组生效。写法:[组名:vars]

ansible密码登录 ansible创建用户设置密码_文件名_05

用法:

ansible密码登录 ansible创建用户设置密码_ansible密码登录_06

5、目录设定变量

group_vars

清单变量,目录中的文件名称与主机清单名称一致

host_vars

主机变量,目录中的文件名称与主机名称一致

  方法一:

ansible密码登录 ansible创建用户设置密码_p2p_07

方法二:

ansible密码登录 ansible创建用户设置密码_debian_08

6.用命令覆盖变量

注意:此方法具有最高优先级

ansible-playbook test.yml -e "NAME=westos_zzh"

ansible密码登录 ansible创建用户设置密码_p2p_09

7.使用数组设定变量

适合多个变量的定义

1 ---
  2 - name: test yml
  3   hosts: test
  4   vars_files: ./user.yml                    #指定变量存储文件
  5   tasks:
  6     - name: show vars                       #子项目1
  7       debug:                                
  8         var: USERLIST['lee']['age']         #显示USERLIST下的lee的age中的变量
  9 
 10     - debug:                                #子项目2
 11         msg: "{{USERLIST['westos']}}"       #显示USERLIST下的westos部分的变量

 在同一目录下创建存储变变量的文件。

ansible密码登录 ansible创建用户设置密码_debian_10

显示多个变量 

ansible密码登录 ansible创建用户设置密码_ansible密码登录_11

8.注册变量

register 把模块的输出捕捉并写入到到指定字符串中。

1 ---
  2 - name: test register
  3   hosts: test
  4   tasks:
  5     - name: hostname command
  6       shell:
  7         hostname
  8       register: info                        #将子项目的输出存储为info列表里
  9 
 10     - name: show messages
 11       debug:
 12         msg: "{{info['stdout']}}"            #从info列表中选择输出“stdout”变量
 13 
 14     - name: show rc                          #从info列表中选择输出“rc”变量
 15       debug:
 16         var: info['rc']

ansible密码登录 ansible创建用户设置密码_p2p_12

9.事实变量——ansible_facts

可用以下命令采集受控主机的事实信息:

ansible 172.25.254.151 -m setup

事实变量是ansible在受控主机中自动检测出的变量;
事实变量中还有与主机相关的信息;
当需要使用主机相关信息时不需要采集赋值,直接调用即可;
因为变量信息为系统信息所以不能随意设定仅为采集信息,故被成为事实变量。

1 ---
  2 - name: test register
  3   hosts: test
  4   tasks:
  5     - debug:
  6         var: ansible_facts['enp1s0']['ipv4']['address']    #筛选事实变量下的数据

ansible密码登录 ansible创建用户设置密码_ansible密码登录_13

保存变量的值:

1 ---
  2 - name: test register
  3   hosts: test
  4   tasks:
  5     - lineinfile:
  6         path: /mnt/address
  7         line: "{{ ansible_facts['enp1s0']['ipv4']['address']}}"
  8         create: yes

 保存enp1s0网卡上的ipv4地址到受控主机的</mnt/address>文件中

ansible密码登录 ansible创建用户设置密码_文件名_14

ansible密码登录 ansible创建用户设置密码_文件名_15

  gather_facts: no  ##在playbook中关闭事实变量收集

此参数会加快执行速度,但是不会收集事实变量导致结果不准确甚至报错。

10.魔法变量

hostvars:

ansible软件的内部信息

group_names:

当前受管主机所在组

groups:

列出清单中所有的组和主机

inventory_hostname:

包含清单中配置的当前授管主机的名称

魔法变量也就是ansible主机的内部变量

ansible localhost -m debug -a 'var=hostvars'        #显示ansible软件的内部信息

ansible密码登录 ansible创建用户设置密码_p2p_16

ansible test -m debug -a 'var=groups'                #列出清单中所有的组和主机
ansible test -m debug -a 'var=inventory_hostname'    #包含清单中配置的当前授管主机的名称
ansible test -m debug -a 'var=group_names'           #当前受管主机所在组

ansible密码登录 ansible创建用户设置密码_文件名_17

 

四、JINJA2模板

Jinja2是Python下一个被广泛应用的模版引擎。他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能。其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能

j2模板书写规则

ansible密码登录 ansible创建用户设置密码_debian_18

测试:

ansible密码登录 ansible创建用户设置密码_p2p_19

~~~~

ansible密码登录 ansible创建用户设置密码_p2p_20

ansible密码登录 ansible创建用户设置密码_debian_21

测试:

ansible密码登录 ansible创建用户设置密码_debian_22

~~~~~

ansible密码登录 ansible创建用户设置密码_linq_23

实验:

ansible密码登录 ansible创建用户设置密码_debian_24

测试:

ansible密码登录 ansible创建用户设置密码_文件名_25

ansible密码登录 ansible创建用户设置密码_ansible密码登录_26

ansible密码登录 ansible创建用户设置密码_ansible密码登录_27

五、Ansible的加密控制

ansible密码登录 ansible创建用户设置密码_linq_28

练习:

在所有的客户机中的</mnt>下生成一个“hosts”文件,文件内容与</etc/hosts>中的文件内容相同。

ansible密码登录 ansible创建用户设置密码_debian_29

本章总结

~~~~~~j2模板以后的内容由于时间原因尚未写完~~~~~~持续更新中~~~~~~