Commit a29bb538 authored by JooHan Hong's avatar JooHan Hong

NTP, modify

parent 1dac4687
Pipeline #5135 passed with stages
in 2 seconds
......@@ -8,6 +8,7 @@
## 주요 기능
- templates/ntp.conf.j2 파일을 이용해 변수에 맞게 NTP 설정을 수행할 수 있다.
- ntp 와 chrony를 취사선택(apps 호스트 변수)하여, 설치할 수 있다.
## Inventory 설정
......@@ -15,12 +16,13 @@
```bash
# cat hosts
[ALL_HOSTS]
172.16.0.100 managed_ip=172.16.0.100 des="2020-12-03"
172.16.0.100 managed_ip=172.16.0.100 des="2020-12-03" apps="ntp"
172.16.0.200 managed_ip=172.16.0.200 des="2020-12-03" apps="chrony"
[ALL_HOSTS_OK]
```
대상 호스트는 172.16.0.100이며, 추가는 2020-12-03에 수행한다. 참고적으로 **ALL_HOSTS_OK** 호스트 그룹은 작업이 완료된 호스트의 history를 위한 그룹이다.
대상 호스트는 172.16.0.100,200이며, 추가는 2020-12-03에 수행한다. 참고적으로 **ALL_HOSTS_OK** 호스트 그룹은 작업이 완료된 호스트의 history를 위한 그룹이다.
## Host Variables 설정
......@@ -53,35 +55,71 @@ ansible_python_interpreter: python2.7
pkg:
- ntp
update_cache: yes
when: apps == "ntp"
- name: ntp.conf configuration
template: src=templates/ntp.conf.j2 dest=/etc/ntp.conf mode=0644
when: apps == "ntp"
- name: ntpd Daemon Restart
service:
name: ntp
state: restarted
enabled: yes
when: apps == "ntp"
- name: Install a list of packages
yum: name={{ item }} update_cache=yes
with_items:
- chrony
when: apps == "chrony"
- name: ntp.conf configuration
template: src=templates/chrony.conf.j2 dest=/etc/chrony.conf mode=0644
when: apps == "chrony"
- name: ntpd Daemon Restart
service:
name: ntp
state: restarted
enabled: yes
when: apps == "ntp"
- name: chronyd Daemon Restart
systemd:
name: chronyd
state: restarted
enabled: yes
when: apps == "chrony"
```
jinja2 템플릿 내역은 다음과 같다. 참고적으로 핵심적인 내역만은 명시한다.
- ntp.conf
```bash
# cat templates/ntp.conf.j2
...중략
server {{ ntp_server1 }} iburst
server {{ ntp_server2 }} iburst
```
# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
- chrony.conf
```bash
# cat templates/chrony.conf.j2
...중략
server {{ ntp_server1 }} iburst
server {{ ntp_server2 }} iburst
```
`NTP 클라이언트 배포`에 대한 Playbook 분석
* [ ] ntp_server1/2 에 대한 변수 값이 원격 호스트에 설정된다.
* [ ] 추가적으로 아래와 같이 ntpq 명령을 쿼리하는 Playbook과 같이 사용하면 된다.
* [ ] ntpq 명령의 결과는 각 호스트별로 로컬에 파일로 기록된다.
* [ ] NTP server1/2 에 대한 변수 값이 원격 호스트에 설정된다.
* [ ] 추가적으로 아래와 같이 ntpq / chronyc 명령을 쿼리하는 Playbook과 같이 사용하면 된다.
* [ ] ntpq / chronyc 명령의 결과는 각 호스트별로 로컬에 파일로 기록된다.
## playbook 실행
......@@ -102,16 +140,21 @@ server {{ ntp_server2 }} iburst
- name: ntpq command Result
shell: ntpq -p; echo; date; echo "Deploy Server Time => {{ time }}"
register: ntpq_result
- debug: var=ntpq_result
when: apps == "ntp"
- name: ntpq command Result
shell: chronyc sources -v; echo; date; echo "Deploy Server Time => {{ time }}"
register: ntpq_result
when: apps == "chrony"
- name: Local Directory Create
local_action: command mkdir -p NTPQ_CHECK/{{ managed_ip }}
local_action: command mkdir -p NTP_CHECK/{{ managed_ip }}
- name: TIME Check Execute Result
local_action: copy content={{ ntpq_result.stdout }} dest=NTPQ_CHECK/{{ managed_ip }}/{{ managed_ip }}_ntpq.txt
local_action: copy content={{ ntpq_result.stdout }} dest=NTP_CHECK/{{ managed_ip }}/{{ managed_ip }}_ntpq.txt
```
```bash
# ansible-playbook -i hosts ntpq_check.yml
# ansible-playbook -i hosts ntp_check.yml
```
[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net)
# Ansible을 이용한 Zabbix-Agent 배포
> 원격 시스템에 Zabbix-Agent의 설치 및 설정을 자동화 한다.
## 활용 용도
- YUM, APT와 같은 Package Manager를 이용하지않고, Package 파일로 직접 설치한다.
- Zabbix-Agent의 사전 검토된 설정을 배포할 때 유용하다. 사전 검토된 설정은 Jinja2 템플릿을 사용한다.
## Inventory 설정
```bash
# cat hosts
[ALL_HOSTS]
172.16.0.100 managed_ip=172.16.0.100 des="2020-12-03"
[ALL_HOSTS_OK]
```
대상 호스트는 172.16.0.100이며, 추가는 2020-12-03에 수행한다. 참고적으로 **ALL_HOSTS_OK** 호스트 그룹은 작업이 완료된 호스트의 history를 위한 그룹이다.
## Host Variables 설정
```bash
# cat host_vars/172.16.0.100
ansible_ssh_host: 172.16.0.100
ansible_ssh_port: SSH_포트번호
ansible_ssh_user: 사용자 아이디
ansible_ssh_pass: "사용자 패스워드"
ansible_become: yes
ansible_become_method: su
ansible_become_user: root
ansible_become_pass: "!root_패스워드"
ansible_python_interpreter: python2.7
```
## Playbook 설정
```python
---
- name: Zabbix-Agent Remote Install
hosts: ALL_HOSTS
vars:
zabbix_server: 172.24.0.254
tasks:
- name: Directory Create
file:
path: "{{ item }}"
state: directory
owner: 'root'
group: 'root'
mode: 0700
with_items:
- /root/test/zabbix-agent
- name: Zabbix dep Package Copy
copy:
src: "{{ item }}"
dest: /root/test/zabbix-agent
owner: 'root'
group: 'root'
mode: 0644
#attr: i
with_items:
['zabbix-agent_buster.deb']
when:
- ansible_distribution_major_version == '10'
- ansible_os_family == "Debian"
- name: Zabbix RPM Package Copy
copy:
src: "{{ item }}"
dest: /root/test/zabbix-agent
owner: 'root'
group: 'root'
mode: 0644
with_items:
['zabbix-agent-4.4.10-1.el7.x86_64.rpm']
when: ansible_os_family == "CentOS"
- name: dpkg command Result
shell: yes | dpkg -i /root/test/zabbix-agent/zabbix-agent_buster.deb
register: dpkg_result
when:
- ansible_distribution_major_version == '10'
- ansible_os_family == "Debian"
- name: rpm command Result
shell: rpm -ivh /root/test/zabbix-agent/zabbix-agent-4.4.10-1.el7.x86_64.rpm
register: dpkg_result
when: ansible_os_family == "CentOS"
- name: Zabbix agents configuration
template: src=templates/zabbix_agented.conf_debian.j2 dest=/etc/zabbix/zabbix_agentd.conf mode=0644
when:
- ansible_distribution_major_version == '10'
- ansible_os_family == "Debian"
- name: Zabbix agents configuration
template: src=templates/zabbix_agented.conf_redhat.j2 dest=/etc/zabbix/zabbix_agentd.conf mode=0644
when: ansible_os_family == "CentOS"
- name: zabbix-agent Daemon Restart
systemd:
state: restarted
name: zabbix-agent.service
enabled: True
```
`Zabbix-Agent 설치`에 대한 Playbook 분석
* [ ] OS에 따라(redhat, debian계열) Agent를 설치한다.
## playbook 실행
```bash
# ansible-playbook -i hosts zabbix-agent_install.yml
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment