伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

Ansible 变量

来源:本站原创 浏览:101次 时间:2022-07-23

Ansible 和其他编辑语言一样,可以通过变量来存储值,并在 Ansible 项目的所有文件中使用这些值

变量的命名规则:

  • 必须以字母开头;

  • 只能包含字母,数字和下划线;

变量范围:

Global:全局变量,在命令行中,通过 -e 参数传递;

Play:在 Playbook 中的 play 里面 通过 vars 或 vars_files 关键字定义的变量

Host:由清单中,主机或主机组中定义的变量

全局变量

编写 playbook,在该 playbook 中,我们为 apt 模块来安装软件包,并为软件包的 name 选项指定一个名为 package 的变量;

it@workstation:~/ansible$ vim test.yml it@workstation:~/ansible$ cat test.yml---- name: Install Apache  hosts: servera  tasks:    - name: Install {{ package }}      apt:        name: "{{ package }}"        state: present

* 在 play 中通过 “{{ VariableName }}”

* 在需要打印出来的字段中引用变量不需要加引号,在其他地方引用变量需要加引号,如,在 name 中引用,因为变量名与花括号之间有空格,name 不能把他们识别成一个整体,所以不加引号会报错;

运行 playbook 时,通过 -e 来指定变量名对应的值;

it@workstation:~/ansible$ ansible-playbook test.yml -e "package=apache2"BECOME password: PLAY [Install Apache] ******************************************************************************TASK [Gathering Facts] *****************************************************************************ok: [servera]TASK [Install apache2] *****************************************************************************ok: [servera]PLAY RECAP *****************************************************************************************servera                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

* 我前面已经执行过安装 Apache2 了,所以这里执行的结果是 ok,而不是 changed;

Play 变量

Play 变量就是在 playbook 中为每个 play 定义的变量,play 变量可以直接定义在 play 中,通过 vars 关键字定义;也可以定义在文件中,然后在 play 中通过 vars_files 关键字导入变量文件;

通过 vars 关键字定义变量

创建 playbook,并通过 vars 关键定义一个 user 的变量,对应的值为 Jack

it@workstation:~/ansible$ vim test.yml it@workstation:~/ansible$ cat test.yml---- name: Create User  hosts: servera  vars:    user: jack  tasks:    - name: Create a user named {{ user }}      user:        name: "{{ user }}"

运行 playbook

it@workstation:~/ansible$ ansible-playbook test.ymlBECOME password: PLAY [Create User] *********************************************************************************TASK [Gathering Facts] *****************************************************************************ok: [servera]TASK [Create a user named jack] ********************************************************************changed: [servera]PLAY RECAP *****************************************************************************************servera                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

从创建用户的 task 名称可以看到,变量 user 被其对应的值所替换;

通过文件定义变量

创建变量文件,并在文件中定义一个 user 变量,并指定值为 Jerry

it@workstation:~/ansible$ vim user.ymlit@workstation:~/ansible$ cat user.yml---user: jerry

* 注意变量文件的格式应为 yml 文件格式;

编写 playbook,在 play 中通过 vars_files 关键字来导入变量文件

it@workstation:~/ansible$ vim test.yml it@workstation:~/ansible$ cat test.yml---- name: Create User  hosts: servera  vars_files:    - user.yml  tasks:    - name: Create a user named {{ user }}      user:        name: "{{ user }}"
主机变量

编辑主机清单,在主机后面添加一个 user 变量,并指定值为 user1;

it@workstation:~/ansible$ vim hosts it@workstation:~/ansible$ cat hostsserverb user=user1[web]servera[prod:children]web

创建 playbook

it@workstation:~/ansible$ vim test.yml it@workstation:~/ansible$ cat test.yml---- name: Create User  hosts: serverb  tasks:    - name: Create a user named {{ user }}      user:        name: "{{ user }}"

运行 playbook

