文章目录

  • 1 管理变量
  • 1.1 ansible定义变量简介
  • 1.1.1 命名变量
  • 1.1.2 定义变量
  • 1.2 playbook中使用变量
  • 1.2.1
  • 在playbook中使用变量
  • 1.3 主机变量和组变量
  • 1.3.1 主机变量
  • 2 管理机密
  • 2.1 ansible vault
  • 2.2 创建加密的文件
  • 2.3 查看加密文件
  • 2.4 编辑加密文件
  • 2.5加密现有的文件
  • 2.6 解密现有的文件
  • 2.7 更改加密文件的密码


1 管理变量

1.1 ansible定义变量简介

Ansible支持利用变量来存储值,并在Ansible项目的所有文件中重复使用这些值。这可以简化项目的创建和维护,并减少错误的数量。
通过变量,可以轻松地在Ansible项目中管理给定环境的动态值。例如,变量可能包含下面这些值:

  • 要创建的用户
  • 要安装的软件包
  • 要重新启动的服务
  • 要删除的文件
  • 要从互联网检索的存档

1.1.1 命名变量

变量的名称必须以字母开头,并且只能包含字母、数字和下划线

1.1.2 定义变量

三个范围级别

  • 全局范围:从命令行或 ansible 配置设置的变量
  • play 范围:在 play 和相关结构中设置的变量
  • 主机范围:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量

如果多个级别上定义了相同名称的变量,优先采用级别最高的变量,窄范围优先于广范围

1.2 playbook中使用变量

变量在Ansible Playbook中发挥着重要作用,因为它们可以简化playbook中变量数据的管理。

1.2.1

常见方式:在 playbook 开头的 vars 块中:

---
 - host: all 
  vars: 
     users: student
     home: /home/student

也可以在外部文件中定义playbook变量。此时不使用playbook中的vars块,可以改为使用vars_files指令,后面跟上相对于playbook位置的外部变量文件名称列表:

- hosts: all
  vars_files:
    - vars/users.yml

此时users.yml定义着playbook的变量

user: ljt
home: /home/ljt

在playbook中使用变量

声明了变量后,可以在任务中使用这些变量。若要引用变量,可以将变量名放在双大括号内。在任务执行时,Ansible会将变量替换为其值。

vars:
  user: joe
  
tasks:
  - name: Creates the user {{ user }}
    user:
       name: "{{ user }}"

注意:当变量用作开始一个值的第一元素时,必须使用引号。这可以防止Ansible将变量引用视为YAML字典的开头。

1.3 主机变量和组变量

主机变量是指作用在某一台主机上的变量。位置可以与主机清单写在一起也可以写在inventory/host_vars/a_host_name.yml文件里。通常前者使用INI格式,后者使用YAML格式。

如果组变量和主机变量都对同一个主机定义了相同的变量,那么ansible最终会采用主机变量而放弃组变量

1.3.1 主机变量

和主机变量类似,组变量作用于主机组,即多个主机。位置可以与主机组定义写在一起也可以写在inventory/group_vars/a_group_name.yml文件里。

2 管理机密

2.1 ansible vault

  • ansible提供的ansible vault可以加密和解密任何由ansible使用的结构化数据文件
  • 若要使用ansible vault,可通过一个名为ansible-vault的命令行工具创建、编辑、加密、解密和查看文件
  • ansible vault可以加密任何由ansible使用的结构化数据文件
  • 包括清单变量、playbook中含有的变量文件、以及在执行playbook时作为参数传递的变量文件,或者ansible角色中定义的变量

2.2 创建加密的文件

要创建新的加密文件,可使用ansible-vault create filename命令。该命令将提示输入新的vault密码,然后利用默认编辑器vi打开文件。我们可以设置和导出EDITOR环境变量,通过设置和导出指定其他默认编辑器。

root@localhost ~]# ansible-vault create ljt.yml
New Vault password: 
Confirm New Vault password:

2.3 查看加密文件

[root@localhost ~]# ansible-vault view ljt.yml
Vault password:

2.4 编辑加密文件

[root@localhost ~]# ansible-vault edit ljt.yml
passwd=

2.5加密现有的文件

要加密已存在的文件,请使用ansible-vault encrypt filename命令。此命令可取多个欲加密文件的名称作为参数。

[root@localhost ~]# ansible-vault encrypt ljt1.yml ljtt2.yml
New Vault password: 
Confirm New Vault password:

2.6 解密现有的文件

现有的加密文件可以通过ansible-vault decrypt filename命令永久解密。在解密单个文件时,可使用–output选项以其他名称保存解密的文件。

[root@localhost ~]# ansible-vault decrypt secret1.yml --output=ljt1-decrypted.yml
Vault password:

2.7 更改加密文件的密码

使用ansible-vault rekey filename命令更改加密文件的密码。此命令可一次性更新多个数据文件的密钥。它将提示提供原始密码和新密码。

[root@localhost ~]# ansible-vault rekey ljt.yml
Vault password: 
New Vault password: 
Confirm New Vault password: 
Rekey successful