博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ansible使用5-Variables
阅读量:4922 次
发布时间:2019-06-11

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

变量命名

支持数字、字母、下划线

有效:foo_port, foo5无效:foo-port, foo port, foo.port, 12

playbook定义

- hosts: webservers  vars:    http_port: 80

jinja2模板使用变量

My amp goes to {
{ max_amp_value }}template: src=foo.cfg.j2 dest={
{ remote_install_path }}/foo.cfg

Jinja2 Filters

格式化数据

{
{ some_variable | to_nice_json }}{
{ some_variable | to_nice_yaml }}

使用条件表达式

tasks:  - shell: /usr/bin/foo    register: result    ignore_errors: True  - debug: msg="it failed"    when: result|failed  # in most cases you'll want a handler, but if you want to do something right now, this is nice  - debug: msg="it changed"    when: result|changed  - debug: msg="it succeeded"    when: result|success  - debug: msg="it was skipped"    when: result|skipped

强制变量定义

{
{ variable | mandatory }}

变量默认值

{
{ some_variable | default(5) }}

变量省略值

- name: touch files with an optional mode  file: dest={
{item.path}} state=touch mode={
{item.mode|default(omit)}} with_items: - path: /tmp/foo - path: /tmp/bar - path: /tmp/baz mode: "0444"

列表

# 最小值{
{ list1 | min }}# 最大值{
{ [3, 4, 2] | max }}# 唯一值{
{ list1 | unique }}# 并集{
{ list1 | union(list2) }}# 交集{
{ list1 | intersect(list2) }}# 补集(存在list1,不存在list2){
{ list1 | difference(list2) }}# 对称差集 (不同时存在每个列表){
{ list1 | symmetric_difference(list2) }}

版本比较

{
{ ansible_distribution_version | version_compare('12.04', '>=') }}# <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne# 版本分析strict=True,默认值false

随机数

{
{ ['a','b','c']|random }} => 'c'{
{ 59 |random}} * * * * root /script/from/cron{
{ 100 |random(step=10) }} => 70{
{ 100 |random(1, 10) }} => 31{
{ 100 |random(start=1, step=10) }} => 51

洗牌(shuffle)

{
{ ['a','b','c']|shuffle }} => ['c','a','b']{
{ ['a','b','c']|shuffle }} => ['b','c','a']

其他

# 列表转字符串{
{ list | join(" ") }}# 文件全路径{
{ path | basename }}# 目录全路径{
{ path | dirname }}# 用户目录(~)全路径{
{ path | expanduser }}# link的路径{
{ path | readlink }}# Base64加解密{
{ encoded | b64decode }}{
{ decoded | b64encode }}# 文件的sha1sum{
{ filename | sha1 }}

bool

- debug: msg=test  when: some_string_value | bool

正则

vars:  url: "http://example.com/users/foo/resources/bar"tasks:    - shell: "msg='matched pattern 1'"      when: url | match("http://example.com/users/.*/resources/.*")    - debug: "msg='matched pattern 2'"      when: url | search("/users/.*/resources/.*")# convert "ansible" to "able"{
{ 'ansible' | regex_replace('^a.*i(.*)$', 'a\\1') }}# convert "foobar" to "bar"{
{ 'foobar' | regex_replace('^f.*o(.*)$', '\\1') }}
- hosts: app_servers  vars:       app_path: "{
{ base_path }}/22"

Facts

'''bash

ansible hostname -m setup

{

{ ansible_devices.sda.model }}
{
{ ansible_hostname }}
'''

Turning Off Facts

- hosts: whatever  gather_facts: no

本地facts(自定义facts)

# /etc/ansible/facts.d/preferences.fact[general]asdf=1bar=2# 命令ansible 
-m setup -a "filter=ansible_local"# API"ansible_local": { "preferences": { "general": { "asdf" : "1", "bar" : "2" } } }# 引用{
{ ansible_local.preferences.general.asdf }}# 部署- hosts: webservers tasks: - name: create directory for ansible custom facts file: state=directory recurse=yes path=/etc/ansible/facts.d - name: install custom impi fact copy: src=ipmi.fact dest=/etc/ansible/facts.d - name: re-read facts after adding custom fact setup: filter=ansible_local

