Ansible中的变量和加密

1 变量的命名

  • 变量名只能包含数字、下划线、字母,并且不能以数字开头

2 变量的级别

全局:从命令行或配置文件中设定
play:在play和相关结构中设定的
主机:有清单,实时收集或注册的任务

变量优先级的设定:狭窄范围有限与广域

3. 变量设定和使用方式

3.1 在playbook中直接定义变量和使用

  • 编辑playbook文件,变量直接定义在文件中
---
 - name: create user
  hosts: list1
  vars:
    USER: west
  tasks:
    - name: creat user
      user:
        name: "{{USER}}" ##变量的使用
        state: present
...
  • 测试

在这里插入图片描述在这里插入图片描述

3.2 在文件中定义的变量和使用

  • 编辑存放变量的文件:文件名以.yml结尾

在这里插入图片描述
(1) 方式一

  • 编辑playbook文件
---
 - name: create user
  hosts: list1
  vars_files:
    - /mnt/user.yml ##定义变量文件的路径
  tasks:
    - name: create user
      user:
        name: "{{USER}}"  ##变量的使用
        state: present
...
  • 测试

在这里插入图片描述

在这里插入图片描述
(2)方式二

  • 编辑playbook文件
---
 - name: delete user
  hosts: list1
  vars_files: /mnt/user.yml ##定义变量的文件
  tasks:
    - name: delete user
      user:
        name: "{{USER}}" ##变量的使用
        state: absent
...
  • 测试

在这里插入图片描述

在这里插入图片描述
4 设置主机变量和清单变量

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

(1)在清单文件中定义变量

	[list1 :vars]  ##定义针对list1中主机名或ip的变量
	USER=testuser

在这里插入图片描述

(2)playbook文件的编写

---
 - name: create user
  hosts: list1
  tasks:
    - name: create user
      user:
        name: "{{USER}}"
        state: present
...

(3) 测试

在这里插入图片描述
在这里插入图片描述

5 目录设定变量

实验前的准备

(1)查看清单文件:cat /ansible/inventory

在这里插入图片描述
(2)playbook文件的编写

---
 - name: create user
  hosts: list1 ##不用设定
  tasks:
    - name: create user
      user:
        name: "{{USER}}"
        state: present
...

5.1 清单变量

  • group_vars :清单变量,目录中的文件名称必须与主机清单名称一致

     mkdir /ansible/group_vars
     touch  /ansible/group_vars/list1
    

(1)在list1文件中定义针对list1的清单变量:
在这里插入图片描述

在这里插入图片描述
(2)测试
在这里插入图片描述
在这里插入图片描述

5.2 主机变量

  • host_vars :主机变量,目录中文件的名称必须和ip和主机名称一致

      mkdir /ansible/host_vars 
    

1 当清单文件list中的主机是ip

(1)创建/ansible/host_vars/172.25.254.10文件,并编辑文件中变量

touch /ansible/host_vars/172.25.254.10

在这里插入图片描述
(2)查看清单文件

在这里插入图片描述

(3)playbook文件

---
 - name: create user
  hosts: list1 ##不用设定
  tasks:
    - name: create user
      user:
        name: "{{USER}}"
        state: present
...

(2)测试
在这里插入图片描述
在这里插入图片描述
2 当清单文件list中的主机是主机名

(1)查看清单文件
在这里插入图片描述
(2)编辑/etc/hosts文件,域名解析
在这里插入图片描述
(3)playbook文件

---
- name: delete user
  hosts: list1
  tasks:
    - name: delete user
      user:
        name: "{{USER}}"
        state: absent
...

(4)测试
在这里插入图片描述

在这里插入图片描述

6 用命令覆盖变量

(1)在playbook文件中定义变量

---
 - name: appache
  hosts: list1
  vars: 
    test: westos
  tasks:
    - copy:
        content: "{{test}}" 
        dest: /mnt/hosts
...

(2)测试

  • 直接执行playbook
ansible-playbook test2.yml

在这里插入图片描述

在这里插入图片描述

  • 命令覆盖变量,执行playbook
