Ansible Galaxy - Git 저장소를 활용하여 Role 의존성 관리하기!
Git 저장소에 Ansible Role 올리기
먼저, Ansible Role 을 개발하기 위한 Git repository를 생성한다. 그리고, Ansible Role 초기 프로젝트 구조를 Ansible Galaxy 를 사용하여 생성한다.
- Git repository 를 로컬 머신에 복제한다.
1$ git clone "https://github.com/xxxxx/sample-role.git"
- Ansible Role 초기 디렉토리 및 파일 생성한다.
1$ ansible-galaxy init --force sample-role
2- sample-role was created successfully
3
4$ tree sample-role/
5sample-role/
6├── README.md
7├── defaults
8│ └── main.yml
9├── files
10├── handlers
11│ └── main.yml
12├── meta
13│ └── main.yml
14├── tasks
15│ └── main.yml
16├── templates
17├── tests
18│ ├── inventory
19│ └── test.yml
20└── vars
21 └── main.yml
- Ansible Role 개발을 진행 한 뒤에 Git repository 에 Push
1$ git commit * -m "Add ansible role" && git push
Git 저장소로부터 Ansible Role 가져오기
- 방법 1) Ansible Galaxy CLI 명령을 통해 다운로드
1$ ansible-galaxy install git+https://github.com/xxxx/sample-role.git,master -p roles/
2
3$ tree roles/
4roles/
5└── sample-role
6 ├── README.md
7 ├── defaults
8 │ └── main.yml
9 ├── handlers
10 │ └── main.yml
11
12 ├── meta
13 │ └── main.yml
14 ├── tasks
15 │ └── main.yml
16 ├── tests
17 │ ├── inventory
18 │ └── test.yml
19 └── vars
20 └── main.yml
- 방법 2) 의존성 파일에 명시하고 CLI 명령을 통해 다운로드
1$ vi requirements.yml
2- src: git+https://github.com/xxxx/sample-role.git
3 version: master
4
5$ ansible-galaxy install -r requirements.yml -p roles/
6- extracting sample-role to roles/sample-role
7- sample-role was installed successfully
8
9$ tree roles/
10roles/
11└── sample-role
12 ├── README.md
13 ├── defaults
14 │ └── main.yml
15 ├── handlers
16 │ └── main.yml
17
18 ├── meta
19 │ └── main.yml
20 ├── tasks
21 │ └── main.yml
22 ├── tests
23 │ ├── inventory
24 │ └── test.yml
25 └── vars
26 └── main.yml
‘requirements.yml’ 작성하기
- src
- username.role_name : Ansible Galaxy 공식 저장소에 등록된 Ansible Role 을 다운로드할 때 사용.
- url : Ansible Galaxy 에서 지원하는 SCM으로부터 다운로드할 때 사용.
- scm
- 연동할 SCM 이름을 명시. 디폴트 값은 ‘git’ (ansible-galaxy 2.2.1.0 기준으로 git, hg 만 지원)
- version
- tag 명 / commit hash 값 / branch 이름을 명시. 디폴트는 ‘master’
- SCM 으로부터 가져올 때에만 사용.
- name
- 다운로드한 Ansible Role 의 이름을 명시. 기본적으로는 Ansible Galaxy에 등록된 이름 혹은 Git repository 의 이름을 사용.
아래 예시를 참고!
1# from galaxy
2- src: yatesr.timezone
3
4# from GitHub
5- src: https://github.com/bennojoy/nginx
6
7# from GitHub, overriding the name and specifying a specific tag
8- src: https://github.com/bennojoy/nginx
9 version: master
10 name: nginx_role
11
12# from a webserver, where the role is packaged in a tar.gz
13- src: https://some.webserver.example.com/files/master.tar.gz
14 name: http-role
15
16# from Bitbucket
17- src: git+http://bitbucket.org/willthames/git-ansible-galaxy
18 version: v1.4
19
20# from Bitbucket, alternative syntax and caveats
21- src: http://bitbucket.org/willthames/hg-ansible-galaxy
22 scm: hg
23
24# from GitLab or other git-based scm
25- src: git@gitlab.company.com:mygroup/ansible-base.git
26 scm: git
27 version: "0.1" # quoted, so YAML doesn't parse this as a floating-point value