最近一年有機會在生產環境上使用 Ansible。用的過程中,想把一些小技巧記錄下來,避免自己忘記。如果能幫助到其他同學就更好了。如果有同學指出有更好的方法,就更更好了。
技巧1:校驗你的模板文件是否正確
通常我們會使用templatemodule 來生成應用的配置,比如生成 Nginx 的配置或者 sudoers 配置。而像 sudoers 文件內的配置錯誤可能直接導致無法登錄。所以,我們希望在生成這些配置文件后能校驗一下它的正確性。如果校驗失敗,直接停止,不生成該配置文件。
而templatemodule 有一個屬性validate就是為了實現這一需求的:
- template: src: "user-sudoers" dest: "/etc/sudoers.d/abc" validate: visudo -cf %s
校驗 Nginx 配置文件的文件:
- name: Copy the nginx file template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf validate: "/usr/sbin/nginx-t-c%s" notify: - restart nginx
校驗 Prometheus 配置文件:
- name: Copy Prometheus config template: src: prometheus.yml.j2 dest: "/etc/prometheus.yml" validate: "promtoolcheckconfig%s" notify: reload prometheus config
校驗 Logstash 配置文件:
- name: template configs template: src: "logstash-filter.conf" dest: "/opt/logstash/conf" validate: "logstash-t-f%s" environment: JAVA_HOME: "" ## logstash 命令需要 JAVA_HOME 環境變量
技巧2:使用 host 變量解決分布式系統中的 id 問題
在部署 Zookeeper 時,通常會部署 3 臺組成集群,同時每臺 Zookeeper 都需要在配置一個 myid 的文本文件,而這個文件中只放id。而 id 是要求每臺機器都是不同的。這時 host 變量派上用場了。定義 host 變量有兩種方式:
第一種:直接在 inventory 文件中定義
[zk] 192.168.1.11 myid=1 192.168.1.12 myid=2 192.168.1.13 myid=3
第二種:在 host_vars 目錄中定義
這種方式筆者認為可維護性更高
├── group_vars ├── host_vars │ ├── 192.168.1.11 │ ├── 192.168.1.12 │ ├── 192.168.1.13 ├── hosts#cat 192.168.1.11myid: 1
不推薦兩種方式都使用,因為變量的作用域問題會把你搞暈
技巧3:在執行 shell 時需要某個環境變量
某個 shell 需要一個臨時變量,可以使用 environment 實現
- name: install | Build commons daemon. shell: "./configure&&makechdir=/opt/pinpoint/" environment: - JAVA_HOME: ""
技巧4:Jinjia2 語法:去除最后的逗號
以下方式會生成:a,a,a,a,注意最后的逗號我們是不需要的:
{% for f in files %} a, {% endfor %}
這時,我們可以這樣:
{% for f in files %} a{%- if not loop.last -%},{% endif %} {% endfor %}
技巧5: 利用 host 變量解決機器連接方式的不統一的問題
機器標準化要求每臺機器的ssh連接方式及管理員用戶名及密碼都是一樣的。但是事實中,面對老機器,常常做不過。所以,我們的 Ansible 腳本必須能做到不同的機器可以使用不同的連接方式、管理員用戶名和密碼。利用 host 變量就可以實現了。
舉個例子,當前的文件內容如下:
├── group_vars ├── host_vars │ ├── 192.168.1.11 │ ├── 192.168.1.12 │ ├── 192.168.1.13 ├── hosts#cat 192.168.1.11ansible_ssh_user: abcansible_become_method: sudoansible_ssh_private_key_file: /users/abc/id_rsa#cat 192.168.1.12ansible_ssh_user: bcdansible_become_method: sudoansible_ssh_pass: 1234567#cat 192.168.1.13ansible_ssh_user: bcdansible_become_method: suansible_ssh_private_key_file: /users/bcd/id_rsaansible_ssh_pass: 1234567
-
配置
+關注
關注
1文章
188瀏覽量
18376
原文標題:使用Ansible實現自動化運維的一些技巧
文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論