在过去的几个星期里,我一直在玩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吗?)一个组织如何处理所有这些变量,这些变量比有几个组和设置所有这些组更复杂。我主要是在问这个问题:我是不是看错了这个问题,是不是错过了一些重要的东西?我应该遵循哪些最佳实践,使我的任务更容易一些。
非常感谢你阅读这篇文章!
发布于 2017-04-29 23:44:26
Ansible是非常容易理解的,请阅读Ansible推荐的布局不确定推荐布局。
变量可以在库存、剧本、角色等中定义。变量-库存定义
举个例子:
playbook-foobar/
├── ansible.cfg
├── requirements.yml
├── roles/nginx
├── inventories
│ ├── development
│ | ├── group_vars
│ | │ └── all
│ | └── hosts
│ └── production
│ ├── group_vars
│ │ └── all
│ └── hosts
├── site.yml
└── playbooks
├── web.yml示例:
ansible-playbook -i environments/development/hosts playbooks/web.yml --extra-vars "target=web" --flush-cache主机文件:
[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.3web.yml
---
- 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 }https://stackoverflow.com/questions/43701241
复制相似问题