首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不可用的库存:使用多个标准对主机进行分类

不可用的库存:使用多个标准对主机进行分类
EN

Stack Overflow用户
提问于 2020-01-14 13:46:59
回答 3查看 894关注 0票数 0

我对Ansible完全陌生,所以我仍然在为它的工作方式而挣扎.我有一个库存文件,其中有几个主机,按环境和功能排序:

代码语言:javascript
复制
[PRO-OSB]
host-1
host-2
[PRO-WL]
host-3
host-4
[PRO:children]
PRO-OSB
PRO-WL

但我想,有时我可能需要运行更多的游戏手册,即关注环境、其功能、主机集群和在主机上运行的应用程序。因此,在简历中,每个主机必须有4个“类别”:环境、功能、集群和应用程序。我如何才能做到这一点,而不必不断重复输入??

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-14 14:28:02

我如何才能做到这一点,而不必不断重复条目?

你不能。你必须在每个需要的组中声明属于它的机器。因此,如果机器属于4个不同的组(不考虑父组),则必须在4个相关组中声明主机。

Ansible可以选择相反的方法(例如,为其所属的每个主机列出列表),但这不是保留的解决方案,它将是冗长的。

为了使事情变得更简单,并使IMO更加安全,您可以将库存分成几个环境库存(prod,dev.)这样你就可以消除每个库存中的一个层次的复杂性。缺点是,这样的设置不能同时针对所有的env。

如果您的库存很大,并且针对某种集群/云环境(vsphere,aws.),动态库存可以提供帮助。

票数 0
EN

Stack Overflow用户

发布于 2020-01-14 15:39:47

问:“每个主机必须有4个”类别“:环境、功能、集群和应用程序。我如何才能做到这一点而不需要不断地重复输入?”

答:可以在*:vars部分声明默认选项,并使用主机的特定选项覆盖它。见如何合并变量。例如,库存

代码语言:javascript
复制
$ cat hosts
[PRO_OSB]
test_01 my_cluster='cluster_A'
test_02
[PRO_WL]
test_03 my_cluster='cluster_A'
test_04
[PRO:children]
PRO_OSB
PRO_WL
[PRO:vars]
my_environment='default_env'
my_function='default_fnc
my_cluster='default_cluster'
my_app='default_app'

带着剧本

代码语言:javascript
复制
- hosts: PRO
  gather_facts: false
  tasks:
    - debug:
        msg: "{{ inventory_hostname }}
              {{ my_environment }}
              {{ my_function }}
              {{ my_cluster }}
              {{ my_app }}"

and (my_cluster变量test_01和test_03被主机值覆盖)

代码语言:javascript
复制
"msg": "test_01 default_env 'default_fnc cluster_A default_app"
"msg": "test_02 default_env 'default_fnc default_cluster default_app"
"msg": "test_04 default_env 'default_fnc default_cluster default_app"
"msg": "test_03 default_env 'default_fnc cluster_A default_app"

问:“运行游戏说明更多,即关注环境,其功能,集群主机和应用程序。”

可以使用模块add_host创建动态组并根据需要选择主机。例如,在第一次播放中创建新的组cluster_A,并在下一次播放中使用它

代码语言:javascript
复制
- hosts: all
  tasks:
    - add_host:
        name: "{{ item }}"
        group: cluster_A
      loop: "{{ hostvars|
                dict2items|
                json_query('[?value.my_cluster == `cluster_A`].key') }}"
      delegate_to: localhost
      run_once: true

- hosts: cluster_A
  tasks:
    - debug:
        var: inventory_hostname

给出

代码语言:javascript
复制
ok: [test_01] => {
    "inventory_hostname": "test_01"
}
ok: [test_03] => {
    "inventory_hostname": "test_03"
}
票数 0
EN

Stack Overflow用户

发布于 2020-05-23 05:14:15

对于那些可能需要这样的东西的人--

最后,当我试图为每个主机建立多个变量,以便根据角色或团队交付文件时,我在库存文件中使用了这种格式。

清单/支助/主机

代码语言:javascript
复制
support:
  hosts: 
    qahost:
      host_role: 
        waiter
        dishwasher
      host_teams: 
        ops
        sales
    awshost:
      host_role:
        waiter
      host_teams:
        dev
    testhost1:
      host_role:
        dishwasher
      host_teams:
        ops
        dev
    testhost2:
      host_role:
        dishwasher
        boss
      host_teams:
        ops
        dev
        sales

在这出戏中提到了他们:

代码语言:javascript
复制
- name: parse inventory file host variables
  debug:
    msg: |
      - "role attribute of host: {{ item }} is {{ hostvars[item]['host_role'] }}"
      - "team attribute of host: {{ item }} is {{ hostvars[item]['host_teams'] }}"
  with_items: "{{ inventory_hostname }}"
  when: hostvars[item]['host_teams'] is contains (team_name)

带有自定义extra_var的ansible命令,该命令传递给剧本,并在库存中与when条件相匹配:

代码语言:javascript
复制
ansible-playbook -i inventory/support/hosts -e 'team_name="sales"' playbook.yml
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59735057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档