Ansible的配置檔案

Ansible的一些的設定可以通過配置檔案完成.在大多數場景下預設的配置就能滿足大多數使用者的需求,在一些特殊場景下,使用者還是需要自行修改這些配置檔案

使用者可以修改一下配置檔案來修改設定,他們的被讀取的順序如下:

* ANSIBLE_CONFIG (一個環境變數)
* ansible.cfg (位於當前目錄中)
* .ansible.cfg (位於家目錄中)
* /etc/ansible/ansible.cfg

版本1.5之前的讀取順序如下:

* ansible.cfg (位於當前目錄)
* ANSIBLE_CONFIG (一個環境變數)
* .ansible.cfg (位於家目錄下)
* /etc/ansible/ansible.cfg

Ansible 將會按以上順序逐個查詢這些檔案,直到找到一個為止,並且使用第一個尋找到個配置檔案的配置,這些配置將不會被疊加.

獲取最新配置檔案

如果使用程式包管理器安裝ansible,最新的 ansible.cfg 配置檔案有可能出現在 /etc/ansible 下並且命名為 ”.rpmnew”, 也可能根據不同的更新命名為其它名稱

如果你是通過 pip 或者其他方式安裝,則可能需要自行建立這個檔案,以免原配置檔案被覆蓋.Ansible 的預設設定將會將其覆蓋

配置檔案的詳細參數以及取值範圍請檢視`ansible.cfg <https://raw.github.com/ansible/ansible/devel/examples/ansible.cfg>`_

環境配置

Ansible 通過環境變數的形式來進行配置.這些設定後的環境變數將會覆蓋掉所有配置檔案讀取的配置.為了節省篇幅,這些變數沒有被列在這裡,詳情請見原始碼目錄中的 ‘constants.py’. 相對於配置檔案它門會比當作遺產系統(legacy system) 來被使用,但是仍然有效

配置檔案不同段詳解

配置檔案被切割成了不同段.多數配置選項位於“general”段, 也有一些屬於特定的連結類型(connection type)

通用預設段

在 [defaults] 段中,一下選項是可以調節的:

action_plugins

“行為”是 ansible中的一段程式碼,用來啟用一些事件,例如執行一個模組,一個模版,等等

這是一個以開發者為中心的特性,使得一些底層模組可以從外部不同地方載入:

action_plugins = ~/.ansible/plugins/action_plugins/:/usr/share/ansible_plugins/action_plugins

大多數使用者都會使用這一特性,詳情請見 Developing Plugins .

ansible_managed

Ansible-managed 是一個字元串.可以插入到Ansible配置模版系統生成的檔案中.如果你使用以下的自字元:

{{ ansible_managed }}

預設設定可以哪個使用者修改和修改時間:

ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}

這個設定可以告知使用者,Ansible修改了一個檔案,並且手動寫入的內容可能已經被覆蓋.

需要注意的是,如果使用這一特性,這個字元串中將包含一個日期註釋,如果日期更新,模版系統將會在每一次報告檔案修改.

ask_pass

這個可以控制,Ansible 劇本playbook 是否會自動預設彈出彈出密碼.預設為no::
ask_pass=True

如果使用SSH 金鑰匙做身份認證.可能需要修改這一參數

ask_sudo_pass

類似 ask_pass,用來控制Ansible playbook 在執行sudo之前是否詢問sudo密碼.預設為no:

ask_sudo_pass=True

如果使用者使用的系統平臺開啟了sudo 密碼的話,應該開綠這一參數

bin_ansible_callbacks

New in version 1.8.

用來控制callback外掛是否在執行 /usr/bin/ansible 的時候被載入. 這個模組將用於命令列的日誌系統,發出通知等特性. Callback外掛如果存在將會永久性的被 /usr/bin/ansible-playbook 載入,不能被禁用:

bin_ansible_callbacks=False

1.8 版本之前,callbacks 外掛不可以被 /usr/bin/ansible載入. .. _callback_plugins:

callback_plugins

Callbacks 在ansible中是一段程式碼,在特殊事件時將被呼叫.並且允許出發通知. 這是一個以開發者為中心的特性,可以實現對Ansible的底層拓展,並且拓展模組可以位於任何位置:

