天天看點

如何使用Ansible來傳遞Vagrant執行個體

如何使用Ansible來傳遞Vagrant執行個體

設定工作環境

在用 ansible 配置 vagrant 執行個體時,你需要做幾件準備的事情。首先在主控端上安裝 ansible 和 vagrant,在你的主機上運作下面的指令來安裝:

sudo dnf install ansible vagrant vagrant-libvirt 

上面的指令将 ansible 和 vagrant 在你的主控端上,以及包括 vagrant 的 libvirt 接口。vagrant 并沒有提供托管你的虛拟機的功能,它需要第三方工具比如:libirt、virtualbox、vmware 等等。這些工具可以直接與你的 fedora 系統上的 libvirt 和 kvm 協同工作。

接着确認你的賬戶在正确的 wheel 使用者組當中,確定你可以運作系統管理者指令。如果你的賬号在安裝過程中就建立為管理者,那麼你就肯定在這個使用者組裡。運作下面的指令檢視:

id | grep wheel 

如果你能看到輸出,那麼你的賬戶就在這個組裡,可以進行下一步。如果沒有的話,你需要運作下面的指令,這一步需要你提供 root 賬戶的密碼,将 <username> 換成你的使用者名:

su -c 'usermod -a -g wheel <username>' 

然後,你需要登出然後重新登入,確定在使用者組裡。

現在要建立你的第一個 vagrant 執行個體了,你需要用 ansible 來配置它。

設定 vagrant 執行個體

配置一個鏡像執行個體之前,你需要先建立它。建立一個目錄,存放 vagrant 執行個體相關的檔案,并且将它作為目前工作目錄,用下面這條指令:

mkdir -p ~/lampbox && cd ~/lampbox 

在建立鏡像執行個體之前,你需要搞清楚目的,這個鏡像執行個體是一個運作 centos 7 基礎系統,模闆包括 apache 的 web 服務,mariadb(mysql 原開發者建立的一個流行的開源資料庫)資料庫和 php 服務。

初始化 vagrant 執行個體,用 vagrant init 指令:

vagrant init centos/7

這個指令初始化 vagrant 執行個體,并建立一個名為 vagrantfile 的檔案,包含一些預先配置的變量。打開并編輯它,下面的指令顯示了用于這次配置的基本鏡像執行個體。

config.vm.box = "centos/7" 

現在設定端口轉發,以便你配置完畢 vagrant 執行個體并讓它運作起來之後可以測試它。将下述配置加入到 vagrantfile 的最終的 end 語句之前:

config.vm.network "forwarded_port", guest: 80, host: 8080 

這個指令将 vagrant 執行個體 的 80 端口映射為主機的 8080 端口。

下一步是設定 ansible 作為配置 vagrant 執行個體的工具,将下述配置加入到 vagrantfile 最終的 end 語句之前,将 ansible 作為配置工具provisioning provider:

config.vm.provision :ansible do |ansible| 

ansible.playbook = "lamp.yml" 

end 

(必須将這三行在最後的 end 語句之前加入)注意 ansible.playbook = "lamp.yml" 這一句定義了配置鏡像執行個體的 ansible playbook 的名字。

建立 ansible playbook

在 ansible 之中,playbook 是指在你的遠端節點執行的政策,換句話說,它管理遠端節點的配置和部署。詳細的說,playbook 是一個 yaml 檔案,在裡面寫入你要在遠端節點上将要執行的任務。是以,你需要建立一個名為 lamp.yml 的 playbook 來配置鏡像執行個體。

在 vagrantfile 相同的目錄裡建立一個 lamp.yml 檔案,将下面的内容粘貼到檔案當中:

--- 

- hosts: all 

  become: yes 

  become_user: root 

  tasks: 

  - name: install apache 

    yum: name=httpd state=latest 

  - name: install mariadb 

    yum: name=mariadb-server state=latest 

  - name: install php5 

    yum: name=php state=latest 

  - name: start the apache server 

    service: name=httpd state=started 

  - name: install firewalld 

    yum: name=firewalld state=latest 

  - name: start firewalld 

    service: name=firewalld state=started 

  - name: open firewall 

    command: firewall-cmd --add-service=http --permanent 

每一行代表的意思:

hosts: all 指定該 playbook 需要在 ansible 配置檔案中定義的所有主機上都執行,因為還沒定義主機, playbook 将隻在本地運作。

sudo: true 表明該任務需要用 root 權限運作。(lctt 譯注:此語句上述配置中缺失。)

tasks: 指定當 playbook 運作是需要執行的任務,在這一節之下:

name: ... 描述任務的名字

yum: ... 描述該任務應該由 yum 子產品執行,可選的 key=value 鍵值對将由 yum 子產品所使用。

當 playbook 運作時,它會安裝最新的 apache web 服務(http),mariadb 和 php。當安裝完畢并啟動防火牆 firewalld,給 apache 打開一個端口。你可以通過編寫 playbook 來完成這些。現在可以配置它了。

配置鏡像 執行個體

用 ansible 配置 vagrant 執行個體隻需要以下幾步了:

vagrant up --provider libvirt 

上面的指令運作 vagrant 執行個體,将執行個體的基礎鏡像下載下傳到主控端當中(如果還沒下載下傳的話),然後運作 lamp.yml 來進行配置。

如果一切正常,輸出應該和下面的例子類似:

如何使用Ansible來傳遞Vagrant執行個體

這個輸出顯示鏡像執行個體已經被配置好了,現在檢查服務是否可用,在主控端上打開浏覽器,輸入http://localhost:8080,記住本地主機的 8080 端口是 vagrant 執行個體映射過來的 80 端口。你應該可以看到如下的 apache 的歡迎界面。

如何使用Ansible來傳遞Vagrant執行個體

要修改你的 vagrant 執行個體,你可以修改 lamp.yml,你能從 ansible 的官網上找到很多文章。然後運作下面的指令來重新配置:

vagrant provision 

總結

現在我們知道怎麼用 ansible 來配置 vagrant 執行個體了。這隻是一個基本的例子,但是你可以用這些工具來實作不同的例子。比如你可以用所需工具的最新版本來部署一個完整的應用。現在你可以用 ansible 來配置你自己的遠端伺服器和容器了。

本文作者:佚名

來源:51cto