pde*_*eva 113 ansible ansible-playbook ansible-galaxy
所有我的Ansible剧本/角色都签入我的git仓库.
但是,对于Ansible Galaxy角色,我总是必须在我想运行Ansible的每台机器上逐个明确地下载它们.
在Ansible抱怨在运行时缺少角色之前,确切地知道确切需要哪些Ansible Galaxy角色甚至是很难的.
如何管理Ansible Galaxy角色依赖项?我想让他们检查我的git repo以及其余的ansible代码,或者在我在新机器上运行Ansible时自动识别和下载它们.
dfa*_*l07 133
您应该requirements.yml为此用例使用文件.使用各种安装方法描述您需要的角色:
# Install a role from the Ansible Galaxy
- src: dfarrell07.opendaylight
# Install a role from GitHub
- name: opendaylight
src: https://github.com/dfarrell07/ansible-opendaylight
# Install a role from a specific git branch
- name: opendaylight
src: https://github.com/dfarrell07/ansible-opendaylight
version: origin/master
# Install a role at a specific tag from GitHub
- name: opendaylight
src: https://github.com/dfarrell07/ansible-opendaylight
version: 1.0.0
# Install a role at a specific commit from GitHub
- name: opendaylight
src: https://github.com/dfarrell07/ansible-opendaylight
version: <commit hash>
Run Code Online (Sandbox Code Playgroud)
然后安装它们:
ansible-galaxy install -r requirements.yml
Run Code Online (Sandbox Code Playgroud)
这是一个工作示例(使用Ansible作为Vagrant配置程序安装OpenDaylight).有关详细信息,请参阅相关的Ansible文档.
Kie*_*ews 48
如建议的那样,你可以使用ansible galaxy满足这种需求.
Ansible有一个功能,您可以在其中创建requirements.yml列出所有角色的文件.你可以在这里找到相关信息:http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-file
例如(requirements.yml):
- src: yatesr.timezone
Run Code Online (Sandbox Code Playgroud)
然后ansible-galaxy install -r requirements.yml,您可以在此文件上运行以下载其中列出的所有角色.
如果您想进一步自动化它,您可以创建一个简单的shell脚本来运行这两个命令.
例如(ansible.sh):
./ansible.sh
ansible-galaxy install -r requirements.yml
ansible-playbook playbook.yml -i inventory
Run Code Online (Sandbox Code Playgroud)
sta*_*orx 18
我经常发现自己正在安装Java JDK.使用角色可以更轻松地完成触摸.我尝试了几种不同的方式(包括许多.gitmodules和子模块......我必须使用多个git系统进行工作,而且它变得很难看).我最大的要求是我没有将角色代码检查到我的playbook项目中,主要是因为我可以将所有内容保存在一个地方.
我的'requirements.yml'文件的内容:
- src: https://github.com/staylorx/ansible-role-wls-prep.git
version: master
name: staylorx.wls-prep
- src: https://my-work-git-extravaganza.com
version: 2.x
name: coolplace.niftyrole
#From Ansible Galaxy
- src: staylorx.oracle-jdk
Run Code Online (Sandbox Code Playgroud)
我运行一个单独的playbook,install-roles.yml:
---
- hosts: localhost
tasks:
- file:
path: roles
state: absent
- local_action:
command ansible-galaxy install -r requirements.yml --roles-path roles
- lineinfile:
dest: .gitignore
regexp: '^\/roles$'
line: '/roles'
state: present
Run Code Online (Sandbox Code Playgroud)
我运行第一本剧本,然后我通常在任何剧本中运行我的角色.对我来说,秘诀是确保它被git忽略,所以我不会错误地检查角色.此外,由于我每次都擦除文件夹,我确保我不需要强制或忽略错误.
您可以使用 Ansible 角色通过命令模块安装所需的角色。
这是一个运行的非常基本的示例ansible-galaxy install:
- name: Install roles from Ansible Galaxy
command: ansible-galaxy install {{ item.item }}
with_items:
- "{{ ansible_roles_list }}"
Run Code Online (Sandbox Code Playgroud)
的ansible_roles_list可作为可变的或作为角色参数提供。
如果您在角色中执行此操作,则必须在要使用它安装的任何其他角色之前在单独的剧本中应用它。这是因为 Ansible 在运行您引用它们的剧本之前检查是否所有角色都可用。
另一种解决方案是使用 git 子模块。毕竟,Ansible Galaxy 只是 github 存储库的目录...
我使用此命令自动添加任何 Galaxy 角色作为子模块:
ansible-galaxy info <package> | grep -A 1 github_repo | tr '\n' ' ' | sed -e "s/.*github_repo: \([^[:space:]]*\)[^\w]*github_user: \([^[:space:]]*\)[[:space:]]*/git submodule add git:\/\/github.com\/\2\/\1.git roles\/\2.\1/g" | sh
Run Code Online (Sandbox Code Playgroud)
然后将更改提交到您的 git 存储库。当你以后克隆你的 repo 时,确保用子模块克隆它,例如git clone ... --recursive
这样做的一个优点是,git 子模块始终引用特定版本(git commit-hash)。这将阻止您在生产环境中运行未经测试的更新。新版本的 Galaxy 角色可能有错误或工作方式与以前完全不同。使用 git 子模块,您可以决定是否以及何时将角色更新到新版本。
此外,您无需额外处理将星系角色列入黑名单.gitignore以防止将其代码提交到您的存储库。
| 归档时间: |
|
| 查看次数: |
53747 次 |
| 最近记录: |