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

참고 링크

comments powered by Disqus