当前位置 : 主页 > 操作系统 > centos >

自动化运维工具Ansible(5)变量运用

来源:互联网 收集:自由互联 发布时间:2022-06-20
变量命名规则 变量的名字由字母、下划线和数字组成,必须以字母开头。 good_a ok_b 保留关键字不能作为变量名称 add, append, as_integer_ratio, bit_length, capitalize, center, clear, conjugate, copy, cou

变量命名规则

  • 变量的名字由字母、下划线和数字组成,必须以字母开头。
good_a
ok_b
  • 保留关键字不能作为变量名称
add, append, as_integer_ratio, bit_length, capitalize, center, clear,
conjugate, copy, count, decode, denominator, difference,
difference_update, discard, encode, endswith, expandtabs,
extend, find, format, fromhex, fromkeys, get, has_key,
hex, imag, index, insert, isalnum, intersection,
intersection_update, isalpha, isdecimal, isdigit, isdisjoint, is_integer, islower,
isnumeric, isspace, issubset, issuperset, istitle, isupper,
items, iteritems, iterkeys, itervalues, join, keys, ljust, lower,
lstrip, numerator, partition, pop, popitem, real, remove,
replace, reverse, rfind, rindex, rjust, rpartition, rsplit, rstrip,
setdefault, sort, split, splitlines, startswith, strip, swapcase,
symmetric_difference, symmetric_difference_update, title,
translate, union, update, upper, values, viewitems, viewkeys,
viewvalues, zfill

变量类型

  • 全局变量
  • 剧本变量
  • 资产变量


全局变量

全局变量,使用ansible 或使用ansible-playbook 时,手动通过 -e 参数传递给Ansible 的变量。

通过ansible 或 ansible-playbook 的 help 帮助, 可以获取具体格式使用方式:

ansible -h |grep var

自动化运维工具Ansible(5)变量运用_centos7

ansible-playbook -h |grep var

自动化运维工具Ansible(5)变量运用_centos7_02


传递普通的key=value 的形式

ansible all -i localhost, -m debug -a "msg='my key is {{ key }}'" -e "key=value"

自动化运维工具Ansible(5)变量运用_Ansible_03

 debug模块主要用于调试时使用,通常的作用是将一个变量的值给打印出来。

# ansible all -i hosts -m debug -a "var=role" -e "role=web"
# ansible all -i hosts -m debug -a "msg='role is {{role}} '" -e "role=web"


传递一个YAML/JSON 的形式(它们的最终格式一定要是一个字典)

[root@localhost ~]# vim a.json
{"name":"666","type":"school"}
[root@localhost ~]# ansible all -i localhost, -m debug -a "msg='name is {{ name }},tpye is {{ type }}'" -e @a.json

自动化运维工具Ansible(5)变量运用_变量_04


 剧本变量

此种变量和PlayBook 有关,定义在PlayBook中的。它的定义方式有多种,、两种最常用的定义方式。

通过PLAY 属性 vars 定义

---
- name: test play vars
hosts: all
vars:
user: lilei
home: /home/lilei
...

通过PLAY 属性 vars_files 定义

vim vars/users.yml
---
user: lilei
home: /home/lilei
...---
- name: test play vars
hosts: all
vars_files:
- vars/users.yml
...

如何在PlayBook中使用这些变量

---
# 这里我们将上面的Playbook中引用变量的部分进行修改,去掉了双引号。
- name: test play vars
hosts: all
vars:
user: lilei
home: /home/lilei
tasks:
- name: create the user {{ user }}
user:
# 注意这里将 "{{ user }}" 改成了 {{ user }}
name: {{ user }}
home: "{{ home }}”
...

执行以上的PlayBook 时,会出现以下错误

自动化运维工具Ansible(5)变量运用_centos7_05

是PlayBook 是YAML 的文件格式, 当Ansible 分析YAML 文件时,有可能会误认为字典。name: {{ user }} 是一个字典的开始。因此加针对变量的使用,加上了双引号,避免Ansible错误解析。


资产变量

资产变量分为主机变量和主机组变量,分别针对资产中的单个主机和主机组。

主机变量

以下资产中,定义了一个主机变量 lilei ,此变量只针对  192.168.19.102 这台服务器有效。

[root@localhost home]# vim hostsandhostvars
[webservers]
192.168.19.102 user=lieli port=3309
192.168.19.103[root@localhost home]# ansible 192.168.19.102 -i hostsandhostvars -m debug -a "msg='{{user}} {{port}}'"

自动化运维工具Ansible(5)变量运用_Ansible_06

[root@localhost home]# ansible 192.168.19.103 -i hostsandhostvars -m debug -a "var=user"

自动化运维工具Ansible(5)变量运用_变量_07


主机组变量

以下资产中,定义了一个组变量home ,此变量将针对webservers 这个主机组中的所有服务器有效

[root@localhost home]# vim hostsandgroupvars
[webservers]
192.168.19.102 user=lilei
192.168.19.103

[webservers:vars]
home="/home/lilei"[root@localhost home]# ansible webservers -i hostsandgroupvars -m debug -a "var=home"

自动化运维工具Ansible(5)变量运用_linux_08


主机和主机组的优先级

[root@localhost home]# vim host_v2
[webservers]
192.168.19.102 user=lilei
192.168.19.103

[webservers:vars]
user=tom[root@localhost home]# ansible webservers -i host_v2 -m debug -a "var=user

自动化运维工具Ansible(5)变量运用_Ansible_09

在资产中定义了主机变量和组变量 user, 此时发现 192.168.19.102 这台机器的主机变量 user 的优先级更高


变量的继承

[root@localhost home]# vim host_v3
[webservers]
192.168.19.102

[dbservers]
192.168.19.103

[allservers]
[allservers:children]
dbservers
webservers

[allservers:vars]
user=lilei

在资产继承的同时,对应的变量也发生了继承

自动化运维工具Ansible(5)变量运用_Ansible_10


Inventory 内置变量的说明

内置变量几乎都是以  `ansible_` 为前缀

ansible_ssh_host
将要连接的远程主机名与你想要设定的主机的别名不同的话,可通过此变量设置.

ansible_ssh_port
ssh端口号.如果不是默认的端口号,通过此变量设置.

ansible_ssh_user
默认的 ssh 用户名

ansible_ssh_pass
ssh 密码(这种方式并不安全,官方强烈建议使用 --ask-pass 或 SSH 密钥)

ansible_sudo_pass
sudo 密码(这种方式并不安全,官方强烈建议使用 --ask-sudo-pass)

ansible_sudo_exe (new in version 1.8)
sudo 命令路径(适用于1.8及以上版本)

ansible_ssh_private_key_file
ssh 使用的私钥文件.适用于有多个密钥,而你不想使用 SSH 代理的情况.

ansible_python_interpreter
目标主机的 python 路径.适用于的情况: 系统中有多个 Python, 或者命令路径不是"/usr/bin/python",比如 /usr/local/bin/python3


上一篇:实战案例:Zabbix对Memcached的监控
下一篇:没有了
网友评论