Ansible中的变量及加密

目录

1.变量命名

2.变量级别

3.变量设定和使用方式

在playbook中直接定义变量

在文件中定义变量

使用变量

设定主机变量和清单变量

目录设定变量

用命令覆盖变量

使用数组设定变量

[​编辑 注册变量](#编辑 注册变量)

事实变量

​编辑

魔法变量

JINJA2模板

j2模板书写规则

​编辑

for循环

if判定

Ansible的加密控制

创建加密文件

加密现有文件

查看加密文件

编辑加密文件

解密文件

​编辑更改密码


1.变量命名

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

2.变量级别

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

3.变量设定和使用方式

在playbook中直接定义变量

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

在文件中定义变量

vim user_list.yml
USER: user

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

使用变量

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

设定主机变量和清单变量

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

vim inventory
[host1]
192.168.81.11
[host2]
192.168.81.12
[host1:vars]
USER="user1"
[host2:vars]
USER="user2"

目录设定变量

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

用命令覆盖变量

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

使用数组设定变量

- 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 把模块输出注册到指定字符串中

- name: test register
  hosts: host1
  tasks:
    - name: hostname command
      shell: hostname
      register: test

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

事实变量

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

ansible localhost -m setup        //可以使用命令来查看当前主机的事实变量,并使用正确的变量名和格式在Ansible playbooks中引用这些变量。

当需要使用主机相关信息时不需要采集赋值 , 直接调用即可
因为变量信息为系统信息所以不能随意设定仅为采集信息 , 故被成为事实变量

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

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


魔法变量

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']}}     //使用事实变量

vim jinja.yml
- name: test j2
  hosts: host1
  tasks:
    - name: create test file
      template:
        src: ./test.j2
        dest: /mnt/test

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

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开始

练习

创建一个名为"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的加密控制

创建加密文件

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

vim westos-vault
lee
ansible-vault create --vault-password-file=westos-valut westos        //创建了一个名为"westos"的Vault文件,并使用密码文件"westos-vault"中指定的密码为其加密

加密现有文件

ansible-vault encrypt test

查看加密文件

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

编辑加密文件

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-vault rekey westos1
ansible-vault rekey westos1 --new-vault-password-file=key1
相关推荐
紫晓宁2 天前
jmeter结合ansible分布式压测--3压测执行
分布式·jmeter·ansible
紫晓宁3 天前
jmeter结合ansible分布式压测--1数据准备
分布式·jmeter·ansible
紫晓宁3 天前
jmeter结合ansible分布式压测--2jmter环境准备
分布式·jmeter·ansible
SG.xf6 天前
ansible中的任务执行控制
ansible
赶紧回家去9 天前
Ansible基本使用
运维·ansible
我就是全世界10 天前
ansible详细介绍和具体步骤
ansible
福大大架构师每日一题10 天前
27.9 调用go-ansible执行playbook拷贝json文件重载采集器
golang·json·ansible·prometheus
SG.xf10 天前
Ansible
运维·ansible
避凉闲庭10 天前
ansible开局配置-openEuler
linux·运维·ansible·脚本·openeuler·免密登录·批量化
运维小白。。12 天前
Ansible 批量部署
ansible