首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构与变量设计

问结构与变量设计
EN

Stack Overflow用户
提问于 2017-04-29 22:55:50
回答 1查看 1.1K关注 0票数 0

在过去的几个星期里,我一直在玩Ansible,试图转移到一组bash脚本上,这些脚本是我们目前用于冷启动/配置的。我看过Galaxy中的存储库,但是有很多角色似乎不适合我的例子,因此它们更难学习。不管怎么说,我们的库存工作方式是,我们有一群主持人,他们得到了大约75%的相同角色。但是,有许多决定是基于与特定主机有关的变量作出的。一个简单的例子是,只有当主机/库存有特定的硬件时,我们才想要编写一个角色来安装某些软件。除了硬件之外,我们还必须根据主机名或更好的方式运行特定的角色/剧本,比如“这个主机需要X功能吗?”,其中X只是一些任意的预先确定的东西。所以我想我们可以有很多组,其中一个库存组是:"has_x_hardware“或"needs_x_software",然后列出所有拥有该硬件的主机。但是我可以看到,在主机一遍又一遍地重复的情况下,它被炸成了一大群,我不认为这个工具应该是这样使用的。

一个简单的示例显示了我正在使用的是,我试图转换的许多bash脚本都如下所示:

if [ "${hostname}" = "hostname1" ] || [ "${hostname}" = "hostname2" ] || ... [ "$(hostname)" = "hostnamex" ; then install_software_feature_X fi

现在,我要如何转换它,而不需要说:

when: some_hostname == hostname1 or some_hostname == hostname2

但这似乎会失去控制。

所以我知道这是一封普通的电子邮件,几乎没有具体的问题,但我不确定是有主机名/基于目录的变量,每个主机名都有一大组变量,还是尝试根据组创建变量,但问题是我们没有像“数据库”或“负载均衡器”这样的几个组,所有的数据库主机或所有负载平衡器都得到相同的软件。我们的主机有很多变量/决策(它有X、Y和/或Z硬件,它需要软件X、Y和Z吗?)一个组织如何处理所有这些变量,这些变量比有几个组和设置所有这些组更复杂。我主要是在问这个问题:我是不是看错了这个问题,是不是错过了一些重要的东西?我应该遵循哪些最佳实践,使我的任务更容易一些。

非常感谢你阅读这篇文章!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-29 23:44:26

Ansible是非常容易理解的,请阅读Ansible推荐的布局不确定推荐布局。

变量可以在库存、剧本、角色等中定义。变量-库存定义

举个例子:

代码语言:javascript
复制
playbook-foobar/
├── ansible.cfg
├── requirements.yml
├── roles/nginx
├── inventories
│   ├── development
│   |   ├── group_vars
│   |   │   └── all
│   |   └── hosts
│   └── production
│       ├── group_vars
│       │   └── all
│       └── hosts    
├── site.yml
└── playbooks
    ├── web.yml

示例:

代码语言:javascript
复制
ansible-playbook -i environments/development/hosts playbooks/web.yml --extra-vars "target=web" --flush-cache

主机文件:

代码语言:javascript
复制
[web]
web1 ansible_ssh_host=52.0.0.1
web2 ansible_ssh_host=52.0.0.2

[database]
db1 ansible_ssh_host=52.0.0.3

web.yml

代码语言:javascript
复制
---
- hosts: '{{ target }}'
  gather_facts: True
  remote_user: ubuntu
  become: yes
  become_user: root
  become_method: sudo

  roles:
      - { role: 'nginx', tags: 'nginx', gather_facts: True, become: yes, become_user: root, become_method: sudo }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43701241

复制
相关文章

相似问题

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