ansible变量详解

变量

  • 1.变量命名
  • 2.变量级别
  • 3.变量设定和使用方式
    • 3.1 在playbook中直接定义变量并使用变量
    • 3.2 在文件中定义变量
  • 4.设定主机变量和清单变量
  • 5.目录设定变量
  • 6. 用命令覆盖变量(本身没变量也会被覆盖)
  • 7.使用数组设定变量
  • 8.注册变量
  • 9.事实变量
  • 10.魔法变量
  • 11. JINJA2模板
  • 12. j2模板在playbook中的应用
  • 13. Ansible的加密控制

1.变量命名

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

2.变量级别

- 全局:	从命令行或配置文件中设定的
- paly:	在play和相关结构中设定的
- 主机:	由清单,事实收集或注册的任务
- 优先级:主机>play>全局 

- 变量优先级设定:
-	狭窄范围优先于广域范围

3.变量设定和使用方式

3.1 在playbook中直接定义变量并使用变量

- 示例
	---
	- name: create user
	  hosts: list1
	  vars:
	    user: westos1
	  tasks:
	    - name: create user
	      user:                ##user模块
	        name: "{{user}}"
	        state: present
	...

ansible变量详解_第1张图片
ansible变量详解_第2张图片

ansible变量详解_第3张图片

3.2 在文件中定义变量

- 示例
- vim  /root/ansible/user_list.yml
	---
	user: westos1
	...
- vim westos.yml
	---
	- name: Create User
	  hosts: all
	  vars_files:
	    - /root/ansible/user_list.yml
	  tasks:
	    - name: create user
	      user:
	        name: "{{user}}"
	        state: present
	...
	或者
	---
	- name: Create User
	  hosts: all
	  vars_files: /root/ansible/user_list.yml
	  tasks:
	    - name: create user
	      user:
	        name: "{{user}}"
	        state: present
	...

ansible变量详解_第4张图片

ansible变量详解_第5张图片ansible变量详解_第6张图片

ansible变量详解_第7张图片

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

- 在定义主机变量和清单变量时使用

vim inventory
	[westos_list1]
	172.25.0.254
	172.25.0.1
	
	[westos_list2]
	172.25.0.2
	
	[westos_list3]
	172.25.0.3
	
	[westos_group:children]
	westos_list2
	westos_list3
	
	[westos_list1:vars]
	USER=westos1
	
	[westos_group:vars]
	USER=westos2

ansible变量详解_第8张图片
ansible变量详解_第9张图片
ansible变量详解_第10张图片
ansible变量详解_第11张图片

5.目录设定变量

- group_vars	##清单变量,目录中的文件名称与主机清单名称一致
- host_vars	##主机变量,目录中的文件名称与主机名称一致(取决于清单里是主机名还是ip)

group_vars

ansible变量详解_第12张图片ansible变量详解_第13张图片
host_vars

ansible变量详解_第14张图片ansible变量详解_第15张图片
ansible变量详解_第16张图片

6. 用命令覆盖变量(本身没变量也会被覆盖)

- ansible-playbook user.yml -e "user=hello"

ansible变量详解_第17张图片

ansible变量详解_第18张图片
在这里插入图片描述

7.使用数组设定变量

- vim user_var.yml
	---
	USER:
	  lee:
	    age: 18
	    obj: linux
	  
	  westos:
	    age: 20
	    obj: java
	...
- vim user.yml
	---
	- name: Create User
	  hosts: all
	  vars_files:
	    ./user_var.yml
	  tasks:
	  	- name: create user
	      shell:
	        echo  "{{USER['lee']['age']}}"   ##新的书写方式,官方推荐
	        echo  "{{USER.westos.obj}}"   	 ##旧的书写方式
	...
- 练习	
	create web vhost
	www.westos.com  80    ------ > /var/www/html
	linux.westos.com 80 ------> /var/www/virtual/westos.com/linux

练习
ansible变量详解_第19张图片
ansible变量详解_第20张图片

ansible变量详解_第21张图片

8.注册变量

- register 把模块输出注册到指定字符串中

	---
	- name: test register
	  hosts: list1
	  tasks:
	    - name: hostname command
	      shell:
	        hostname
	      register: westos
	
	    - name: show messages
	      shell:
	        echo "{{info['stdout']}}"
	...

ansible变量详解_第22张图片ansible变量详解_第23张图片

ansible变量详解_第24张图片

9.事实变量

- 事实变量是ansible在受控主机中自动检测出的变量
- 事实变量中含有与主机相关的信息

- 当需要使用主机相关信息时不需要采集赋值,直接调用即可
- 因为变量信息为系统信息,所以不能随意设定仅为采集信息,故被成为事实变量
- gather_facts: yes|no    ##等于yes收集事实信息;no不收集事实信息,执行更快。
- 示例
---
- name: test register
  hosts: list1
  gather_facts: yes
  tasks:
    - name: show messages
      debug:
        msg: "{{ansible_facts['fqdn']}}"   ##debug模块调用信息
