Ansible Galaxy 역할을 자동으로 설치하는 방법은 무엇입니까?
모든 Ansible 플레이 북 / 역할이 내 마이너 저장소에 추가되었습니다.
그러나 Ansible Galaxy 역할의 경우 항상 Ansible을 실행하려는 모든 컴퓨터에서 하나씩 명시 적으로 다운로드해야합니다.
Ansible이 실행에 누락 된 역할에 대해 불만을 제기 할 때까지 어떤 Ansible Galaxy 역할이 필요한지 미리 정확히 알기가 어렵습니다.
Ansible Galaxy 역할을 어떻게 관리해야합니까? 나머지 코드와 함께 git repo에 체크인하거나 새 컴퓨터에서 Ansible을 언제 자동으로 설치하고 싶습니다.
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>
그런 다음 설치하십시오.
ansible-galaxy install -r requirements.yml
다음은 실제 예제입니다 (Ansible을 Vagrant provisioner로 사용하여 OpenDaylight 설치). 자세한 내용은 관련 Ansible 문서 를 참조하십시오.
제안한 대로이 필요에 따라 은하계를 사용할 수 있습니다.
Ansible requirements.yml
에는 모든 역할을 나열 하는 파일을 만들 수있는 기능 현관이 있습니다 . 여기에서 사용할 수 있습니다 : http://docs.ansible.com/ansible/latest/galaxy.html#installing-multiple-roles-from-a-file
예를 들어 (requirements.yml) :
- src: yatesr.timezone
다음 그런 ansible-galaxy install -r requirements.yml
이 파일을 실행 하여 여기에 나열된 모든 역할을 다운로드하십시오.
추가로 혹시라도 사용 가능합니다.
예를 들어 (ansible.sh) :
./ansible.sh
ansible-galaxy install -r requirements.yml
ansible-playbook playbook.yml -i inventory
Java JDK 설치를 설치하는 경우가 종종 있습니다. 역할을 사용하면 터치가 방식을 사용합니다. 나는 두 가지 다른 방법을 시도했다 (많은 .gitmodules 및 하위 모듈 포함 ... 작업을 위해 여러 가지 git 시스템을 많은 것이 추악합니다). 가장 큰 요구 사항은 역할 코드를 내 플레이 북 프로젝트에 보관할 수 없기 때문에 모든 것을 한 곳에 보관할 것입니다.
내 '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
별도의 플레이 북 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
이 첫 번째 플레이 북을 실행 한 다음 모든 플레이 북에서 역할을 실행합니다. 나에게 비밀은 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
변경 사항을 git repo에 커밋하십시오. 나중에 리포지토리를 복제 할 때 하위 모듈로 복제하십시오.git clone ... --recursive
이것의 장점은 git 서브 모듈이 항상 특정 버전 (git commit-hash)을 참조한다는 것입니다. 이렇게하면 생산 환경에서 테스트되지 않은 업데이트를 실행할 수 없습니다. 새로운 버전의 Galaxy 역할은 버그가 있거나 이전과 완전히 다르게 작동 할 수 있습니다. git 하위 모듈을 사용하여 역할을 새 버전으로 업데이트할지 여부와시기를 결정합니다.
또한 .gitignore
저장소에 코드 커밋을 방지하기 위해 갤럭시 역할을 블랙리스트에 추가로 처리 할 필요가 없습니다 .
이 시점에서 내가 아는 한 런타임에 역할을 자동으로 다운로드하는 방법은 없습니다. 가장 좋은 방법은 자신의 저장소에 커밋하거나 모든 요구 사항을 나열하는 적절한 문서를 보유하는 것입니다. 역할을 설치하는 비행 전 플레이 북을 만들 수도 있습니다. :)
Ansible 역할을 사용하여 명령 모듈을 사용하여 필요한 다른 역할을 설치할 수 있습니다 .
다음은 실행되는 매우 기본적인 예입니다 ansible-galaxy install
.
- name: Install roles from Ansible Galaxy
command: ansible-galaxy install {{ item.item }}
with_items:
- "{{ ansible_roles_list }}"
는 ansible_roles_list
변수로서 역할 또는 파라미터로서 공급 될 수있다.
이에 대한 역할을 구현 했으므로 Ansible을 사용하여 제어 시스템 ( https://galaxy.ansible.com/ferrarimarco/install-roles/ 의 일부)을 설정할 수도 있습니다 .
이 역할은 별도의 플레이 북에서이를 사용하여 설치하려는 다른 역할 보다 먼저 적용 해야 합니다. 이는 Ansible이 참조하는 플레이 북을 실행하기 전에 모든 역할을 사용할 수 있는지 확인하기 때문입니다.
참고 URL : https://stackoverflow.com/questions/25230376/how-to-automatically-install-ansible-galaxy-roles
'IT' 카테고리의 다른 글
"jarfile에 액세스 할 수 없습니다"오류의 원인은 무엇입니까? (0) | 2020.08.02 |
---|---|
CI 플랫폼 (Hudson)을 통해 C # 어셈블리 버전을 어떻게 자동으로 증가시킬 수 있습니까? (0) | 2020.08.02 |
PHP로 UTC 시간을 얻으십시오 (0) | 2020.07.30 |
WPF 툴팁을 화면에 유지하도록 강제 (0) | 2020.07.30 |
가짜 외래 키 제약 조건 실패 (0) | 2020.07.30 |