하지만 세상은 리눅스도 있지만, 어떤 사람은 ( 나...?) 윈도우를 좋아한답니다.
그리고 우리 사랑스러운 고객님들도 윈도우를 쓰시는 분들도 많으니, 앤서블 테스트를 위해서는 윈도우 시스템도 하나쯤은 있어야 할 것 같네요
(꼭..Ansible Korea User 그룹의 윤기성님이 요청해서 하...하는게 아닙니다.)
하하하 테스트 정말 오래 걸리네요
이게 테스트를 하려면 한번 쳐다보고 10분 지나고 이런 경우가 꽤 있다 보니...
설치를 하고 실행하는 것은 데모 동영상으로 진행할까 합니다.
요약
vagrantfile이 ini파일 처럼 구성할 파일들을 code로 정의해 놓으면, 해당 구성 정보에 맞게 vagrant가 virtualbox(또는 Hyper-V, Docker, VMware, AWS, KVM등) 아주 다양하게 올려줍니다. 즉, 지속적으로 사용해야 하는 환경을 반복 구성하는데 최적화 되어 있습니다. 또는 템플릿 형식처럼, 배포하는 것에도 쓰여질수가 있겠죠? UI만 잘 입히면요. :) 위키 참조 : https://en.wikipedia.org/wiki/Vagrant_(software)
추가적으로 위의 그림과 같은 버전들을 선택한 이유는 간단한데..
남들이 많이 쓰는게 좋다는 지론때문입니다.
중간에 사람 얼굴이 있는데..제작자인가? 싶은데... 외국인은 대머리도 멋있네요.
vagrant 대신에 homestead를 쓰는 경우도 종종 있더라고요 나중에 시간이 되면 두개를 비교해 볼 필요도 있을 것 같습니다아~!
4. 설치후 vagrantfile 구성
이미지가 준비되었다면, vagrant init --force(만약에 기존에 만든게 있어서 오류가 난다면)
을 실행해 어떻게 설치할지 결정하는 초기 파일을 만들수 있지만, 어짜피 제시하는 코드(내가 만든 코드) 를 가지고 할 것이기때문에 초기화 할 필요는 없다.
그래도 궁금하다면, 파일이름도 있고 하니...vagrant init --force를 실행하고 현재의 경로에 vagrantfile이 생성된 것을 확인하자.
이제 부터 나올 것들은 코드인데.. vagrant는 기본적으로 'ruby'라는 언어로 되어 있다. 하지만~! 하지만~! 별로 쫄것이 없는게..복잡한 것은 안 쓴다.
그냥 python에 비하면, do가 쓰여지면, 아래에 들여쓰기가 생겨야 하고(하위 메뉴처럼) end로 마감되어야 한다. 오류를 보면 쉽게 알수 있는 내용이다.
5. 실행
'vagrant up'을 실행하기 전에 vagrantfile을 아래의 내용에서 카피해서 생성해야 하고, 같은 디렉터리에 Bootstrap.sh, Ansible_env_ready.yml 도 생성해 두어야 한다.
그리고 중요한거 하나 'vagrant plugin install vagrant-vbguest를 실행해야만 Host에 있는 디렉토리와 sync할때 에러가 나지 않는다.
실행 데모는 다음과 같다.
6. 코드 설명
하나하나 더 설명할수는 없지만, Ansible-Server를 한번 설명하면 나머지는 쉽게 알수 있으리라고 생각한다. 이 글을 보시는 분들은 분명히 대단하신 분들일꺼다 :)
[ 앤서블 서버 ]
config.vm.define:"ansible-server" do |cfg|
cfg.vm.box= "centos/7" # VM을 만들고자 하는 운영체제를 선택
cfg.vm.provider:virtualbox do |vb| # VM에 직접적인 그러니까 버추얼박스에 설정을 진행
vb.name= "HoonJo-Ansible-Server"
vb.customize ["modifyvm", :id, "--cpus", 2]
vb.customize ["modifyvm", :id, "--memory", 2048]
end
cfg.vm.host_name="ansible-server" # 실제 VM에 호스트이름 linux에서 hostname 치면 나오는 것
# 호스트와 VM간에 파일 교환을 위한 건데, 기본 설정이 rsync로 되어 있어서 windows의 경우 변경을 안해주면 오류가 남
cfg.vm.synced_folder ".", "/vagrant", type: "virtualbox"
# eth0은 내부 NAT로 고정되어 있고, eth1번을 인터넷과 연결하도록 public으로 설정
cfg.vm.network "public_network", ip: "172.30.1.10"
# 개별 네트워크들의 기본 fowarded_port는 guest 22, host: 2222인데 중복되면 에러가 발생함
# 이것의 목적은 vagrant ssh <hostname>을 했을때 경로를 포워딩 해줌
cfg.vm.network "forwarded_port", guest: 22, host: 30110, auto_correct: false, id: "ssh"
# centos7/rhel7은 default route를 설정하는 명령어가 좀 다름...-_-;
cfg.vm.provision "shell",
inline: "ip route replace default via 172.30.1.254 dev eth1"
#앤서블 자체를 설치하고 hosts 이름들을 설정함
cfg.vm.provision "shell",
path: "bootstrap.sh"
#윈도에서는 앤서블이 지원하지 않기 때문에 직접 실행을 할수가 없어서 카피한 다음에 셸로 실행함
cfg.vm.provision "file", source: "Ansible_env_ready.yml", destination: "Ansible_env_ready.yml"
#앤서블 개발환경을 위한 앤서블 플래이북 파일임 (기존에 설명함)
cfg.vm.provision "shell",
inline: "ansible-playbook Ansible_env_ready.yml"
end
1. 개발할때?
그리고 이런 개발을 하다보면, 자주 반복적으로 vagrant halt, vagrant destroy -f, vagrant up 세단계를 계속 써야 하는데. 이를 배치파일을 만들어서 돌리면 편하다.
[ vag_reconf.bat ] #!/usr/bin/env bash vagrant halt vagrant destroy -f vagrant up
@echo offsetlocal set /p name=어느 vagrant를 재 구성 및 시작하시겠습니까? 모두는 그냥 enter를 입력 하세요: || set name=defaultif %name%==default (vagrant halt && vagrant destroy -f && vagrant up) else ( vagrant halt %name% && vagrant destroy %name% -f && vagrant up %name%
)
변경(2017.07.03) :
모두 껐다 키는 것은 효율적이지 않고, 필요한 부분만 조율 가능하도록 변경했습니다.
수정 후에 앤서블 서버가 동작하는 영상은 다음과 같습니다.