变量命名:
只能包含数字,下划线,字母。只能用下划线或字母开头。
变量级别:
名称 意义
全局 从命令行或配置文件中设定
play 在play和相关结构中设定的
主机 由清单,事实收集或注册的任务
变量设定和使用方式:
在playbook中直接定义变量:
---
- name: test var
hosts: all
vars:
USER: westosuser
编辑脚本,创建用户zzy:
创建成功:
zzy用户存在:
在文件中定义变量:
vim user_list.yml
---
user: westosuser
vim westos.yml
---
- name: Create User
hosts: all
vars_files:
- ./user_list.yml
编写test2.yml脚本:
编写test3.yml脚本:
运行test2.yml脚本:
查看运行结果,创建成功:
设定主机变量和清单变量:
定义主机变量和清单变量时使用vim inventory:
vim create_user.yml:
---
- name: create user
hosts:
vim inventory:
目录设定变量:
group_vars 清单变量,目录中的文件名称与主机清单名称一致
host_vars 主机变量,目录中的文件名称与主机名称一致
host_vars的内容会覆盖group_vars的内容
创建group_vars,host_vars:
删除下列内容:
编写list1.yml,list2.yml:
使用数组设定变量:
vim user_var.yml
---
USER:
lee:
age: 18
obj: linux
westos:
age: 20
obj: java
#vim user.yml
- name: Create User
hosts: all
gather_facts: no
vars_files:
./user_var.yml
tasks:
- name: create user
shell:
echo "{{USER['lee']['age']}}"
echo "{{USER.westos.obj}}"
编写user_var.yml:
编写user.yml:
注册变量:
regissteer 把模块输出注册到指定字符串中。
ignore_errors:yes 忽略略错误输出继续执行
事实变量:
事实变量是ansible在受控主机中自动检测出的变量。
事实变量中还有与主机相关的信息。
当需要使用主机相关信息时不需要采集赋值,直接调用即可。
因为变量信息为系统信息所以不能随意设定仅为采集信息,故被称为事实变量。
---
- name:test register
hosts: xxxxxx
tasks:
- name: show messages
debug:
msg: "{{ansible_facts['architecture']}}"
抓取受控主机的ip,主机名等等:
---
- name: test register
hosts: xxxxxx
tasks:
- name: test
copy:
dest: /mnt/hosts_messages
content:
"{{ansible_facts.enpls0.ipv4.address}}\n
{{ansible_facts.fqdn}}\n
{{ansible_facts.memtotal_mb}}"
魔法变量:
hostvars ansible软件的内部信息
group_names: 当前受管主机所在组
groups: 列出清单中所有的组和主机
inventory_hostname: 包含清单中配置的当前授管主机的名称
JINJA2模板:
介绍:
Jinja2是Python下一个被广泛应用的模版引擎
他的设计思想来源于Django的模板引擎,
并扩展了其语法和一系列强大的功能。
其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能
j2模板书写规则:
{# /etc/hosts line #}
127.0.0.1 localhost
{{ ansible_facts['all_ipv4_addresses'] }} {{ansible_facts['fqdn']}}
j2模板在playbook中的应用:
playbook1
---
- name: test register
hosts: xxxx
tasks:
- name: create hosts
template:
src: ./xxxx.j2
dest: /mnt/hosts
playbook2
---
- name: test.j2
hosts: xxxxxxx
vars:
students:
- name: student1
obj: linux
- name: student2
age: 18
obj: linux
tasks:
- template:
src: ./test.j2
dest: /mnt/list
ansible中的加密控制:
1.创建文件
ansible-vault create westos
2.有密码的建立
vim westos-vault
3.加密现有文件
ansible-vault encrypt test
4.查看加密文件
ansible-vault view test
ansible-vault view --vault-password-file=westos-vault test
5.编辑加密文件
ansible-vault edit westos1
ansible-vault edit --vault-password-file=westos-vault westos
6.解密文件
ansible-vault decrypt test 文件永久解密
7.更改密码
ansible-vault rekey test
ansible-vault rekey test --new-vault-password-file=westos-vault