learn一門新技術咯:
ansible是新出現的自動化運維工具,基於python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程式部署、批量執行命令等功能。參考文章:ansible是基於模組工作的,本身沒有批量部署的能力。真正具有批量部署的是ansible所執行的模組,ansible只是提供一種框架。主要包括:
(1)、連線外掛程式connection plugins:負責和被監控端實現通訊;
(2)、host inventory:指定操作的主機,是乙個配置檔案裡面定義監控的主機;
(3)、各種模組核心模組、command模組、自定義模組;
(4)、借助於外掛程式完成記錄日誌郵件等功能;
(5)、playbook:劇本執行多個任務時,非必需可以讓節點一次性執行多個任務。
# 首先配置一下源 (不必要)# 安裝
yuminstall -y ansible
usage: ansible [options]-a module_args # 模組引數
-c, --check #不做任何改變,但是會執行
-f forks, --forks=forks # 用來指定併發
--list-hosts #列出主機列表
-m module_name #模組 名
--syntax-check #語法檢查
-k, --ask-pass #輸入密碼
ssh-keygen使用ssh-copy-id批量拷貝公鑰到遠端主機# 生成金鑰對
ssh-copy-id ip位址 # 將金鑰對複製到遠端機器
vi /etc/ansible/hosts
## 被管理機ip差集 『web:!db』192.168.14.144
192.168.14.164
192.168.14.165
## 分組 ( 所有, 開發, 資料庫 )
[all]
192.168.14.144
192.168.14.164
192.168.14.165
[web]
192.168.14.144
192.168.14.164
[db]
192.168.14.164
192.168.14.165
ansible 192.168.14.144 -m ping###192.168.14.144 | success =>
[root@localhost ~]# ansible all -m ping # all192.168.14.165 | success =>
192.168.14.164 | success =>
192.168.14.144 | success =>
ansible 10.0.0.143 -m pingansible
10.0.0.143,10.0.0.144 -m ping
ansible all -m ping
ansible web -m ping
ansible web,db -m ping
ansible
"web:&db
" -m ping
ansible
'web:!db
' -m ping
ansible
'web:db
' -m ping
ansible-doc [-l|-f|-s] [options] [-t ] [plugin]ansible 具有冪等性,冪等性能夠保證我們重複的執行一項操作時,得到的結果是相同的,下面詳細介紹一下冪等性的概念。-j json的方式返回模組內容
-l 以列表的形式返回模組內容
-s, --snippet 以片段式的方式顯示模組的幫助資訊
# 直接顯示模組的全部資訊
ansible-doc -l |wc -l 統計ansible提供的模組
舉個例子,你想把乙個檔案拷貝到目標主機的某個目錄上,但是你不確定此目錄中是否已經存在此檔案,當你使用 ansible 完成這項任務時,就非常簡單了,因為如果目標主機的對應目錄中已經存在此檔案,那麼 ansible 則不會進行任何操作,如果目標主機的對應目錄中並不存在此檔案,ansible 就會將檔案拷貝到對應目錄中。說白了,ansible 是」以結果為導向的」,我們指定了乙個」目標狀態」,ansible 會自動判斷,」當前狀態」是否與」目標狀態」一致,如果一致,則不進行任何操作,如果不一致,那麼就將」當前狀態」變成」目標狀態」,這就是」冪等性」,」冪等性」可以保證我們重複的執行同一項操作時,得到的結果是一樣的。
現在我們就來實驗一下,看看重複執行相同的 ansible 命令時,會得到什麼效果,如下圖所示:
從上圖可以看出,返回資訊仍然包含」success」字樣,證明 ansible 命令執行成功,不過很明顯,這次的返回資訊為」綠色」,而且細心的你一定發現了,這次綠色的返回資訊中,」changed」 欄位的值為false,而之前黃色的返回資訊中,」changed」 欄位的值為 true。
當返回資訊為綠色時,」changed」 為 false,表示 ansible 沒有進行任何操作,沒有」改變什麼」。
當返回資訊為黃色時,」changed」 為 true,表示 ansible 執行了操作,」當前狀態」已經被 ansible 改變成了」目標狀態」。
這就是冪等性的體現,當第一次執行上述命令時,ansible 發現當前主機中並沒有我們需要的 testfile1檔案,ansible 就會按照我們指定的操作,拉取 testfile1 檔案,也就是說,ansible 「改變」了」當前狀態」,將當前」沒有 testfile1 檔案的狀態」變為了」有 testfile1 檔案的狀態」。當我們再次執行同樣的命令時,ansible 發現對應檔案已經存在於對應目錄中,於是 ansible 並沒有做出任何操作,也沒有進行任何改變,因為」當前狀態」與我們預期的」目標狀態」一致,沒有必要再做出重複的無用功。
看到這裡,你應該已經明白,為什麼執行 ansible 命令時,會返回黃色的成功資訊或者綠色的成功資訊了吧?我們可以通過返回資訊的顏色,更加精準的判斷執行命令之前的狀態是否與我們預期的一致。
從返回資訊中可以看到,當 ansible 進行 fetch 操作時,會對對應檔案進行雜湊計算,算出檔案雜湊值,也就是說,如果我們改變了檔案中的內容,雜湊值也將隨之發生改變,這個時候,即使對應目錄中存在同名的檔案,ansible 也會判斷出兩個檔案屬於不同的檔案,因為它們的雜湊值並不相同,我們來實驗一下,操作如下:
如上圖所示,我們在/testdir/ansible/ansible-demo2/testdir/testfile1
檔案的尾部加入乙個」空格」,以改變檔案內容,然後又執行了 fetch 命令,結果發現,ansible-demo2 的返回資訊為黃色,ansible-demo3 主機的返回資訊為綠色,證明 ansible 已經做出了正確的判斷,將修改過的檔案替換為重新拉取的檔案。
PostgreSQL安裝入門教程
一 安裝 首先,安裝postgresql客戶端。sudo apt get install postgresql client 然後,安裝postgresql伺服器。sudo apt get install postgresql 正常情況下,安裝完成後,postgresql伺服器會自動在本機的5432...
ansible 入門教程06 變數
變數的命名要注意,不要使用 而推薦使用 變數可以通過group來定義,也就是定義一些變數給整個組使用,例如 group vars all dbservers 對應的就是我們hosts中定義的組 當然,也可以在playbook中直接定義 當然,我們定義的主要目的還是用使用這些變數 例如,我們在例子中的...
ansible 入門教程04 include
按照官方文件,include就是把一些小的,可以多個play使用的小功能,分別放到單獨的檔案中,使用的時候引用即可,類似我們現在製作 使用的頭部,底部引用,修改的時候修改乙個地方,不需要挨個頁面修改 例如 我們先建立乙個檔案叫 tasks foo.yml 內容如下 name placeholder ...