티스토리 뷰

Cloud/Private Cloud

vagrant with Ansible

jacobbaek Jacob_baek 2019. 5. 9. 12:58

vagrant는 다양한 provison 방법을 사용할 수 있다.
이중 ansible을 이용하는 방법에 대하여 알아보자.

Vagrantfile 내에 아래와 같이 ansible playbook.yml 파일 위치를 지정시켜준다. ansible을 지정하고 playbook의 위치를 지정한다.
기본적으로는 playbook이 필요하지만 필요에 따라 다른 설정(변수 지정 및 호스트 그룹 추가 등)을 추가할수 있다.

Vagrant.configure(2) do |config|
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "provision/playbook.yml"
  end
end

개인적으로 playbook은 provision과 같은 다른 directory로 관리하는것이 보기에 좋아 따로 두었으나
working directory인 Vagrantfile 과 동일한 directory에 위치시켜도 무방하다.

ansible playbook 파일은 다음과 같은 형식으로 작성한다.
사실 처음에는 hosts를 어떻게 둘지 고민이 되었었다. 확인해보니 Vagrantfile내에 define 된 name을 사용하면 된다.

---
- hosts: default
  remote_user: vagrant
  become: true
  become_method: sudo
  become_user: root

  tasks:
    - name: "prepare installing"
      yum:
        name: ["epel-release", "vim", "net-tools"]
        state: latest

...

기본은 default이기에 default로 사용하였다.

ansible 을 통한 provision을 수행시 playbook에 대한 테스트가 필요할수 있다. 이러한 경우 아래와 같이 password 혹은 key를 이용한 테스트를 수행해볼수 있다.

ansible-playbook -i hosts --key-file ~/.vagrant.d/insecure_private_key playbook.yml
# 혹 PasswordAuthentication yes 인 경우
ansible-playbook -i hosts --ask-pass playbook.yml

ansible을 이용한 Jira software 설치를 간단하게 구현해본 Vagrantfile 및 playbook sample을 아래와 같이 첨부한다.

Windows에서 Vagrant와 Ansible

참고로 windows의 경우 ansible 사용이 공식적으로 지원되지 않는다. 하여 아래와 같은 plugin 설치후 사용이 필요하다.
https://github.com/vovimayhem/vagrant-guest_ansible

PS C:\Users\jacob\workspaces\vagrant-server> vagrant plugin install vagrant-guest_ansible
Installing the 'vagrant-guest_ansible' plugin. This can take a few minutes...
Fetching: vagrant-guest_ansible-0.0.4.gem (100%)
Installed the plugin 'vagrant-guest_ansible (0.0.4)'!

이후 Vagrantfile내에 아래와 같은 script를 추가한다.

Vagrant.configure("2") do |config|
    config.vm.box = "centos/7"
    provisioner = Vagrant::Util::Platform.windows? ? :guest_ansible : :ansible

    config.vm.provision provisioner do |ansible|
      ansible.playbook = "provision/playbook.yml"
    end
  end

아래 링크를 참고한다.

참고로 plugin의 경우 매 workspace마다 설치해야 한다.

추가사항

windows WSL에서 사용하기 위해서는 다음과 같은 작업이 필요하다.

WSL을 이용하는 경우 ansible은 ubuntu 버전으로 제공되어 이를 활용하면 추가 plugin 없이도 사용 가능하다.

export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"
export PATH="$PATH:/mnt/c/Program Files/Oracle/VirtualBox"

만약 windows에 vagrant가 설치되어 있다면 버전을 맞추어야 작동이 가능하다.

jacob@JACOB-DESKTOP:~/workspaces/vagrant-ansible$ vagrant up                                                                                            /usr/lib/ruby/vendor_ruby/rbnacl/libsodium/version.rb:5: warning: Insecure world writable dir /mnt/c in PATH, mode 040777
Vagrant cannot currently enable access to manage machines within the Windows
environment because the version of Vagrant installed on Windows does not
match this version of Vagrant running within the Windows Subsystem for Linux.
Please ensure both installation of Vagrant are the same. If you do not want
update your Vagrant installations you can disable Windows access by unsetting
the `VAGRANT_WSL_ACCESS_WINDOWS_USER` environment variable.

  Windows Vagrant version: unknown
  Windows Subsystem for Linux Vagrant version: 2.0.2

WSL에는 2.0.2가 설치되어 있었고 windows에는 2.2.4가 설치된 상황이어서 위와 같은 현상이 발생되었고 WSL에 2.2.4 deb 파일을 다운로드 받아 업데이트 한 후에 정상적으로 vagrant up 명령이 실행됨을 확인하였다.

참고사이트

'Cloud > Private Cloud' 카테고리의 다른 글

VirtualBox VM booting stuck when Hyper-V feature enabled  (0) 2019.05.16
Vagrant with VirtualBox in Ubuntu 19.04  (0) 2019.05.12
vagrant with Ansible  (0) 2019.05.09
vagrant  (0) 2019.05.06
nested virtualization enable on Red Hat Virtualization  (0) 2018.10.31
How to analysis for Soure Code  (0) 2018.08.30
댓글
댓글쓰기 폼