日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ansible的安装和ansible的模板

發(fā)布時間:2024/9/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ansible的安装和ansible的模板 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一: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 files

2.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.105

2.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í)行后面的操作
#-s 列出指定模塊的描述信息和操作動作 [root@host103 ansible]# ansible-doc -s command #指定ip 指定動作 [root@host103 ansible]# ansible 192.168.23.104 -m command -a 'date' 192.168.23.104 | CHANGED | rc=0 >> 20211021日 星期四 11:29:35 CST#指定組名執(zhí)行動作(組內的主機都會執(zhí)行) [root@host103 ansible]# ansible webservers -m command -a 'date' 192.168.23.104 | CHANGED | rc=0 >> 20211021日 星期四 11:29:55 CST#all代表所有hosts里的主機 [root@host103 ansible]# ansible all -m command -a 'date' 192.168.23.104 | CHANGED | rc=0 >> 20211021日 星期四 11:30:06 CST 192.168.23.105 | CHANGED | rc=0 >> 20211021日 星期四 11:30:06 CST#省略 -m 選項,則默認使用command模塊 [root@host103 ansible]# ansible webservers -a 'date' 192.168.23.104 | CHANGED | rc=0 >> 20211021日 星期四 11:30:17 CST

3.2 shell模塊

在遠程主機執(zhí)行命令,相當于調用遠程主機的shell進程,然后在該shell下打開一個子shell運行命令(支持管道符號等功能)
ansible-doc -s shell

[root@host103 ansible]# ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test' 192.168.23.105 | CHANGED | rc=0 >> 更改用戶 test 的密碼 。 passwd:所有的身份驗證令牌已經成功更新[root@host103 ansible]# ansible dbservers -m shell -a 'ifconfig ens33| awk "NR==2 {print \$2}"' 192.168.23.105 | CHANGED | rc=0 >> 192.168.23.105

3.3 cron模塊

在遠程主機定義任務計劃。其中有兩種狀態(tài)(state):present表示添加(可以省略),absent表示移除。
ansible-doc -s cron 按 q 退出

常用的參數(shù):

  • minute/hour/day/month/weekday:分/時/日/月/周
  • job:任務計劃要執(zhí)行的命令
  • name:任務計劃的名稱
#為webservers組里的主機創(chuàng)建計劃任務test crontab. [root@host103 ~]# ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'#查看webservers組里主機的計劃任務 [root@host103 ~]# ansible webservers -a 'crontab -l'#刪除計劃任務。假如該計劃任務沒有取名字,name=None即可。 [root@host103 ~]# ansible webservers -m cron -a 'name="test crontab" state=absent'#再次查看計劃任務 [root@host103 ~]# ansible webservers -a 'crontab -l'

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時,是否刪除用戶的家目錄
#創(chuàng)建用戶test01 [root@host103 ~]# ansible dbservers -m user -a 'name="test01"'#查看 [root@host103 ~]# ansible dbservers -m command -a 'tail -1 /etc/passwd'

3.5 grouop 模塊

用戶組管理的模塊
ansible-doc -s group

常用選項

  • gid  設置組的GID號
  • name 指定組的名稱
  • state 指定組的狀態(tài),默認為創(chuàng)建,設置值為absent為刪除
  • system 設置值為yes,表示創(chuàng)建為系統(tǒng)組
#創(chuàng)建組mysql,gid為3306 [root@host103 ~]# ansible dbservers -m group -a 'name=mysql gid=3306 system=yes' [root@host103 ~]# ansible dbservers -a 'tail -1 /etc/group'#創(chuàng)建用戶test02,該用戶組為mysql組 [root@host103 ~]# ansible dbservers -m user -a 'name=test02 uid=3306 system=yes group=mysql' [root@host103 ~]# ansible dbservers -a 'tail -1 /etc/passwd' [root@host103 ~]# ansible dbservers -a 'id test02'#刪除用戶test02 [root@host103 ~]# ansible dbservers -m user -a 'name="test02" state=absent' #刪除組mysql [root@host103 ~]# ansible dbservers -m group -a 'name=mysql state=absent'

3.6 copy模塊

用于復制指定主機文件到遠程主機的
ansible-doc -s copy

常用的參數(shù):

  • dest:指出復制文件的目標及位置,使用絕對路徑,如果是源目錄,指目標也要是目錄,如果目標文件已經存在會覆蓋原有的內容
  • src:指出源文件的路徑,可以使用相對路徑或絕對路徑,支持直接指定目錄,如果源是目錄則目標也要是目錄
  • mode:指出復制時,目標文件的權限
    owner:指出復制時,目標文件的屬主
  • group:指出復制時,目標文件的屬組
  • content:指出復制到目標主機上的內容,不能與src一起使用
  • mode目標文件或目錄的權限,將提供給chmod
