魔法变量

Ansible默认会提供一些内置的变量以实现一些特定的功能,我们称之为魔法变量。下面列举一些常用的魔法变量。

1. hostvars

获取某台指定的主机的相关变量。如果有一台web服务器的配置文件中需要指定db服务器的ip地址,我们假定这台db服务器的hostname为db.exmaple.com,ip地址绑定在eth0网卡上,我们可以通过如下方法在web服务器上调用db服务器的ip地址:

{{ hostvars['db.example.com'].ansible_eth0.ipv4.address }}

需要注意的是db.example.com不能使用ip地址来取代,只能使用主机名或别名。

2. inventory_hostname

inventory_hostname是Ansible所识别的当前正在运行task的主机的主机名。如果在inventory里定义过别名,那么这里就是那个别名,如果inventory包含如下一行:

server1 ansible_ssh_host=192.168.1.1

inventory_hostname即为server1

利用hostvarsinventory_hostname变量,可以输出与当前主机相关联的所有变量:

- debug: var=hostvars[inventory_hostname]

与inventory_hostname相近的还有一个inventory_hostname_short,如果一台主机的inventory_hostname为server1.exmaple.com,则inventory_hostname_short的值为server1

3. group_names

用于标识当前正在执行task的目标主机位于的主机组。假如我们有三台主机,用来配置成一主二从的mysql服务器。inventory配置如下:

[mdb]
db1
[sdb]
db2
db3

mysql配置文件my.conf.j2示例如下:

#我们知道db1在mdb组,当db1与当前正在执行任务的主机位于同一组时,我们认为当前主机即在mdb组,所以对当前主机应用mysql master的配置
{% if 'db1' in group_names %}
[mysqld]
server-id=1
log-bin=mysql-bin
log-bin-index=mysql-bin.index
sync-binlog=1
innodb_flush_log_at_trx_commit=1
#当db1与当前主机不在同一组时,则认为当前主机不在mdb组,即应用my slave的配置
{% else %}
[mysqld]
server-id=2
relay-log=relay-log
relay-log-index=relay-log.index
read-only = yes
sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1
relay_log_recovery = 1
skip_slave_start
{% endif %}

我们执行如下task:

- name: copy config file to mysql master
template: src=my.conf.j2 dest=/etc/my.cnf

4. groups

groups是inventory中所有主机组的列表,可用于枚举主机组中的所有主机。

假如我们有一个inventory文件定义如下:

[web]
server1
server2

在配置一台HAproxy的负载均衡器时,我们的配置文件肯定需要web主机组的所有服务器的IP,配置文件包含如下片段:

backend web-backend
{% for host in groups.web%}
server {{host.inventory_hostname}} {{ host.ansible_default_ipv4.address }}:80
{% endfor %}

最终生成的文件如下:

backend web-backend
server server1 192.168.1.1:80
server server2 192.168.1.2:80

再给一个例子,在所有的dbservers组的服务器上创建一个数据库用户kate:

- name: Create a user for all db servers
mysql_user: name=kate password=test host={{ hostvars.[item].ansible_eth0.ipv4.address }} state=present
with_items: groups['dbservers']

5. play_hosts

当前playbook会在哪些hosts上运行

6. inventory_dir

主机清单所在目录

7. inventory_file

主机清单文件

Ansible10:Playbook的角色及包含的更多相关文章

  1. Ansible10:Playbook的角色与包含【转】

    当单个playbook文件越来越大的时候,我们就需要重新来组织Playbooks了.我们可以将一个大的playbook拆成若干个小的playbook文件,然后通过include的方式,在主配置文件中将 ...

  2. Ansible11:变量详解【转】

    一.在Inventory中定义变量 详见<Ansible2:主机清单> 二.在Playbook中定义变量 1.通过vars关键字定义: vars: http_port: 80 server ...

  3. Ansible之playbook

    简介 playbook是一个非常简单的配置管理和多主机部署系统.可作为一个适合部署复杂应用程序的基础.playbook可以定制配置,可以按指定的操作步骤有序执行,支持同步和异步方式.playbook是 ...

  4. Ansible playbook roles

    1  概述 角色(roles):如果我们使用playbook写成一个文件,这个文件会很大,但是不方便组织,我们可以分组,把playbook根据功能,如handler,tasks等分门别类的放在在各自的 ...

  5. devops工具-Ansible进阶playbook&roles

    一.playbook介绍     playbook 是 Ansible 管理配置.部署应用的核心所在,一个playbook由有多“play组成”,而一个play实际就是一个task,每个task是由多 ...

  6. ansible基础-ansible角色的使用

    ansible基础-ansible角色的使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们建议把多个节点都会用到的功能将其定义模块,然后谁要用到该模块就直接调用即可!而在a ...

  7. Ansible Playbook Variables

    虽然自动化存在使得更容易使事情重复,但所有的系统可能不完全一样. 在某些系统上,您可能需要设置一些与其他操作略有不同的行为或配置. 此外,一些观察到的远程系统的行为或状态可能需要影响如何配置这些系统. ...

  8. Ansible_描述角色结构

    一.利用角色构造ansible playbook 1.What's 角色 1️⃣:Ansible角色提供了一种方法,让用户能以通用的方式更加轻松地重复利用Ansible代码. 我们可以在标准化目录结构 ...

  9. centos下安装ansible自动化工具(超详细,包含基本使用)

    ansible官网:https://www.ansible.com 众所周知,ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef ...

随机推荐

  1. Linux环境下Web环境搭建——Nginx

    1.安装依赖 yum -y install make gcc gcc-c++ ncurses-devel  ##编译环境 yum -y install zlib zlib-devel openssl ...

  2. web12 使用map型的request、session、application

    电影网站:www.aikan66.com 项目网站:www.aikan66.com 游戏网站:www.aikan66.com 图片网站:www.aikan66.com 书籍网站:www.aikan66 ...

  3. Python写一个根据日期计算是星期几的模块

    import datetimedef get_week_day(date): week_day = { 0: '星期一', 1: '星期二', 2: '星期三', 3: '星期四', 4: '星期五' ...

  4. Java导出引用jar包的文件

    安装Eclipse打包插件Fat Jar      方案一对于含有较多第三方jar文件或含有第三方图片资源等就显得不合适,太繁琐.这时可以使用一个打包的插件-Fat Jar.      Fat Jar ...

  5. 我现在对Git的认识

    由于时间关系,我还没能真正的了解什么是Git,只是大致的了解了一下,并且在网上查阅了资料,做了一些总结,以便进一步研读. Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项 ...

  6. Scrum 项目 3.0

    -------------------------------------3.0----------------------------------------------------- 一.项目工作 ...

  7. TiDB注意事项

    公司最近在上测试的TiDB集群,这款数据库类似MySQL,但又不完全一致,在使用的时候有一下注意事项,在这里记录一下.

  8. Print Nodes in Top View of Binary Tree

    Top view of a binary tree is the set of nodes visible when the tree is viewed from the top. Given a ...

  9. jmeter 正则表达式提取

    引用名称:自己定义的变量名称,后续请求将要引用到的变量名,如填写的是:id,后面的引用方式是${id} 正则表达式:提取内容的正则表达式,相当于lr中的关联函数 [()     括起来的部分就是需要提 ...

  10. Swagger实现API文档功能

    介绍: wagger也称为Open API,Swagger从API文档中手动完成工作,并提供一系列用于生成,可视化和维护API文档的解决方案.简单的说就是一款让你更好的书写API文档的框架. 我们为什 ...