© 2020 GitHub, Inc.

Create Vm With Ansible Libvirt

Ansible은 어떠한 프로세스를 자동화 할 때 사용할 수 있는 툴입니다. 그리고 libvirt는 linux 환경에서 qemu를 이용하여 VM을 생성할 때 사용하는 python 모듈입니다.

이 두가지를 합하여 Ansible을 통해 VM을 생성하는 방법에 대해 알아보도록 하겠습니다.

ansible-role-libvirt-vm

참조 Github : https://github.com/stackhpc/ansible-role-libvirt-vm

위의 Github 프로젝트는 libvirt를 ansible에서 사용할 수 있도록 만든 오픈소스입니다. 이를 이용하여 ansible-playbook을 통해 VM을 생성해 볼 것입니다.

이를 로컬에 clone 합니다.

git clone https://github.com/stackhpc/ansible-role-libvirt-vm

테스트 환경

저는 Ubuntu 18.04.3 Desktop을 사용하고 있습니다. 그리고 설치에 사용될 iso는 제 포스트에서 작성한 적이 있었던 preseed.cfg를 이용한 자동 설치 이미지입니다. 따라서 이미지를 넣고 부팅만 하면 실행할 수 있습니다.

play.yaml

저는 이러한 play.yaml 파일을 사용하였습니다.

여기서 cdrom을 사용하였는데, 이미지는 baked-ubuntu.iso를 사용하였습니다.

또한 장비들에 대한 설정을 xml로 추가적으로 하고싶어서 xml_file을 설정해 주었습니다.

xml_file또한 업로드 해두었습니다.

네트워크는 설정을 빼놓을 경우 설치중에 확인창이 발생하여 기본적으로 NAT를 사용하도록 하였습니다. 이는 필요에 따라 변경을 해야 합니다. 또한 enable_vnc의 경우 virt-manager를 통해 상황의 경과를 확인하고 싶어서 추가하였습니다.

위의 파일들을 workspace에 두시면 됩니다.

Test

이렇게까지 한 뒤 play.yaml이 있는 위치에서 시작합니다.

그러면 ansible-playbookansible-role-libvirt-vm이라는 role을 해당 위치에서 검색하고, 실행이 될 것입니다.

ansible-playbook play.yaml

실행 중 sudo 권한이 필요하다고 할 수도 있습니다. 이럴 경우 sudo su로 잠시 로그인 후 exit로 빠져나오시면 에러가 발생하지 않습니다.

확인

virt-manager를 통해 GUI 환경에서 실제로 잘 되고 있는지 확인할 수 있습니다.

virt-manager

preseed.cfg를 사용한 이미지라면 30초 후 설치 언어가 자동으로 영어로 설정이 되면서 계속해서 설치가 진행될 것입니다.

마치며

vm을 생성하는 일이 잦다면, 이 또한 굉장히 귀찮은 일이 아닐 수 없습니다. 소규모가 아닌 대규모로의 확장성을 생각한다면 당연히 자동화를 하는 것이 올바른 접근이라고 생각합니다.

VM 설치 자동화의 방법이 여러가지가 있을 것이고 이 방법 또한 그 여러가지 방법 중 하나입니다.

더 좋은, 더 편한 방법이 있다면 알려주시면 감사하겠습니다.