Fact Caching

{
{ hostvars['asdf.example.com']['ansible_os_family'] }}# /etc/ansible/ansible.cfg[defaults]fact_caching = redisfact_caching_timeout = 86400# secondsyum install redisservice redis startpip install redis

Registered Variables

- hosts: web_servers  tasks:     - shell: /usr/bin/foo       register: foo_result       ignore_errors: True     - shell: /usr/bin/bar       when: foo_result.rc == 5

Accessing Complex Variable Data

{
{ ansible_eth0["ipv4"]["address"] }}{
{ ansible_eth0.ipv4.address }}{
{ foo[0] }}

Magic Variables, and How To Access Information About Other Hosts

{
{ hostvars['test.example.com']['ansible_distribution'] }}{% if 'webserver' in group_names %} # some part of a configuration file that only applies to webservers{% endif %}{% for host in groups['app_servers'] %} # something that applies to all app servers.{% endfor %}# example{% for host in groups['app_servers'] %} {
{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}{% endfor %}

Variable File Separation

---- hosts: all  remote_user: root  vars:    favcolor: blue  vars_files:    - /vars/external_vars.yml  tasks:  - name: this is just a placeholder    command: /bin/echo foo---# in the above example, this would be vars/external_vars.ymlsomevar: somevaluepassword: magic

Passing Variables On The Command Line

ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"#example---- hosts: '{
{ hosts }}' remote_user: '{
{ user }}' tasks: - ...ansible-playbook release.yml --extra-vars "hosts=vipers user=starbuck"or--extra-vars '{"pacman":"mrs","ghosts":["inky","pinky","clyde","sue"]}'or--extra-vars "@some_file.json"

Variable Precedence: Where Should I Put A Variable?

#组变量默认值在group_vars/all---# file: /etc/ansible/group_vars/all# this is the site wide defaultntp_server: default-time.example.com# 组变量,覆盖组默认变量---# file: /etc/ansible/group_vars/bostonntp_server: boston-time.example.com# 主机变量,覆盖组变量---# file: /etc/ansible/host_vars/xyz.boston.example.comntp_server: override.example.com

role variable precedence

---# file: roles/x/defaults/main.yml# if not overridden in inventory or as a parameter, this is the value that will be usedhttp_port: 80# 不能覆盖默认值---# file: roles/x/vars/main.yml# this will absolutely be used in this rolehttp_port: 80# 使用这种方式覆盖默认值roles:   - { name: apache, http_port: 8080 }roles:   - { role: app_user, name: Ian    }   - { role: app_user, name: Terry  }   - { role: app_user, name: Graham }   - { role: app_user, name: John   }# roles/common/vars/main.ymlroles:   - { role: common_settings }   - { role: something, foo: 12 }   - { role: something_else }
posted on
2015-01-04 11:27 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/liujitao79/p/4200646.html

你可能感兴趣的文章
由MyEclipse内存不足谈谈JVM内存
查看>>
深刻理解一句js
查看>>
java.util.logging.Logger_01
查看>>
最短路径之弗洛伊德算法
查看>>
Less 基础语法
查看>>
GIS-002-gdal2srtmtiles使用注意事项
查看>>
SRM710 div1 MagicNim(博弈论)
查看>>
单例模式
查看>>
python qq音乐下载
查看>>
VS2012 InstallShield2013LimitedEdition激活
查看>>
js模式
查看>>
阿里代码规范检查工具的安装使用
查看>>
Jmeter学习笔记10-性能测试实践_数据库Mysql
查看>>
myeclipse python下配置文档说明_转载
查看>>
快速幂,就当个模板了
查看>>
HDU1212加深下对取模运算的理解
查看>>
SICP_3.9-3.11
查看>>
1020. Tree Traversals (25)
查看>>
emmet简单记录
查看>>
[洛谷P4092][HEOI2016/TJOI2016]树
查看>>