Ansible 테스트 환경

setup ansible test labs

Virtualbox, Vagrant 를 사용해서 Ansible 테스트를 위한 환경을 만들 것이다.

Virtualbox 는 워낙 유명하니… 다운로드는 여기서

Vagrant 도 워낙 유명하니… 다운로드는 여기서

Vagrant 는 가상 소프트웨어 개발 환경을 구축하고 관리하기 위한 오픈소스 소프트웨어이다.

vagrant 명령어로 box 라 불리는 가상 머신 이미지를 다운받아 가상 머신을 만들고 다시 이것을 패키징해서 사용할 수 있다. 좀 더 자세한 내용은 여기로.. 또는 공식 문서를 참조하자.

윈도우 환경에서 작업한 것이며 Virtualbox, Vagrant 가 설치되어 있어야한다. 터미널 환경때문에 Git 까지 설치한다.

Vagrantfile 작성

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.define:"ansible-server" do |cfg|
cfg.vm.box= "centos/7"
cfg.vm.provider:virtualbox do |vb|
vb.name= "ansible-server"
vb.customize ["modifyvm", :id, "--cpus", 1]
vb.customize ["modifyvm", :id, "--memory", 512]
end
cfg.vm.host_name="ansible-server"
cfg.vm.synced_folder ".", "/vagrant", type: "virtualbox"
cfg.vm.network "private_network", ip: "192.168.56.10"
cfg.vm.network "forwarded_port", guest: 22, host: 22220, auto_correct: false, id: "ssh"
cfg.vm.provision "shell",
path: "bootstrap.sh"
end

(11..13).each do |i|
config.vm.define "ansible-node-#{i}" do |node|
node.vm.box = "ubuntu/trusty64"
node.vm.provider:virtualbox do |vb|
vb.name = "ansible-node-#{i}"
vb.cpus = 2
vb.memory = 512
end
node.vm.host_name = "ansible-node-#{i}"
node.vm.synced_folder ".", "/vagrant", disabled: true
node.vm.network "private_network", ip: "192.168.56.#{i}"
node.vm.network "forwarded_port", guest: 22, host: "222#{i}", auto_correct: false, id: "ssh"
node.vm.provision "shell",
inline: "echo hello from node #{i}"
end
end
end

다음은 ansible-server 가 생성되고 실행될 bootstrap.sh 파일 내용이다.

#!/usr/bin/env bash
yum install epel-release -y
yum install ansible -y
yum install net-tools -yum
# list of ansible nodes
echo "192.168.56.11 node01" >> /etc/hosts
echo "192.168.56.12 node02" >> /etc/hosts
echo "192.168.56.13 node03" >> /etc/hosts
# ansible inventory
echo "[Nodes]" >> /etc/ansible/hosts
echo "node01" >> /etc/ansible/hosts
echo "node02" >> /etc/ansible/hosts
echo "node03" >> /etc/ansible/hosts
# test work
mkdir /home/vagrant/.vim
touch /home/vagrant/.vimrc
touch /home/vagrant/.bashrc

Vagrant 실행

$ vagrant up
bla bla bla...

Ansible 에서 SSH 접속을 위한 Private key 복사

winscp 를 이용해서 ansible-server 에 접속을 한다.

접속하기 위해서 private_key 가 필요한데 해당 파일의 위치는

작업경로홈\.vagrant\machines\ansible-server\virtualbox\private_key

winscp 에서 ppk 로 변환을 해야하며, ppk 파일로 로그인을 한다.

로그인 후 각 node 디렉토리에서 private_key 를 ansible-server 의 적당한 위치 로 복사한다.

[vagrant@ansible-server ~]$ ls ansible-private-key/
ansible-node-11 ansible-node-12 ansible-node-13

그리고 ansible 의 inventory 파일을 수정한다.

각 노드마다 ansible_private_key_file 옵션을 추가해서 명령어 수행 시 해당 private_key 를 사용하도록 지정한다.

[Nodes]
node01 ansible_private_key_file=/home/vagrant/ansible-private-key/ansible-node-11
node02 ansible_private_key_file=/home/vagrant/ansible-private-key/ansible-node-12
node03 ansible_private_key_file=/home/vagrant/ansible-private-key/ansible-node-13

Ansible 동작 확인

$ ansible all -m ping
node03 | SUCCESS => {
"changed": false,
"ping": "pong"
}
node01 | SUCCESS => {
"changed": false,
"ping": "pong"
}
node02 | SUCCESS => {
"changed": false,
"ping": "pong"
}

참고 URL