-
[Ansible 101] NTP 서버 설치 및 설정하기IT/Ansible 2024. 2. 4. 04:22728x90
이번 내용의 플레이북 구성도는 다음과 같습니다.
사전 분석
NTP 서버 주소는 메인 플레이북에서 정의한다.
운영체제가 Ubuntu면 apt 모듈을 사용하여 chrony를 설치한다.
운영체제가 CentOS/레드햇이면 dnf 모듈을 사용하여 chrony를 설치한다.
Jinja2 템플릿 방식의 chrony.conf 파일을 대상 호스트로 복사한다.
설정 파일이 복사되면 chrony 서비스를 재시작한다.
다음에도 사용할 수 있도록 롤을 이용하여 설계하고 작성한다.
플레이북 설계
chrony를 서로 다른 운영체제에서 각각의 모듈을 이용하여 설치할 것이므로 롤을 생성하고 호출하는 방식으로 작성합니다.
- vars : chrony 서비스 설치를 위한 롤에서는 변수를 정의,,
- templates : 환경 설정 템플릿 설정,
- tasks : 태스크를 정의,
- handlers : 환경 설정 후 chrony 서비스를 재시작.
1) VSCODE에서 remote SSH 접속 시 root 계정으로 로그인 설정
커맨드창(Ctrl + Shift + P) 입력 후 “Remote-SSH: Open Config…” 선택 후 자신의 SSH Config 파일을 열기: ls ~/. ssh/config
# Read more about SSH config files: https://linux.die.net/man/5/ssh_config Host ansible-server HostName 50.1.1.1 <- 각자 자신의 ansible-server 의 유동 공인 IP User root
- 커맨드창(Ctrl + Shift + P) 입력 후 “Remote-SSH: Connect…” 선택 후 자신의 ansible-server 선택 : 암호는 qwe123
- 터미널 - 신규 터미널 클릭해서 하단 뷰에 터미널 창 열어서 진행합니다.
# 계정 정보 등 확인 whoami id pwd
- ansible 계정의 실습 디렉터리를 생성합니다.
# su - ansible -c 'mkdir -p ~/ansible-project/chapter_09.3' ls -l /home/ansible/
VSCODE에서 작업 영역에 폴더 추가 : /home/ansible/ansible-project
whomai pwd cd
2) ansible 계정으로 프로젝트 디렉터리 생성 및 ansible.cfg, inventory 파일 작성
chapter_09.3 폴더에서 작업합니다.
# ansible 계정 전환 su - ansible whoami cd pwd # 프로젝트 디렉터리로 이동 cd ~/ansible-project/chapter_09.3 pwd /home/ansible/ansible-project/chapter_09.3
ansible.cfg 파일 생성 : remote_user는ansibleansible로 설정
cat <<EOT > ansible.cfg [defaults] inventory = ./inventory remote_user = ansible ask_pass = false roles_path = ./roles [privilege_escalation] become = true become_method = sudo become_user = root become_ask_pass = false EOT
inventory 파일 생성
cat <<EOT > inventory [tnode] tnode1 tnode2 tnode3 EOT
3) 롤 생성
# --init-path 옵션으로 롤 생성 경로를 ./roles로 설정 ansible-galaxy role init --init-path ./roles myrole.chrony # 확인 tree roles
tree roles를 수행하면 다음과 같이 확인됩니다.
4) 롤 디렉터리에 vars/main.yml 파일 선택 후 아래 내용 추가
chapter_09.3/roles/myrole.chrony/vars/main.yml
--- # vars file for myrole.chrony package_name : chrony service_name : chronyd fedora_os: - RedHat - CentOS
5) chrony.conf.j2 파일을 생성 : 외부로부터 입력받은 ntp_server 변수를 사용
touch ~/ansible-project/chapter_09.3/roles/myrole.chrony/templates/chrony.conf.j2
롤 디렉터리에 templates/chrony.conf.j2 파일 선택 후 아래 내용 추가
chrony.conf 파일의 내용은 이미 chrony 서비스가 설치되어 있는 서버의 chrony.conf 파일 내용을 참조하여 작성합니다.
chapter_09.3/roles/myrole.chrony/templates/chrony.conf.j2
pool {{ ntp_server }} driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync allow 10.10.0.0/16 local stratum 10 keyfile /etc/chrony.keys leapsectz right/UTC logdir /var/log/chrony
6) 핸들러에는 chrony 서비스를 재시작하는 태스크가 포함됩니다.
chapter_09.3/roles/myrole.chrony/handlers/main.yml
--- # handlers file for myrole.chrony - name: Restart chrony ansible.builtin.service: name: "{{ service_name }}" state: restarted
7) 메인 태스크 작성
ansible_facts.distribution 팩트 변수를 이용하여 다른 파일에서 태스크를 포함시킵니다.
운영체제에 맞는 chrony 환경 설정 파일 설정 복사, 복사 후 notify로 ‘Restart chrony’ 핸들러 호출합니다.
chapter_09.3/roles/myrole.chrony/tasks/main.yml
--- # tasks file for myrole.chrony - name: Import playbook ansible.builtin.include_tasks: file: "{{ ansible_facts.distribution }}.yml" - name: Copy chrony config file when Ubuntu ansible.builtin.template: src: chrony.conf.j2 dest: /etc/chrony/chrony.conf notify: "Restart chrony" when: ansible_facts.distribution == "Ubuntu" - name: Copy chrony config file when Other OS ansible.builtin.template: src: chrony.conf.j2 dest: /etc/chrony.conf notify: "Restart chrony" when: ansible_facts.distribution in fedora_os
8) 메인 태스크에서 호출된 운영체제별 플레이북을 하나씩 작성
아래 touch로 파일 생성 후 작업 폴더 창에 새로고침 아이콘 클릭
touch ~/ansible-project/chapter_09.3/roles/myrole.chrony/tasks/RedHat.yml touch ~/ansible-project/chapter_09.3/roles/myrole.chrony/tasks/CentOS.yml touch ~/ansible-project/chapter_09.3/roles/myrole.chrony/tasks/Ubuntu.yml
chapter_09.3/roles/myrole.chrony/tasks/RedHat.yml
--- - name: Install chrony using dnf ansible.builtin.dnf: name: "{{ package_name }}" state: latest
chapter_09.3/roles/myrole.chrony/tasks/CentOS.yml
--- - name: Install chrony using dnf ansible.builtin.dnf: name: "{{ package_name }}" state: latest
chapter_09.3/roles/myrole.chrony/tasks/Ubuntu.yml
--- - name: Install chrony using apt ansible.builtin.apt: name: "{{ package_name }}" state: latest
chapter_09.3/install_ntp.yml
--- - hosts: tnode roles: - role: myrole.chrony ntp_server: 0.kr.pool.ntp.org
9) 플레이북 실행
# 문법 체크 ansible-playbook --syntax-check install_ntp.yml # 플레이북 실행 : when문을 통해 해당 운영체제에 따라 특정 태스크만 실행됨 ansible-playbook install_ntp.yml
10) 확인
ansible -m shell -a "cat /etc/chrony/chrony.conf" tnode1 ansible -m shell -a "systemctl status chrony" tnode1
11) 플레이북 내의 hosts를 tnode → tnode1로 변경하여 tnode1만 실행해 봅니다.
--- - hosts: tnode1 roles: - role: myrole.chrony ntp_server: 0.kr.pool.ntp.org
12) 실행
# ansible-playbook install_ntp.yml ...
728x90반응형'IT > Ansible' 카테고리의 다른 글
[Ansible 101] 호스트명 설정하기 (0) 2024.02.04 [Ansible 101] 환경 설정 자동화 (0) 2024.02.04 [Ansible 101] SSH 키 생성 및 복사하기 (0) 2024.02.04 [Ansible 101] 사용자 계정 생성하기 (0) 2024.02.04 [Ansible 101] 2주차 도전과제 (0) 2024.01.21