配置文件中大多數都是註釋行默認配置項。文件遵循INI格式,分爲幾個類別的配置,下面會分別介紹。
在那以前,先看一下配置文件存放的位置,以及如何從官網獲取配置文件模板。html
Ansible只有一個配置文件ansible.cfg。配置文件能夠存在於多個位置,按下面的順序查找到的第一個生效:linux
只有最早找到的配置文件會生效。另外環境變量的優先級比配置文件高,並且能夠一個一個單獨設置。每一個配置項對應的環境變量的名稱,能夠在下面的官方文檔中查到:
https://docs.ansible.com/ansible/latest/reference_appendices/config.html#common-options
另外每一個變量的默認值也是在這裏查。nginx
還有命令行參數指定的方式,這個是優先級比上面的配置方式高。不過playbook中指定的設置優先級更高,不會被命令行參數覆蓋。git
Ansible安裝後,默認會在/etc/ansible/目錄下生成配置文件。可是若是是經過pip或者是源碼安裝的話,就沒有這個文件,須要手動建立。能夠到官方的github上去下一個最新的:github
$ mkdir /etc/ansible $ cd /etc/ansible $ wget https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg
定義常規的鏈接類配置:web
[defaults] # some basic default values... #inventory = /etc/ansible/hosts # 定義Inventory,用於定義主機列表配置 #library = /usr/share/my_modules/ # 自定了lib庫存放目錄 #module_utils = /usr/share/my_module_utils/ #remote_tmp = ~/.ansible/tmp # 臨時文件遠程主機存放目錄 #local_tmp = ~/.ansible/tmp # 臨時文件本地存放目錄 #plugin_filters_cfg = /etc/ansible/plugin_filters.yml #forks = 5 # 默認開啓的併發數 #poll_interval = 15 # 默認輪詢時間間隔 #sudo_user = root # 默認sudo用戶 #ask_sudo_pass = True # 是否須要sudo密碼 #ask_pass = True # 是否須要密碼 #transport = smart #remote_port = 22 #module_lang = C #module_set_locale = False # additional paths to search for roles in, colon separated #roles_path = /etc/ansible/roles # 默認下載的Roles存在的目錄 # uncomment this to disable SSH key host checking #host_key_checking = False # 首次鏈接是否須要檢查key認證,建議放開註釋設爲False # SSH timeout #timeout = 10 # 默認超時時間 # logging is off by default unless this path is defined # if so defined, consider logrotate #log_path = /var/log/ansible.log # 執行日誌存放目錄 # default module name for /usr/bin/ansible #module_name = command # 默認執行模塊 # set plugin path directories here, separate with colons #action_plugins = /usr/share/ansible/plugins/action # 各種插件的存放目錄 #become_plugins = /usr/share/ansible/plugins/become #cache_plugins = /usr/share/ansible/plugins/cache #callback_plugins = /usr/share/ansible/plugins/callback #connection_plugins = /usr/share/ansible/plugins/connection #lookup_plugins = /usr/share/ansible/plugins/lookup #inventory_plugins = /usr/share/ansible/plugins/inventory #vars_plugins = /usr/share/ansible/plugins/vars #filter_plugins = /usr/share/ansible/plugins/filter #test_plugins = /usr/share/ansible/plugins/test #terminal_plugins = /usr/share/ansible/plugins/terminal #strategy_plugins = /usr/share/ansible/plugins/strategy # if set to a persistent type (not 'memory', for example 'redis') fact values # from previous runs in Ansible will be stored. This may be useful when # wanting to use, for example, IP information from one group of servers # without having to talk to them in the same playbook run to get their # current IP information. #fact_caching = memory # getfact 緩存的主機信息存放方式 # retry files # When a playbook fails a .retry file can be created that will be placed in ~/ # You can enable this feature by setting retry_files_enabled to True # and you can change the location of the files by setting retry_files_save_path #retry_files_enabled = False #retry_files_save_path = ~/.ansible-retry # 錯誤重啓文件存放目錄
上面這些配置多數都保持默認便可。只有一項host_key_checking = False
能夠放開註釋。redis
處於安全考慮,有時候不但願直接以root用戶直接部署應用,這時候就須要給普通用戶sudo權限,這部分配置主要就是針對sudo用戶提權的配置:shell
[privilege_escalation] #become=True # 是否sudo #become_method=sudo # sudo方式 #become_user=root # sudo後變爲root用戶 #become_ask_pass=False # sodu後是否驗證密碼
這部分功能不經常使用了,瞭解下把:apache
[paramiko_connection] # uncomment this line to cause the paramiko connection plugin to not record new host # keys encountered. Increases performance on new host additions. Setting works independently of the # host key checking setting above. #record_host_keys=False # 不記錄新主機的key以提高效率 # by default, Ansible requests a pseudo-terminal for commands executed under sudo. Uncomment this # line to disable this behaviour. #pty=False # 禁用sudo功能
Ansible默認使用ssh鏈接主機,這裏是SSH鏈接的一些配置:數組
# Enabling pipelining reduces the number of SSH operations required to # execute a module on the remote server. This can result in a significant # performance improvement when enabled, however when using "sudo:" you must # first disable 'requiretty' in /etc/sudoers # # By default, this option is disabled to preserve compatibility with # sudoers configurations that have requiretty (the default on many distros). # #pipelining = False # 管道加速功能,需配合requiretty使用方可生效
這塊的配置項也很少,多數仍是保持默認便可。
Ansible鏈接加速相關配置:
[accelerate] #accelerate_port = 5099 # 加速鏈接端口 #accelerate_timeout = 30 # 命令執行超時時間,單位秒 #accelerate_connect_timeout = 5.0 # 鏈接超時時間,單位秒 # The daemon timeout is measured in minutes. This time is measured # from the last activity to the accelerate daemon. #accelerate_daemon_timeout = 30 # 上一個活動鏈接的時間,單位分數 # If set to yes, accelerate_multi_key will allow multiple # private keys to be uploaded to it, though each user must # have access to the system via SSH to add a new key. The default # is "no". #accelerate_multi_key = yes
這裏的配置項在提供Ansible鏈接速度時會涉及,多數仍是保持默認
selinux幾乎不會用,配置上仍是保持默認:
# Set this to yes to allow libvirt_lxc connections to work without SELinux. #libvirt_lxc_noseclabel = yes
輸出結果顏色的設置。本來的配置已經很好了,幾乎不用修改,保持默認:
[colors] #highlight = white #verbose = blue #warn = bright purple #error = red #debug = dark gray #deprecate = purple #skip = cyan #unreachable = red #ok = green #changed = yellow #diff_add = green #diff_remove = red #diff_lines = cyan
Inventory是Ansible管理主機的配置文件,默認位置是/etc/ansible/hosts,這個在ansible.cfg配置文件的開頭有定義。
另外在ansible命令行中可使用-i參數來指定要使用的Inventory文件。
註釋:使用#來寫註釋內容。
寫在中括號中的內部表示組名。主機名能夠是IP地址也能夠是Hostname。主機名能夠出現屢次,這樣能夠寫到多個組裏。
若是主機使用了非默認的SSH端口,則能夠在主機名後加冒號指定SSH端口號。
配置示例::
# 配置示例 # 能夠用IP地址 192.168.1.1 # 也可使用Hostname www.ansible.com docs.ansible.com:2222 # 使用中括號表示一個分組的開始,主機與主機之間能夠有空行不影響分組 [webservers] web1.ansible.com # 用[10:20]表示連續的數組,包括10和20 web[10:20].ansible.com [dbservers] db-a.ansible.com # 也能夠用中括號處理連續的字母 db-[b:f].ansible.com
對於一些非標準化的配置需求,能夠在Inventory配置中進行設置。這樣能夠知足對於主機的一些個性化設置要求。
Ansible支持多種方式修改或自定義變量,Inventory是其中的一種修改方式。
定義主機變量
在定義主機時能夠同時定義主機變量:
[webserverrs] web1.ansible.com http_port=8000 # 自定義http_port的端口號爲8000
定義組變量
還能夠定義組變量,同時對一組主機修改或自定義變量:
[groupservers] web1.ansible.com web2.ansible.com [groupservers:vars] http_port=8000
Default groups
Ansible還定義好了兩個默認組:
Inventory中的組還能夠包含其餘的組,就是嵌套。嵌套時要在大組的名字後加上:children,表示嵌套的成員是組名而不是主機名:
[apache] httpd1.ansible.com httpd2.ansible.com [nginx] ngx1.ansible.com ngx2.ansible.com [webservers:children] apache nginx [webservers:vars] ntp_server=ntp1.aliyun.com
對於嵌套的組也是能夠設置組變量的,這個和普通的組變量同樣。
變量除了能夠在Inventory中定義,還能夠獨立於Inventory文件以外單獨定義到一個配置文件中。
下面是設置變量的各類途徑,按優先級順序排列:
比較經常使用的是以下4種:
單獨定義vars配置文件,好比有個主機foosball,同時屬於raleigh和webservers組,那麼變量定義在以主機名或組名定義的以下3個文件中都有效:
Ansible基於SSH鏈接Inventory中指定遠程主機時,還內置了一些參數,用於指定鏈接時的交互方式,下面列舉了比較經常使用的參數:
鏈接要用到鏈接插件,插件會用到本身的變量,好比上面的這幾個就是。下面的幾個是通用的鏈接變量,這些變量插件也是能夠識別的,效果是同樣的。
下面3個是通用的鏈接用的變量:
這裏的3個是通用的,優先級上應該會被上面的專用的覆蓋掉。
SSH插件一共有哪些變量,這些變量的設置方式和對應的名稱,包括默認值、環境變量、全部對應的變量名,能夠查官方文檔:
https://docs.ansible.com/ansible/latest/plugins/connection/ssh.html#ssh-connection
全部的鏈接查看,看這裏:
https://docs.ansible.com/ansible/latest/plugins/connection.html?highlight=ansible_ssh_host
把設備設置的參數打印出來,進行驗證。
local
指定使用鏈接插件爲locol,這樣執行時不會鏈接到遠程主機,而是直接在ansible程序的主機上運行。這個效果能夠用hostname來驗證:
$ ansible HOST -m command -a "hostname" -c local
指定鏈接爲local後,執行command模塊的hostname命令,就是在當前的ansible主機上運行,返回的結果也是當前ansible主機的主機名。
echo
而後再用echo命令把參數的值打印出來:
$ ansible HOST -m command -a "echo {{VAR_KEY}}" -c local