首页 > 其他分享 >第三十七天:Ansible playbook变量

第三十七天:Ansible playbook变量

时间:2024-03-26 21:14:22浏览次数:17  
标签:变量 vars 主机 定义 Ansible 第三十七 facts playbook

Playbook中同样也支持变量

变量名:仅能由字母、数字和下划线组成,且只能以字母开头

变量定义:

variable=value
variable: value

变量调用方式:

通过 {{ variable_name }} 调用变量,且变量名前后建议加空格,有时用"{{ variable_name }}"才生效

变量来源:

1. ansible 的 setup facts 远程主机的所有变量都可直接调用

2. 通过命令行指定变量,优先级最高

3. 在playbook文件中定义

4. 在独立的变量YAML文件中定义

5. 在主机清单文件中定义

主机(普通)变量:主机组中主机单独定义,优先级高于公共变量 组(公共)变量:针对主机组中所有主机定义统一变量

6. 在项目中针对主机和主机组定义

在项目目录中创建 host_vars和group_vars目录

7. 在role中定义 变量的优先级从高到低如下

-e 选项定义变量 -->playbook中vars_files --> playbook中vars变量定义 -->host_vars/主机
名文件 -->主机清单中主机变量--> group_vars/主机组名文件-->group_vars/all文件--> 主机清单组变量

一、使用 setup 模块中变量

1、使用 facts 变量

本模块自动在playbook调用,生成的系统状态信息, 并将之存放在facts变量中

facts 包括的信息很多,如: 主机名,IP,CPU,内存,网卡等

facts 变量的实际使用场景案例

  通过facts变量获取被控端CPU的个数信息,从而生成不同的Nginx配置文件

  通过facts变量获取被控端内存大小信息,从而生成不同的memcached的配置文件

  通过facts变量获取被控端主机名称信息,从而生成不同的Zabbix配置文件

  通过facts变量获取被控端网卡信息,从而生成不同的主机名 ......

2、性能优化

每次执行playbook,默认会收集每个主机的所有facts变量,将会导致速度很慢,可以采用下面方法加速

  方法1 关闭facts采集加速执行,此方法将导致无法使用facts变量

- hosts: all
 gather_facts: no
方法2 当使用 gather_facts: no 关闭 facts,确实能加速 Ansible 执行,但是有时候又需要使用 facts 中的内容,还希望执行的速度快,这时候可以设置facts 的缓存,将facts变量信息存在redis服务器中
[root@ansible ~]# cat /etc/ansible/ansible.cfg
[defaults]
# smart 表示默认收集 facts,但 facts 已有的情况下不会收集,即使用缓存 facts
# implicit 表示默认收集 facts,要禁止收集,必须使用 gather_facts: False
# explicit 则表示默认不收集,要显式收集,必须使用gather_facts: True
gathering = smart              #在使用 facts 缓存时设置为smart
fact_caching_timeout = 86400   #缓存时长
fact_caching = redis           #缓存存在redis中
fact_caching_connection = 10.0.0.100:6379:0  #0表示redis的0号数据库
#若redis设置了密码
fact_caching_connection = 10.0.0.100:6379:0:password

3、在playbook 命令行中定义变量

vim var2.yml
---
- hosts: websrvs
 remote_user: root
 tasks:
   - name: install package
     yum: name={{ pkname }} state=present
[root@ansible ~]#ansible-playbook -e pkname=httpd var2.yml

4、在playbook文件中定义变量

此方式定义的是私有变量,即只能在当前playbook中使用,不能被其它Playbook共用 5、使用专用的公共的变量文件 可以在一个独立的playbook文件中定义公共变量,在其它的playbook文件中可以引用变量文件中的变量 此方式比playbook中定义的变量优化级高 6、在主机清单中定义主机和主机组的变量 所有项目的主机变量   在inventory 主机清单文件中为指定的主机定义变量以便于在playbook中使用 所有项目的组(公共)变量   在inventory 主机清单文件中赋予给指定组内所有主机上的在playbook中可用的变量,如果和主机变是同名,优先级低于主机变量 7、针对当前项目的主机和主机组的变量 上面的方式是针对所有项目都有效,而官方更建议的方式是使用ansible特定项目的主机变量和组变量生产建议在每个项目对应的目录中创建额外的两个变量目录,分别是host_vars和group_vars   host_vars下面的文件名和主机清单主机名一致,针对单个主机进行变量定义         格式:host_vars/hostname   group_vars下面的文件名和主机清单中组名一致, 针对单个组进行变量定义         格式: gorup_vars/groupname   group_vars/all文件内定义的变量对所有组都有效 8、register 注册变量 在playbook中可以使用register将捕获命令的输出保存在临时变量中,方便后续调用此变量,比如可以使用debug模块进行显示输出                

 

 

 

