Vagrant 到 Ansible 的替代理由

Vagrant存在的問題

  1. 構築手順不明確
    構築手順是通過VagrantFile來寫的,最終是通過shell的腳本實現。
    導致出現 ①不同的人寫不同的腳本邏輯,可理解性減弱 ② 稍微的構成變更時,需要交由實裝者解決。
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "centos/7"
  config.vm.hostname = "demo"
  config.vm.network :private_network, ip: "192.168.33.10"
  config.vm.synced_folder ".", "/home/vagrant/sync", disabled: true
  config.vm.provision "shell", inline: $script
end

$script = <<SCRIPT
  yum -y install epel-release
  yum -y install nginx
  echo "hello, vagrant" > /usr/share/nginx/html/index.html
  systemctl start nginx
SCRIPT
  1. 設定項目不能追加
    用VagrantFile寫的構築手順,實現的是從一開始的構築過程,如果只想在已構築完成的環境中實現設定項目的追加時,當然可以使用- vagrant provision - 的命令實現,但是基本是依靠腳本的分支處理來實裝,最終沒有形成統一的規範。
  2. 構築手順的環境流用性差
    用VagrantFile寫的構築手順,基本實現的是本地環境的構築,不同的環境的依存設定值不同,需要根據環境配置不同的VagrantFile。

Ansible解決的問題

宣言性

   本身是一種宣言性的記述語言,只需要在playbook中宣言自己想要的設定對象的狀態即可。不需要記載怎麼實現。
例如
service:
    name:nginx
    state:started

不依存於腳本,容易理解。

抽象性

   構成對象的各種不同環境的差異沒必要自己實現,ansible自動對應。
例如
不管配置在RedHat上還是Ubuntu上,不需要記載是用yum還是apt-get,只要記載結果即可,內部實現由ansbie封裝實現。

實現最大化的共通化,提高可移植性。

收束性

   不管對象目前是什麼狀態,保證變更爲期待的狀態。
例如
腳本實現的場合,開發者需要考慮命令背後的前提條件,例如文件是否存在等,ansible中,不需要考慮這些。

只通過記述,開發者就可以很容易把握對象狀態。

冪等性

   不管playbook執行幾遍,都是同樣的結果。
例如
大大降低了實裝,測試的難度, 腳本的話,需要考慮每次執行後的變更條件。

省力化

  1. 便攜性
    不像攜帶光盤鏡像文件等方式,只需要文本文件就可以實現各環境的共享。
  2. review
    通過check文本文件的查分,容易review。
  3. 版本管理
    通過版本管理的軟件來管理文本文件。
  4. 源碼公開
    各種公開的源碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章