callback_plugins = ~/.ansible/plugins/callback_plugins/:/usr/share/ansible_plugins/callback_plugins

大多數的使用者將會用到這一特性,詳見 Developing Plugins.

command_warnings

New in version 1.8.

從Ansible 1.8 開始,當shell和命令列模組被預設模組簡化的時,Ansible 將預設發出警告. 這個包含提醒使用’git’但不是通過命令列執行.使用模組呼叫比冒然使用命令列呼叫可以使playbook工作更具有一致性也更加可靠同時也更加便於維護:

command_warnings = False

我們可以通過在命令列末尾新增 warn=yes 或者 warn=no選項來控制是否開啟警告提示:

- name: usage of git that could be replaced with the git module
  shell: git update foo warn=yes

connection_plugins

連線外掛允許拓展ansible拓展通訊通道,用來傳輸命令或者檔案. 這是一個開發者中心特性,拓展外掛可以從任何不同地方載入:

connection_plugins = ~/.ansible/plugins/connection_plugins/:/usr/share/ansible_plugins/connection_plugins

大多數使用者會用到這一特性, 詳見:Developing Plugins .. _deprecation_warnings:

deprecation_warnings

New in version 1.3.

允許在ansible-playbook輸出結果中禁用“不建議使用”警告:

deprecation_warnings = True

“不建議警告”指的是使用一些在新版本中可能會被淘汰的遺留特性.

display_skipped_hosts

如果設定為`False`,ansible 將不會顯示任何跳過任務的狀態.預設選項是現實跳過任務的狀態::
display_skipped_hosts=True

注意Ansible 總是會顯示任何任務的標頭檔案, 不管這個任務被跳過與否.

error_on_undefined_vars

從Ansible 1.3開始,這個選項將為預設,如果所引用的變數名稱錯誤的話, 將會導致ansible在執行步驟上失敗::
error_on_undefined_vars=True

If set to False, any ‘{{ template_expression }}’ that contains undefined variables will be rendered in a template or ansible action line exactly as written.

executable

這個選項可以在sudo環境下產生一個shell互動介面. 使用者只在/bin/bash的或者sudo限制的一些場景中需要修改.大部分情況下不需要修改::
executable = /bin/bash

filter_plugins

過濾器是一種特殊的函數,用來拓展模版系統 .

這是一個開發者核心的特性,允許Ansible從任何地方載入底層拓展模組:

filter_plugins = ~/.ansible/plugins/filter_plugins/:/usr/share/ansible_plugins/filter_plugins

Most users will not need to use this feature. See Developing Plugins for more details 大部分使用者不會用到這個特性,詳見:doc:developing_plugins.

force_color

到沒有使用TTY終端的時候,這個選項當用來強制顏色模式::
force_color = 1

force_handlers

New in version 1.9.1.

即便這個使用者崩潰,這個選項仍可以繼續執行這個使用者:

force_handlers = True

The default is False, meaning that handlers will not run if a failure has occurred on a host. This can also be set per play or on the command line. See _handlers_and_failure for more details. 如果這個選項是False. 如果一個主機崩潰了,handlers將不會再執行這個主機.這個選項也可以通過命令列臨時使用.詳見:doc:_handlers_and_failure.

forks

這個選項設定在與主機通訊時的預設並行程序數.從Ansible 1.3開始,fork數量預設自動設定為主機數量或者潛在的主機數量, 這將直接控制有多少網路資源活著cpu可以被使用.很多使用者把這個設定為50,有些設定為500或者更多.如果你有很多的主機, 高數值將會使得跨主機行為變快.預設值比較保守:

_forks=5

gathering

1.6版本中的新特性,這個設定控制預設facts收集(遠端系統變數). 預設值為’implicit’, 每一次play,facts都會被手機,除非設定’gather_facts: False’. 選項‘explicit’正好相反,facts不會被收集,直到play中需要. ‘smart’選項意思是,沒有facts的新hosts將不會被掃描, 但是如果同樣一個主機,在不同的plays裡面被記錄地址,在playbook執行中將不會通訊.這個選項當有需求節省fact收集時比較有用.

hash_behaviour

Ansible 預設將會以一種特定的優先順序覆蓋變數,詳見:doc:playbooks_variables.擁有更高優先順序的參數將會覆蓋掉其他參數

