사용자 계정 생성하기
다음 요구 사항에 맞춰 사용자 계정을 생성하는 작업을 수행해 보았습니다.
- 직무 설명이 developer인 사용자는:
- dev와 test 호스트 그룹의 관리 대상 노드에서 생성됩니다.
- pw_developer 변수에서 비밀번호를 할당받습니다.
- 비밀번호 최대 유효 기간은 30일입니다.
- 보조 그룹 devops의 멤버입니다.
- 직무 설명이 manager인 사용자는:
- prod 호스트 그룹의 관리 대상 노드에서 생성됩니다.
- pw_manager 변수에서 비밀번호를 할당받습니다.
- 비밀번호 최대 유효 기간은 30일입니다.
- 보조 그룹 opsmgr의 멤버입니다.
- 비밀번호는 SHA512 해시 형식으로 저장됩니다.
1. 사용자 목록 다운로드
먼저, 사용자 목록 파일을 다운로드합니다.
# 사용자 목록 파일 다운로드
wget http://classroom/materials/user_list.yml -O /home/greg/ansible/user_list.yml
# 파일 내용 확인
cat /home/greg/ansible/user_list.yml
2. 플레이북 작성
/home/greg/ansible/users.yml 파일을 생성하여 사용자 계정을 생성하는 플레이북을 작성합니다.
# 플레이북 파일 생성
vim /home/greg/ansible/users.yml
다음과 같이 플레이북을 작성합니다.
---
- name: Create Developer Users
hosts: dev,test
vars_files:
- /home/greg/ansible/locker.yml
- /home/greg/ansible/user_list.yml
tasks:
- name: Ensure devops group exists
group:
name: devops
state: present
- name: Create developer users
user:
name: "{{ item.name }}"
groups: devops
password: "{{ pw_developer | password_hash('sha512') }}"
password_expire_max: "{{ item.password_expire_max }}"
loop: "{{ users }}"
when: item.job == 'developer'
- name: Create Manager Users
hosts: prod
vars_files:
- /home/greg/ansible/locker.yml
- /home/greg/ansible/user_list.yml
tasks:
- name: Ensure opsmgr group exists
group:
name: opsmgr
state: present
- name: Create manager users
user:
name: "{{ item.name }}"
groups: opsmgr
password: "{{ pw_manager | password_hash('sha512') }}"
password_expire_max: "{{ item.password_expire_max }}"
loop: "{{ users }}"
when: item.job == 'manager'
3. 플레이북 실행
작성한 플레이북을 실행하여 사용자 계정을 생성합니다.
# 플레이북 실행
ansible-navigator run /home/greg/ansible/users.yml -m stdout
4. 실행 결과
플레이북 실행 결과는 다음과 같습니다.
PLAY [Create Developer Users] *************************************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************************************************
ok: [node2]
ok: [node1]
TASK [Ensure devops group exists] ***************************************************************************************************************************************************************************************************************************************************************
ok: [node2]
ok: [node1]
TASK [Create developer users] ****************************************************************************************************************************************************************************************************************************************************************
changed: [node2] => (item={'name': 'bob', 'job': 'developer', 'password_expire_max': 10, 'uid': 3000})
skipping: [node2] => (item={'name': 'sally', 'job': 'manager', 'password_expire_max': 20, 'uid': 3001})
changed: [node1] => (item={'name': 'bob', 'job': 'developer', 'password_expire_max': 10, 'uid': 3000})
skipping: [node1] => (item={'name': 'sally', 'job': 'manager', 'password_expire_max': 20, 'uid': 3001})
changed: [node2] => (item={'name': 'fred', 'job': 'developer', 'password_expire_max': 30, 'uid': 3002})
changed: [node1] => (item={'name': 'fred', 'job': 'developer', 'password_expire_max': 30, 'uid': 3002})
PLAY [Create Manager Users] *************************************************************************************************************************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************************************************
ok: [node3]
ok: [node4]
TASK [Ensure opsmgr group exists] ***************************************************************************************************************************************************************************************************************************************************************
changed: [node3]
changed: [node4]
TASK [Create manager users] ****************************************************************************************************************************************************************************************************************************************************************
skipping: [node3] => (item={'name': 'bob', 'job': 'developer', 'password_expire_max': 10, 'uid': 3000})
skipping: [node4] => (item={'name': 'bob', 'job': 'developer', 'password_expire_max': 10, 'uid': 3000})
changed: [node4] => (item={'name': 'sally', 'job': 'manager', 'password_expire_max': 20, 'uid': 3001})
skipping: [node4] => (item={'name': 'fred', 'job': 'developer', 'password_expire_max': 30, 'uid': 3002})
changed: [node3] => (item={'name': 'sally', 'job': 'manager', 'password_expire_max': 20, 'uid': 3001})
skipping: [node3] => (item={'name': 'fred', 'job': 'developer', 'password_expire_max': 30, 'uid': 3002})
PLAY RECAP **********************************************************************************************************************************************************************************************************************************************************************
node1 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node2 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node3 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node4 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
5. 검증
플레이북을 실행한 후 검증 결과는 다음과 같습니다.
# 검증
ansible dev,test -m shell -a 'id bob; id fred'
ansible prod -m shell -a 'id sally'
ssh bob@node1
bob@node1\'s password: Imadev
ssh sally@node3
sally@node3\'s password: Imamgr
'Project' 카테고리의 다른 글
Ansible 하드웨어 보고서 생성하기 (0) | 2025.02.25 |
---|---|
Ansible 파티션 설정 (0) | 2025.02.25 |
Ansible 웹서버 구축 (0) | 2025.02.25 |
Ansible 설치 및 구성 (0) | 2025.02.25 |