Ansible中的变量及加密

目录

1.变量命名

2.变量级别

3.变量设定和使用方式

在playbook中直接定义变量

在文件中定义变量

使用变量

 设定主机变量和清单变量

   目录设定变量

用命令覆盖变量

使用数组设定变量

​编辑 注册变量

事实变量

​编辑

魔法变量

JINJA2模板

j2模板书写规则

​编辑

 for循环

if判定

Ansible的加密控制

创建加密文件

加密现有文件

查看加密文件

编辑加密文件

解密文件

​编辑更改密码


1.变量命名

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

2.变量级别

全局 :         从命令行或配置文件中设定的
paly :         在play和相关结构中设定的
主机 :         由清单,事实收集或注册的任务
变量优先级设定
狭窄范围有限与广域范围

3.变量设定和使用方式

在playbook中直接定义变量

- name: test var
  hosts: all
  vars:
  USER: user

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

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

在文件中定义变量

vim user_list.yml
USER: user

vim westos.yml
- name: test var
  hosts: all
  vars_files:
  - ./user_list.yml

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

使用变量

tasks:
 - name: create user
   user:
   name: "{{ USER }}"

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

 设定主机变量和清单变量

在定义主机变量和清单变量时使用
vim inventory
[host1]
192.168.81.11
[host2]
192.168.81.12
[host1:vars]
USER="user1"
[host2:vars]
USER="user2"

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

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

   目录设定变量

mkdir group_vars
vim group_vars/host1
vim group_vars/host2
//清单变量,目录中的文件名称与主机清单名称一致

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

mkdir host_vars
vim host_vars/192.168.81.11
vim host_vars/192.168.81.12
//主机变量,目录中的文件名称与主机名称一致

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

用命令覆盖变量

ansible-playbook test.yml -e "USER=hahah"

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

使用数组设定变量

- 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张图片 注册变量

register 把模块输出注册到指定字符串中
- name: test register
  hosts: host1
  tasks:
    - name: hostname command
      shell: hostname
      register: test

    - name: show messages
      debug:
        msg: "{{test['stdout']}}"

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

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

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

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

事实变量

事实变量是 ansible 在受控主机中自动检测出的变量
事实变量中还有与主机相关的信息
ansible localhost -m setup        //可以使用命令来查看当前主机的事实变量,并使用正确的变量名和格式在Ansible playbooks中引用这些变量。
当需要使用主机相关信息时不需要采集赋值 直接调用即可
因为变量信息为系统信息所以不能随意设定仅为采集信息 故被成为事实变量

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

- name: test fact
  hosts: host1
  tasks:
    - name: show messages
      debug:
        msg: "{{ansible_facts['nodename']}}"
//host1主机上显示出当前主机的节点名称

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

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

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

魔法变量

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

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

JINJA2模板

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

j2模板书写规则

{# /etc/hosts line #}    //注释说明文件用途
127.0.0.1 localhost        //文件内容
{{ ansible_facts['all_ipv4_addresses'] }}   {{ansible_facts['fqdn']}}     //使用事实变量
vim jinja.yml
- name: test j2
  hosts: host1
  tasks:
    - name: create test file
      template:
        src: ./test.j2
        dest: /mnt/test

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

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

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

 for循环

vim user1.yml
users:
 - westos
 - linux
 - ansible

vim for.j2
- name: test j2
  vars_files: ./user1.yml
  hosts: host1
  tasks:
    - name: create list
      template:
        src: ./test1.j2
        dest: /mnt/user_list

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

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

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

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

if判定

vim test2.j2
{% for NAME in users %}
{% if NAME in "linux" %}
{{ loop.index0 }}
{% endif %}
{% if NAME not in "linux"%}
{{ loop.index0 }} {{ NAME }}
{% endif %}
{% endfor %}
//使用if语句来检查当前的"NAME"是否包含字符串"linux"。如果包含,则使用loop.index0来输出当前索引的值,并在后面添加一个换行。如果不包含,则使用loop.index0输出当前索引的值,并在元素后面添加一个空格和"NAME"本身的值
loop.index         //循环迭代记数从1开始
loop.index0         //循环迭代计数从0开始

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

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

练习

创建一个名为"hosts"的文件,其中包含了所有主机的IP地址、主机名和完全限定域名。使用源模板文件"./hosts.j2"和目标文件路径"/mnt/hosts"

 cat hosts.j2
{% for HOST in groups['all'] %}
{{hostvars[HOST]['ansible_facts']['ens33']['ipv4']['address']}} {{hostvars[HOST]['ansible_facts']['hostname']}} {{hostvars[HOST]['ansible_facts']['fqdn']}}
{% endfor %}

vim host.yml

- name: create hosts
  hosts: all
  tasks:
    - name: create hosts file
      template:
        src: ./hosts.j2
        dest: /mnt/hosts

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

Ansible的加密控制

创建加密文件

ansible-vault create westos        //创建加密文件westos

vim westos-vault
lee
ansible-vault create --vault-password-file=westos-valut westos        //创建了一个名为"westos"的Vault文件,并使用密码文件"westos-vault"中指定的密码为其加密
Ansible中的变量及加密_第31张图片

加密现有文件

ansible-vault encrypt test

查看加密文件

ansible-vault view westos
ansible-vault view --vault-password-file=westos-valut westos

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

编辑加密文件

ansible-vault edit westos1
ansible-vault edit --vault-password-file=westos-valut westos

解密文件

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

Ansible中的变量及加密_第33张图片更改密码

ansible-vault rekey westos1
ansible-vault rekey westos1 --new-vault-password-file=key1

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

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

你可能感兴趣的:(ansible)