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
相关推荐
lbb 小魔仙1 天前
【Linux】Ansible 自动化运维实战:2000+ 节点配置标准化教程
linux·运维·ansible
扑火的小飞蛾4 天前
【Ansible学习笔记01】 批量执行 shell 命令
笔记·学习·ansible
oMcLin4 天前
如何在 Red Hat Linux 服务器上使用 Ansible 自动化部署并管理多节点 Hadoop 集群?
linux·服务器·ansible
linux修理工7 天前
vagrant ubuntu 22.04 ansible 配置
ubuntu·ansible·vagrant
biubiubiu07068 天前
Ansible自动化
运维·自动化·ansible
秋4279 天前
ansible配置与模块介绍
ansible
秋4279 天前
ansible剧本
linux·服务器·ansible
码农101号10 天前
Ansible - Role介绍 和 使用playbook部署wordPress
android·ansible
2301_8000509912 天前
Ansible
运维·ansible
阎*水14 天前
Ansible 核心要点总结
ansible