playbook 变量

playbook 变量

1. 变量介绍

Ansible支持利用变量来存储值,并在Ansible项目的所有文件中重复使用这些值。这可以简化项目的创建和维护,并减少错误的数量。

通过变量,可以轻松地在Ansible项目中管理给定环境的动态值。例如,变量可能包含下面这些值:

  • 要创建的用户
  • 要安装的软件包
  • 要重新启动的服务
  • 要删除的文件
  • 要从互联网检索的存档

2. 定义变量

  • 变量的名称必须以字母开头,并且只能包含字母、数字和下划线
2.1 可以在Ansible项目中的多个位置定义变量。为三个范围级别:
  • 全局范围:从命令行或Ansible配置设置的变量
  • Play范围:在play和相关结构中设置的变量
  • 主机范围:由清单、事实收集或注册的任务,在主机组和个别主机上设置的变量

2.2 定义

[root@129a httpd]# ls
ansible.cfg  group_vars  install.yml  vars
files        host_vars   inventory    web
[root@129a httpd]# cd vars/
[root@129a vars]# ls
httpd
[root@129a vars]# cat httpd 
web: httpd
[root@129a vars]# vim httpd 
[root@129a vars]# cat httpd 
web: httpd
user: apache
[root@129a vars]# 

vars:
  user: joe
  
tasks:
  # This line will read: Creates the user joe
  - name: Creates the user {{ user }}
    user:
      # This line will create the user named joe
      name: "{{ user }}"

3. 主机变量和组变量

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

    • 主机变量,应用于特定主机
    • 组管理,应用于一个主机组或一组主机组中的所有主机
  • 主机变量优先于组变量,但playbook中定义的变量的优先级比这两者更高。

[root@129a httpd]# ls
ansible.cfg  group_vars  install.yml  vars
files        host_vars   inventory    web
[root@129a httpd]# vim inventory 
[root@129a httpd]# cat inventory 
[webservers]
130h 
132a
133b

[webservers:vars]
ansible_user=root 
ansible_password=run123456
[root@129a httpd]# 

[root@129a httpd]# vim group_vars/webservers 
[root@129a httpd]# cat group_vars/webservers 
ansible_user: root
ansible_password: run123456
[root@129a httpd]# vim host_vars/130h 
[root@129a httpd]# cat host_vars/130h 
ansible_user: root
ansible_password: run123456
[root@129a httpd]# 

4. 从命令行覆盖变量

  • 清单变量可被playbook中设置的变量覆盖,这两种变量又可通过在命令行中传递参数到ansible或ansible-playbook命令来覆盖。在命令行上设置的变量称为额外变量。
  • 当需要覆盖一次性运行的playbook的变量的已定义值时,额外变量非常有用
ansible-playbook main.yml -e "package=apache2"
ansible-playbook all -e "ansible_password=run123456" -m ping

5. 数组

  • 除了将同一元素相关的配置数据(软件包列表、服务列表和用户列表等)分配到多个变量外,也可以使用数组。这种做法的一个好处在于,数组是可以浏览的
users:
  bjones:
    first_name: Bob
    last_name: jones
    home_dir: /users/bjones
  acook:
    first_name: Anne
    last_name: Cook
    home_dir: /users/acook


[root@129a httpd]# vim vars/httpd 
[root@129a httpd]# cat vars/httpd 
lamp:
  pkg:
    web: httpd
    database: mariadb
    application: php
[root@129a httpd]# 
用这样引用 
{{ lamp.pkg.web }} 
或
{{ lamp["pkg"]["web"] }} 最好使用这个
  • 如果键名与python方法或属性的名称(如discard、copy和add)相同,点表示法可能会造成问题。使用中括号表示法有助于避免冲突和错误。

  • 但要声明的是,上面介绍的两种语法都有效,但为了方便故障排除,建议在任何给定Ansible项目的所有文件中一致地采用一种语法,不要混用。

6. 使用已注册变量捕获命令输出

  • 可以使用register语句捕获命令输出。输出保存在一个临时变量中,然后在playbook中可用于调试用途或者达成其他目的,例如基于命令输出的特定配置。
[root@129a httpd]# vim test.yml
[root@129a httpd]# cat test.yml 
---
- hosts: all
  tasks:
    - name: test
      command: "ls /root/"
      register: result

    - debug: var=result  
[root@129a httpd]# 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值