<a target="_blank"></a>
在用 ansible 配置 vagrant 執行個體時,你需要做幾件準備的事情。首先在主控端上安裝 ansible 和 vagrant,在你的主機上運作下面的指令來安裝:
<code>sudo dnf install ansible vagrant vagrant-libvirt</code>
上面的指令将 ansible 和 vagrant 在你的主控端上,以及包括 vagrant 的 libvirt 接口。vagrant 并沒有提供托管你的虛拟機的功能,它需要第三方工具比如:libirt、virtualbox、vmware 等等。這些工具可以直接與你的 fedora 系統上的 libvirt 和 kvm 協同工作。
接着确認你的賬戶在正确的 wheel 使用者組當中,確定你可以運作系統管理者指令。如果你的賬号在安裝過程中就建立為管理者,那麼你就肯定在這個使用者組裡。運作下面的指令檢視:
<code>id | grep wheel</code>
如果你能看到輸出,那麼你的賬戶就在這個組裡,可以進行下一步。如果沒有的話,你需要運作下面的指令,這一步需要你提供 root 賬戶的密碼,将 <username> 換成你的使用者名:
<code>su -c 'usermod -a -g wheel <username>'</code>
然後,你需要登出然後重新登入,確定在使用者組裡。
現在要建立你的第一個 vagrant 執行個體了,你需要用 ansible 來配置它。
配置一個鏡像執行個體之前,你需要先建立它。建立一個目錄,存放 vagrant 執行個體相關的檔案,并且将它作為目前工作目錄,用下面這條指令:
<code>mkdir -p ~/lampbox && cd ~/lampbox</code>
在建立鏡像執行個體之前,你需要搞清楚目的,這個鏡像執行個體是一個運作 centos 7 基礎系統,模闆包括 apache 的 web 服務,mariadb(mysql 原開發者建立的一個流行的開源資料庫)資料庫和 php 服務。
初始化 vagrant 執行個體,用 <code>vagrant init</code> 指令:
<code>vagrant init centos/7</code>
這個指令初始化 vagrant 執行個體,并建立一個名為 vagrantfile 的檔案,包含一些預先配置的變量。打開并編輯它,下面的指令顯示了用于這次配置的基本鏡像執行個體。
<code>config.vm.box = "centos/7"</code>
現在設定端口轉發,以便你配置完畢 vagrant 執行個體并讓它運作起來之後可以測試它。将下述配置加入到 vagrantfile 的最終的 <code>end</code> 語句之前:
<code>config.vm.network "forwarded_port", guest: 80, host: 8080</code>
這個指令将 vagrant 執行個體 的 80 端口映射為主機的 8080 端口。
下一步是設定 ansible 作為配置 vagrant 執行個體的工具,将下述配置加入到 vagrantfile 最終的 <code>end</code> 語句之前,将 ansible 作為配置工具provisioning provider:
<code>config.vm.provision :ansible do |ansible|</code>
<code>ansible.playbook = "lamp.yml"</code>
<code>end</code>
(必須将這三行在最後的 <code>end</code> 語句之前加入)注意 <code>ansible.playbook = "lamp.yml"</code> 這一句定義了配置鏡像執行個體的 ansible playbook 的名字。
在 ansible 之中,playbook 是指在你的遠端節點執行的政策,換句話說,它管理遠端節點的配置和部署。詳細的說,playbook 是一個 yaml 檔案,在裡面寫入你要在遠端節點上将要執行的任務。是以,你需要建立一個名為 lamp.yml 的 playbook 來配置鏡像執行個體。
在 vagrantfile 相同的目錄裡建立一個 lamp.yml 檔案,将下面的内容粘貼到檔案當中:
<code>---</code>
<code>- hosts: all</code>
<code>become: yes</code>
<code>become_user: root</code>
<code>tasks:</code>
<code>- name: install apache</code>
<code>yum: name=httpd state=latest</code>
<code>- name: install mariadb</code>
<code>yum: name=mariadb-server state=latest</code>
<code>- name: install php5</code>
<code>yum: name=php state=latest</code>
<code>- name: start the apache server</code>
<code>service: name=httpd state=started</code>
<code>- name: install firewalld</code>
<code>yum: name=firewalld state=latest</code>
<code>- name: start firewalld</code>
<code>service: name=firewalld state=started</code>
<code>- name: open firewall</code>
<code>command: firewall-cmd --add-service=http --permanent</code>
每一行代表的意思:
<code>hosts: all</code> 指定該 playbook 需要在 ansible 配置檔案中定義的所有主機上都執行,因為還沒定義主機, playbook 将隻在本地運作。
<code>sudo: true</code> 表明該任務需要用 root 權限運作。(lctt 譯注:此語句上述配置中缺失。)
<code>tasks:</code> 指定當 playbook 運作是需要執行的任務,在這一節之下:
<code>name: ...</code> 描述任務的名字
<code>yum: ...</code> 描述該任務應該由 yum 子產品執行,可選的 key=value 鍵值對将由 yum 子產品所使用。
當 playbook 運作時,它會安裝最新的 apache web 服務(http),mariadb 和 php。當安裝完畢并啟動防火牆 firewalld,給 apache 打開一個端口。你可以通過編寫 playbook 來完成這些。現在可以配置它了。
用 ansible 配置 vagrant 執行個體隻需要以下幾步了:
<code>vagrant up --provider libvirt</code>
上面的指令運作 vagrant 執行個體,将執行個體的基礎鏡像下載下傳到主控端當中(如果還沒下載下傳的話),然後運作 lamp.yml 來進行配置。
如果一切正常,輸出應該和下面的例子類似:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5Gcugza0MjcvRTbtJXZ6ZWYkxGM0YTM5AzLcFjMvwFMxYTMwIzLc1WdixWYvwFduVWboNWY0RXYvwVY0FGZvwVZt5CevJWcu42Y4VnbpxWLuR2Lc9CX6MHc0RHaiojIsJye.png)
這個輸出顯示鏡像執行個體已經被配置好了,現在檢查服務是否可用,在主控端上打開浏覽器,輸入<code>http://localhost:8080</code>,記住本地主機的 8080 端口是 vagrant 執行個體映射過來的 80 端口。你應該可以看到如下的 apache 的歡迎界面。
<code>vagrant provision</code>
現在我們知道怎麼用 ansible 來配置 vagrant 執行個體了。這隻是一個基本的例子,但是你可以用這些工具來實作不同的例子。比如你可以用所需工具的最新版本來部署一個完整的應用。現在你可以用 ansible 來配置你自己的遠端伺服器和容器了。
原文釋出時間為:2016-10-21
本文來自雲栖社群合作夥伴“linux中國”