一 點睛
在實際應用場景中,我們希望一些任務、配置根據裝置效能的不同而產生差異,比如使用本機cpu核數動態配置nginx的worker_processes引數,可能有一組主機的應用配置檔案幾乎相同,但略有不同的配置項可以引用變數。在ansible中使用變數的目的是方便處理系統之間的差異。
變數名的命名規則由字母、數字和下劃線組合而成,變數必須以字母開頭,如「foo_port」是乙個合法的變數,「foo5」也是可以的,「foo-port」、「foo port」、「foo.port」和「12」都是非法的變數命名。
二 jinja2過濾器
1 點睛
2 格式
}3 示例
實現獲取乙個檔案路徑變數過濾出檔名。
}
獲取檔案所處的目錄名
}
從「/etc/profile」中過濾出檔案 名「profile」,並輸出重定向到/tmp/testshell檔案中。
---
- hosts: 192.168.1.21
vars:
filename: /etc/profile
tasks:
- name: "shell1"
shell: echo } >> /tmp/testshell
三 本地facts
1 點睛
我們可以通過facts來獲取目標主機的系統資訊,當這些資訊還不能滿足我們的功能需求時,可以通過編寫自定義的facts模組來實現。當然,還有乙個更簡單的實現方法,就是通過本地facts來實現。只需在目標裝置/etc/ansible/facts.d目錄定義json、ini或可執行檔案的json輸出,副檔名要求使用「.fact」,這些檔案都可以作為ansible的本地facts。
2 實戰
第一步:在192.168.0.101機器上建立/etc/ansible/facts.d/preferences.fact,內容如下:
[general]
max_memory_size=32
max_user_processes=3730
open_files=65535
第二步:在主控端執行下面命令
[root@localhost nginx]# ansible 192.168.0.101 -m setup -a "filter=ansible_local"
192.168.0.101 | success => }}
},"changed": false
}
3 說明
注意返回json的層次結構,preferences(facts檔名字首)→general(ini的節名)→key:value(ini的鍵與值)。
最後就可以在我們的模板或playbook中通過以下方式進行呼叫。
}
四 註冊變數
1 點睛
變數的另乙個用途是將一條命令的執行結果儲存到變數中,供後面的playbook使用。
2 示例
- hosts: web_servers
tasks:
- shell: /usr/bin/foo
register: foo_result
ignore_errors: true
- shell: /usr/bin/bar
when: foo_result.rc == 5
3 說明
上述示例註冊了乙個foo_result變數,變數值為shell:/usr/bin/foo的 執行結果,ignore_errors:true為忽略錯誤。變數註冊完成後,就可以在後面playbook中使用了,當條件語句when:foo_result.rc==5成立時, shell:/usr/bin/bar命令才會執行,其中foo_result.rc為返回/usr/bin/foo的 resultcode(返回碼)。
下面示例說明返回碼是「rc=0」
[root@localhost nginx]# ansible 192.168.0.101 -m command -a "echo 'return code test'"
192.168.0.101 | success | rc=0 >>
return code test
python之自動化運維 Paramiko
使用開源的paramiko,我們就可以用python 中通過ssh協議對遠端伺服器執行操作,不需要手敲ssh命令,從而實現自動化運維。ssh是乙個協議,openssh是其中乙個開源實現,paramiko庫,實現了sshv2協議 底層使用cryptography 專案文件 點我跳轉 擴充套件 ssh協...
運維自動化
1,cobbler安裝環境準備 安裝epel epel release 6 8.noarch.rpm x86 64 epel release 6 8.noarch.rpm x86 安裝系列依賴環境 要是區域網用,建議關閉iptables 或是放行25151 80 69埠 和關閉selinux 檢視狀...
自動化運維
考慮的因素 源 打包為映象 發布到映象庫 利用k8s發布到物理機器執行,以服務的形式對外提供服務 目前的做法 0 建立乙個執行遠端命令的框架 1 每個應用建立乙個部署檔案指令碼 a 指定元 位址 c 同步源 到目標主機 d 接受指令碼引數 vername 2 版本號,映象tag fromport 3...