Ansible如何根据首字母缩写词读取和操作设置

时间:2016-01-12 22:41:11

标签: ansible

您使用什么策略来控制自定义设置?使用ini文件或以yaml格式保存文件?!

例如,我有关于我的机构的首字母缩略词的设置。

如何从我的Playbook访问这些变量或自定义数据?

我想有条件地阅读设置。基于引用的首字母缩略词。

就像那样:

ansible-playbook -i hosts myplaybooy.yml my_acronym

CAX,BAC和SIN是首字母缩略词的示例结构:

CAX

IP_SERVER = 200.253.167.1
IP_DB_MASTER = 200.253.167.20
IP_DB_SLAVE = 200.253.167.21
IP_MIRROR   = 200.253.167.13

BAC

IP_SERVER = 200.253.168.1
IP_DB_MASTER = 200.253.168.20
IP_DB_SLAVE = 200.253.168.21
IP_MIRROR   = 200.253.168.13

SIN

IP_SERVER = 200.253.169.1
IP_DB_MASTER = 200.253.169.20
IP_DB_SLAVE = 200.253.169.21
IP_MIRROR   = 200.253.169.13

这种改变的原因是为了使我的剧本适应ansible-pull。在这样的ansible-pull条件测试中不起作用。

- name: Download pub key acesso
  fetch: 
  src=~acesso/.ssh/id_rsa.pub 
  dest="{{role_path}}/../appserver/files/pub_keys/appservers/csa{{groupvar.server.acronym}}am/acesso.pub" flat=yes
  sudo: yes
  delegate_to: "{{hostvars['csa'+groupvar.server.acronym+'am'].ansible_ssh_host}}"
  when: inventory_hostname in groups['pdv'+groupvar.server.acronym]
  run_once: True
  ignore_errors: yes

我认为这是因为ansible-pull看库存子集。

1 个答案:

答案 0 :(得分:1)

我认为这对你有用。如果你可以从你正在使用的剧本中发布更多内容,我可以帮助你完成这项工作,以适应你正在运行的实际任务。

这是我使用的命令行语法:

ansible-playbook -i hosts playbook.yml --extra-vars "ACRONYM=SIN"

playbook.yml:
---
- name: show vars
  hosts: localhost
  vars_files:
  - var_file.yml
  tasks:
  - debug:
     msg: IP_SERVER = {{Acronyms[ACRONYM].IP_SERVER}}
  - debug:
     msg: IP_DB_MASTER = {{Acronyms[ACRONYM].IP_DB_MASTER}}
  - debug:
     msg: IP_DB_SLAVE = {{Acronyms[ACRONYM].IP_DB_SLAVE}}
  - debug:
     msg: IP_MIRROR = {{Acronyms[ACRONYM].IP_MIRROR}}
var_file.yml:
Acronyms: {
 CAX:
  { IP_SERVER: 200.253.167.1,
    IP_DB_MASTER: 200.253.167.20,
    IP_DB_SLAVE: 200.253.167.21,
    IP_MIRROR: 200.253.167.13
  },
 BAC:
  { IP_SERVER: 200.253.168.1,
    IP_DB_MASTER: 200.253.168.20,
    IP_DB_SLAVE: 200.253.168.21,
    IP_MIRROR: 200.253.168.13
  },
 SIN:
  { IP_SERVER: 200.253.169.1,
    IP_DB_MASTER: 200.253.169.20,
    IP_DB_SLAVE: 200.253.169.21,
    IP_MIRROR: 200.253.169.13
  }
 }

这是我的终端输出:

    PLAY [show vars] ***************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "IP_SERVER = 200.253.169.1"
}

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "IP_DB_MASTER = 200.253.169.20"
}

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "IP_DB_SLAVE = 200.253.169.21"
}

TASK [debug] *******************************************************************
ok: [localhost] => {
    "msg": "IP_MIRROR = 200.253.169.13"
}

PLAY RECAP *********************************************************************
localhost                  : ok=5    changed=0    unreachable=0    failed=0