我对 ansible 还比较陌生,应该建立一个 ansible 存储库来管理我们与多个服务器(版本控制、构建、构建代理……)的持续集成基础设施。
在阅读了有关 ansible 最佳实践和布局之后,我认为这是理想的:
production
staging
group_vars/...
site.yml
roles/{common,vm,buildserver,buildagent,versioncontrol,...}
整个基础设施应该在我们的 vmware 集群中运行,并且 vmware_guest 模块似乎对于大多数 vm 角色来说是理想的。
因此构建服务器应该具有 vm 和 buildserver 角色。
但是,主机名只有在创建虚拟机后才有意义。此外,最有可能的详细信息(如(不幸的是静态的)IP 等)应设置为变量,但在哪里呢?虚拟机角色应使用 {{ jinja2_vars }} 以实现可重用性。
我想我遗漏了或者误解了一些东西。
如何正确设置 Ansible 最佳实践存储库布局以及虚拟机和虚拟机角色?
答案1
虽然成功的剧本有其模式,但一最佳实践。有多种方法可以做到这一点。
VMware 的动态清单脚本存在。通过多种方式之一、-i 选项、$ANSIBLE_HOSTS 环境变量或 /etc/ansible/hosts 指定一个作为您的清单文件。vmware_inventory.py 将根据 VMware 标签为您生成主机组,因此您不需要清单文件中的静态主机名。
但是,如果您正在创建访客,则需要指定一些标识符。使用变量,以便可以轻松覆盖它们。不要过多考虑在哪里定义它们,将它们放在有意义的地方。玩关卡?vars/main.yml 就完成了。 变量优先级文档很好地提醒了我们关于 var 的许多其他地方。
一个可能不太明显的模式是,你可以add_host
在运行时添加一个新的主机,然后在下一个游戏中使用它。这不是一个完整的例子:
- hosts: localhost
connection: local
tasks:
- vmware_guest:
register: newvm
- add_host:
name: "{{ newvm.instance.ipv4 }}"
groups: buildhosts
- hosts: buildhosts
roles:
- buildagent