ansible-playbook test2.yml -e "test=linux"

在这里插入图片描述

在这里插入图片描述

(3)playbook文件中没有定义变量,可以用命令覆盖变量

---
- name: appache
  hosts: list1
  tasks:
    - copy:
        content: "{{test}}"
        dest: /mnt/hosts
...

测试:

ansible-playbook test2.yml -e "test=westos"

在这里插入图片描述

在这里插入图片描述

7 使用数组设定变量

编辑变量文件:user_var.yml

user:
  user1:
    name: tom
    age: 18
  user2:
    name: mary
    age: 13
---
- name: show user
  hosts: list1
  vars_files: ./user_var.yml
  tasks:
    - shell:
        echo "{{user['user1']['name']}}   {{user['user1']['age']}}" ##推荐使用
        ##echo "{{user.user1.name}}   {{user.user1.age}}"
        echo "{{user['user2']['name']}}   {{user['user2']['age']}}"
...

测试
在这里插入图片描述

8 注册变量

register:把模块输出到指定字符串中

---
- name: test register
  hosts: list1
  tasks:
    - shell:
        hostname
      register: westos
    - debug:
        msg: "{{westos['stdout']}}"
...

在这里插入图片描述

9 事实变量

  • 事实变量是ansible在受控主机中自动检测出的变量,事实变量中还有与主机相关的信息,当需要使用主机相关的信息时不需要采集赋值,直接调用即可,因为变量信息为系统信息所以不能随意设定,仅为采集信息,故称为事实变量。
ansible list1 -m setup ##setup模块用于收集远程主机的一些基本信息

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

---
- name: test register
  hosts: list1
  tasks:
    - debug:
        msg: "{{ansible_facts['enp1s0']['ipv4']['address']}}"
...

在这里插入图片描述测试

  • 将采集到的受控主机的ip和主机名信息在远程登陆时显示
---
- name: information
  hosts: list1
  tasks:
    - name:
      copy:
        content: "hostname:{{ansible_facts['fqdn']}}\nipaddr:{{ansible_facts['enp1s0']['ipv4']['address']}}"
        dest: /etc/motd ##登陆该主机时提示主机的ip和主机名
...

在这里插入图片描述在这里插入图片描述

10 魔法变量

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

测试

  • 将受控主机的ip及其主机名写入到/etc/hosts文件中
---
- name:
  hosts: all
  tasks:
    - name:
      template:
        src: ./host.j2
        dest: /etc/hosts
...
{% for host in groups['all']  %}
{{host}}  {{hostvars[host]['ansible_facts']['fqdn']}}
{% endfor %}

在这里插入图片描述
在这里插入图片描述

11 加密文件

(1)创建加密文件

ansible-vault create files1.yml
ansible-vault create files2.yml --vault-password-file=password ##password中是加密文件的密码

在这里插入图片描述在这里插入图片描述

(2)加密现有文件:

ansible-vault encrypt test1.yml

在这里插入图片描述

(3)查看加密文件:
在这里插入图片描述

ansible-vault view test1.yml
ansible-vault view test1.yml --vault-password-file=password

在这里插入图片描述
(4)编辑加密文件

ansible-vault edit test1.yml 
ansible-vault edit test1.yml --vault-password-file=password ##将密码写入password中

在这里插入图片描述(5)更改密码

ansible-vault rekey test1.yml
ansible-vault rekey test1.yml --new-vault-password-file=password##利用文件更改密码

在这里插入图片描述

(6)解密文件

  • 文件永久解密
ansible-vault decrypt test1.yml

在这里插入图片描述

  • 将文件解密并保存为west
ansible-vault decrypt test1.yml --output=west

在这里插入图片描述

在这里插入图片描述

10 魔法变量

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

测试

  • 将受控主机的ip及其主机名写入到/etc/hosts文件中
---
- name:
  hosts: all
  tasks:
    - name:
      template:
        src: ./host.j2
        dest: /etc/hosts
...
{% for host in groups['all']  %}
{{host}}  {{hostvars[host]['ansible_facts']['fqdn']}}
{% endfor %}

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值