YJWANG

[Ansible-semaphore 설치] AWX, Ansible-tower 대안 본문

91.IaC

[Ansible-semaphore 설치] AWX, Ansible-tower 대안

왕영주 2021. 11. 2. 13:44

https://docs.ansible-semaphore.com/administration-guide/installation#docker

Ansible-semaphore는 AWX, ansible-tower와 같은 ansible을 관리하기 위한 software입니다.

AWX의 docker 설치하는 hot-potato 환경이 편리하거나 안정적이지 않다 생각하여 대안으로 ansible-semaphore를 사용하고자합니다.

 

1. 사전 작업

1) docker 설치

https://yjwang.tistory.com/132

2) docker-compose 설치

https://yjwang.tistory.com/153

3) ansible 설치

# apt install ansible

 

2. Ansible-semaphore 설치

1) docker-compose directory 생성

# mkdir -p /etc/semaphore

 

2) semaphore directory 생성

# mkdir -p /etc/semaphore/playbooks

 

3) docker-compose 파일 생성

# cat << EOF >> /etc/semaphore/docker-compose.yml
version: '2'

services:

  mysql:
    restart: unless-stopped
    ports:
      - 13306:3306
    image: mysql:5.6
    hostname: mysql
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
      MYSQL_DATABASE: semaphore
      MYSQL_USER: semaphore
      MYSQL_PASSWORD: semaphore
    volumes:
      - mysql-data:/var/lib/mysql
 
  semaphore:
    restart: unless-stopped
    ports:
      - 13000:3000
    image: ansiblesemaphore/semaphore:latest
    volumes:
      - /etc/semaphore/playbooks:/data/playbooks
      - /etc/ansible:/etc/ansible
    environment:
      SEMAPHORE_DB_USER: semaphore
      SEMAPHORE_DB_PASS: semaphore
      SEMAPHORE_DB_HOST: mysql
      SEMAPHORE_DB_PORT: 3306
      SEMAPHORE_DB: semaphore
      SEMAPHORE_PLAYBOOK_PATH: /tmp/semaphore/
      SEMAPHORE_ADMIN_PASSWORD: testtest
      SEMAPHORE_ADMIN_NAME: admin
      SEMAPHORE_ADMIN_EMAIL: admin@localhost
      SEMAPHORE_ADMIN: admin
    depends_on:
      - mysql

volumes:
    mysql-data:
EOF

 

4) container 시작

# cd /etc/semaphore/

# docker-compose up -d 
..
Creating semaphore_mysql_1 ... done
Creating semaphore_semaphore_1 ... done

 

5) 생성한 container 실행 여부 확인

# docker-compose ps
        Name                       Command               State                     Ports                   
-----------------------------------------------------------------------------------------------------------
semaphore_mysql_1       docker-entrypoint.sh mysqld      Up      0.0.0.0:13306->3306/tcp,:::13306->3306/tcp
semaphore_semaphore_1   /sbin/tini -- /usr/local/b ...   Up      0.0.0.0:13000->3000/tcp,:::13000->3000/tcp

 

6) ansible-config 수정

# grep -Ev "^$|^#" /etc/ansible/ansible.cfg 
[defaults]
host_key_checking = False
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]

 

7) ansible-semaphore 접속

http://<server>:13000

admin / testtest

3. Ansible semaphore 구성

1) project 생성

 

virt-go-u20-10 서버에 test-create-file.yml playbook을 실행하도록 구성할 예정입니다.

 

2) Semaphore에서 사용할 ssh-key 생성

# ssh-keygen -N "" -f semph_rsa
Generating public/private rsa key pair.

# cat semph_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAtkK6crA6ndO80n1/LoKXNYt8xIWXIwfRSviWKcmJ6KnVWkj4Jwz1
Su8UO0BIQ9zrxwqh6S/qTeiBecWcVOatYRBrFEjMb1IanjEJTS7CJbyxM/9c+SNdZyspD9
1duL12EiXOBrCV8iRB3c9+v2wSIJbwB9bpSeatzxkl4URRiIfV3GnM9I/FdmaFFBkAteoO
yUyUQmUPXWYMxs+vcSXSN0n3uU1Umn5GwhTRVcq2Diydx2vLmzatyvveab1SKAOjjkyX3M
...

 

3) ssh key를 배포할 서버에 clone

# ssh-copy-id -i semph_rsa root@10.62.62.10

 

4) key-store에 key 생성

None key도 생성합니다.

5) Env 생성

Env를 사용하지 않을 것으로 빈 파일을 생성합니다.

 

6) Inventory 생성

 

7) Repository 생성

Public git이나 ssh로 외부 환경이 아닌 Local filesystem을 repo로 사용하는 법에 대해 다루겠습니다.

 

7-1) test playbook 파일 다운로드

# cd /etc/semaphore/playbooks

# curl https://raw.githubusercontent.com/YoungjuWang/yjwang-playbooks/master/test-create-file.yml -o test-create-file.yml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   357  100   357    0     0   1182      0 --:--:-- --:--:-- --:--:--  1182

 

7-2) local git repo 생성

# git init
Initialized empty Git repository in /etc/semaphore/playbooks/.git/

 

7-3) test playbook commit

# git add test-create-file.yml 

# git commit -m "test-create-file.yml"
[master (root-commit) 8c7243e] test-create-file.yml
 1 file changed, 18 insertions(+)
 create mode 100644 test-create-file.yml

 

7-4) repo 생성

 

8. Task Template 생성

 

9. Playbook 실행

실행하면 아래와 같이 console 화면이 나오고 output을 볼 수 있습니다.

 

10. history 확인

Dashboard를 통해 최근 playbook의 실행 상태를 확인할 수 있으며 #1 , #2와 같은 버튼을 통해 최근 실행 이력과 로그를 확인할 수 있습니다.

 

후기?

1) 장점

- 구성이 간편하다.

- 설정이 직관적이라 편하다.

- Ansible Tower나 AWX보다 세련된 UI?

- API 제공

 

2) 단점

- 타 제품 대비 잘 모르겠습니다.

 

github에서 4.5k를 받고 많이 개발되고 있는 오픈소스라서 개인적으로 안정성 면에서의 불안함은 없이 진행했습니다. 다만 Reference가 많지 않아 Trouble-shooting 시 자료가 많을까? 라는 걱정은 있었습니다.

반응형