博客
关于我
Ansible 剧本变量 -01
阅读量:556 次
发布时间:2019-03-09

本文共 3287 字,大约阅读时间需要 10 分钟。

Ansible 剧本变量

一、变量的介绍

1. 概述

在Ansible的-playbook中,变量为管理动态值提供了便捷的方式。例如,若在多处反复使用nginx-1.6.3这样的软件包版本,可以将其设置为变量,在其他playbook中调用,便于维护且减少维护成本。

2. 定义变量的方式

定义变量可通过以下方式进行:

  • 命令行定义

    使用-e选项在命令行指定变量值。

  • 在-playbook文件中定义

    在任务模块下或在vars块中定义变量,例如:

    vars:  packages:    - tree

    备注:模块下的变量仅适用于该模块的任务。

  • 通过Inventory主机清单定义

    在主机清单的组或整合组中定义变量,如[db_server:vars]web=httpd,只能在该组使用该变量。

  • 通过vars_file定义

    vars_file中定义变量,便于多个playbook共享。例如:

    vars_files:  - ./vars.yml
  • 通过host_vars和group_vars定义

    创建host_varsgroup_vars目录,分别在主机名称和主机组名称下存放变量文件。例如:

    mkdir host_vars group_vars

    确保文件名与主机清单中的主机名或组名一致。

  • 3. 变量的优先级

    在不同定义方式中若变量冲突,其优先级顺序为:

    1. 命令行定义 > 2. playbook文件定义 > 3. Inventory主机清单定义 > 4. vars_file定义 > 5. host_vars和group_vars定义

    变量命名规则:变量名以字母开头,允许字母、数字和下划线。

    二、变量的定义

    1. 在-playbook文件中定义变量

    可以在任务模块下或在vars块中定义变量。

    方式一:在模块下定义变量

    tasks:  - name: install tree server    yum:      name: "{packages}"    vars:      packages:        - tree

    方式二:在hosts下定义变量

    hosts: nfs_groupvars:  packages:    - treetasks:  - name: install tree server    yum:      name: "{packages}"    vars:      packages:        - tree

    注意事项

  • 模块下定义变量仅在该模块使用。
  • hosts下定义变量只对该主机组生效。
  • 2. 通过vars_file定义变量

    在多个playbook中共享变量,例如:

    vars_files:  - ./vars.yml

    变量文件示例:

    web: httpddb: tree

    通过vars_file调用的示例

    hosts: nfs_groupvars_files:  - /root/vars.ymltasks:  - name: Installed http Server    yum: name: "{web}"

    三、通过Inventory主机清单定义变量

    主机清单中定义变量优先级高于整合组。

    配置主机清单

    vim /etc/ansible/hosts[db_server]db01 ansible_ssh_pass='123'[db_server:vars]web=httpd

    调用示例

    hosts: db_servertasks:  - name: Touch File    file: path: /tmp/{web} state: touch

    注意事项

  • 主机清单中的变量仅对该主机组有效。
  • 主机定义的变量优先级高于主机组定义的变量。
  • 四、通过hosts_vars和group_vars定义变量

    在Ansible项目目录下创建host_varsgroup_vars目录:

    mkdir host_vars group_vars

    主机组定义变量

    vim group_vars/web_grouppackages: []file: group_vars

    主机定义变量

    vim host_vars/web01file: host_vars

    调用示例

    hosts: web_groupvars_files: group_varstasks:  - name: Touch File    file: path: /tmp/{file} state: directory

    五、命令行定义变量

    通过-e选项在命令行指定变量:

    ansible-playbook test.yml -e "file=minglinghang"

    指定多个变量

    ansible-playbook test.yml -e "file=command" -e "file2=command2"

    六、直接使用内置变量

    查看内置变量

    ansible 'web_group' -m setup

    示例:创建时间备份目录

    - hosts: nfs_group  tasks:    - name: Touch File      file: path: /backup/{ansible_fqdn}_{ansible_eth1.ipv4.address}_{ansible_date_time.date} state: directory

    七、内置变量常用方式

    配置文件生成

    vim /etc/redis.confbind {ansible_eth1.ipv4.address}

    playbook示例

    hosts: web_grouptasks:  - name: install redis server    yum: name: redis  - name: config redis    template: src: /root/mm/redis.conf dest: /etc/

    八、变量注册

    使用ad-hoc模式获取返回结果

    ansible web01 -m shell -a 'df -h' web01 | success | rc=0 >> output.log

    注册变量示例

    - name: Touch File  shell: "df -h"  register: get_dir_list- name: Get Register  debug: msg: "{get_dir_list}"

    九、变量注册的常见场景

    例如,检查PHP安装状态并自动安装:

    - name: Tar php Package  unarchive: src: /root/package/php.tar.gz dest: /tmp/- name: Check php Install Status  shell: "rpm -qa | grep php | wc -l" register: get_php_instll_status- name: Install php Server  shell: "yum localinstall -y /tmp/*.rpm" when: get_php_instll_status.stdout_lines == 0

    十、facts缓存

    获取主机信息并生成配置文件

    vim /etc/redis.confbind {ansible_eth1.ipv4.address}

    关闭facts缓存(仅使用内置变量时关闭)

    - hosts: web_group  gather_facts: no  tasks:    - name: redis server install      yum: name: redis state: present

    广泛应用场景

  • 根据主机CPU和内存生成Nginx配置文件。
  • 根据主机名生成Redis配置文件。
  • 根据物理机内存生成MySQL配置文件。
  • 转载地址:http://hausz.baihongyu.com/

    你可能感兴趣的文章
    OAuth2.0_JWT令牌-生成令牌和校验令牌_Spring Security OAuth2.0认证授权---springcloud工作笔记148
    查看>>
    OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
    查看>>
    OAuth2.0_介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记137
    查看>>
    OAuth2.0_完善环境配置_把资源微服务客户端信息_授权码存入到数据库_Spring Security OAuth2.0认证授权---springcloud工作笔记149
    查看>>
    OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
    查看>>
    OAuth2.0_授权服务配置_令牌服务和令牌端点配置_Spring Security OAuth2.0认证授权---springcloud工作笔记143
    查看>>
    OAuth2.0_授权服务配置_客户端详情配置_Spring Security OAuth2.0认证授权---springcloud工作笔记142
    查看>>
    OAuth2.0_授权服务配置_密码模式及其他模式_Spring Security OAuth2.0认证授权---springcloud工作笔记145
    查看>>
    OAuth2.0_授权服务配置_资源服务测试_Spring Security OAuth2.0认证授权---springcloud工作笔记146
    查看>>
    OAuth2.0_环境介绍_授权服务和资源服务_Spring Security OAuth2.0认证授权---springcloud工作笔记138
    查看>>
    OAuth2.0_环境搭建_Spring Security OAuth2.0认证授权---springcloud工作笔记139
    查看>>
    oauth2.0协议介绍,核心概念和角色,工作流程,概念和用途
    查看>>
    OAuth2授权码模式详细流程(一)——站在OAuth2设计者的角度来理解code
    查看>>
    oauth2登录认证之SpringSecurity源码分析
    查看>>
    OAuth2:项目演示-模拟微信授权登录京东
    查看>>
    OA系统多少钱?OA办公系统中的价格选型
    查看>>
    OA系统选型:选择好的工作流引擎
    查看>>
    OA让企业业务流程管理科学有“据”
    查看>>
    OA项目之会议通知(查询&是否参会&反馈详情)
    查看>>
    OA项目之我的会议(会议排座&送审)
    查看>>