ansible 变量

场景

高度定制化的场景

格式一致,内容不一致

为每个 主机 设定不同的属性如:hostname

setup 模块查看主机属性

ansible localhost -m setup
ansible localhost -m setup -a 'filter=*host*'
ansible localhost -m setup -a 'filter=*host*' -o

变量表现形式

设定变量

变量名=变量值

例:
nginx_port=80

获取变量

{{ nginx_port }}

实现方式

  • 1、目标主机默认属性
  • 2、主机清单中定义的特有属性
  • 3、命令行定义的特定属性
  • 4、playbook 中定义的特定属性
  • 5、专用yaml定义的特定属性

优先级 1 < 2 < 4 < 5 < 3

基于ansible主机属性定制操作

setup 模块中的变量

ansible localhost -m setup -a

setup 模块中获取到的主机变量可以直接当变量使用

ansible localhost -m setup -a "filter=ansible_all_ipv4_addresses"

使用 setup 中的变量

---
- hosts: all
  remote_user: root
  tasks:
    - name: create file
      file: name=/var/log/{{ ansible_all_ipv4_addresses }}.log state=touch

在 /etc/ansible/hosts 中定义变量

定义变量

  • 公共变量

针对所有主机或主机组中所有主机列表定义统一变量

[web_group:vars]
var1=value1
var2=value2
  • 普通变量

针对单个目标主机定义变量

192.168.8.14 nginx_port=81

ps: 普通变量公共变量 优先级高

使用变量

---
- hosts: all
  remote_user: root
  tasks:
    - name: create file
      # 这个变量来自 ansible 自带的变量,所有能从 setup 模块直接获取的属性都能 直接当做变量使用
      file: name=/var/log/{{ ansible_fqdn }}.log state=touch owner=daemon

实践

普通变量

配置

  • /etc/ansible/hosts
[web]
192.168.8.14 hostid=14
192.168.8.15 hostid=15
192.168.8.16 hostid=16
  • hostname.yaml
---
- hosts: web
  remote_user: root
  tasks:
    - name: create hostname
      hostname: name=ansible{{ hostid }}

执行

ansible-playbook -C hostname.yaml
ansible-playbook hostname.yaml

公共变量

配置

  • /etc/ansible/hosts
[web]
192.168.8.14 hostid=14
192.168.8.15 hostid=15
192.168.8.16 hostid=16

[web:vars]
head=www.
tail=.example
  • hostname.yaml
---
- hosts: web
  remote_user: root
  tasks:
    - name: create hostname
      hostname: name={{ head }}ansible{{ hostid }}{{ tail }}

命令行变量简介

命令行变量是优先级最高的变量设置方法,在命令行中指定变量,我们可以通过 ansible 或 ansible-playbook 中 -e 参数来指定变量,两者的实现范围不一样。

实践

ansible

语法

ansible <host> -e <var1>=<value1> -m <moudel> -a <params>

实践

ansible web -e 'head=www. tail=.ansible.org' -m hostname -a 'name={{ head }}ansible.{{ hostid }}{{ tail }}'

ansible-playbook

配置

  • hostname.yaml
---
- hosts: web
  remote_user: root
  tasks:
    - name: create hostname
      hostname: name={{ head }}ansible{{ hostid }}{{ tail }}

语法

ansible-playbook -e head=http hostname.yaml

在playbook 中 通过 vars 配置项来设置变量

实践

配置

hostname.yaml

---
- hosts: web
  remote_user: root
  vars:
    - head: www.
    - hostid: hostid
    - tail: .ansible.top
  tasks:
    - name: create hostname
      hostname: name={{ head }}ansible{{ hostid }}{{ tail }}

执行

ansible-playbook hostname.yaml

ansible 给出的变量配置方法比较多,为了解决配置过多导致的混乱,在项目创建初期就用 专用 配置文件来定义变量,防止配置难以维护的现象出现

实践

配置文件

yaml 格式定义变量文件

  • vars.yaml
---
head: http.
tail: .ansible.org
  • hostname.yaml
---
- hosts: web
  remote_user: root
  vars_files:
    - vars.yaml
  vars:
    - head: www.
    - hostid: hostid
    - tail: .ansible.top
  tasks:
    - name: create hostname
      hostname: name={{ head }}ansible{{ hostid }}{{ tail }}

运行

ansible-playbook hostname.yaml
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值