ansible的安装和ansible的模板
文章目錄
- 一:Ansible概述
- 二: ansible 的環(huán)境安裝部署
- 2.1 管理端安裝ansible
- 2.2 ansible的目錄結構
- 2.3 配置主機清單
- 2.4 配置密鑰對驗證
- 三 ansible的命令行模塊
- 3.1 command 模塊
- 3.2 shell模塊
- 3.3 cron模塊
- 3.4 user模塊
- 3.5 grouop 模塊
- 3.6 copy模塊
- 3.7 file模塊
- 3.8 hostname和ping模塊
- 3.9 yum 模塊
- 3.10 service/systemd模塊
- 3.11 script 模塊
- 3.12setup 模塊
- 四 inventory 主機清單
- 4.1 使用列表的形式標識多個主機
- 4.2 inventory 中的變量
- 4.2.1 主機變量
- 4.2.2組變量
- 4.2.3 組嵌套
一:Ansible概述
- Ansible是一個基于Python開發(fā)的配置管理和應用部署工具,現(xiàn)在也在自動化管理領域大放異彩。它融合了眾多老牌運維工具的優(yōu)點, Pubbet和saltstack能實現(xiàn)的功能, Ansible基本上都可以實現(xiàn)。
- Ansible能批量配置、部署、管理上千臺主機。比如以前需要切換到每個主機上執(zhí)行的一或多個操作,使用Ansible只需在固定的一臺Ansible控制節(jié)點上去完成所有主機的操作。
- Ansible是基于模塊工作的,它只是提供了一種運行框架,它本身沒有完成任務的能力,真正執(zhí)行操作的是Ansible的模塊,比如copy模塊用于拷貝文件到遠程主機上, service模塊用于管理服務的啟動、停止、重啟等
- Ansible其中一個比較鮮明的特性是Agentless,即無Agent的存在,它就像普通命令一樣,并非c/s軟件,也只需在某個作為控制節(jié)點的主機上安裝一次Ansible即可,通常它基于ssh連接來控制遠程主機,遠程主機上不需要安裝Ansible或其它額外的服務
- 使用者在使用時,在服務器終端輸入命令或者playbooks,會通過預定好的規(guī)則將playbook拆解為play,再組織成ansible可以識別的任務,調用模塊和插件,根據(jù)主機清單通過SSH將臨時文件發(fā)給遠程的客戶端執(zhí)行并返回結果,執(zhí)行結束后自動刪除
- Ansible的另一個比較鮮明的特性是它的絕大多數(shù)模塊都具備冪等性(idempotence)。所謂冪等性,指的是多次操作或多次執(zhí)行對系統(tǒng)資源的影響是一致的。比如執(zhí)行systemct1 stop xxx命令來停止服務,當發(fā)現(xiàn)要停止的目標服務已經處于停止狀態(tài)它什么也不會做,所以多次停止的結果仍然是停止,不會改變結果,它是冪等的,而systemctl restart xxx是非冪等的。
- Ansible的很多模塊在執(zhí)行時都會先判斷目標節(jié)點是否要執(zhí)行任務,所以,可以放心大膽地讓Ansible去執(zhí)行任務,重復執(zhí)行某個任務絕大多數(shù)時候不會產生任何副作用
二: ansible 的環(huán)境安裝部署
管理端: 192.168.23.103
被管理端: 192.168.23.104;192.168.23.105
2.1 管理端安裝ansible
#安裝epel源 [root@host103 ~]# yum -y install epel-release#如果安裝ansible時候顯示沒有鏡像,可能是網(wǎng)速太慢。重新執(zhí)行命令即可 [root@host103 ~]# yum -y install ansible#查看ansible的版本 [root@host103 ansible]# ansible --version ansible 2.9.25config file = /etc/ansible/ansible.cfgconfigured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python2.7/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]2.2 ansible的目錄結構
[root@host103 ~]# cd /etc/ansible/ [root@host103 ansible]# yum -y install tree [root@host103 ansible]# tree /etc/ansible/ /etc/ansible/ ├── ansible.cfg #ansible配置文件 ├── hosts #ansible主機清單,用于存儲需要管理的遠程主機相關信息 └── roles #公共角色目錄1 directory, 2 files2.3 配置主機清單
[root@host103 ~]# cd /etc/ansible/ [root@host103 ansible]# ls ansible.cfg hosts roles[root@host103 ansible]# vim hosts #配置組名 [webservers] #組里包含的被管理主機(可以是ip或則主機名,主機名需要修改/etc/hosts 192.168.23.104[dbservers] 192.168.23.1052.4 配置密鑰對驗證
#一路回車,使用免密登錄 [root@host103 ansible]# ssh-keygen -t rsa [root@host103 ansible]# ssh-copy-id 192.168.23.104 [root@host103 ansible]# ssh-copy-id 192.168.23.105三 ansible的命令行模塊
命令格式: ansible <組名> -m <模塊> -a <參數(shù)列表>
ansible-doc -l #列出所有已安裝的模塊,按q退出
ansible-doc -s 模塊 #列出指定的模塊描述信息和操作動作
3.1 command 模塊
在遠程主機執(zhí)行命令,不支持管道,重定向等shell特性
常用參數(shù)
chdir: 在遠程主機上運行命令前提進入目錄
- creates: 判斷指定文件是否存在,如果存在,不執(zhí)行后面的操作
- removes: 判斷指定文件是否存在,如果存在,執(zhí)行后面的操作
3.2 shell模塊
在遠程主機執(zhí)行命令,相當于調用遠程主機的shell進程,然后在該shell下打開一個子shell運行命令(支持管道符號等功能)
ansible-doc -s shell
3.3 cron模塊
在遠程主機定義任務計劃。其中有兩種狀態(tài)(state):present表示添加(可以省略),absent表示移除。
ansible-doc -s cron 按 q 退出
常用的參數(shù):
- minute/hour/day/month/weekday:分/時/日/月/周
- job:任務計劃要執(zhí)行的命令
- name:任務計劃的名稱
3.4 user模塊
用戶管理的模塊
ansible-doc -s user
常用的參數(shù):
- name:用戶名,必選參數(shù)
- state=present|absent:創(chuàng)建賬號或者刪除賬號,present表示創(chuàng)建,absent表示刪除
- system=yes|no:是否為系統(tǒng)賬號
- uid:用戶uid
- group:用戶基本組
- shell:默認使用的shell
- move_home=yse|no:如果設置的家目錄已經存在,是否將已經存在的家目錄進行移動
- password:用戶的密碼,建議使用加密后的字符串
- comment:用戶的注釋信息
- remove=yes|no:當state=absent時,是否刪除用戶的家目錄
3.5 grouop 模塊
用戶組管理的模塊
ansible-doc -s group
常用選項
- gid 設置組的GID號
- name 指定組的名稱
- state 指定組的狀態(tài),默認為創(chuàng)建,設置值為absent為刪除
- system 設置值為yes,表示創(chuàng)建為系統(tǒng)組
3.6 copy模塊
用于復制指定主機文件到遠程主機的
ansible-doc -s copy
常用的參數(shù):
- dest:指出復制文件的目標及位置,使用絕對路徑,如果是源目錄,指目標也要是目錄,如果目標文件已經存在會覆蓋原有的內容
- src:指出源文件的路徑,可以使用相對路徑或絕對路徑,支持直接指定目錄,如果源是目錄則目標也要是目錄
- mode:指出復制時,目標文件的權限
owner:指出復制時,目標文件的屬主 - group:指出復制時,目標文件的屬組
- content:指出復制到目標主機上的內容,不能與src一起使用
- mode目標文件或目錄的權限,將提供給chmod
3.7 file模塊
設置文件屬性
ansible-doc -s file
常用選項:
- force
- 需要在兩種情況下強制創(chuàng)建軟鏈接,一種是源文件不存在,但之后會建立的情況下;另一種是目標軟鏈接已存在,需要先取消之前的軟鏈,然后創(chuàng)建新的軟鏈,
- 有兩個選項:yes|no
- group
- 定義文件/目錄的屬組。
- 后面可以加上mode:定義文件/目錄的權限
- owner
- 定義文件/目錄的屬主。
- 后面必須跟上path:定義文件/目錄的路徑
- recurse
- 遞歸設置文件的屬性,只對目錄有效,
- 后面跟上src:被鏈接的源文件路徑,只應用于state=link的情況
- dest
- 被鏈接到的路徑,只應用于state=link的情況
- state 狀態(tài),有以下選項:
- directory:如果目錄不存在,就創(chuàng)建目錄
- file:即使文件不存在,也不會被創(chuàng)建
- link:創(chuàng)建軟鏈接
- hard:創(chuàng)建硬鏈接
- touch:如果文件不存在,則會創(chuàng)建一個新的文件,如果文件或目錄已存在,則更新其最后修改時間
- absent:刪除目錄、文件或者取消鏈接文件
3.8 hostname和ping模塊
hostname 模塊用于管理遠程主機上的主機名
ping 模塊用于檢測遠程主機的連通性
3.9 yum 模塊
在遠程主機上安裝與卸載軟件包
常用選項
- name 所安裝的包的名稱
- state present—>安裝, latest—>安裝最新的, absent—> 卸載軟件。
- update_cache 強制更新yum的緩存
- conf_file 指定遠程yum安裝時所依賴的配置文件(安裝本地已有的包)。
- disable_pgp_check 是否禁止GPG checking,只用于presentor latest。
- disablerepo 臨時禁止使用yum庫。 只用于安裝或更新時。
- enablerepo 臨時使用的yum庫。只用于安裝或更新時
3.10 service/systemd模塊
用于管理遠程主機上的管理服務的運行狀態(tài)
ansible-doc -s service
常用的參數(shù):
- name:被管理的服務名稱
- state=started|stopped|restarted:動作包含啟動關閉或者重啟
- enabled=yes|no:表示是否設置該服務開機自啟(也可以使用 true| false)
- runlevel:如果設定了enabled開機自啟去,則要定義在哪些運行目標下自啟動
- arguments 命令行提供額外的參數(shù)
- sleep 在重啟服務的過程中,是否等待。如在服務關閉以后等待2秒再啟動。(定義在劇本中。)
3.11 script 模塊
該模塊用于將本機的腳本在被管理端的機器上運行
#先在管理主機上寫個shell腳本 [root@host103 ~]# vim test.sh #!/bin/bash echo 'hello world' > /opt/script.txt#指定腳本路徑,使用script 模塊在被管理的主機上批量執(zhí)行腳本 [root@host103 ~]# ansible webservers -m script -a 'test.sh' [root@host103 ~]# ansible webservers -a 'cat /opt/script.txt'3.12setup 模塊
facts 組件是用來收集被管理節(jié)點信息的,使用 setup 模塊可以獲取這些信息
facts就是變量,內建變量 。每個主機的各種信息,cpu顆數(shù)、內存大小等會存在facts中的某個變量中。
常用選項
- filter 只返回與這個shell樣式(fnmatch)通配符匹配的事實。
四 inventory 主機清單
inventory支持對主機進行分組,每個組內可以定義多個主機,每個主機都可以定義在任何一個或多個主機組內。
4.1 使用列表的形式標識多個主機
#如果是名稱類似的主機,可以使用列表的方式標識各個主機。 [root@host103 ~]# vim /etc/ansible/hosts [webservers] 192.168.23.10:2222 #冒號后定義遠程連接端口,默認是 ssh 的 22 端口 192.168.23.1[1:3] #表示 192.168.23.11 到192.168.23.13[dbservers] db-[a:f].example.org #支持匹配 a~f4.2 inventory 中的變量
| ansible_host | ansible連接節(jié)點時的IP地址 |
| ansible_port | 連接對方的端口號,ssh連接時默認為22 |
| ansible_user | 連接對方主機時使用的主機名。不指定時,將使用執(zhí)行ansible或ansible-playbook命令的用戶 |
| ansible_password | 連接時的用戶的ssh密碼,僅在未使用密鑰對驗證的情況下有效 |
| ansible_ssh_private_key_file | 指定密鑰認證ssh連接時的私鑰文件 |
| ansible_ssh_common_args | 允許進行權限提升 |
| ansible_become_method | 指定提升權限的方式,例如可使用sudo/su/runas等方式 |
| ansible_become_user | 提升為哪個用戶的權限,默認提升為root |
| ansible_become_password | 提升為指定用戶權限時的密碼 |
4.2.1 主機變量
分配變量給主機很容易做到,這些變量定義后可在 playbooks 中使用
[root@host103 ~]# vim /etc/ansible/hosts #在hosts文件里,設置ansible連接的端口,用戶,密碼 [testservers] 192.168.23.13 ansible_port=22 ansible_user=root ansible_password=abc123#ansible鏈接成功 [root@host103 ~]# ansible testservers -a 'date' 192.168.23.13 | CHANGED | rc=0 >> 2021年 10月 21日 星期四 16:57:14 CST注意,如果ansible使用密碼連接遠程主機,需要確保不是第一次ssh 遠程主機,否則可能連接失敗
4.2.2組變量
可以定義屬于整個組的變量
[root@host103 ~]# vim /etc/ansible/hosts [webservers:vars] #表示為 webservers 組內所有主機定義變量 ansible_user=root ansible_password=abc1234[all:vars] #表示為所有組內的所有主機定義變量 ansible_port=224.2.3 組嵌套
可以把一個組作為另一個組的子成員,以及分配變量給整個組使用.
這些變量可以給 /usr/bin/ansible-playbook 使用,但不能給 /usr/bin/ansible 使用:
總結
以上是生活随笔為你收集整理的ansible的安装和ansible的模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在做TLS/SSL时报错
- 下一篇: playbook 剧本编写