[응용] 다양한 환경을 앤서블(Ansible)로 관리하기 with 베이그런트(Vagrant) - 인프런 | 강의 (inflearn.com)
1. Vagrantfile 수정
#Ansible-Node05
config.vm.define:"ansible-node05" do |cfg|
cfg.vm.box = "sysnet4admin/Windows2016"
cfg.vm.provider:virtualbox do |vb|
vb.name="Ansible-Node05"
vb.customize ["modifyvm", :id, "--cpus",2]
vb.customize ["modifyvm", :id, "--memory",2048]
end
cfg.vm.host_name="ansible-node05"
cfg.vm.synced_folder ".", "/vagrant", disabled: true
cfg.vm.network "public_network", ip: "192.168.1.15"
cfg.vm.network "forwarded_port", guest: 22, host: 19215, auto_correct: false, id: "ssh"
cfg.vm.provision "shell", inline: "netsh firewall set opmode disable"
end
기존의 Vagrantfile에 Ansible-Node05로 윈도우 서버를 추가한다.
테스트 환경을 구성하기 위해서 윈도우 서버의 방화벽을 끄기 위해 cfg.vm.provision "shell", inline: "netsh firewall set opmode disable"를 추가한다.
ansible-node05의 ip주소, 포트번호, 가상머신 이름등을 변경한다.
vagrant cloud 에 있는 opentable/win-2012r2-standard-amd64-nocm 다운로드 시, 403 에러가 발생한다.
이미지를 "sysnet4admin/Windows2016"으로 변경하여 넣어준다.
2. Ansible_env_ready.yml 수정
- name: Setup for the Ansible's Enviorment
hosts: localhost
gather_facts: no
tasks:
- name: Add "/etc/hosts"
blockinfile: |
dest=/etc/hosts
content="
192.168.0.10 server
192.168.0.11 node01
192.168.0.12 node02
192.168.0.13 node03
192.168.0.14 node04
192.168.0.15 node05
"
- name: Add "/etc/ansible/hosts"
blockinfile: |
dest=/etc/ansible/hosts
content="
[CentOS]
node01
node02
[Ubuntu]
node03
node04
[Win]
node05
"
Ansible_env_ready.yml 파일을 수정하여 node05에 대한 호스트 정보를 작성한다.
3. 윈도우 노드 프로비저닝
C:\HashiCorp>vagrant up ansible-node05
C:\HashiCorp>vagrant provision ansible-server
node 05를 프로비저닝하여 윈도우 서버 노드를 생성한 뒤 ansible-server를 다시 프로비저닝하여 Ansible_env_ready.yml
파일의 수정사항을 적용한다.
4. 윈도우 서버 노드 통신 테스트
C:\HashiCorp>vagrant ssh ansible-server
# ansible Win -m win_ping -k
vagrant ssh로 ansible-server에 접속한 뒤 ansible 명령어로 win_ping 모듈을 사용하여 윈도우 노드와 통신 테스트를 진행한다.
윈도우의 경우 win_ping 모듈을 사용하여 ping 테스트를 할 수 있다. 하지만 ping 테스트가 정상적이지 않게 결과가 출력된다.
이를 해결하기 위해서는 우선 Ansible의 동작 원리에 대해 간단하게 알고 넘어가야 한다.
Ansible의 동작 원리
Ansible-Server는 관리하는 Node들에게 SSH를 사용하여 파이썬 스크립트를 보내어 관리한다.
즉 Ansible이 동작하기 위해서는 Node가 SSH 통신이 지원되고 파이썬이 설치되어 있어야 한다.
윈도우의 경우 이 조건을 만족시키지 못하기 때문에 Ping 모듈에서 fail이 발생한다.
해결 방법
1. 파이썬을 윈도우가 이해할 수 있는 언어로 번역해줘야한다.
pywinrm 모듈로 해결할 수 있다.
- name: Install pip
yum:
name: python-pip
state: present
- name: Install pywinrm
pip:
name: pywinrm
state: present
Ansible_env_ready.yml의 tasks에 다음 내용을 추가한다.
2. winrm으로 통신하도록 설정
wimrm(윈도우 원격 관리)는 마이크로소프트가 구현한 WS-Management 프로토콜이다. 로컬 및 원격 컴퓨터간에 웹 서비스를 사용하여 안전하게 통신할 수 있다.
ansible-server에서 ansible 명령어로 모듈을 동작시키면 윈도우와 ssh로 통신하려하기 때문에 정상적으로 동작하지 않으므로 winrm으로 통신하도록 추가 설정이 필요하다.
추가 설정 목록
- winrm으로 통신해야한다는 조건
- 사용자가 사용가능한 계정이어야 한다는 조건
- winrm이 통신하도록 열려져 있는 포트 5985로 통신하도록 설정
- name: Add "/etc/ansible/hosts"
blockinfile: |
dest=/etc/ansible/hosts
content="
[CentOS]
node01
node02
[Ubuntu]
node03
node04
[Win]
node05 ansible_connection=winrm ansible_ssh_user=vagrant ansible_ssh_port=5985"
Ansible_env_ready.yml 파일의 node05에 대한 추가 설정을 위와 같이 작성한다.
C:\HashiCorp>vagrant provision ansible-server
Ansible_env_ready.yml의 변경사항을 적용하기 위해 다시 ansible-server를 프로비저닝 한다.
C:\HashiCorp>vagrant ssh ansible-server
# rpm -qa | grep pip
# pip list | grep pywinrm
ansible-server에 ssh 접속하여 변경된 사항이 잘 적용됐는지 확인한다.
#ans Win -m win_ping -k
다시 win_ping 모듈을 사용하여 node05와 통신 테스트를 하면 정상적으로 통신된 것을 확인할 수 있다.
'Ansible' 카테고리의 다른 글
Ansible 사용시 유용한 디버그 기능 (0) | 2021.07.20 |
---|---|
Vagrant와 Ansible로 윈도우 노드 구성 및 관리 (1) | 2021.07.18 |
기존 구성에 Ubuntu node 추가 및 서버 구성 (0) | 2021.07.16 |
Vagrant로 구성한 CentOS 관리하기 (0) | 2021.07.15 |
Vagrant를 활용하여 Ansible 서버와 노드 구성하기 (0) | 2021.07.14 |