有些使用者希望被hashed的參數(python 中的資料結構’dictionaries’)被合併. 這個設定叫做‘merge’.這不是一個預設設定,而且不影響陣列類型的陣列.我不建議使用這個設定除非你覺得一定需要這個設定.官方例項中不使用這個選項:

hash_behaviour=replace

合法的值為’replace’(預設值)或者‘merge’.

hostfile

在1.9版本中,這不是一個合法設定.詳見:ref:inventory.

host_key_checking

這個特性詳見:doc:intro_getting_started,在Ansible 1.3或更新版本中將會檢測主機金鑰. 如果你瞭解怎麼使用並且希望禁用這個功能,你可以將這個值設定為False:

host_key_checking=True

inventory

這個事預設庫檔案位置,指令碼,或者存放可通訊主機的目錄:

inventory = /etc/ansible/hosts

在1.9版本中被叫做hostfile.

jinja2_extensions

這是一個開發者中心特性,允許開啟Jinja2拓展模組:

jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n

如果你不太清楚這些都是啥,還是不要改的好:)

library

這個事Ansible預設搜尋模組的位置:

library = /usr/share/ansible

Ansible知道如何搜尋多個用冒號隔開的路徑,同時也會搜尋在playbook中的“./library”.

log_path

如果出現在ansible.cfg檔案中.Ansible 將會在選定的位置登陸執行資訊.請留意使用者執行的Ansible對於logfile有許可權:

log_path=/var/log/ansible.log

這個特性不是預設開啟的.如果不設定,ansible將會吧模組載入紀錄在系統日誌系統中.不包含用密碼.

對於需要了解更多日誌系統的企業及使用者,你也許對:doc:tower 感興趣.

lookup_plugins

這是一個開發者中心選項,允許模組外掛在不同區域被載入:

lookup_plugins = ~/.ansible/plugins/lookup_plugins/:/usr/share/ansible_plugins/lookup_plugins

絕大部分使用者將不會使用這個特性,詳見:doc:developing_plugins

module_lang

這是預設模組和系統之間通訊的計算機語言,預設為’C’語言.

module_name

這個是/usr/bin/ansible的預設模組名(-m). 預設是’command’模組. 之前提到過,command模組不支援shell變數,管道,配額. 所以也許你希望把這個參數改為’shell’:

module_name = command

nocolor

預設ansible會為輸出結果加上顏色,用來更好的區分狀態資訊和失敗資訊.如果你想關閉這一功能,可以把’nocolor’設定為‘1’:

nocolor=0

nocows

預設ansible可以呼叫一些cowsay的特性,使得/usr/bin/ansible-playbook執行起來更加愉快.為啥呢,因為我們相信系統應該是一 比較愉快的經歷.如果你不喜歡cows,你可以通通過將’nocows’設定為‘1’來禁用這一選項:

nocows=0

pattern

如果沒有提供“hosts”節點,這是playbook要通訊的預設主機組.預設值是對所有主機通訊,如果不想被驚嚇到,最好還是設定個個選項:

hosts=*

注意 /usr/bin/ansible 一直需要一個host pattern,並且不使用這個選項.這個選項只作用於/usr/bin/ansible-playbook.

poll_interval

對於Ansible中的非同步任務(詳見 非同步操作和輪詢), 這個是設定定義,當具體的poll interval 沒有定義時,多少時間回查一下這些任務的狀態, 預設值是一個折中選擇15秒鐘.這個時間是個回查頻率和任務完成叫回頻率和當任務完成時的迴轉頻率的這種:

poll_interval=15

private_key_file

如果你是用pem金鑰檔案而不是SSH 客戶端或祕密啊認證的話,你可以設定這裡的預設值,來避免每一次提醒設定金鑰檔案位置``–ansible-private-keyfile``:

private_key_file=/path/to/file.pem

remote_port

這個設定是你係統預設的遠端SSH埠,如果不指定,預設為22號埠:

remote_port = 22

remote_tmp

Ansible 通過遠端傳輸模組到遠端主機,然後遠端執行,執行後在清理現場.在有些場景下,你也許想使用預設路徑希望像更換補丁一樣使用, 這時候你可以使用這個選項.:

