Ansible中vars(变量)定义

15 篇文章 0 订阅
13 篇文章 0 订阅

1、变量使用的原因

playbook的编写是使用yml的语法,虽然该语法规则较为简单,但是,同其他语法相同该语法也有变量、循环等机制的使用。变量的使用就是为了提高我们所写剧本的复用性(当某个参数更改时,直接更改变量的赋值,无需更改剧本中的每一处),从而提高工作效率。

2、变量定义的范围及优先级

2.1 变量的范围:

      1、 全局范围: 在名两行设置的ansible的变量值

      2、 playbook范围:在playbook和相关文件中设置的变量

      3、 主机范围: 由清单、事实手机或注册的任务,在相应的主机中生效

                   主机变量分为:

                         2.1.3.1  主机变量,应用于特定主机

                         2.1.3.2  组变量,应用于一个主机组或者一组主机组中的所有主机

2.2 变量的优先级:

      在定义多级别变量下,变量范围窄的‘窄的’优先级高于 ‘广泛’的,其中主机变量优先于组变量;playbook范围下的优先级最高。

3、变量的定义方式

3.1 变量的命名方式

       变量在定义时可含有:数字、字母、下换线,但数字下划线不能开头;

3.2  常见方式的定义

#playbook中直接定义
- name: var test
  hosts: web
  vars:
    user: student
    home: /home/student

#在文件中定义,写入playbook中
- name: file's var
  vars_files:         ## 变量写入文件即可
   - users.yml

 3.3 主机变量的定义:

#定义主机变量
[servera]
servera.linux.com  ansible_user_var=student     ##直接跟在主机后,以字典的方式定义
#定义主机组变量
[serverb]
serverb.linux.com
serverb.redhat.com

[serverb:vars]               ##先定义主机组,在写组的同时添加变量标识
user=student                 ##在该组标识下以字典方式定义

在定义主机组时,也可以嵌套的方式定义

#编写主机组
[group1]
group1.linux.com

[group2]
group2.example.com

[group:children]
group1
group2

#嵌套变量定义
[group:vars]   ##用var进行标识
user=studen    ##以字典方式定义

在定义变量组时,我们会发下上述方法的定义会使inventory清单变得混乱,所以现在常采用的放法是以文件的方式进行定义,然后直接调用(该变量清单需要和inventory清单在同一级别,且名称需要相互匹配),主机变量清单的名称为:host_vars ;主机组变量清单的名称为: group_vars/groupname:

#主机变量结构
[root@contral var]# tree .
.
├── ansible.cfg
├── group_var     ##主机组变量
│   └── servers
├── host_var      ##主机变量
├── inventory

3.4 以数组的方式进行定义:

---
- name: iteration test
  hosts: all
  vars:             ###以数组的方式进行定义
    users:
     lilei:
        firstname: lei
         lastname: li
         homedir: /home/lilei

上述变量的定义均以字典的方式进行定义的,关键字:值 (关键字为变量名称,值为变量所附的值)

4、变量的调用

 4.1 常规调用

#定义变量  
vars:
    user: student
#任务中的调用
  tasks:
    - name: Create user {{ user }}
      debug: msg="The var is {{ user }}"

 4.2 数组方式时的调用

#伪代码,只展示数组方式的调用
--
   ...  
 tasks:
     - name: debug
       debug: msg="This var is {{ users['lilei'] }}"  ##以递归的方式进行调用
#      debug: msg= "This var is {{ users.lilei }}"    ##以字典的方式调用
 
 ...    

【注】当代码是以变量开头时,必须以 “{{}}”格式调用。

5、整体模块练习

配置Apache服务的默认发布页

  1 ---
  2 - name: Installed Apache
  3   hosts: all
  4   vars:                            ###变量编写
  5     web_pkg: httpd
  6     firewall_pkg: firewalld
  7     web_service: httpd
  8     firewall_service: firewalld
  9     python_pkg: python
 10     rule: http
 11   tasks:                             ##执行任务
 12     - name: Required packages are installed
 13       yum:                           ##安装对应的软件包
 14         name:
 15           - "{{ web_pkg }}"
 16           - "{{ firewall_pkg }}"
 17           - "{{ python_pkg }}"
 18         state: latest
 19     - name: The {{ web_pkg }} service is start       ##开启网络服务
 20       service:
 21         name: "{{ web_pkg }}"
 22         state: started
 23         enabled: true
 24     - name: The {{firewall_pkg }} service is start    ##开启火墙服务
 25       service:
 26         name: "{{ firewall_pkg }}"
 27         state: started
 28         enabled: true
 29     - name: Web content is in place        ##修改注默认发布页
 30       copy:
 31         content: "HELLOW LINUX!!!"         ##输入内容
 32         dest: /var/www/html/index.html     ##目的地
 33     - name: The firewall port for {{ rule }} ##配置火墙服务
 34       firewalld:
 35         service: "{{ rule }}"
 36         permanent: true
 37         immediate: true
 38         state: enabled
 39 - name: Veritfy the Apache service        ##当前主机检测
 40   hosts: localhost
 41   become: false
 42   tasks:
 43     - name: Ensre the web service
 44       uri:
 45         url: http://servera.linux.com
 46         status_code: 200
 47 
 48 ...

 结果:登录servera 查看目录文件

运行结果

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值