ansible管理变量和加解密
ansible变量简介
Ansible支持利用变量来存储值,并在Ansible项目的所有文件中重复使用这些值。这可以简化项目的创建和维护,并减少错误的数量。
例如,变量可能包含下面这些值:
-
要创建的用户
-
要安装的软件包
-
要重新启动的服务
-
要删除的文件
-
要从互联网检索的存档
命名变量规则
变量的名称必须以字母开头,并且只能包含字母、数字和下划线。
无效的变量 | 有效的变量 |
---|---|
qqq 123 | qqq_123 |
list 123 abc | list_123_abc |
QQQ.123 | QQQ_123 |
list @1 | list1 或 list_1 |
定义变量
可以在Ansible项目中的多个位置定义变量。不过,这些变量大致可简化为三个范围级别:
全局变量:从命令行或Ansible配置设置的变量
Play范围:在play和相关结构中设置的变量
主机范围:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量
如果在多个xekl(级别)定义了相同名称的变量,则采用优先级别最高的变量。窄范围优先于更广泛的范围:由清单定义的变量将被playbook定义的变量覆盖,后者将被命令行中定义的变量覆盖。
playbook中的变量
变量在Ansible Playbook中发挥着重要作用,因为它们可以简化playbook中变量数据的管理。
在playbook中定义变量
编写playbook时,可以定义自己的变量,然后在任务中调用这些值。
Playbook变量可以通过多种方式定义。一种常见的方式是将变量放在playbook开头的vars块中:
---
- hosts: server1
remote_user: tom
vars: //变量模块
IP: 192.168.56.199 //定义变量
NAME: node4
tasks:
- name: test
lineinfile:
path: /etc/hosts
line: "{
{ IP }} {
{ NAME }}" //如果{
{ IP }}前面有字母就不用打""
state: present
//查看结果
[root@server1 etc]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.56.130 server1
192.168.56.199 node4
也可以在playbook外部定义变量
也可以在外部文件中定义playbook变量。此时不使用playbook中的vars块,可以改为使用vars_files指令,后面跟上相对于playbook位置的外部变量文件名称列表:
//编写变量文件
[root@control book]# ls
ansible.cfg node1.yml playbook vars
[root@control book]# cat vars/time.yml
IP: 192.168.56.179
NAME: node7
//变量文件必须和清单文件在同一个级别,不然无法找到变量文件
[root@control vars]# tree /opt/book/vars/
/opt/book/vars/
├── ansible.cfg
├── host_vars
│ ├── 192.168.56.130
│ ├── node1.yml
│ └── time.yml
└── playbook
//修改文件
[root@control vars]# cat node1.yml
---
- hosts: server1
remote_user: tom
vars_files: //局外变量模块
- vars/time.yml //变量地址
tasks:
- name: test
lineinfile:
path: /etc/hosts
line: "{
{ IP }} {
{ NAM