ansible自动化运维(3)

4.管理变量和事实
将playbook中的某些值使用变量代替,从而
简化playbook的编写
######管理变量######
#ansible变量简介

变量可能包含下面这些值:
要创建的用户、
要安装的软件包、
要重启的服务、
要删除的文件、
要从互联网检索的文档


#命名变量

变量名称必须以字母开头,并且只能含有字母、数字和下划线
错误                  正确
web server     web_server
westos.file     remote_file

1stfile              file1

#定义变量

三个范围级别
全局范围:从命令行或ansible配置设置的变量
play范围:在play和相关结构中设置的变量
主机范围:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量
注意:如果多个级别上定义了相同名称的变量,优先采用级别最高的变量,窄范围优先于广范围

playbook中的变量
#在playbook中定义变量
1.常见方式:在playbook开头的vars块中:

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

2.在外部文件定义playbook变量

- hosts: all
  vars_files:
    - vars/users.yml
在users.yml文件中写入
user: student
home: /home/student
#在playbook中使用变量
将变量名称放在花括号内即可
vars:
  user: westos
tasks:
  - name: Create user {
  { user }}
    user:
      name: "{
  { user }}"
'注意:当变量用作开始一个值的第一元素时,必须使用引号,否则会报错'

#主机变量和组变量

直接应用于主机的清单变量分为两大类:

1.主机变量:应用于特定主机
2.组变量:应用于一个主机组或一组主机组中的所有主机
主机变量优先于组变量,但是playbook中定义的变量比这两者更高

定义主机变量和组变量:
---方法一(比较旧,不建议采用):

定义server1.example.com的ansible_user主机变量:
[webservers]
server1.example.com ansible_user=student
定义dbservers主机组的user组变量:
[dbserver]
dbserver1.example.com
dbserver2.example.com
[dbservers:vars]
user=student
定义嵌套组user变量:
[servers1]
node1.example.com
node2.example.com

[servers2]
node3.example.com
node4.example.com
[servers:children]
servers1
servers2
[servers:vars]
user=student

注意:这种做法使的清单文件难以处理,在同一文件中混合提供主机和变量信息,语法也过时
---方法二:使用目录填充主机和组变量

定义主机和主机组变量的首选做法时与清单文件或目录相同的工作目录中,创建group_vars
和host_vars两个目录,这两个目录分别包含用于定义组变量和主机变量的文件
创建group_vars/servers的YAML文件,设置变量为值:
user:student
同样需要在host_vars目录中创建名称与主机匹配的文件来存放主机变量
所以一个项目目录中包含:
ansible.cfg、group_vars、host_vars、inventory、playbook.yml
#从命令行覆盖变量
清单变量可以被playbook中设置的变量覆盖
两者又可通过命令行参数覆盖
#使用数组作为变量

users:
  lilei:
    first_name: lei
    last_name: li
    home_dir: /home/lilei
  hanmeimei:
    first_name: meimei
    last_name: han
    home_dir: /home/hanmeimei

访问:

users.lilei.first_name
users.hanmeimei.home_dir

变量被定义为python字典,可以使用替代语法:

users['lilei']['first_name']

users['hanmeimei']['home_dir']

#使用已注册变量捕获命令输出
管理员可以使用register语句捕获命令输出

[root@workstationdeploy-adhoc]#catplaybook.yml

---
- name: Install a packages
  hosts: all
  tasks:
    - name: Install
      yum:
        name: httpd
        state: installed
      register: install_result
    - debug: var=install_result
... 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值