remote_tmp = $HOME/.ansible/tmp

預設路徑是在使用者家目錄下屬的目錄.Ansible 會在這個目錄中使用一個隨機的資料夾名稱.

remote_user

這是個ansible使用/usr/bin/ansible-playbook連結的預設使用者名稱. 注意如果不指定,/usr/bin/ansible預設使用當前使用者名稱稱:

remote_user = root

roles_path

roles 路徑指的是’roles/’下的額外目錄,用於playbook搜尋Ansible roles.比如, 如果我們有個用於common roles原始碼控制倉庫和一個不同的 playbooks倉庫,你也許會建立一個慣例去在 /opt/mysite/roles 裡面查詢roles.:

roles_path = /opt/mysite/roles

多餘的路徑可以用冒號分隔,類似於其他path字元串:

roles_path = /opt/mysite/roles:/opt/othersite/roles

Roles將會在playbook目錄中開始搜尋.如果role沒有找到,這個參數指定了其它可能的搜尋路徑.

sudo_exe

如果在其他遠端主機上使用另一種方式執行sudo草做, sudo程式的路徑可以用這個參數更換,使用命令列標籤來擬合標準sudo:

sudo_exe=sudo

sudo_flags

當使用sudo支援的時候,傳遞給sudo而外的標籤. 預設值為”-H”, 意思是保留原使用者的環境.在有些場景下也許需要新增或者刪除 標籤,大多數使用者不需要修改這個選項:

sudo_flags=-H

sudo_user

這個是sudo使用的預設使用者,如果``–sudo-user`` 沒有特指或者’sudo_user’ 在Ansible playbooks中沒有特指,在大多數的邏輯中 預設為: ‘root’

sudo_user=root

system_warnings

New in version 1.6.

允許禁用系統執行ansible相關的潛在問題警告(不包括操作主機):

system_warnings = True

這個包括第三方庫或者一些需要解決問題的警告.

timeout

這個事預設SSH連結嘗試超市時間:

timeout = 10

transport

如果”-c <transport_name>” 選項沒有在使用/usr/bin/ansible 或者 /usr/bin/ansible-playbook 特指的話,這個參數提供了預設通訊機制.預設 值為’smart’, 如果本地系統支援 ControlPersist技術的話,將會使用(基於OpenSSH)‘ssh’,如果不支援講使用‘paramiko’.其他傳輸選項包括‘local’, ‘chroot’,’jail’等等.

使用者通常可以這個設定為‘smart’,讓playbook在需要的條件自己選擇‘connectin:’參數.

vars_plugins

這是一個開發者中心選項,允許底層拓展模組從任何地方載入:

vars_plugins = ~/.ansible/plugins/vars_plugins/:/usr/share/ansible_plugins/vars_plugins

大部分的使用者不會用到這個特性,詳見:doc:developing_plugins

vault_password_file

New in version 1.7.

這個用來設定密碼檔案,也可以通過命令列指定``–vault-password-file``:

vault_password_file = /path/to/vault_password_file

在1.7版本中,這個檔案也可以稱為一個指令碼的形式.如果你使用指令碼而不是單純檔案的話,請確保它可以執行並且密碼可以在標準輸出上打印出來.如果你的指令碼需要提示請求資料,請求將會發到標準錯誤輸出中.

Paramiko Specific Settings

Paramiko 是商業版linux 6 的預設SSH連結.但在其他平臺上不是預設使用的.請在[paramiko]標頭檔案下啟用它.

record_host_keys

預設設定會記錄並驗證通過在使用者hostfile中新發現的的主機(如果host key checking 被啟用的話). 這個選項在有很多主機的時候將會效能很差.在 這種情況下,建議使用SSH傳輸代替. 當設定為False時, 效能將會提升,在hostkey checking 被禁用時候,建議使用.:

record_host_keys=True

OpenSSH Specific Settings

在[ssh_connection]標頭檔案之下,用來調整SSH的通訊連線.OpenSSH是Ansible在作業系統上預設的通訊連線,對於支援ControlPersist足夠新了.(意思除了Enterprise linux 6版以及更早的系統外的所有的作業系統).

ssh_args

如果設定了的話,這個選項將會傳遞一組選項給Ansible 然不是使用以前的預設值:

