如何将 Ansible 最佳实践存储库布局与虚拟机一起使用?

如何将 Ansible 最佳实践存储库布局与虚拟机一起使用?

我对 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

相关内容