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

 

大多數用戶都會使用這一特性.

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

大多數的用戶將會用到這一特性.

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時使用原始的登陸密鑰登陸.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM