ansible 注册环境变量(一文详解Ansible变量)
ansible 注册环境变量(一文详解Ansible变量)* 在需要打印出来的字段中引用变量不需要加引号,在其他地方引用变量需要加引号,如,在 name 中引用,因为变量名与花括号之间有空格,name 不能把他们识别成一个整体,所以不加引号会报错;it@workstation:~/ansible$vimtest.yml it@workstation:~/ansible$cattest.yml --- -name:InstallApache hosts:servera tasks: -name:Install{{package}} apt: name:"{{package}}" state:present* 在 play 中通过 “{{ VariableName }}”Play:在 Playbook 中的 play 里面 通过 vars 或 vars_files 关键字定义的变量Host:由清单中,主机或主机组中定义的变量编写 pl
Ansible 和其他编辑语言一样,可以通过变量来存储值,并在 Ansible 项目的所有文件中使用这些值。
变量的命名规则:
- 必须以字母开头;
- 只能包含字母,数字和下划线;
变量范围:
Global:全局变量,在命令行中,通过 -e 参数传递;
Play:在 Playbook 中的 play 里面 通过 vars 或 vars_files 关键字定义的变量
Host:由清单中,主机或主机组中定义的变量
全局变量编写 playbook,在该 playbook 中,我们为 apt 模块来安装软件包,并为软件包的 name 选项指定一个名为 package 的变量;
it@workstation:~/ansible$vimtest.yml
it@workstation:~/ansible$cattest.yml
---
-name:InstallApache
hosts:servera
tasks:
-name:Install{{package}}
apt:
name:"{{package}}"
state:present
* 在 play 中通过 “{{ VariableName }}”
* 在需要打印出来的字段中引用变量不需要加引号,在其他地方引用变量需要加引号,如,在 name 中引用,因为变量名与花括号之间有空格,name 不能把他们识别成一个整体,所以不加引号会报错;
运行 playbook 时,通过 -e 来指定变量名对应的值;
it@workstation:~/ansible$ansible-playbooktest.yml-e"package=apache2"
BECOMEpassword:
PLAY[InstallApache]******************************************************************************
TASK[GatheringFacts]*****************************************************************************
ok:[servera]
TASK[Installapache2]*****************************************************************************
ok:[servera]
PLAYRECAP*****************************************************************************************
servera:ok=2changed=0unreachable=0failed=0skipped=0rescued=0ignored=0
* 我前面已经执行过安装 Apache2 了,所以这里执行的结果是 ok,而不是 changed;
Play 变量Play 变量就是在 playbook 中为每个 play 定义的变量,play 变量可以直接定义在 play 中,通过 vars 关键字定义;也可以定义在文件中,然后在 play 中通过 vars_files 关键字导入变量文件;
通过 vars 关键字定义变量
创建 playbook,并通过 vars 关键定义一个 user 的变量,对应的值为 Jack
it@workstation:~/ansible$vimtest.yml
it@workstation:~/ansible$cattest.yml
---
-name:CreateUser
hosts:servera
vars:
user:jack
tasks:
-name:Createausernamed{{user}}
user:
name:"{{user}}"
运行 playbook
it@workstation:~/ansible$ansible-playbooktest.yml
BECOMEpassword:
PLAY[CreateUser]*********************************************************************************
TASK[GatheringFacts]*****************************************************************************
ok:[servera]
TASK[Createausernamedjack]********************************************************************
changed:[servera]
PLAYRECAP*****************************************************************************************
servera:ok=2changed=1unreachable=0failed=0skipped=0rescued=0ignored=0
从创建用户的 task 名称可以看到,变量 user 被其对应的值所替换;
通过文件定义变量
创建变量文件,并在文件中定义一个 user 变量,并指定值为 Jerry
it@workstation:~/ansible$vimuser.yml
it@workstation:~/ansible$catuser.yml
---
user:jerry
* 注意变量文件的格式应为 yml 文件格式;
编写 playbook,在 play 中通过 vars_files 关键字来导入变量文件
it@workstation:~/ansible$vimtest.yml
it@workstation:~/ansible$cattest.yml
---
-name:CreateUser
hosts:servera
vars_files:
-user.yml
tasks:
-name:Createausernamed{{user}}
user:
name:"{{user}}"
主机变量
编辑主机清单,在主机后面添加一个 user 变量,并指定值为 user1;
it@workstation:~/ansible$vimhosts
it@workstation:~/ansible$cathosts
serverbuser=user1
[web]
servera
[prod:children]
web
创建 playbook
it@workstation:~/ansible$vimtest.yml
it@workstation:~/ansible$cattest.yml
---
-name:CreateUser
hosts:serverb
tasks:
-name:Createausernamed{{user}}
user:
name:"{{user}}"
运行 playbook
it@workstation:~/ansible$ansible-playbooktest.yml
BECOMEpassword:
PLAY[CreateUser]*********************************************************************************
TASK[GatheringFacts]*****************************************************************************
ok:[serverb]
TASK[Createausernameduser1]*******************************************************************
changed:[serverb]
PLAYRECAP*****************************************************************************************
serverb:ok=2changed=1unreachable=0failed=0skipped=0rescued=0ignored=0
变量 user 被对应的值,user1 替换了;
我们还可以在主机变量目录(host_vars)中定义主机变量文件
更改清单,删除清单中定义的变量
it@workstation:~/ansible$vimhosts
it@workstation:~/ansible$cathosts
serverb
[web]
servera
[prod:children]
web
在 ansible 目录中创建一个 host_vars 目录,并在这个目录下以主机名创建一个 yml 文件,并在文件中指定 user 变量;
it@workstation:~/ansible$mkdirhost_vars
it@workstation:~/ansible$vimhost_vars/servera.yml
it@workstation:~/ansible$cathost_vars/servera.yml
---
user:user2
编辑 playbook
t@workstation:~/ansible$vimtest.yml
it@workstation:~/ansible$cattest.yml
---
-name:CreateUser
hosts:servera
tasks:
-name:Createausernamed{{user}}
user:
name:"{{user}}"
运行 playbook
it@workstation:~/ansible$vimtest.yml
it@workstation:~/ansible$ansible-playbooktest.yml
BECOMEpassword:
PLAY[CreateUser]*********************************************************************************
TASK[GatheringFacts]*****************************************************************************
ok:[servera]
TASK[Createausernameduser2]*******************************************************************
changed:[servera]
PLAYRECAP*****************************************************************************************
servera:ok=2changed=1unreachable=0failed=0skipped=0rescued=0ignored=0
变量 user 被对应的值,user2 替换了;
主机组变量编辑主机清单文件,通过 [GroupName:vars] 为主机组添加变量
it@workstation:~/ansible$vimhosts
it@workstation:~/ansible$cathosts
serverb
[web]
servera
serverb
[prod:children]
web
[web:vars]
user=user3
删除之前在 host_vars 目录下创建的变量文件
it@workstation:~/ansible$rmhost_vars/servera.yml
编辑 playbook
it@workstation:~/ansible$vimtest.yml
it@workstation:~/ansible$cattest.yml
---
-name:CreateUser
hosts:web
tasks:
-name:Createausernamed{{user}}
user:
name:"{{user}}"
运行 playbook
it@workstation:~/ansible$ansible-playbooktest.yml
BECOMEpassword:
PLAY[CreateUser]*********************************************************************************
TASK[GatheringFacts]*****************************************************************************
ok:[servera]
ok:[serverb]
TASK[Createausernameduser3]*******************************************************************
changed:[servera]
ok:[serverb]
PLAYRECAP*****************************************************************************************
servera:ok=2changed=1unreachable=0failed=0skipped=0rescued=0ignored=0
serverb:ok=2changed=0unreachable=0failed=0skipped=0rescued=0ignored=0
变量 user 被对应的值,user3 替换了;
同样,你也可以通过组变量文件目录(group_vars)定义主机组变量文件
更改主机清单,删除前面创建的主机变量
t@workstation:~/ansible$vimhosts
it@workstation:~/ansible$cathosts
serverb
[web]
servera
serverb
[prod:children]
web
创建主机组变量目录,并以组名作为文件名,创建一个 yml 格式的变量文件,并在文件中指定 user 变量,值为 user4;
it@workstation:~/ansible$mkdirgroup_vars
it@workstation:~/ansible$vimgroup_vars/web.yml
it@workstation:~/ansible$catgroup_vars/web.yml
---
user:user4
创建 playbook
it@workstation:~/ansible$vimtest.yml
it@workstation:~/ansible$cattest.yml
---
-name:CreateUser
hosts:web
tasks:
-name:Createausernamed{{user}}
user:
name:"{{user}}"
运行 playbook
it@workstation:~/ansible$ansible-playbooktest.yml
BECOMEpassword:
PLAY[CreateUser]*********************************************************************************
TASK[GatheringFacts]*****************************************************************************
ok:[servera]
ok:[serverb]
TASK[Createausernameduser4]*******************************************************************
changed:[serverb]
changed:[servera]
PLAYRECAP*****************************************************************************************
servera:ok=2changed=1unreachable=0failed=0skipped=0rescued=0ignored=0
serverb:ok=2changed=1unreachable=0failed=0skipped=0rescued=0ignored=0
变量 user 被对应的值,user4替换了。
后面会分享更多ansible、k8s、docker等方面内容,感兴趣的朋友可以关注下!
*特别声明:本文为【怕水的鱼】投稿,仅代表作者观点。马哥教育仅提供信息发布平台。