博客
关于我
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/

    你可能感兴趣的文章
    Oracle创建database link(dblink)和同义词(synonym)
    查看>>
    oracle创建数据库的步骤
    查看>>
    Oracle创建用户、角色、授权、建表
    查看>>
    Oracle创建用户与授予表空间与权限
    查看>>
    oracle创建表(并且实现ID自增)
    查看>>
    oracle创建视图与生成唯一编号
    查看>>
    oracle删除重复数据保留第一条记录
    查看>>
    oracle判断空值的函数nvl2,【PL/SQL】 NVL,NVL2,COALESCE 三种空值判断函数
    查看>>
    Oracle发布VirtualBox 7.1稳定版!支持ARM、优化了UI、支持Wayland等
    查看>>
    oracle启动三步
    查看>>
    oracle启动关闭服务,启动关闭oracle服务.bat
    查看>>
    Oracle命令行创建数据库
    查看>>
    Oracle和SQL server的数据类型比较
    查看>>
    oracle和sybase的一些区别
    查看>>
    oracle在日本遇到的技术问题
    查看>>
    Oracle在线重定义
    查看>>
    oracle基础 管理索引
    查看>>
    Oracle增量跟新
    查看>>
    oracle备份恢复之rman恢复到异机
    查看>>
    oracle复习(一)
    查看>>