Python自動化運維之Ansible的變數

2021-09-11 19:52:22 字數 2283 閱讀 9311

一 點睛

在實際應用場景中,我們希望一些任務、配置根據裝置效能的不同而產生差異,比如使用本機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...