答案1
根据与@ceejayoz 的讨论,结论是 Ansible 与 Puppet 的 R10K 相当ansible-galaxy install -r requirements.yml
。
R10K
在R10K使用 Puppetfile。Puppet文件是模块的定义(例如来自Puppetforge) 需要在特定的环境中进行组装,例如开发环境的 Puppetfile 可能如下所示:
mod 'garethr/docker', '5.3.0'
mod 'unibet/vagrant', '0.2.1'
mod 'jenkins',
:git => 'https://github.com/jenkinsci/puppet-jenkins',
:ref => 'master'
mod 'jdk_oracle',
:git => 'https://github.com/schrepfler/puppet-jdk_oracle.git',
:ref => 'master'
虽然生产 Puppetfile 包含稳定版本:
mod 'garethr/docker', '5.2.0'
mod 'unibet/vagrant', '0.2.0'
mod 'schrepfler/puppet-jdk_oracle', '0.2.0'
mod 'rtyler/jenkins', '1.6.1'
相当于 ansible 中的 r10k
为了从 Ansible 中的 Puppetforge 等效项中组装角色(相当于 Puppet 的模块)-Ansible Galaxy或自定义来源,角色或来源可以在yml
文件中定义(基于@ceejayoz 提供的链接和此链接)开发环境可能如下所示:
开发.yml
- src: geerlingguy.composer
version: 1.3.0
- src: geerlingguy.java
version: 1.2.1
- src: bennojoy.mysql
- src: https://github.com/ANXS/postgresql.git
version: master
并且可以通过发出 来运行sudo ansible-galaxy install -r development.yml
。虽然生成可能看起来像:
生产.yml
- src: geerlingguy.composer
version: 1.2.0
- src: geerlingguy.java
version: 1.1.1
并通过执行来运行sudo ansible-galaxy install -r production.yml
。结果可能如下所示:
user@host ~ $ sudo ansible-galaxy install -r development.yml
- geerlingguy.composer is already installed, skipping.
- downloading role 'java', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-java/archive/1.2.1.tar.gz
- extracting geerlingguy.java to /etc/ansible/roles/geerlingguy.java
- geerlingguy.java was installed successfully
- bennojoy.mysql is already installed, skipping.
答案2
认为 ansible-galaxy 只是答案的一半,因为它对 Ansible playbook 没有任何作用,而 Ansible playbook 是 Puppet 角色模块的同义词。r10k 的好处之一是您可以单独管理每个环境的所有方面。
您可能会考虑为每个环境创建单独的分支,并通过 ansible-galaxy 引入所有 Ansible 角色。这样您就可以根据环境隔离剧本、库存和角色更改,而不会无意中让它们进入生产环境,也不会在每个分支上重复角色逻辑。