Ansible 是近年來愈來愈火的一款開源運維自動化工具,經過Ansible能夠實現運維自動化,提升運維工程師的工做效率,減小人爲失誤。python
Ansible 經過自己集成的很是豐富的模塊能夠實現各類管理任務,其自帶模塊超過上千個。更爲重要的是,它操做很是簡單,即便小白也能夠輕鬆上手,但它提供的功能又很是豐富,在運維領域,幾乎能夠作任何事。mysql
Ansible 自 2012 年發佈以來,很快在全球流行,其特色以下:web
以下圖所示:Ansible 使用者能夠採用多種方式和 Ansible 交互,圖中展現了四種方式:面試
Ansible 工具集包含 Inventory、Modules、Plugins 和 API。redis
其中:Inventory:用來管理設備列表,能夠經過分組實現,對組的調用直接影響組內的全部主機;Modules:是各類執行模塊,幾乎全部的管理任務都是經過模塊執行的;Plugins:提供了各類附加功能;API:爲編程人員提供一個接口,能夠基於此作 Ansible的二次開發;具體表現以下:sql
Ansible 的做用對象不只僅是 Linux 和非 Linux 操做系統的主機,也能夠做用於各種PUBLIC/PRIVATE、商業和非商業設備的網絡設施。shell
使用者使用 Ansible 或 Ansible-Playbooks 時,在服務器終端輸入 Ansible 的 Ad-Hoc命令集或 Playbooks 後,Ansible 會遵循預選安排的規則將 Playbooks 逐步拆解爲Play,再將 Play 組織成 Ansible 能夠識別的任務,隨後調用任務涉及的全部模塊和插件,根據 Inventory 中定義的主機列表經過 SSH 將任務集以臨時文件或命令的形式傳輸到遠程客戶端執行並返回執行結果,若是是臨時文件則執行完畢後自動刪除。數據庫
Ansible的安裝部署很是簡單,以RPM安裝爲例,其依賴軟件只有Python和SSH,且系統默認均已安裝。Ansible的管理端只能是Linux,如Redhat、Debian、Centos。編程
1)經過YUM安裝Ansiblejson
能夠自行從互聯網上直接下載Ansible所需軟件包,本篇博客提供安裝Ansible自動化運維工具所需的依賴軟件包
[root@centos01 ~]# cd /mnt/ansiblerepo/ansiblerepo/repodata/ [root@centos01 ansiblerepo]# vim /etc/yum.repos.d/local.repo [local] name=centos baseurl=file:///mnt/ansiblerepo/ansiblerepo <!--修改yum路徑--> enabled=1 gpgcheck=0 [root@centos01 ~]# yum -y install ansible <!--安裝Ansible自動化運維工具-->
[root@centos01 ~]# ansible --version <!--若是命令能夠正常執行,則表示Ansible工具安裝成功--> ansible 2.3.1.0 config file = /etc/ansible/ansible.cfg configured module search path = Default w/o overrides python version = 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
Ansible 經過 SSH 對設備進行管理,而 SSH 包含兩種認證方式:一種是經過密碼認證,另外一種是經過密鑰對驗證。前者必須和系統交互,然後者是免交互登陸。若是但願經過 Ansible 自動管理設備,應該配置爲免交互登陸被管理設備。
[root@centos01 ~]# ssh-keygen -t rsa <!--生成密鑰對--> Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): <!--密鑰對存放路徑--> Created directory '/root/.ssh'.Enter passphrase (empty for no passphrase): <!--輸入私鑰保護密碼,直接按Enter鍵表示無密碼--> Enter same passphrase again: <!--再次輸入--> Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:cJz6NRTrvMDxX+Jpce6LRnWI3vVEl/zvARL7D10q9WY root@centos01 The key's randomart image is: +---[RSA 2048]----+ | . . .| | . . + oo| | . = o o. oo| | = * o..+ *| | . S *.=+=*+| | . o =+XooE| | . ..=.++.| | ..o ..| | .. o. | +----[SHA256]-----+ [root@centos01 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.20 <!--複製公鑰到遠端192.168.100.20--> [root@centos01 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.100.30 <!--複製公鑰到遠端192.168.100.30-->
至此,已經完成 Ansible 的部署,接下來就能夠經過 Ansible 對設備進行管理了。
Inventory 是 Ansible 管理主機信息的配置文件,至關於系統 Hosts 文件的功能,默認存放在 /etc/ansible/hosts。
在 hosts 文件中,經過分組來組織設備,Ansible 經過 Inventory 來定義主機和分組,經過在 ansible 命令中使用選項-i
或—inventory-file
來指定 Inventory。
[root@centos01 ~]# ansible -i /etc/ansible/hosts web -m ping
若是使用默認的 Inventory文件(/etc/ansible/hosts),也能夠不指定 Inventory 文件,例如:
[root@centos01 ~]# ansible web -m ping
Ansible 經過設備列表以分組的方式添加到 /etc/ansible/hosts 文件來實現對設備的管理,因此在正式管理以前,首先要編寫好 hosts 文件。hosts 文件中,以[ ]包含的部分表明組名,設備列表支持主機名和IP地址。
默認狀況下,經過訪問22端口(SSH)來管理設備。若目標主機使用了非默認的SSH端口,還能夠在主機名稱以後使用冒號加端口標明,以行爲單位分隔配置。另外,hosts文件還支持通配符。
[root@centos01 ~]# vim /etc/ansible/hosts ............ <!--此處省略部份內容--> [web] 192.168.100.20 192.168.100.30 [test] www.benet.com:222 <!--經過222端口管理設備--> [mail] yj1.kgc.cn yj[2:5].kgc.cn <!--[2:5]表示2~5之間的全部數字,即表示yj2.kgc.cn、yj3.kgc.cn……的全部主機-->
能夠將一個主機同時歸置在不一樣的組中。
配置完成以後,能夠針對hosts定義的組進行遠程操做,也能夠針對組中的某一個或多個主機操做。例如:
1)只對web組中192.168.1.2主機操做,經過—limit參數限定主機的變動。
[root@centos01 ~]# ansible web -m command -a "systemctl status httpd" --limit "192.168.100.20" 192.168.100.20 | SUCCESS | rc=0 >> <!--看到SUCCESS就知道成功了,因此如下內容--> <!--若是測試httpd服務,被測試主機必然已經安裝並啓動了httpd服務-->
2)只對192.168.100.20主機操做。經過IP限定主機的變動。
[root@centos01 ~]# ansible 192.168.100.20 -m command -a "systemctl status httpd" 192.168.100.20 | SUCCESS | rc=0 >>
3)只對192.168.100.0網段主機操做,這就須要使用到通配符來限定主機的變動了。
[root@centos01 ~]# ansible 192.168.1.* -m command -a "systemctl status httpd" 192.168.100.20 | SUCCESS | rc=0 >> ....... <!--此處省略部份內容--> 192.168.100.30 | SUCCESS | rc=0 >> ....... <!--此處省略部份內容--> <!--實驗環境,效果同樣,這裏就很少說了-->
Ansible 的維護命令大多數是以 ansible 開頭,在終端輸入 ansible 後連續按兩次Tab鍵,會補全全部跟 ansible 相關的命令。
[root@centos01 ~]# ansible <!--連續按Tab鍵--> ansible ansible-console-2 ansible-galaxy ansible-playbook-2.7 ansible-vault-2ansible-2 ansible-console-2.7 ansible-galaxy-2 ansible-pull ansible-vault-2.7ansible-2.7 ansible-doc ansible-galaxy-2.7 ansible-pull-2ansible-connection ansible-doc-2 ansible-playbook ansible-pull-2.7ansible-console ansible-doc-2.7 ansible-playbook-2 ansible-vault
ansible 是生產環境中使用很是頻繁的命令之一,主要在如下場景使用:
非固化需求;臨時一次性操做;
二次開發接口調用;
非固化需求是指臨時性的維護,如查看web服務器組磁盤使用狀況、複製一個文件到其餘機器等。相似這些沒有規律的、臨時須要作的任務,咱們成爲非固化需求,臨時一次性操做,語法以下:
Ansible <host-pattern> [options]
①檢查全部主機是否存活,執行命令以下:
[root@centos01 ~]# ansible all -f 5 -m ping <!--調用ping模塊,all表示/etc/ansible/hosts文件中的全部主機,不用建立all分組(默認存在)--> 192.168.100.20 | SUCCESS => { <!--表示執行成功--> "changed": false, <!--沒有對主機作出更改--> "ping": "pong" <!--表示執行ping命令的返回結果-->} 192.168.100.30 | SUCCESS => { "changed": false, "ping": "pong" }
②列出web組全部的主機列表,執行命令以下:
[root@centos01 ~]# ansible web --list <!-- --list:表示列出主機列表信息--> hosts (2): 192.168.100.20 192.168.100.30
③批量顯示web組中的磁盤使用空間,執行命令以下:
[root@centos01 ~]# ansible web -m command -a "df -hT" 192.168.100.30 | SUCCESS | rc=0 >> 文件系統 類型 容量 已用 可用 已用% 掛載點 /dev/mapper/cl-root xfs 17G 4.4G 13G 26% / devtmpfs devtmpfs 897M 0897M 0% /dev tmpfs tmpfs 912M 84K 912M 1% /dev/shm tmpfs tmpfs 912M 0912M 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 173M 842M 18% /boot tmpfs tmpfs 183M 16K 183M 1% /run/user/42 tmpfs tmpfs 183M 0183M 0% /run/user/0 192.168.100.20 | SUCCESS | rc=0 >> 文件系統 類型 容量 已用 可用 已用% 掛載點 /dev/mapper/cl-root xfs 17G 4.3G 13G 26% / devtmpfs devtmpfs 897M 0897M 0% /dev tmpfs tmpfs 912M 84K 912M 1% /dev/shm tmpfs tmpfs 912M 0912M 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 173M 842M 18% /boot tmpfs tmpfs 183M 16K 183M 1% /run/user/42 tmpfs tmpfs 183M 0183M 0% /run/user/0 /dev/sr0 iso9660 4.1G 4.1G 0100% /mnt
web關鍵字須要提早在/etc/ansible/hosts文件中定義組。
Ansible的返回結果很是友好,通常會用三種顏色來表示執行結果
Ansible-doc用來查詢ansible模塊文檔的說明,相似於man命令,針對每一個模塊都有詳細的用法說明及應用案例介紹,語法以下:
ansible-doc [options] [module……]
列出支持的模塊:
[root@centos01 ~]#ansible-doc -l
查詢ping模塊的說明信息:
[root@centos01 ~]# ansible-doc ping > PING (/usr/lib/python2.7/site-packages/ansible/modules/system/ping.py) A trivial test module, this module always returns `pong' on successful contact. It does not make sense in playbooks, but it is useful from `/usr/bin/ansible' to verify the ability to login and that a usable python is configured. This isNOT ICMP ping, this is just a trivial test module. EXAMPLES: # Test we can logon to 'webservers' and execute python with json lib. ansible webservers -m ping MAINTAINERS: Ansible Core Team, Michael DeHaan METADATA: Status: ['stableinterface'] Supported_by: core
Ansible-playbook是平常應用中使用頻率最高的命令,相似於Linux中的sh或source命令,用來執行系列任務。
其工做機制:經過讀取預先編寫好的playbook文件實現集中處理任務。Ansible-playbook命令後跟yml格式的playbook文件,playbook文件存放了要執行的任務代碼,命令使用方式以下:
Ansible-playbook playbook.yml <!--playbook.yml文件要提早編寫好,建議使用絕對路徑-->
Ansible-console是Ansible爲用戶提供的一款交互式工具,相似於Windows的cmd或者是Linux中shell。用戶能夠在ansible-console虛擬出來的終端上像shell同樣使用Ansible內置的各類命令,這爲習慣於使用shell交互式方式的用戶提供了良好的使用體驗。在終端輸入ansible-console命令後,顯示以下:
[root@centos01 ~]# ansible-console Welcome to the ansible console. Type help or ? to list commands. <!--輸入help或?獲取幫助--> root@all (2)[f:5]$ cd web <!--使用cd命令切換主機或分組--> root@web (2)[f:5]$ list <!--列出當前的設備--> 192.168.100.20 192.168.100.30 <!--支持Tab鍵補全,快捷鍵Ctrl+D或Ctrl+C便可退出當前的虛擬終端-->
command模塊在遠程主機執行命令,不支持管道、重定向等shell的特性。經常使用的參數以下:
在全部主機上運行「ls ./」命令,運行前切換到/home目錄下。操做以下:
[root@centos01 ~]# ansible web -m command -a "chdir=/ ls ./"
shell模塊在遠程主機執行命令,至關於調用遠程主機的Shell進程,而後在該Shell下打開一個子Shell運行命令。和command模塊的區別是它支持Shell特性:如管道、重定向等。
示例以下:
[root@centos01 ~]# ansible web -m shell -a "echo hello world " <!--輸出到屏幕--> 192.168.100.20 | SUCCESS | rc=0 >> hello world 192.168.100.30 | SUCCESS | rc=0 >> hello world [root@centos01 ~]# ansible web -m shell -a "echo hello world > /1.txt" <!--輸出到1.txt文件中--> 92.168.100.20 | SUCCESS | rc=0 >> 192.168.100.30 | SUCCESS | rc=0 >>
copy模塊用於複製指定主機文件到遠程主機的指定位置。常見的參數以下:
示例以下:
[root@centos01 ~]# ansible web -m copy -a "src=/etc/hosts dest=/root/a1.hosts mode=777 owner=root group=root" <!--/將本機的hosts文件複製到web組中的全部主機上存放在家目錄下的a1.hosts目錄, 權限是777,屬主是root,屬組是root-->
hostname模塊用於管理遠程主機上的主機名。經常使用的參數以下:
name:指明主機名;
示例以下:
[root@centos01 ~]# ansible 192.168.100.20 -m hostname -a "name=test" <!--將192.168.100.20的主機名改成test,可是192.168.100.20須要敲一下bash才生效-->
yum模塊基於yum機制,對遠程主機管理程序包。經常使用的參數以下:
示例以下:
[root@centos01 ~]# ansible web -m shell -a "/usr/bin/rm -rf /etc/yum.repos.d/CentOS-*" <!--批量化刪除web組主機的yum源--> [root@centos01 ~]# ansible web -m shell -a "/usr/bin/mount /dev/cdrom /mnt" <!--批量化掛載光盤--> [WARNING]: Consider using mount module rather than running mount 192.168.100.20 | SUCCESS | rc=0 >> mount: /dev/sr0 寫保護,將以只讀方式掛載 192.168.100.30 | SUCCESS | rc=0 >> mount: /dev/sr0 寫保護,將以只讀方式掛載 [root@centos01 ~]# ansible web -m yum -a "name=httpd state=present" <!--批量化安裝httpd程序--> [root@centos01 ~]# ansible web -m shell -a "rpm -qa | grep httpd" <!--批量化查看安裝的httpd程序包--> [WARNING]: Consider using yum, dnf or zypper module rather than running rpm 192.168.100.20 | SUCCESS | rc=0 >> httpd-2.4.6-67.el7.centos.x86_64 httpd-tools-2.4.6-67.el7.centos.x86_64 192.168.100.30 | SUCCESS | rc=0 >> httpd-2.4.6-67.el7.centos.x86_64 httpd-tools-2.4.6-67.el7.centos.x86_64 [root@centos01 ~]# ansible web -m shell -a "systemctl start httpd" <!--批量啓動服務--> [root@centos01 ~]# ansible web -m shell -a "netstat -anptu | grep httpd" <!--批量化監聽httpd服務是否啓動成功--> 192.168.100.20 | SUCCESS | rc=0 >> tcp6 0 0 :::80 :::* LISTEN 2072/httpd 192.168.100.30 | SUCCESS | rc=0 >> tcp6 0 0 :::80 :::* LISTEN 3098/httpd
管理端只是發送yum指令到被管理端,被管理端要存在可用的yum倉庫才能夠成功安裝。
service模塊爲用來管理遠程主機上的服務的模塊。常見的參數以下:
示例以下:
[root@centos01 ~]# ansible web -m service -a "name=httpd enabled=yes state=restarted" <!--設置httpd服務從新啓動和開機自動啓動-->
user模塊主要用於管理遠程主機上的用戶帳號。常見的參數以下:
name:必選參數,帳號名稱;state=present|absent:建立帳號或者刪除帳號,present表示建立,absent表示刪除;
system=yes|no:是否爲系統帳戶;
uid:用戶UID;
group:用戶的基本組
groups:用戶的附加組;
shell:默認使用的shell;
home:用戶的家目錄;
mve_home=yes|no:
若是設置的家目錄已經存在,是否將已存在的家目錄進行移動;
pssword:用戶的密碼,建議使用加密後的字符串;
comment:
用戶的註釋信息;
remore=yes|no:
當state=absent時,是否要刪除用戶的家目錄
建立用戶示例以下:
[root@centos01 ~]# ansible web -m user -a "name=user01system=yes uid=502 group=root groups=root shell=/etc/nologinhome=/home/user01 password=pwd@123"<!--在web組的全部主機上新建一個系統用戶,UID爲502,屬組是root,名字是user01,密碼是pwd@123-->
playbook配置文件使用YAML語法,具備簡潔明瞭、結構清晰等特色。playbook配置文件相似於shell腳本,是一個YAML格式的文件,用於保存針對特定需求的任務列表。上面介紹的ansible命令雖然能夠完成各類任務,可是當配置一些複雜任務時,逐條輸入就顯得效率很是低下。
更有效的方案是在playbook配置文件中放置全部的任務代碼,利用ansible-playbook命令執行該文件,能夠實現自動化運維。YAML文件的擴展名一般爲.yaml或.yml。
YAML語法與其餘高級語言相似,其結構經過縮進來展現,經過「-」來表明項;「:」用來分隔鍵和值;整個文件以「—-」開頭並以「…」結尾,以下所示:
[root@centos01 ~]# grep -v ^# /etc/ansible/hosts | grep -v ^$ <!--查看hosts中的分組信息--> [web1]192.168.100.20[web2]192.168.100.30[root@centos01 ~]# vim /etc/ansible/a.yml <!--建立a.yml文件,寫入如下內容--> ---- hosts: web1 <!--針對web1組中的操做--> remote_user: root <!--遠端執行用戶身份爲root--> tasks: <!--任務列表--> - name: adduser <!--任務名稱--> user: name=user1 state=present <!--執行user模塊,建立用戶--> tags: <!--建立tag標籤--> - aaa <!--tag標籤爲aaa--> - name: addgroup <!--任務名稱--> group: name=root system=yes <!--執行group模塊,建立組--> tags: <!--建立tag標籤--> - bbb <!--tag標籤爲bbb--> - hosts: web2 <!--針對web2組中的操做--> remote_user: root <!--遠端執行用戶身份爲root--> tasks: <!--任務列表--> - name: copy file to web <!--任務名稱--> copy: src=/etc/passwd dest=/home <!--執行copy模塊,複製文件--> tags: <!--建立tag標籤--> - ccc <!--tag標籤爲ccc-->...
全部的「-」和「:」後面均有空格,並且注意縮進和對齊,以下圖所示:
playbook的核心元素包含:
hosts:任務的目標主機,多個主機用冒號分隔,通常調用/etc/ansible/hosts中的分組信息;remote_user:遠程主機上,運行此任務的默認身份爲root;
tasks:任務,即定義的具體任務,由模塊定義的操做列表;
handlers:觸發器,相似tasks,只是在特定的條件下才會觸發的任務。
某任務的狀態在運行後爲changed時,可經過「notify」通知給相應的handlers進行觸發執行;
roles:角色,將hosts剝離出去,由tasks、handlers等所組成的一種特定的結構集合;
playbook文件定義的任務須要經過ansible-playbook命令進行調用並執行。ansible-playbook命令用法以下:
ansible-playbook [option] /PATH/TO/PLAYBOOK.yaml
其中,[option]部分的功能包括:
執行playbook的示例以下:
[root@centos01 ~]# ansible-playbook --syntax-check /etc/ansible/a.yml <!--語法檢測--> playbook: /etc/ansible/a.yml <!--表示沒有報錯--> [root@centos01 ~]# ansible-playbook -C /etc/ansible/a.yml <!--對a.yml進行預測試--> .................<!--省略部份內容--> 192.168.100.20 : ok=3 changed=1 unreachable=0 failed=0 192.168.100.30 : ok=2 changed=1 unreachable=0 failed=0 <!--返回結果表示沒有錯誤,所有能夠執行成功。--> [root@centos01 ~]# ansible-playbook --list-hosts /etc/ansible/a.yml <!--列出a.yml文件中的主機--> [root@centos01 ~]# ansible-playbook --list-tasks /etc/ansible/a.yml<!--列出任務--> [root@centos01 ~]# ansible-playbook --list-tags /etc/ansible/a.yml <!--列出標籤--> [root@centos01 ~]# ansible-playbook /etc/ansible/a.yml <!--執行任務--> [root@centos01 ~]# ssh 192.168.100.20 tail -1 /etc/passwd <!--確認執行結果--> user1:x:1001:1001::/home/user1:/bin/bash [root@centos01 ~]# ssh 192.168.100.30 ls -ld /home/passwd -rw-r--r--. 1 root root 2342 7月 23 16:06 /home/passwd <!--通常狀況先執行「-C」命令進行預測試,沒有問題後再執行.yml文件。-->
一般狀況下先執行 ansible-playbook -C /PATH/TO/PLAYBOOK.yaml 命令進行測試,測試沒問題後再執行 ansible-playbook /PATH/TO/PLAYBOOK.yml 命令。
須要觸發才能執行的任務,當以前定義在tasks中的任務執行成功後,若但願在此基礎上觸發其餘任務,這時就須要定義handlers。例如,當經過ansible的模塊對目標主機的配置文件進行修改以後,若是任務執行成功,能夠觸發一個觸發器,在觸發器中定義目標主機的服務重啓操做,以使配置文件生效。handlers觸發器具備如下特色:
handlers觸發器的使用示例以下:
[root@centos01 ~]# ssh 192.168.100.20 netstat -anpt | grep 80 <!--查詢100.20主機監聽的端口--> tcp6 0 0 :::80 :::* LISTEN 94858/httpd <!--能夠看到是監聽80端口,如今經過腳本改成8080端口,並使其生效。--> [root@centos01 ~]# vim /etc/ansible/httpd.yml <!--編輯httpd.yml文件,寫入如下內容--> --- - hosts: web1 remote_user: root tasks: - name: change port command: sed -i 's/Listen\ 80/Listen\ 8080/g' /etc/httpd/conf/httpd.conf notify: <!--配置觸發條件--> - restart httpd server <!--完成該任務後調用名爲「restart httpd server」的觸發器--> handlers: <!--配置觸發器--> - name: restart httpd server <!--指定觸發器名字,要和上面「notify」指定的觸發器名字同樣--> service: name=httpd state=restarted<!--觸發任務爲重啓httpd服務--> ... <!--編寫完成後,保存退出便可--> [root@centos01 ~]# ansible-playbook -C /etc/ansible/httpd.yml <!--進行預測試--> [root@centos01 ~]# ansible-playbook /etc/ansible/httpd.yml <!--執行腳本--> [root@centos01 ~]# ssh 192.168.100.20 netstat -anpt | grep 8080 <!--遠端主機已經運行8080端口--> tcp6 0 0 :::8080 :::* LISTEN 103594/httpd
將多種不一樣的tasks的文件集中存儲在某個目錄下,則該目錄就是角色。角色通常存放在 /etc/ansible/roles/ 目錄,可經過ansible的配置文件來調整默認的角色目錄,/etc/ansible/roles/ 目錄下有不少子目錄,其中每個子目錄對應一個角色,每一個角色也有本身的目錄結構,以下圖所示:
/etc/ansible/roles/爲角色集合,該目錄下有自定義的各個子目錄:
每一個角色的定義,以特定的層級目錄結構進行組織。以mariadb(mysql角色)爲例:
上述目錄中,tasks、handlers、vars、meta、default至少應該包含一個main.yml文件,該目錄下也能夠有其餘.yml文件,可是須要在main.yml文件中用include指令將其餘.yml文件包含進來。
有了角色後,能夠直接在yaml文件(playbook配置文件)中調用角色,示例以下:
- hosts: web remote_user: root roles: - mysql <!--調用角色名--> - httpd <!--調用角色名-->
能夠只調用一個角色,也能夠調用多個角色,當定義了角色後,用ansible-playbook PALYBOOK文件執行便可。
此時ansible會到角色集合的目錄(/etc/ansible/roles)去找mysql和httpd目錄,而後依次運行mysql和httpd目錄下的全部代碼。
下面來個安裝及配置mariadb數據庫的實例
需求分析:
轉自:51CTO博客-俊偉祺i
https://blog.51cto.com/141566...
最新整理的 2TB 技術乾貨:包括架構師實戰教程、大數據、Docker容器、系統運維、數據庫、redis、MogoDB、電子書、Java基礎課程、Java實戰項目、ELK Stack、機器學習、BAT面試精講視頻等。只需在「 民工哥技術之路」微信公衆號對話框回覆關鍵字:1024便可獲取所有資料。