[Ansible] USER/GROUP 생성 Playbook
Ansible role(ansible.role-mgt-usergrp)과 Varfile을 이용해 여러 시스템에 USER와 GROUP을 한 번에 생성하는 Playbook 사용법을 소개합니다.
요약
- ansible.role-mgt-usergrp role을
/etc/ansible/roles에 clone하면 다량의 시스템에 USER와 GROUP을 한 번에 생성할 수 있습니다. - Varfile의
group_list에 그룹명과 gid를,user_list에 id, 암호, uid, 그룹, comment를 정의해 Playbook에서 불러옵니다. ansible-playbook -i inventory create_usergrp.yml로 실행하며, 작성자는 BAU 업무 시간이 체감상 3분의 1로 줄었다고 합니다.
[Ansible] USER/GROUP 생성 Playbook
잡설 (회고?)
연말과 연초가 너무 바빴습니다.
몸이 바쁘다 보니 글 쓰는게 소홀했습니다. 올해는 바쁘더라도 짧은 내용이라도 더 열심히 글 작성해보겠습니다.
Playbook
위에서 말한 것과 같이 작업도 많고 시간은 부족한데 BAU 업무는 여전히 진행 되야 합니다.
이번에 작성한 Playbook 은 다량의 시스템에 USER과 GROUP 을 생성하는 Playbook 을 작성하였습니다.
Playbook 을 이용하여 BAU 업무 투자 시간이 채감상 3분의 1로 줄었습니다.
Playbook 사용법
Clone Playbook
아래와 같이 Playbook 을 Clone 진행합니다.
$ cd /etc/ansible/roles
$ sudo git clone https://github.com/chhanz/ansible.role-mgt-usergrp.git
Playbook 및 Varfile 작성
아래와 같이 Playbook 및 Varfile 을 작성합니다.
예제 Playbook 과 Varfile 은 ansible.role-mgt-usergrp/tests/ 경로의 예제 파일을 참고 하시면 됩니다.
Playbook 예제
$ cat create_usergrp.yml
---
- name: management 'user'
hosts: node
vars_files:
- userlist.yml
roles:
- role: ansible.role-mgt-usergrp
Varfile 예제
$ cat userlist.yml
---
group_list:
- grp_name: demogrp
gid: 777
user_list:
- id: demouser
new_password: 6af286f0509e7c166abf710850f44fc4
uid: 770
groups: demogrp
comment: "KR/ANSIBLE/DEMO/USER/"
- id: demouser1
new_password: 6af286f0509e7c166abf710850f44fc4
uid: 771
groups: demogrp
comment: "KR/ANSIBLE/DEMO/USER/"
- id: demouser2
new_password: 6af286f0509e7c166abf710850f44fc4
uid: 772
groups: demogrp
comment: "KR/ANSIBLE/DEMO/USER/"
- id: demouser3
new_password: 6af286f0509e7c166abf710850f44fc4
uid: 773
groups: demogrp
comment: "KR/ANSIBLE/DEMO/USER/"
Inventory 예제
$ cat inventory
[node]
192.168.200.201
192.168.200.202
[node:vars]
ansible_ssh_user=root
ansible_ssh_pass=testtest
Playbook 수행
아래와 같이 Playbook 을 수행합니다.
$ ansible-playbook -i inventory create_usergrp.yml
참고 : 수행 로그
$ ansible-playbook -i inventory create_usergrp.yml
PLAY [management 'user'] **********************************************************************************
TASK [Gathering Facts] ************************************************************************************
ok: [192.168.200.202]
ok: [192.168.200.201]
TASK [ansible.role-mgt-usergrp : create 'groups'] *********************************************************
changed: [192.168.200.202] => (item={u'grp_name': u'demogrp', u'gid': 777})
changed: [192.168.200.201] => (item={u'grp_name': u'demogrp', u'gid': 777})
TASK [ansible.role-mgt-usergrp : create 'users'] **********************************************************
changed: [192.168.200.202] => (item={u'comment': u'KR/ANSIBLE/DEMO/USER/', u'new_password': u'6af286f0509e7c166abf710850f44fc4', u'id': u'demouser', u'groups': u'demogrp', u'uid': 770})
changed: [192.168.200.201] => (item={u'comment': u'KR/ANSIBLE/DEMO/USER/', u'new_password': u'6af286f0509e7c166abf710850f44fc4', u'id': u'demouser', u'groups': u'demogrp', u'uid': 770})
changed: [192.168.200.202] => (item={u'comment': u'KR/ANSIBLE/DEMO/USER/', u'new_password': u'6af286f0509e7c166abf710850f44fc4', u'id': u'demouser1', u'groups': u'demogrp', u'uid': 771})
changed: [192.168.200.201] => (item={u'comment': u'KR/ANSIBLE/DEMO/USER/', u'new_password': u'6af286f0509e7c166abf710850f44fc4', u'id': u'demouser1', u'groups': u'demogrp', u'uid': 771})
changed: [192.168.200.201] => (item={u'comment': u'KR/ANSIBLE/DEMO/USER/', u'new_password': u'6af286f0509e7c166abf710850f44fc4', u'id': u'demouser2', u'groups': u'demogrp', u'uid': 772})
changed: [192.168.200.202] => (item={u'comment': u'KR/ANSIBLE/DEMO/USER/', u'new_password': u'6af286f0509e7c166abf710850f44fc4', u'id': u'demouser2', u'groups': u'demogrp', u'uid': 772})
changed: [192.168.200.202] => (item={u'comment': u'KR/ANSIBLE/DEMO/USER/', u'new_password': u'6af286f0509e7c166abf710850f44fc4', u'id': u'demouser3', u'groups': u'demogrp', u'uid': 773})
changed: [192.168.200.201] => (item={u'comment': u'KR/ANSIBLE/DEMO/USER/', u'new_password': u'6af286f0509e7c166abf710850f44fc4', u'id': u'demouser3', u'groups': u'demogrp', u'uid': 773})
PLAY RECAP ************************************************************************************************
192.168.200.201 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.200.202 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
점검
아래와 같이 계정 생성이 문제없이 된 것을 확인 할 수 있습니다.
[root@fastvm-centos-7-7-201 ~]# cat /etc/passwd | tail -n4
demouser:x:770:777:KR/ANSIBLE/DEMO/USER/:/home/demouser:/bin/bash
demouser1:x:771:777:KR/ANSIBLE/DEMO/USER/:/home/demouser1:/bin/bash
demouser2:x:772:777:KR/ANSIBLE/DEMO/USER/:/home/demouser2:/bin/bash
demouser3:x:773:777:KR/ANSIBLE/DEMO/USER/:/home/demouser3:/bin/bash
[root@fastvm-centos-7-7-201 ~]# id demouser
uid=770(demouser) gid=777(demogrp) groups=777(demogrp)
[root@fastvm-centos-7-7-201 ~]# id demouser1
uid=771(demouser1) gid=777(demogrp) groups=777(demogrp)
[root@fastvm-centos-7-7-201 ~]# id demouser2
uid=772(demouser2) gid=777(demogrp) groups=777(demogrp)
[root@fastvm-centos-7-7-201 ~]# id demouser3
uid=773(demouser3) gid=777(demogrp) groups=777(demogrp)
참고 자료
자주 묻는 질문
ansible.role-mgt-usergrp role은 어떻게 설치하나요?
/etc/ansible/roles로 이동해 git clone https://github.com/chhanz/ansible.role-mgt-usergrp.git으로 받으면 됩니다. 예제 Playbook과 Varfile은 tests/ 경로에 있습니다.
생성할 사용자와 그룹 목록은 어디에 정의하나요?
Varfile(예: userlist.yml)에 정의합니다. group_list에는 grp_name과 gid, user_list에는 id, new_password, uid, groups, comment를 적고 Playbook의 vars_files로 불러옵니다.
사용자가 제대로 생성됐는지 어떻게 확인하나요?
대상 서버에서 /etc/passwd와 id <사용자> 명령으로 uid, gid, 그룹이 Varfile 값대로 생성됐는지 확인합니다.