标签:变量,vars,主机,定义,Ansible,第三十七,facts,playbook
From: https://www.cnblogs.com/dujy/p/18095347

相关文章

  • 第三十七天:Ansible playbook基础
    一、playbook介绍1、Playbook组成一个playbook(剧本)文件是一个YAML语言编写的文本文件通常一个playbook只包括一个play一个play的主要包括两部分:主机和tasks.即实现在指定一组主机上执行一个tasks定义好的任务列表。一个tasks中可以有一个或多个task......
  • Linux架构26 playbook实战, 安装数据库, 网站迁移, ansible变量
    Ansibleplaybook实战1.基础准备#1.安装ansible[root@m01~]#yuminstall-yansible#2.配置ansible[root@m01~]#vim/etc/ansible/ansible.cfghost_key_checking=False#这个解开注释#3.配置主机清单[root@m01~]#vim/etc/ansible/hosts[web_group]we......
  • ceph:在centos7 上通过 ceph-ansible 安装ceph 14
    安装本质上就是熟悉ceph-ansible工具的各种配置关系:哪些时必须的?默认值来自哪里?各种配置分散在哪些配置文件内?...../site.yml./group_vars/all.yml  ./group_vars/其他各种组件特定的.yml  注意:all.yml里的配置很大部分时依赖于site.yml的配置的。根据需要进行配置。 ......
  • ansible-role角色
    ansible-role角色官网文档https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.htmlansible-role的实际理念为什么要用role把单个的大剧本,拆分为小剧本,便于维护,修改、使用完成解耦、结构更清晰、调试更方便如果是小部署,还是剧本更方便大型项......
  • PlayBook 详解
    4)Playbook4.1)Playbook介绍PlayBook与ad-hoc相比,是一种完全不同的运用Ansible的方式,类似与Saltstack的state状态文件。ad-hoc无法持久使用,PlayBook可以持久使用。PlayBook剧本是由一个或多个"Play"组成的列表Play的主要功能在于将预定义的一组主机,装扮成事先......
  • 第三十六天:Ansible安装和常见问题
    一、自动化运维应用场景1、运维职业发展路线2、企业实际应用场景分析DEV开始环境-》测试环境-》预发布环境-》发布环境-》生产环境-》灰度环境3、常见自动化运维工具Ansible:python,Agentless,中小型应用环境Saltstack:python,一般需部署agent,执行效率更高Puppet:ruby,功能强......
  • Ansible
    1.Ansible发展作者:MichaelDeHaan(Cobblerpxekikstar与Func作者)ansible的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具,使用它可以在相距数光年的距离,远程实时控制前线的舰队战斗2012-03-09,发布0.0.1版,2015-10-17,RedHat宣布1.5亿美元收购。官网:https://ww......
  • 运维自动化-Ansible
    关于运维自动化相关工具:代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion构建工具:maven、Ant、Gradle自动部署:Capistrano、CodeDeploy持续集成(CI):Jenkins、Travis配置管理:Ansible、SaltStack、Chef、Puppet容器:Docker、Podman、LXC、第三方厂商如AWS编排:Kube......
  • 【ansible】ansible的介绍和安装
    前言运维自动化云计算核心职能搭建平台架构日常运营保障性能效率优化相关工具代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion构建工具:maven、Ant、Gradle自动部署:Capistrano、CodeDeploy持续集成(CI):Jenkins、Travis配置管理:Ansible、SaltStack、Chef、P......
  • Ansible报错:Failed to parse /etc/ansible/hosts with yaml plugin
    早上接到同事反馈说Grafana某个监控图表点击后反应很慢,其他的图表都正常,只有这一张图表很慢。经过和大数据部门同事的沟通,发现应该是从大数据系统推送出来的数据有点问题,需要联合Grafana机器进行调试,询问我Grafana部署在哪台机器上。由于公司不同区域都有一套Prometheus+Grafana......