Ansible 系列之 Inventory 資源清單介紹


一、Inventory 庫存清單文件

 

1.Inventory 作用

  Ansible 可以在同一時間針對多個系統設施進行管理工作。它通過選擇Ansible 資源清單文件中列出的系統,該清單文件默認是在/etc/ansible/hosts,也可以使用 -i <path> 進行路徑的指定。文件內的格式INI 風格,中括號內為分組名。 除了這個文件之后,還可以同時使用多個清單文件,可以動態的獲取,也可以從外部獲取外部庫存清單文件。雲平台上去拉取(如AWS,或者Cobbler 的API結合)。

2.hosts文件格式是INI的格式,以及如何添加主機

和之前我們上篇文中的一樣,如下所示:

[centos_group]
172.17.0.2
172.17.0.3

為了有所區別,學習需要,我們在添加1個centos-3主機(創建完成后,記得將management的公鑰放到該主機上去,實現免密碼登陸)

[root@docker ~]# docker run -d -it --name centos-3 --expose 222 centos_sshd_3

查看下新主機的ip

[root@docker ~]# docker exec centos-3 hostname -I
172.17.0.4 

然后,我們在hosts 文件中原有 centos_group組下面,在添加單個組名webserver,組內主機設備為剛創建的centos-3,也可以以單個主機ip的方式存在(不過建議同一功能類型都分在組名里,為了后期管理方便)完整內容如下:

[centos_group]
172.17.0.2
172.17.0.3

[webserver]
172.17.0.4

