您好,登錄后才能下訂單哦!
這篇文章主要講解了“OCF便利的函數有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“OCF便利的函數有哪些”吧!
7 便利的函數
7.1 日志: ocf_log
資源代理應該使用ocf_log函數來進行日志。調用方法如下:
支持如下幾種日志級別:
debug ---- debugging 消息。多數的日志配置缺省不使用這個級別。
info ---- 是關于資源代理行為和狀態的信息
warn ---- 警告。一些不期望的行為,但是不是不可恢復的錯誤
err ---- 錯誤。這些日志在出現資源代理以一定錯誤碼exit之前
crit ---- 臨界錯誤。以為有err級別。crit級別就非常少用,出發資源代理也以一定的錯誤碼退出
7.2 檢查二進制:have_binary和 check_binary
資源代理可能需要測試特定可執行文件的可用性。可以使用have_binary函數:
1 2 3 | if ! have_binary frobnicate; then ocf_log warn "Missing frobnicate binary, frobnication disabled!" fi |
如果二進制文件缺失是一個致命的錯誤,就應該提前調用check_binary函數:
1 | check_binary frobnicate |
使用check_binary是檢查文件存在(并且可執行)的一個很便捷的方法,如果沒找到或不可執行的話,以$OCF_ERR_INSTALLED退出。
注意:have_binary和check_binary會在$PATH 定義的目錄下去找指定的二進制文件。建議最好是做全路徑檢查,分布式環境里面,用戶策略的變化都會使得文件路徑發生變化。
7.3 執行命令并收集輸出:ocf_run
任何時候需要執行一個命令并獲得其輸出都可以使用ocf_run函數,像下面的例子這樣:
1 | ocf_run "frobnicate --spam=eggs" || exit $OCF_ERR_GENERIC |
通過上面的命令,資源代理會調用frobnicate --spam=eggs 并捕捉其輸出和退出碼。如果退出碼非零(代表一種錯誤),ocf_run 以 err級別將輸出記錄到日志,資源代理隨后退出。如果退出碼是0(表示成功),則輸出將以info級別記錄到日志。
如果資源代理希望忽略成功執行的輸出,可以使用 -q 參數。在下面的例子中,ocf_run 只會將退出碼非零的執行輸出結果導入日志。
1 | ocf_run -q "frobnicate --spam=eggs" || exit $OCF_ERR_GENERIC |
最后,如果資源代理想以不同的日志級別(非 err )記錄那些返回碼非零的執行結果,可以通過使用 -info 或者 -warn參數:
1 | ocf_run -warn "frobnicate --spam=eggs" |
7.4 鎖:ocf_take_lock和 ocf_release_lock_on_exit
偶然也會出現這種情況,按集群配置,相同類型的不同資源不能同時并行運行。資源代理需要保證在相同機器上不會并行:
1 2 3 4 5 6 7 8 | LOCKFILE=${HA_RSCTMP}/foobar ocf_release_lock_on_exit $LOCKFILE foobar_start() { ... ocf_take_lock $LOCKFILE ... } |
ocf_take_lock 試圖獲得指定的$LOCKFILE。不可得時,它sleep 0到1秒間一個隨機的時間,再重試。ocf_release_lock_on_exit 會在資源代理退出的時候釋放鎖文件。
7.5 數值檢測
對于參數檢測,這個函數可以用來檢測一個值是否是一個數。例子如下:
1 2 3 4 5 6 7 8 9 10 | LOCKFILE=${HA_RSCTMP}/foobar ocf_release_lock_on_exit $LOCKFILE foobar_validate_all() { if ! ocf_is_decimal $OCF_RESKEY_eggs; then ocf_log err "eggs is not numeric!" exit $OCF_ERR_CONFIGURED fi ... } |
7.6 boolean值檢測
當資源代理定義一個boolean類型的參數,用戶會將這個參數指定為0/1, true/false, 或者 on/off。在資源代理里面,去檢測這些值是很麻煩的,所以應該用ocf_is_true函數比較方便:
1 2 3 | if ocf_is_true $OCF_RESKEY_superfrobnicate; then ocf_run "frobnicate --super" fi |
注意:ocf_is_true 不可以對空的或者不存在的變量使用。它總是返回退出碼 1,相當于 false。
7.7 偽資源:ha_pseudo_resource
偽資源是那種不像實際可運行進程一樣可以真實啟動和停止的資源代理,它們僅僅執行單個的行為,并以某種方式跟蹤這個行為執行了還是沒有。portblock資源代理是這樣的一個例子。
偽資源的資源代理可以使用ha_pseudo_resource, 它石永紅tracking file(跟蹤文件)開保存資源狀態的標簽。如果foobar是為資源的資源代理,其start的行為應該像下面這個樣子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | foobar_start() { # exit immediately if configuration is not valid foobar_validate_all || exit $? # if resource is already running, bail out early if foobar_monitor; then ocf_log info "Resource is already running" return $OCF_SUCCESS fi # start the pseudo resource ha_pseudo_resource ${OCF_RESOURCE_INSTANCE} start # After the resource has been started, check whether it started up # correctly. If the resource starts asynchronously, the agent may # spin on the monitor function here -- if the resource does not # start up within the defined timeout, the cluster manager will # consider the start action failed while ! foobar_monitor; do ocf_log debug "Resource has not started yet, waiting" sleep 1 done # only return $OCF_SUCCESS if _everything_ succeeded as expected return $OCF_SUCCESS } |
感謝各位的閱讀,以上就是“OCF便利的函數有哪些”的內容了,經過本文的學習后,相信大家對OCF便利的函數有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。