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

    你可能感兴趣的文章
    Python中信号处理程序和atexit处理程序的调用
    查看>>
    Python中关于txt的简单读写模式与操作
    查看>>
    Python中关于类和函数的初体验之"__init__"和"__str__"不是"_init_"和"_str_"
    查看>>
    python中函数接受参数为*args, **kwargs怎么办
    查看>>
    Python中切片的高效迭代
    查看>>
    python中列表乘法、eval、lambda、hasattr、assert、*(星)等的用法
    查看>>
    Python中制作词云的WordCloud参数详解
    查看>>
    Python中可用和使用的系统内存?
    查看>>
    python中存根文件(.pyi)的用途是什么?
    查看>>
    Python中实现ASCII码与字符相互转换
    查看>>
    Python中实现获取所有微信好友的头像并拼接成一张图片
    查看>>
    Python中对象的布尔值
    查看>>
    python中对集合的操作
    查看>>
    python中将列表转换为元组的时间复杂度,反之亦然
    查看>>
    Python中布尔表达式的求值
    查看>>
    python中很常用的10个内置函数整理(初学必备)
    查看>>
    python中打印二维列表数据
    查看>>
    python中打散数组shuffle
    查看>>
    Python中执行外部命令
    查看>>
    Python中拼接numpy数组-ChatGPT4o作答
    查看>>