[webserver 是組名,用於對系統主機進行功能分類,便於你在統一給web服務器部署管理時,不影響其它主機。這樣你在使用ansible 命令執行時,輸入組名就可以對.2 和 .3進行管理了。如下:

[root@docker ~]# ansible webserver -m ping
172.17.0.4 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

3.非標准的 ssh 端口

這里有個題外話:在我對centos-3 容器修改sshd 運行端口時,編輯好sshd_config 配置文件后,重啟ssh服務會報一下提示:

[root@731705364b56 /]# systemctl restart sshd Failed to get D-Bus connection: Operation not permitted

我又想到用kill 命令,將sshd 服務進程殺掉,誰知容器卻退出了。成了exited 狀態。

后來查詢資料了解到,因為容器的主進程就是CMD運行的命令 ,主進程退出時會退出容器, 在我kill sshd 進程的時候 主進程先退出了, 這時候docker容器也跟着退出了,原來要想讓服務重啟,要用docker 的restart命令。如下: 

docker restart centos_3

重啟后,端口運行在配置文件里指定的端口上啦。

如果你的主機ssh服務不是運行在 標准的22 端口時,在hosts里面就得更改定義方法了,目前有2種方式:
第一種:

[webserver]
172.17.0.4:222

第二種:

[webserver]
web1 ansible_port=222 ansible_host=172.17.0.4

這里的web1 相當於是個別名。驗證下:

[root@docker ~]# ansible webserver -m ping
web1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
[root@docker ~]# ansible web1 -m ping
web1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

 

4.大量的主機

如果有很多同一網段和功能,並有規律的主機的話,可以使用像正則匹配的方式去修改hosts文件。如下:

[webserver]
web1 ansible_port=222 ansible_host=172.17.0.4

[test]
172.17.0.[2:3]

運行ansible 驗證下:

[root@docker ~]# ansible test -m ping
172.17.0.2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
172.17.0.3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

 

除了用數字 定義范圍外,還可以用字母的方式去匹配主機名,如a到z,a到c 等。 

5.包含組的組名

如果你的webserver組的主機由於centos 系統需要更新一個系統文件,這個時候你在更新centos_group組的組機時,就可以把webserver組的主機帶上。就出現了帶有 :children關鍵字的組名.

配置文件如下:

[root@docker ~]# cat /etc/ansible/hosts 
[centos_group]
172.17.0.2
172.17.0.3

[webserver]
web1 ansible_port=222 ansible_host=172.17.0.4

[centos:children]
centos_group
webserver

驗證下:

[root@docker ~]# ansible centos -m ping
web1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
172.17.0.2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
172.17.0.3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

 

二、Inventory 清單參數列表

1.主機連接:

ansible_connection:連接主機的類型,這里可以是ansible連接插件的名稱中的一個,如ssh 協議中的 smart,ssh或者paramiko。默認值是smart。

2.ssh 連接

ansible_host:使用主機的名稱去連接,可以使用別名
ansible_port:如果默認不是22的話,要定義ssh的端口號
ansible_user:默認ssh連接用戶
ansible_ssh_pass:默認ssh 連接的passwd(不要在這里出現明文密碼,而是要使用vault)
ansible_ssh_private_key_file:連接時使用私鑰文件。如果不想使用ssh代理的話,可以有多個密鑰
ansible_ssh_common_args:該設置將總是為sftp,scp,ssh附加到命令行,可用於為某個主機或組配置ProxyCommand
ansible_sftp_extra_args:該設置將sftp附加到命令行
ansible_scp_extra_args:該設置將scp附加到命令行
ansible_ssh_extra_args:該設置將ssh附件到命令行
ansible_ssh_pipelining:決定是否使用ssh 管道,它將覆蓋ansible.cfg中的pipelining設置
2.2版本后的特性.
ansible_ssh_executable:這個設置將覆蓋使用系統ssh的默認行為。它將覆蓋ansible.cfg中的ssh_executable設置

使用特權命令(如sudo)

ansible_become:允許升級權限,相當於 ansible_sudo 或者 ansible_su
ansible_become_method:允許設置特殊權限的方法
ansible_become_user:允許設置特殊權限的用戶,相當於 ansible_sudo_user 或者 ansible_su_user
ansible_become_pass:允許設置特殊權限的密碼(不要在這里直接輸入明文),相當於 ansible_sudo_pass 或者 ansible_su_pass

 

遠程主機環境參數

ansible_shell_type:目標系統的shell 類型,你不應該設置這個參數,除非你設置的 ansible_shell_executable 與默認的sh 不兼容。默認情況下,命令是在sh shell 環境風格下運行的。此處可以設置為csh或fish shell。

ansible_python_interpreter:目標系統的python 程序路徑。這對於有多個python 版本運行環境的系統很有幫助,或者是默認python 程序不在/usr/bin/python 下,如 *BSD。
ansible_*_interpreter:適用於任何工作,*處可以替換成其它語言,如ruby或者perl,就像ansible_python_interpreter.這將替換在該主機上運行模塊時的shebang。
如下所示的示例文件:
some_host         ansible_port=2222     ansible_user=manager
aws_host          ansible_ssh_private_key_file=/home/example/.ssh/aws.pem
freebsd_host      ansible_python_interpreter=/usr/local/bin/python
ruby_module_host  ansible_ruby_interpreter=/usr/bin/ruby.1.9.3

 

非SSH 的連接類型

如上面所說,ansible 執行劇本時通過ssh連接,但是它又不僅僅只局限於ssh這種連接類型。連接的類型是可以變的。如下面的幾種

local:該連接類型將在控制機本身上執行劇本。

docker:該連接類型將使用本地docker直接將 劇本部署到 docker 容器中。以下是有連接器處理的參數:

  ansible_host :要連接的docker 容器名稱

  ansible_user :在容器中操作的用戶名,必須是容器內存在的用戶

  ansible_become :如果設置為 true,這個用戶將被用於在容器內進行操作

  ansible_docker_extra_args :可以是Docker 程序 啟動時支持的額外參數,不是特定的命令,此參數主要用於配置遠程Docker 守護進程使用。

如下是一個創建容器並進行部署的示例:

- name: create jenkins container
  docker:
    name: my_jenkins
    image: jenkins

- name: add container to inventory
  add_host:
    name: my_jenkins
    ansible_connection: docker
    ansible_docker_extra_args: "--tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/client-cert.pem --tlskey=/path/to/client-key.pem -H=tcp://myserver.net:4243"
    ansible_user: jenkins
  changed_when: false

- name: create directory for ssh keys
  delegate_to: my_jenkins
  file:
    path: "/var/jenkins_home/.ssh/jupiter"
    state: directory

 

如果文中有錯誤之處,還希望大家多多指出,互相學習,謝謝。

下一篇再學習下ansible 里的 patterns。

 

注:本文屬於飛走不可原創,如有轉載,請務必在文首注明出處。飛走不可:-_-# http://www.cnblogs.com/hanyifeng/p/6137905.html


免責聲明!

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



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