ssh_args = -o ControlMaster=auto -o ControlPersist=60s

使用者可以提高ControlPersist值來提高效能.30 分鐘通常比較合適.

control_path

這個是儲存ControlPath套接字的位置. 預設值是:

control_path=%(directory)s/ansible-ssh-%%h-%%p-%%r

在有些系統上面,會遇到很長的主機名或者很長的路徑名稱(也許因為很長的使用者名稱,或者比較深的家目錄),這些都會 超出套接字檔名字元上限(對於大多數平臺上限為108個字元).在這種情況下,你也許希望按照以下方式縮短字元串:

control_path = %(directory)s/%%h-%%r

Ansible 1.4 以後的版本會引導使用者在這種情況下使用”-vvvv”參數,這樣很容易分辨 Control Path 檔名是否過長.這個 問題在EC2上會頻繁的遇到.

scp_if_ssh

又是使用者操控一個一個沒有開啟SFTP協議的遠端系統.如果這個設定為True,scp將代替用來為遠端主機傳輸檔案:

scp_if_ssh=False

如果沒有遇到這樣的問題沒有必要來修改這個設定.當然修改這個設定也沒有什麼明顯的弊端.大部分的系統環境都預設支援SFTP, 通常情況下不需要修改.

pipelining

在不通過實際檔案傳輸的情況下執行ansible模組來使用管道特性,從而減少執行遠端模組SSH操作次數.如果開啟這個設定,將顯著提高效能. 然而當使用”sudo:”操作的時候, 你必須在所有管理的主機的/etc/sudoers中禁用’requiretty’.

預設這個選項為了保證與sudoers requiretty的設定(在很多發行版中時預設的設定)的相容性是禁用的. 但是為了提高效能強烈建議開啟這個設定.詳見:doc:playbooks_acceleration:

pipelining=False

Accelerated Mode Settings

在[accelerate]首部下, 以下設定可以調整,詳見:doc:playbooks_acceleration.如果你不能在你的環境中開啟:ref:pipelining , Accelertation 是一個很有用的效能特性. 但是如果你可以開啟管道,這個選項也許對你無用.

accelerate_port

New in version 1.3.

在急速模式下使用的埠:

accelerate_port = 5099

accelerate_timeout

New in version 1.4.

這個設定時用來控制從客戶機獲取資料的超時時間.如果在這段時間內沒有資料傳輸,套接字連線會被關閉. 一個保持連線(keepalive)資料包通常每15秒回發回給控制檯,所以這個超時時間不應該低於15秒(預設值為30秒):

accelerate_timeout = 30

accelerate_connect_timeout

New in version 1.4.

這個設定空著套接字呼叫的超時時間.這個應該設定相對比較短.這個和`accelerate_port`連線在回滾到ssh或者paramiko(受限於你預設的連線設定)連線方式之前會嘗試三次開始遠端加速daemon守護程序.預設設定為1.0秒:

accelerate_connect_timeout = 1.0

注意,這個選項值可以設定為小於1秒鐘,但是除非你擁有一個速度很快而且很可靠的網路,否則也許這樣並不是一個很好的選擇.如果你使用英特網訪問你的系統,最好提高這個值.

accelerate_daemon_timeout

New in version 1.6.

This setting controls the timeout for the accelerated daemon, as measured in minutes. The default daemon timeout is 30 minutes:: 這個控制加速daemon守護程序的超時時間,用分鐘來衡量.預設為30分鐘:

accelerate_daemon_timeout = 30

注意, 在1.6版本之前,daemon發起的超時時間是硬編碼的.對於1.6以後的版本,超時時間是根據daemon上一次活動資訊和這個可設定的選項.

accelerate_multi_key

New in version 1.6.

If enabled, this setting allows multiple private keys to be uploaded to the daemon. Any clients connecting to the daemon must also enable this option:: 如果這個選項開啟,這個設定將允許多個私鑰被載入到daemon. 任何客戶端要想連線daemon都需要開啟這個選項:

accelerate_multi_key = yes

通過本地套接字檔案連線的通過SSH上傳金鑰檔案到目標節點的新客戶端,必須在登陸daemon時使用原始的登陸金鑰登陸.