Ansible

기존 구성에 Window Server node 추가 및 서버 구성

Joon0464 2021. 7. 17. 18:14

[응용] 다양한 환경을 앤서블(Ansible)로 관리하기 with 베이그런트(Vagrant) - 인프런 | 강의 (inflearn.com)

 

[응용] 다양한 환경을 앤서블(Ansible)로 관리하기 with 베이그런트(Vagrant) - 인프런 | 강의

센트OS 이외에 얼마나 다양한 시스템에 엔서블이 사용될 수 있는지 배워봅시다. 앤서블을 리눅스 이외에 윈도우 및 네트워크 시스템과 같은 여러가지 시스템에 대해서 다양한 목적으로 사용하

www.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와 통신 테스트를 하면 정상적으로 통신된 것을 확인할 수 있다.