#將本地的/etc/fstab 文件復制到遠程主機的/opt/fstab.bak,并設置屬主為root,權限為640 [root@host103 ~]# ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640' [root@host103 ~]# ansible dbservers -a 'ls -l /opt'#將 'helloworld' 覆蓋寫入到遠程主機的/opt/fstab.bak [root@host103 ~]# ansible dbservers -m copy -a 'content="helloworld" dest=/opt/fstab.bak' [root@host103 ~]# ansible dbservers -a 'cat /opt/fstab.bak'

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:刪除目錄、文件或者取消鏈接文件
#創(chuàng)建mysql組和test01用戶 [root@host103 ~]# ansible dbservers -m group -a 'name=mysql gid=3306 system=yes' [root@host103 ~]# ansible dbservers -m user -a 'name=test01 uid=3306 system=yes group=mysql'#修改文件的屬主,屬組,權限 [root@host103 ~]# ansible dbservers -m file -a 'owner=test01 group=mysql mode=644 path=/opt/fstab.bak'#設置/opt/fstab.link 為 /opt/fstab.bak的軟鏈接文件 [root@host103 ~]# ansible dbservers -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'#創(chuàng)建文件 /opt/abc.txt [root@host103 ~]# ansible dbservers -m file -a "path=/opt/abc.txt state=touch"#查看 [root@host103 ~]# ansible dbservers -a 'ls -l /opt/' 192.168.23.105 | CHANGED | rc=0 >> -rw-r--r--. 1 root root 0 1021 15:27 abc.txt -rw-r--r--. 1 test01 mysql 10 1021 14:55 fstab.bak lrwxrwxrwx. 1 root root 14 1021 15:27 fstab.link -> /opt/fstab.bak#刪除文件/opt/abc.txtz root@host103 ~]# ansible dbservers -m file -a "path=/opt/abc.txt state=absent" [root@host103 ~]# ansible dbservers -a 'ls -l /opt/'

3.8 hostname和ping模塊

hostname 模塊用于管理遠程主機上的主機名
ping 模塊用于檢測遠程主機的連通性

[root@host103 ~]# ansible dbservers -m hostname -a 'name=test01' [root@host103 ~]# ansible dbservers -a 'hostname' [root@host103 ~]# ansible all -m 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庫。只用于安裝或更新時
#yum安裝httpd [root@host103 ~]# ansible webservers -m yum -a 'name=httpd' [root@host103 ~]# ansible webservers -a 'rpm -q httpd'#yum 卸載httpd [root@host103 ~]# ansible webservers -m yum -a 'name=httpd state=absent' [root@host103 ~]# ansible webservers -a 'rpm -q httpd'

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秒再啟動。(定義在劇本中。)
#先下載httpd [root@host103 ~]# ansible webservers -m yum -a 'name=httpd' [root@host103 ~]# ansible webservers -a 'systemctl status httpd'#開啟httpd服務,并設置為開機自啟 [root@host103 ~]# ansible webservers -m service -a 'enabled=true name=httpd state=started' [root@host103 ~]# ansible webservers -a 'systemctl status httpd'#關閉httpd服務,并取消開機自啟 [root@host103 ~]# ansible webservers -m systemd -a 'enabled=no name=httpd state=stopped' [root@host103 ~]# ansible webservers -a 'systemctl status httpd'

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)通配符匹配的事實。
#獲取主機的facts信息 [root@host103 ~]# ansible webservers -m setup#過濾,顯示ip地址信息 [root@host103 ~]# ansible dbservers -m setup -a 'filter=*ipv4'#過濾,顯示內存信息 [root@host103 ~]# ansible dbservers -m setup -a 'filter=*mem*'

四 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~f

4.2 inventory 中的變量

inventory 變量名含義
ansible_hostansible連接節(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 >> 20211021日 星期四 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=22

4.2.3 組嵌套

可以把一個組作為另一個組的子成員,以及分配變量給整個組使用.
這些變量可以給 /usr/bin/ansible-playbook 使用,但不能給 /usr/bin/ansible 使用:

[nginx] 192.168.23.103 192.168.23.104 192.168.23.105[apache] 192.168.23.1[0:3][webs:children] #表示為 webs 主機組中包含了 nginx 組和 apache 組內的所有主機 nginx apache

總結

以上是生活随笔為你收集整理的ansible的安装和ansible的模板的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。