Ansible中的变量及加密

目录

一、变量的设定

二、变量的使用方式

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和相关结构中设定
主机 由清单,事实收集或注册的任务

二、变量的使用方式

  • 这里使用循环定义的方式,使用loopitem实现循环执行

1、在playbook中直接定义变量

vim test.yml

- name: test var
  hosts: all
  vars:
    TEST: hello ale
  tasks:
    - name: file
      debug:
        msg: "{{ TEST }}"

ansible-playbook test.yml

Ansible中的变量及加密_第1张图片

2、在文件中定义变量 

vim file.yml

TEST: hello ale

vim test.yml

- name: test var
  hosts: all
  vars_files:
    - ./file.yml
  tasks:
    - name: file
      debug:
        msg: "{{ TEST }}"

Ansible中的变量及加密_第2张图片

Ansible中的变量及加密_第3张图片

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

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

Ansible中的变量及加密_第4张图片

Ansible中的变量及加密_第5张图片

4、目录设定变量

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

Ansible中的变量及加密_第6张图片

 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中的变量及加密_第7张图片

Ansible中的变量及加密_第8张图片

5、用命令覆盖变量

ansible-playbook test.yml -e "TEST=hahahaha"

Ansible中的变量及加密_第9张图片

6、使用数组设定变量

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

Ansible中的变量及加密_第10张图片

7、注册变量

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中的变量及加密_第11张图片

 8、事实变量

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

vim 1.yml

- name: test register
  hosts: all
  tasks:
   - name: show messages
     debug:
       msg: "{{ansible_facts['architecture']}}"

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

Ansible中的变量及加密_第12张图片

9、魔法变量 

和事实变量类似,都是真实存在的变量,和ansible有关;直接执行以下变量即可。

 ##ansible软件的内部信息

ansible localhost -m debug -a "var=hostvars"

 Ansible中的变量及加密_第13张图片

##当前受管主机所在组

ansible all -m debug -a "var=group_names" 

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

ansible localhost -m debug -a "var=groups"

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

ansible localhost -m debug -a "var=inventory_hostname"

Ansible中的变量及加密_第14张图片

三、JINJA2模板 

       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中的变量及加密_第15张图片Ansible中的变量及加密_第16张图片

四、加密控制

1、创建加密文件

ansible-vault create yyl
cat yyl

Ansible中的变量及加密_第17张图片

2、查看加密文件 

vim authyyl  123
ansible-vault view yyl
ansible-vault view --vault-password-file=authyyl  yyl

Ansible中的变量及加密_第18张图片

3、编辑加密文件 

ansible-vault edit --vault-password-file=authyyl yyl
ansible-vault view --vault-password-file=authyyl  yyl

4、加密现有文件 

ansible-vault encrypt yyl.yml

 5、更改加密文件密码

ansible-vault rekey yyl

文件更改密码
vim authyyl  123456
ansible-vault rekey yyl --new-vault-password-file=authyyl
ansible-vault view yyl

Ansible中的变量及加密_第19张图片 

Ansible中的变量及加密_第20张图片

6、解密文件

ansible-vault decrypt yyl
ansible-vault decrypt test.yml

Ansible中的变量及加密_第21张图片

7、执行加密文件

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

Ansible中的变量及加密_第22张图片

你可能感兴趣的:(ansible,ansible)