目录
一、变量的设定
二、变量的使用方式
1、在playbook中直接定义变量
2、在文件中定义变量
3、设定主机变量和清单变量
4、目录设定变量
5、用命令覆盖变量
6、使用数组设定变量
7、注册变量
8、事实变量
9、魔法变量
三、JINJA2模板
四、加密控制
1、创建加密文件
2、查看加密文件
3、编辑加密文件
4、加密现有文件
5、更改加密文件密码
6、解密文件
7、执行加密文件
1、变量的命名规则:
(1)只能包含数字,下划线,字母;
(2)只能用下划线或字母开头;
(3)ansible内置的关键字不能作为变量名。
2、变量的级别:
3、变量优先级:
全局 > play
> 主机
全局 | 从命令行或配置文件中设定的 |
play |
在play 和相关结构中设定 |
主机 | 由清单,事实收集或注册的任务 |
loop
和item
实现循环执行vim test.yml
- name: test var
hosts: all
vars:
TEST: hello ale
tasks:
- name: file
debug:
msg: "{{ TEST }}"
ansible-playbook test.yml
vim file.yml
TEST: hello ale
vim test.yml
- name: test var
hosts: all
vars_files:
- ./file.yml
tasks:
- name: file
debug:
msg: "{{ TEST }}"
[test1]
192.168.67.112
[test2]
192.168.67.113
[test1:vars]
TEST=hello yyl
[test2:vars]
TEST=hello ale
vim test.yml
- name: test var
hosts: all
vars:
tasks:
- name: file
debug:
msg: "{{ TEST }}"
group_vars |
清单变量,目录中的文件名称与主机清单名称一致 |
host_vars |
主机变量,目录中的文件名称与主机名称一致 |
group_vars和host_vars之前注释inventory 内定义的
mkdir group_vars
cd group_vars/
vim test1
TEST: hello yyl
vim test2
TEST: hello ale
vim test.yml
- name: test var
hosts: all
vars:
tasks:
- name: file
debug:
msg: "{{ TEST }}"
host_vars:
mkdir host_vars
cd host_vars/
vim 192.168.67.112
TEST: hello yyl
vim 192.168.67.113
TEST: hello ale
- name: test var
hosts: all
vars:
tasks:
- name: file
debug:
msg: "{{ TEST }}"
ansible-playbook test.yml -e "TEST=hahahaha"
vim user_var.yml
- name: test var
hosts: all
vars:
USER1:
name: user1
id: 123
USER2:
name: user2
id: 456
tasks:
- name:
user:
name: "{{USER1.name}}"
uid: "{{USER1.id}}"
state: present
- name:
user:
name: "{{USER2.name}}"
uid: "{{USER2.id}}"
state: present
register
:把模块输出注册到指定字符串中 要输出单独参数时,指定输出变量
vim reg.yml
- name: test register
hosts: all
tasks:
- name: hostname command
shell:
hostname
register: info
- name: show messages
shell:
echo "{{info['stdout']}}"
事实变量是ansible在受控主机中自动检测出的变量,事实变量中还有与主机相关的信息;
当需要使用主机相关信息时不需要采集赋值,直接调用即可;
因为变量信息为系统信息所以不能随意设定仅为采集信息,故被成为事实变量。
vim 1.yml
- name: test register
hosts: all
tasks:
- name: show messages
debug:
msg: "{{ansible_facts['architecture']}}"
gather_facts: no ##在playbook中关闭事实变量收集
和事实变量类似,都是真实存在的变量,和ansible有关;直接执行以下变量即可。
##ansible软件的内部信息
ansible localhost -m debug -a "var=hostvars"
##当前受管主机所在组
ansible all -m debug -a "var=group_names"
##列出清单中所有的组和主机
ansible localhost -m debug -a "var=groups"
##包含清单中配置的当前授管主机的名称
ansible localhost -m debug -a "var=inventory_hostname"
Jinja2是Python下一个被广泛应用的模版引擎 他的设计思想来源于Django的模板引擎, 并扩展了其语法和一系列强大的功能。 其中最显著的一个是增加了沙箱执行功能和可选的自动转义功能 。
j2模板书写规则
{# /etc/hosts line #} ##注释说明文件用途
127.0.0.1 localhost ##文件内容
{{ ansible_facts['all_ipv4_addresses'] }} {{ansible_facts['fqdn']}} ##使用事实变量
j2模板的实现:
vim jinja.yml
---
- name: testjinja
hosts: server2
tasks:
- name: create file
template:
src: ./test.j2 ##j2模板来源
dest: /mnt/test ##远程主机执行文件地址
for循环和 if 的用法:
for循环:
设定j2模板,变量要用{{ }}
括起来
{% for NAME in users %} ##for循环设定变量NAME,变量来源于变量文件
{{ loop.index }} {{ NAME }} ##变量用 {{ }} 括起来
{% endfor %} ##for循环结束
if判断:
{% for NAME in users %}
{% if NAME in "linux"%} ##in表示等于时
{{ loop.index0 }} ##等于时只记数
{% endif %}
{% if NAME not in "linux"%} ##not in表示不等于时
{{ loop.index0 }} {{ NAME }} ##不等于时记数加变量
{% endif %}
{% endfor %}
练习:
使用j2模板 写hosts解析文件
vim hosts.yml
- name: create hosts
hosts: all
tasks:
- name: create hosts file
template:
src: ./hosts.j2
dest: /mnt/hosts
vim hosts.j2
{% for HOST in groups['all'] %}
{{hostvars[HOST]['ansible_facts']['ens33']['ipv4']['address'] }} {{hostvars[HOST]['ansible_facts']['hostname']}}
{% endfor %}
ansible-vault create yyl
cat yyl
vim authyyl 123
ansible-vault view yyl
ansible-vault view --vault-password-file=authyyl yyl
ansible-vault edit --vault-password-file=authyyl yyl
ansible-vault view --vault-password-file=authyyl yyl
ansible-vault encrypt yyl.yml
ansible-vault rekey yyl
文件更改密码
vim authyyl 123456
ansible-vault rekey yyl --new-vault-password-file=authyyl
ansible-vault view yyl
ansible-vault decrypt yyl
ansible-vault decrypt test.yml
ansible-playbook test.yml --ask-vault-pass