自动化运维之4——Ansible中的变量及加密

目录

一、变量命名

二、变量级别

三、变量设定和使用方式

1、使用变量

2、在playbook中直接定义变量

3、在文件中定义变量

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

5、目录设定变量

6.用命令覆盖变量

7.使用数组设定变量

8.注册变量

9.事实变量——ansible_facts

10.魔法变量

四、JINJA2模板

j2模板书写规则

五、Ansible的加密控制


一、变量命名

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

二、变量级别

全局从命令行或配置文件中设定的
主机由清单,事实收集或注册的任务

paly

在play和相关结构中设定的

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

三、变量设定和使用方式

1、使用变量

 

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}}"        #使用变量

用法: 

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}}"

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

 

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

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

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

用法:

5、目录设定变量

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

  方法一:

方法二:

6.用命令覆盖变量

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

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

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部分的变量

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

显示多个变量 

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']                              

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']    #筛选事实变量下的数据

保存变量的值:

  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>文件中

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

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

10.魔法变量

hostvars:ansible软件的内部信息
group_names:当前受管主机所在组
groups:列出清单中所有的组和主机
inventory_hostname:包含清单中配置的当前授管主机的名称

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

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

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

 

四、JINJA2模板

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

j2模板书写规则

测试:

~~~~

测试:

~~~~~

实验:

测试:

五、Ansible的加密控制

练习:

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

本章总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值