我正在编写一本手册来设置开发环境并为项目构建管道。我希望尽可能地将playbook与实际基础设施分离,并且只依赖于组,因此我可以使用相同的命令在本地VM和裸硬件中设置管道,只需使用不同的组限制器。
现在的问题是,使用本地Vagrant盒子我需要将用户 vagrant 添加到 docker 组,而裸机服务器则需要一些任意用户。在剧本中处理这些变化的最佳做法是什么,尽可能保持抽象?我应该使用行为参数,主机变量,组变量,条件或事实收集这类东西吗?
是否有可能或合理地保持剧本完全抽象,没有任何硬编码值和对任何环境的适应性?
答案 0 :(得分:1)
回答您的具体问题:
使用Vagrantfile覆盖的用户变量。
例如,如果在aws中,则为ubuntu
;如果您在流浪汉中,则为vagrant
。
更理论的答案:
我遇到了与vagrant构建相同的问题,我决定在某个地方保留一个ansible playbook,以便所有的vagrant构建器都会接收它并执行它来设置服务器。
例如,剧本看起来像这样:
- hosts: all
tasks:
- name: remove apparmor
apt: name=apparmor purge=true state=absent
然后我的每个流浪资源库都会使用
运行它box.vm.provision :ansible do |ansible|
ansible.playbook = 'vagrant_extra.yml'
ansible.sudo = true
ansible.limit = 'all'
end
我认为最好的解决方案是使用打包器来配置您自己的流浪者图像,其中包含所有这些预先备份的内容,以便