...

有gather_facts的情况
ansible变量详解_第25张图片

ansible变量详解_第26张图片

ansible变量详解_第27张图片
练习,登陆主机的时候显示主机的主机名和ip

ansible变量详解_第28张图片ansible变量详解_第29张图片

10.魔法变量

- hostvars:		    	##ansible软件的内部信息
- eg:
- 	ansible localhost -m debug -a "var=hostvars"
- group_names:			##当前受管主机所在组
- eg:
- 	ansible list1 -m debug -a "var=group_names"
- groups:				##列出清单中所有的组和主机
- eg:
- 	ansible all -m debug -a "var=groups"
- 	ansible all -m debug -a "var=groups['all']"	
- 	ansible localhost -m debug -a "var=groups['all']"
- inventory_hostname:	##包含清单中配置的当前授管主机的名称	
- eg:
- 	ansible list1 -m debug -a "var=inventory_hostname"
- 	ansible localhost -m debug -a "var=inventory_hostname"
- 练习
- 	结合魔法变量和j2模板,显示主机名和ip

ansible变量详解_第30张图片ansible变量详解_第31张图片
ansible变量详解_第32张图片
ansible变量详解_第33张图片

ansible变量详解_第34张图片
练习

ansible变量详解_第35张图片ansible变量详解_第36张图片
ansible变量详解_第37张图片
ansible变量详解_第38张图片

11. JINJA2模板

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

- j2模板书写规则#
	
	{# /etc/hosts line #}      ##注释文件说明
	127.0.0.1	localhost      ##文件内容
	{{ ansible_facts['all_ipv4_addresses'] }}	{{ansible_facts['fqdn']}}##使用事实变量作为内容,用于测试
	
	#for循环#
		vim users.yml
		users:
		  - westos
		  - linux
		  - ansible
		
		vim test.j2
		{% for NAME in users %}
		{{ NAME }}
		{%endfor%}
	
	#if 判定#
		{% for NAME in users if not NAME == "ansible" %}
		User number {{loop.index}} - {{ NAME }}
		{%endfor%}
		
		loop.index	##循环迭代记数从1开始
		loop.index0	##循环迭代计数从0开始
		
		{% for user in students %}
		name:	{{user['name']}}
		{%if user['age'] is defined%}
		age:	{{user['age']}}
		{%endif%}
		{% if user['age'] is not defined %}
		age:	null
		{% endif%}
		obj:	{{user['obj']}}
		{%endfor%}

12. j2模板在playbook中的应用

#playbook1,别的文件中定义变量 
	---
	- name: test register
	  hosts: xxxx
	  tasks:
	    - name: create hosts
	      template:
	        src: ./xxxx.j2
	        dest: /mnt/hosts
	...

#playbook2,直接定义变量
	---
	- name: test.j2
	  hosts: 172.25.0.254
	  vars:
	    students:
	      - name: student1
	        obj: linux
	
	      - name: student2
	        age: 18
	        obj: linux
	  tasks:
	    - template:
	        src: ./test.j2
	        dest: /mnt/list
	 ...


- 测试,通过模板配置Apache

apache.yml
ansible变量详解_第39张图片
ansible变量详解_第40张图片
ansible变量详解_第41张图片
apache.j2

ansible变量详解_第42张图片测试结果

ansible变量详解_第43张图片

13. Ansible的加密控制

- 创建加密文件
1. ansible-vault create westos.yml   

2.
	vim westosfile                          ##编辑加密文件
		lee

	ansible-vault create westos.yml --vault-password-file=westosfile

- 加密现有文件
	ansible-vault encrypt westos.yml

- 查看加密文件
	ansible-vault view westos.yml
	ansible-vault view westos.yml --vault-password-file=westosfile

- 编辑加密文件
	ansible-vault edit westos
	ansible-vault edit --vault-password-file=westos-valut westos

- 解密文件
	ansible-vault decrypt westos 			##文件永久解密
	ansible-vault decrypt westos --output=linux	##文件解密保存为linux

- 更改密码
	ansible-vault rekey westos.yml
	ansible-vault rekey westos.yml --new-vault-password-file=westosfile

- playbook
	ansible-playbook westos.yml  --ask-vault-pass

创建
ansible变量详解_第44张图片ansible变量详解_第45张图片

密码文件加密

ansible变量详解_第46张图片
现有文件加密解密

ansible变量详解_第47张图片
查看文件
ansible变量详解_第48张图片
修改密码

ansible变量详解_第49张图片

编辑加密文件

ansible变量详解_第50张图片

playbook

ansible变量详解_第51张图片

你可能感兴趣的:(运维基础,变量,playbook,ansible,运维)