it@workstation:~/ansible$ ansible-playbook test.yml BECOME password: PLAY [Create User] *********************************************************************************TASK [Gathering Facts] *****************************************************************************ok: [serverb]TASK [Create a user named user1] *******************************************************************changed: [serverb]PLAY RECAP *****************************************************************************************serverb                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

变量 user 被对应的值,user1 替换了;

我们还可以在主机变量目录(host_vars)中定义主机变量文件

更改清单,删除清单中定义的变量

it@workstation:~/ansible$ vim hosts it@workstation:~/ansible$ cat hostsserverb[web]servera[prod:children]web

在 ansible 目录中创建一个 host_vars 目录,并在这个目录下以主机名创建一个 yml 文件,并在文件中指定 user 变量;

it@workstation:~/ansible$ mkdir host_varsit@workstation:~/ansible$ vim host_vars/servera.ymlit@workstation:~/ansible$ cat host_vars/servera.yml---user: user2

编辑 playbook

t@workstation:~/ansible$ vim test.yml it@workstation:~/ansible$ cat test.yml---- name: Create User  hosts: servera  tasks:    - name: Create a user named {{ user }}      user:        name: "{{ user }}"

运行 playbook

it@workstation:~/ansible$ vim test.yml it@workstation:~/ansible$ ansible-playbook test.yml BECOME password: PLAY [Create User] *********************************************************************************TASK [Gathering Facts] *****************************************************************************ok: [servera]TASK [Create a user named user2] *******************************************************************changed: [servera]PLAY RECAP *****************************************************************************************servera                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

变量 user 被对应的值,user2 替换了;

主机组变量

编辑主机清单文件,通过 [GroupName:vars] 为主机组添加变量

it@workstation:~/ansible$ vim hosts it@workstation:~/ansible$ cat hostsserverb[web]serveraserverb[prod:children]web[web:vars]user=user3

删除之前在 host_vars 目录下创建的变量文件

it@workstation:~/ansible$ rm host_vars/servera.yml

编辑 playbook

it@workstation:~/ansible$ vim test.yml it@workstation:~/ansible$ cat test.yml---- name: Create User  hosts: web  tasks:    - name: Create a user named {{ user }}      user:        name: "{{ user }}"

运行 playbook

it@workstation:~/ansible$ ansible-playbook test.yml BECOME password: PLAY [Create User] *********************************************************************************TASK [Gathering Facts] *****************************************************************************ok: [servera]ok: [serverb]TASK [Create a user named user3] *******************************************************************changed: [servera]ok: [serverb]PLAY RECAP *****************************************************************************************servera                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   serverb                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

变量 user 被对应的值,user3 替换了;

同样,你也可以通过组变量文件目录(group_vars)定义主机组变量文件

更改主机清单,删除前面创建的主机变量

t@workstation:~/ansible$ vim hostsit@workstation:~/ansible$ cat hostsserverb[web]serveraserverb[prod:children]web

创建主机组变量目录,并以组名作为文件名,创建一个 yml 格式的变量文件,并在文件中指定 user 变量,值为 user4;

it@workstation:~/ansible$ mkdir group_varsit@workstation:~/ansible$ vim group_vars/web.ymlit@workstation:~/ansible$ cat group_vars/web.yml---user: user4

创建 playbook

it@workstation:~/ansible$ vim test.yml it@workstation:~/ansible$ cat test.yml---- name: Create User  hosts: web  tasks:    - name: Create a user named {{ user }}      user:        name: "{{ user }}"

运行 playbook

it@workstation:~/ansible$ ansible-playbook test.yml BECOME password: PLAY [Create User] *********************************************************************************TASK [Gathering Facts] *****************************************************************************ok: [servera]ok: [serverb]TASK [Create a user named user4] *******************************************************************changed: [serverb]changed: [servera]PLAY RECAP *****************************************************************************************servera                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   serverb                    : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

变量 user 被对应的值,user4替换了;

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net