5.ansible使用-playbook劇本+roles角色模式-案例實(shí)戰(zhàn)
1.ansible-playbook角色roles的相關(guān)入門
1).角色roles的概念和作用
角色roles是ansible自1.2版本引入的新特性,用于層次性、結(jié)構(gòu)化的組織playbook,roles能夠根據(jù)層次型結(jié)構(gòu)自動(dòng)裝載變量文件、tasks任務(wù)以及handlers觸發(fā)等。簡(jiǎn)單來(lái)講,roles就是通過(guò)分別將變量、文件、任務(wù)、模板及處理器放置于單獨(dú)的目錄中,并可以便捷的include他們的一種機(jī)制。其實(shí)就是將一個(gè)大的playbook文件,進(jìn)行分類拆分,達(dá)到根據(jù)需要復(fù)用的目的。
2).角色roles的目錄層級(jí)結(jié)構(gòu)
[root@localhost ~]# tree ansible-playbook-roles/ ?下面是好幾個(gè)項(xiàng)目的role,以httpd安裝role為例解釋
ansible-playbook-roles/ ? ? ? ? ? ? ?#所有roles的總目錄,最外層的,包括playbook的yaml文件
├── host ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#hosts列表清單目錄
│?? └── hosts ? ? ? ? ? ? ? ? ? ? ? ? #具體的hosts清單,和/etc/ansible/hosts內(nèi)容一樣,指定部署到哪些機(jī)器
├── playbook-all-roles.yml ? ? ? ?#調(diào)用各個(gè)roles的總yml文件,可以具體指定調(diào)用哪一個(gè)role或哪一些role
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #指定調(diào)用哪些role就是部署相應(yīng)的role
└── roles ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#所有roles的總目錄,里面是自定義的各個(gè)獨(dú)立的role,部署哪個(gè)就配置哪個(gè)
? ?├── httpd ? ? ? ? ? ? ? ? ? ? ? ? ?#以其中一個(gè)httpd的role為例,下面是該role下的目錄結(jié)構(gòu),根據(jù)需要使用目錄
? ?│?? ├── default ? ? ? ? ? ? ? ? ?#角色默認(rèn)的變量,比vars的優(yōu)先級(jí)低
? ?│?? ├── files ? ? ? ? ? ? ? ? ? ? #角色部署時(shí)用到的一些文件約定存放目錄,可使用copy模塊將文件傳到遠(yuǎn)程主機(jī)
? ?│?? │?? └── httpd.conf ? ? ? #準(zhǔn)備好的httpd的配置文件
? ?│?? ├── handlers ? ? ? ? ? ? ? #觸發(fā)到該下面定義的名稱時(shí),會(huì)觸發(fā)該下面執(zhí)行任務(wù)處理,修改配置觸發(fā)重啟
? ?│?? │?? └── main.yml ? ? ? ? ?#定義的觸發(fā)該任務(wù)時(shí)候,執(zhí)行的具體任務(wù),如:重啟服務(wù)
? ?│?? ├── meta ? ? ? ? ? ? ? ? ? ?#角色定義的元數(shù)據(jù)
? ?│?? ├── tasks ? ? ? ? ? ? ? ? ? ?#角色部署時(shí)要執(zhí)行的任務(wù)列表,各個(gè)步驟任務(wù)的yml文件,main.yml來(lái)調(diào)整任務(wù)順序
? ?│?? │?? ├── config_httpd.yml ? ?#修改httpd配置任務(wù)
│?? │?? ├── index_httpd.yml ? ? ? ? #設(shè)置httpd訪問(wèn)首頁(yè)任務(wù)
? ?│?? │?? ├── install_httpd.yml ? ? #安裝httpd任務(wù)
? ?│?? │?? ├── main.yml ? ? ? ? ? ? ? #主任務(wù)文件,通過(guò)該文件可以調(diào)整各個(gè)任務(wù)的執(zhí)行順序
? ?│?? │?? └── service_httpd.yml ? #啟動(dòng)httpd服務(wù)任務(wù)
? ?│?? ├── templates ? ? ? ? ? ? #使用的模板文件約定目錄,可以使用template模塊,將模板渲染到遠(yuǎn)程主機(jī)
? ?│?? │?? └── index.html ? ? ? #事先準(zhǔn)備的首頁(yè)測(cè)試文件
? ?│?? └── vars ? ? ? ? ? ? ? ? ? ? ?#定義變量文件的目錄
? ?│?? ? ? └── main.yml ? ? ? ? ?#定義變量的文件,可將變量定義到該文件,供其他文件調(diào)用變量
? ?├── mysql5.7
? ?├── nginx
? ?└── tomcat
注意1:
上面目錄結(jié)構(gòu)的名字是約定好的,不是隨便能改成什么別的名字。所以需要按照上面的目錄結(jié)構(gòu)來(lái)進(jìn)行組織palybook文件
注意2:
上面是以httpd角色為例解釋的roles相關(guān)的目錄層級(jí)結(jié)構(gòu),具體哪些role使用哪些目錄,根據(jù)自己需要使用,如果用不到的目錄,也可不創(chuàng)建,并不是每個(gè)role都需要有上面固定的目錄,如:如果httpd的role使用不到template目錄,那么可以不用創(chuàng)建templates目錄
注意3:
- files/ ? ? ? ? ?存放由copy或script模塊等調(diào)用的文件
- templates/ ?template模塊查找所需要模板文件的目錄
- tasks/ ? ? ? 定義task、role的基本元素,至少應(yīng)該包含一個(gè)main.yml的文件,其他的文件需要在此文件中通過(guò)include進(jìn)行包含
- handlers/ ?至少應(yīng)該包含一個(gè)名為main.yml的文件,其他的文件需要在此文件中通過(guò)include進(jìn)行包含
- vars/ ? ? ?定義變量,至少應(yīng)該包含一個(gè)名為main.yml的文件,其他的文件需要在此文件中通過(guò)include進(jìn)行包含
- meta/ ? ? 定義當(dāng)前角色的特殊設(shè)定及其依賴關(guān)系,至少應(yīng)該包含一個(gè)名為main.yml的文件,其他文件需要在此文件中通過(guò)include進(jìn)行包含
- default/ ?設(shè)定默認(rèn)變量時(shí)使用此目錄中的main.yml文件,比vars的優(yōu)先級(jí)低
2.ansible-playbook使用角色roles部署服務(wù)實(shí)戰(zhàn)案例
案例1:使用ansible-playbook的role部署安裝httpd服務(wù),且配置文件修改后會(huì)觸發(fā)重啟
管理端: 192.168.171.128
[root@localhost ~]# tree ansible-playbook-roles-only-httpd/
ansible-playbook-roles-only-httpd/
├── host
│?? └── hosts
├── playbook-all-roles.yml
└── roles
? ?├── httpd
? ?│?? ├── default
? ?│?? ├── files
? ?│?? │?? └── httpd.conf
? ?│?? ├── handlers
? ?│?? │?? └── main.yml
? ?│?? ├── meta
? ?│?? ├── tasks
? ?│?? │?? ├── config_httpd.yml
? ?│?? │?? ├── index_httpd.yml
? ?│?? │?? ├── install_httpd.yml
? ?│?? │?? ├── main.yml
? ?│?? │?? └── service_httpd.yml
? ?│?? ├── templates
? ?│?? │?? └── index.html
? ?│?? └── vars
? ?│?? ? ? └── main.yml
? ?├── mysql5.7
? ?├── nginx
? ?└── tomcat
[root@localhost ~]# cd ansible-playbook-roles-only-httpd/
[root@localhost ansible-playbook-roles-only-httpd]# ls
host ?playbook-all-roles.yml ?roles
[root@localhost ansible-playbook-roles-only-httpd]# cat host/hosts ? ?#查看主機(jī)列表
[test]
192.168.171.129
192.168.171.130
[root@localhost ansible-playbook-roles-only-httpd]# cat playbook-all-roles.yml ?#查看選擇部署的某個(gè)role
#test: 為/etc/ansible/hosts中的主機(jī)列表 ?#task: 執(zhí)行的任務(wù)
#name: 描述信息 ? ? ? ? ? ? ? ? ? ? ?#yum: yum模塊,安裝服務(wù)的
#copy: copy模塊,遠(yuǎn)程傳遞文件的 ? ? ? #file: file模塊,遠(yuǎn)程創(chuàng)建目錄的
#service: service模塊,遠(yuǎn)程管理服務(wù)的
#remote_user: root 是指定遠(yuǎn)程主機(jī)上使用的用戶
#gather_facts: no 是默認(rèn)執(zhí)行playbook時(shí)候,默認(rèn)會(huì)收集目標(biāo)主機(jī)的信息,禁用掉能提高效率
---
#httpd role
- hosts: test
?remote_user: root
?gather_facts: no
?#下面是調(diào)用相應(yīng)的role,調(diào)用哪些role就部署哪些
?roles:
? ?- role: httpd
? ?#- role: nginx
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/ ? #查看里面所有的role,只看httpd,其他role為空
httpd ?mysql5.7 ?nginx ?tomcat
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/ ?#查看httpd的role的層級(jí)結(jié)構(gòu)
default ?files ?handlers ?meta ?tasks ?templates ?vars
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/default/ ? #default目錄沒(méi)用上,為空
為空
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/files/ ? ?#查看準(zhǔn)備的自定義httpd的配置文件
httpd.conf
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/files/httpd.conf |grep Listen ?#修改端口
# Listen: Allows you to bind Apache to specific IP addresses and/or
# Change this to Listen on specific IP addresses as shown below to
#Listen 12.34.56.78:80
Listen 82
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/handlers/ ? #查看修改配置后觸發(fā)的重啟任務(wù)
main.yml
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/handlers/main.yml
- name: restart ?#定義被觸發(fā)的handler名稱,當(dāng)修改配置文件后會(huì)根據(jù)該名稱觸發(fā)重啟服務(wù)
?service: name=httpd state=restarted
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/meta/ ? #meta目錄沒(méi)用上,為空
為空
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/tasks/ ? ? ? ? ?#查看所有任務(wù)和任務(wù)執(zhí)行順序
config_httpd.yml ?index_httpd.yml ?install_httpd.yml ?main.yml ?service_httpd.yml
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/tasks/main.yml
- include: install_httpd.yml
- include: config_httpd.yml
- include: index_httpd.yml
- include: service_httpd.yml
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/tasks/install_httpd.yml
- name: install httpd
?yum: name=httpd state=installed
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/tasks/config_httpd.yml
- name: config http
?copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf
?notify: restart ? ? #修改配置時(shí)候觸發(fā)重啟的handler名稱,重啟httpd服務(wù)
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/tasks/index_httpd.yml
- name: index.html
?template: src=index.html dest=/var/www/html/index.html
?#使用template模塊將templates目錄中文件渲染到遠(yuǎn)程主機(jī)目錄
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/tasks/service_httpd.yml
- name: start service
?service: name=httpd state=started enabled=yes
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/templates/ ?#查看網(wǎng)頁(yè)模板文件和調(diào)用變量情況
index.html
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/templates/index.html #查看調(diào)用變量情況
<h1> {{shouye_content}} </h1>
[root@localhost ansible-playbook-roles-only-httpd]# ls roles/httpd/vars/ ? ? ? ? ? #查看變量文件
main.yml
[root@localhost ansible-playbook-roles-only-httpd]# cat roles/httpd/vars/main.yml ?#查看定義變量的內(nèi)容
shouye_content: "httpd test111"
[root@localhost ansible-playbook-roles-only-httpd]# ansible-playbook -i host/hosts playbook-all-roles.yml #執(zhí)行
所有被管理端:192.168.171.129和192.168.130查看httpd服務(wù)部署和配置文件情況
[root@localhost ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
? Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
? Active: active (running) since Sun 2023-04-09 00:08:36 CST; 1min 49s ago
[root@localhost ~]# netstat -anput |grep 82
tcp6 ? ? ? 0 ? ? ?0 :::82 ? ? ? ? ? ? ? ? ? :::* ? ? ? ? ? ? ? ? ? ?LISTEN ? ? ?41228/httpd ? ? ?
[root@localhost ~]# cat /etc/httpd/conf/httpd.conf |grep 82
Listen 82
[root@localhost ~]# curl http://127.0.0.1:82/
<h1> httpd test111 </h1>
案例2:使用ansible-playbook的role部署安裝nginx服務(wù),且配置文件修改后會(huì)觸發(fā)重啟(下面僅看nginx角色)
管理端: 192.168.171.128
[root@localhost ~]# tree ansible-playbook-roles ?#下面是nginx、mysql5.7、tomcat、httpd所有的,只看nginx
ansible-playbook-roles
├── host
│?? └── hosts
├── playbook-all-roles.yml
└── roles
? ?├── httpd
? ?│?? ├── default
? ?│?? ├── files
? ?│?? │?? └── httpd.conf
? ?│?? ├── handlers
? ?│?? │?? └── main.yml
? ?│?? ├── meta
? ?│?? ├── tasks
? ?│?? │?? ├── config_httpd.yml
? ?│?? │?? ├── index_httpd.yml
? ?│?? │?? ├── install_httpd.yml
? ?│?? │?? ├── main.yml
? ?│?? │?? └── service_httpd.yml
? ?│?? ├── templates
? ?│?? │?? └── index.html
? ?│?? └── vars
? ?│?? ? ? └── main.yml
? ?├── mysql5.7
? ?│?? ├── default
? ?│?? ├── files
? ?│?? │?? ├── my.cnf
? ?│?? │?? ├── mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
? ?│?? │?? └── mysqld.service
? ?│?? ├── handlers
? ?│?? │?? └── main.yml
? ?│?? ├── meta
? ?│?? ├── tasks
? ?│?? │?? ├── create_mysql_user_and_dir.yml
? ?│?? │?? ├── init_mysql.yml
? ?│?? │?? ├── install_mysql_yilai.yml
? ?│?? │?? ├── jieya_mv_mysql.yml
? ?│?? │?? ├── main.yml
? ?│?? │?? ├── service_mysql.yml
? ?│?? │?? ├── transfer_mysql_config.yml
? ?│?? │?? ├── transfer_mysqld_service.yml
? ?│?? │?? └── transfer_mysql.yml
? ?│?? ├── templates
? ?│?? └── vars
? ?│?? ? ? └── main.yml
? ?├── nginx
? ?│?? ├── default
? ?│?? ├── files
? ?│?? │?? ├── index.html
? ?│?? │?? ├── nginx-1.23.3.tar.gz
? ?│?? │?? ├── nginx.conf
? ?│?? │?? └── www.test.com.conf
? ?│?? ├── handlers
? ?│?? │?? └── main.yml
? ?│?? ├── meta
? ?│?? ├── tasks
? ?│?? │?? ├── bianyi_and_install_nginx.yml
? ?│?? │?? ├── config_nginx.yml
? ?│?? │?? ├── index_nginx.yml
? ?│?? │?? ├── install_nginx_bianyi.yml
? ?│?? │?? ├── install_nginx_yilai.yml
? ?│?? │?? ├── main.yml
? ?│?? │?? ├── nginx_package_transfer_and_jieya.yml
? ?│?? │?? └── service_nginx.yml
? ?│?? ├── templates
? ?│?? └── vars
? ?│?? ? ? └── main.yml
? ?└── tomcat
? ? ? ?├── default
? ? ? ?├── files
? ? ? ?│?? ├── apache-tomcat-8.0.32.tar.gz
? ? ? ?│?? ├── index.html
? ? ? ?│?? ├── jdk-8u65-linux-x64.gz
? ? ? ?│?? └── server.xml
? ? ? ?├── handlers
? ? ? ?│?? └── main.yml
? ? ? ?├── meta
? ? ? ?├── tasks
? ? ? ?│?? ├── config_tomcat.yml
? ? ? ?│?? ├── index_tomcat.yml
? ? ? ?│?? ├── install_jdk1.8.yml
? ? ? ?│?? ├── install_tomcat.yml
? ? ? ?│?? ├── main.yml
? ? ? ?│?? └── service_tomcat.yml
? ? ? ?├── templates
? ? ? ?└── vars
? ? ? ? ? ?└── main.yml
[root@localhost ~]# cd ansible-playbook-roles
[root@localhost ansible-playbook-roles]# ls
host ?playbook-all-roles.yml ?roles
[root@localhost ansible-playbook-roles]# cat host/hosts #查看主機(jī)列表
[test]
192.168.171.129
192.168.171.130
[root@localhost ansible-playbook-roles]# cat playbook-all-roles.yml #查看選擇部署的某個(gè)role
#test: 為/etc/ansible/hosts中的主機(jī)列表 ?#task: 執(zhí)行的任務(wù)
#name: 描述信息 ? ? ? ? ? ? ? ? ? ? ?#yum: yum模塊,安裝服務(wù)的
#copy: copy模塊,遠(yuǎn)程傳遞文件的 ? ? ? #file: file模塊,遠(yuǎn)程創(chuàng)建目錄的
#service: service模塊,遠(yuǎn)程管理服務(wù)的
#remote_user: root 是指定遠(yuǎn)程主機(jī)上使用的用戶
#gather_facts: no 是默認(rèn)執(zhí)行playbook時(shí)候,默認(rèn)會(huì)收集目標(biāo)主機(jī)的信息,禁用掉能提高效率
---
#httpd role
- hosts: test
?remote_user: root
?gather_facts: no
?#下面是調(diào)用相應(yīng)的role,調(diào)用哪些role就部署哪些
?roles:
? ?#- role: httpd
? ?- role: nginx
? ?#- role: tomcat
? ?#- role: mysql5.7
[root@localhost ansible-playbook-roles]# ls roles/ ?#查看里面所有的role,只看nginx的
httpd ?mysql5.7 ?nginx ?tomcat
[root@localhost ansible-playbook-roles]# ls roles/nginx/ ?#查看nginx的role的層級(jí)結(jié)構(gòu)
default ?files ?handlers ?meta ?tasks ?templates ?vars
[root@localhost ansible-playbook-roles]# ls roles/nginx/default/ ? #default目錄沒(méi)用上,為空
為空
[root@localhost ansible-playbook-roles]# ls roles/nginx/files/ #查看軟件包、配置文件和網(wǎng)頁(yè)文件
index.html ?nginx-1.23.3.tar.gz ?nginx.conf ?www.test.com.conf
[root@localhost ansible-playbook-roles]# cat roles/nginx/files/index.html
nginx test
[root@localhost ansible-playbook-roles]# cat roles/nginx/files/nginx.conf |grep vhost
? ?include ? ? ? /usr/local/nginx/conf/vhost/*.conf;
[root@localhost ansible-playbook-roles]# cat roles/nginx/files/www.test.com.conf
server {
? ?listen ? ? ? 88;
? ?server_name ?www.test.com;
? ?location / {
? ? ? ?root ? html;
? ? ? ?index ?index.html index.htm;
? ?}
}
[root@localhost ansible-playbook-roles]# ls roles/nginx/handlers/ ?#查看修改配置后觸發(fā)的重啟任務(wù)
main.yml
[root@localhost ansible-playbook-roles]# cat roles/nginx/handlers/main.yml
#觸發(fā)后重新加載nginx
- name: restart ? ?#定義被觸發(fā)的handler名稱,當(dāng)修改配置文件后會(huì)根據(jù)該名稱觸發(fā)重啟服務(wù)
?shell: pkill nginx && /usr/local/nginx/sbin/nginx ? ? ? ? ? ? ? #測(cè)試reload不行
[root@localhost ansible-playbook-roles]# ls roles/nginx/meta/ ? ?#meta目錄沒(méi)用上,為空
為空
[root@localhost ansible-playbook-roles]# ls roles/nginx/tasks/ ? #查看所有任務(wù)和任務(wù)執(zhí)行順序
bianyi_and_install_nginx.yml ?index_nginx.yml ? ? ? ? ? install_nginx_yilai.yml ?nginx_package_transfer_and_jieya.yml
config_nginx.yml ? ? ? ? ? ? ?install_nginx_bianyi.yml ?main.yml ? ? ? ? ? ? ? ? service_nginx.yml
[root@localhost ansible-playbook-roles]# cat roles/nginx/tasks/main.yml
- include: install_nginx_bianyi.yml
- include: install_nginx_yilai.yml
- include: nginx_package_transfer_and_jieya.yml
- include: bianyi_and_install_nginx.yml
- include: config_nginx.yml
- include: index_nginx.yml
- include: service_nginx.yml
[root@localhost ansible-playbook-roles]# cat roles/nginx/tasks/install_nginx_bianyi.yml
#安裝nginx編譯工具
- name: Install gcc gcc-c++
?yum: name=gcc,gcc-c++ state=installed
[root@localhost ansible-playbook-roles]# cat roles/nginx/tasks/install_nginx_yilai.yml
#安裝nginx依賴工具
- name: Install yilai
?yum: name=openssl-devel,openssl,zlib,zlib-devel,pcre-devel,vim,wget state=installed
[root@localhost ansible-playbook-roles]# cat roles/nginx/tasks/nginx_package_transfer_and_jieya.yml
#nginx壓縮包的傳輸和解壓
- name: nginx package transfer and jieya
?unarchive:
? ? src: "{{ src_nginx }}"
? ? dest: "{{ nginx_jieya_dir }}"
[root@localhost ansible-playbook-roles]# cat roles/nginx/tasks/bianyi_and_install_nginx.yml
#配置編譯和安裝nginx: 下面做了一個(gè)判斷,如果nginx用戶不存則創(chuàng)建,如果存在就跳過(guò)
- name: create nginx user
?shell: user_name=`cat /etc/passwd|grep nginx|wc -l` &&
? ? ? ? [ ${user_name} -eq 0 ] && useradd -s /sbin/nologin nginx || break
- name: config bianyi install nginx
?shell: cd {{ nginx_jieya_dir }} &&
? ? ? ? cd {{ nginx_jieyahou_name }} &&
? ? ? ? ./configure --user=nginx --group=nginx --prefix={{ nginx_install_dir }} --with-http_stub_status_module --with-http_ssl_module &&
? ? ? ? make && make install
[root@localhost ansible-playbook-roles]# cat roles/nginx/tasks/config_nginx.yml
#傳輸和配置nginx,使用自己定義的配置文件
- name: transfer and config nginx.conf
?copy: src={{ src_nginx_conf }} dest={{ dest_nginx_conf }}
?notify: restart ? ? #修改配置時(shí)候觸發(fā)重啟的handler名稱,重新加載nginx服務(wù),需要和handlers目錄中文件中名字一致
#創(chuàng)建include相關(guān)配置文件目錄,下面是判斷如果目錄不存在則創(chuàng)建,如果存在就跳過(guò)不創(chuàng)建
- name: create nginx_include conf
?shell: cd {{ nginx_install_dir }} &&
? ? ? ? [ ! -d conf/vhost ] && mkdir conf/vhost || break
#傳輸和配置nginx include的配置文件,使用自定義的配置文件
- name: transfer and config nginx_include.conf
?copy: src={{ src_nginx_include_conf }} dest={{ dest_nginx_include_conf }}
?notify: restart ? ? #修改配置時(shí)候觸發(fā)重啟的handler名稱,重新加載nginx服務(wù),需要和handlers目錄中文件中名字一致
[root@localhost ansible-playbook-roles]# cat roles/nginx/tasks/index_nginx.yml
#自定義nginx的首頁(yè)并傳輸
- name: transfer nginx index.html
?copy: src={{ src_nginx_index }} dest={{ dest_nginx_index }}
[root@localhost ansible-playbook-roles]# cat roles/nginx/tasks/service_nginx.yml
#啟動(dòng)nginx服務(wù)
- name: start nginx service
?shell: /usr/local/nginx/sbin/nginx
[root@localhost ansible-playbook-roles]# ls roles/nginx/templates/ ?為空,沒(méi)用到
為空
[root@localhost ansible-playbook-roles]# ls roles/nginx/vars/ ?#查看變量文件
main.yml
[root@localhost ansible-playbook-roles]# cat roles/nginx/vars/main.yml ?#查看定義變量的內(nèi)容
src_nginx: "nginx-1.23.3.tar.gz"
nginx_jieya_dir: "/usr/local"
nginx_install_dir: "/usr/local/nginx"
nginx_jieyahou_name: "nginx-1.23.3"
src_nginx_conf: "nginx.conf"
src_nginx_include_conf: "www.test.com.conf"
dest_nginx_conf: "/usr/local/nginx/conf/nginx.conf"
dest_nginx_include_conf: "/usr/local/nginx/conf/vhost/www.test.com.conf"
src_nginx_index: "index.html"
dest_nginx_index: "/usr/local/nginx/html/"
[root@localhost ansible-playbook-roles]# ansible-playbook -i host/hosts playbook-all-roles.yml ?#執(zhí)行部署
所有被管理端:192.168.171.129和192.168.130查看nginx服務(wù)部署和配置文件情況
[root@localhost ~]# ps -ef |grep nginx
root ? ? ? 4770 ? ? ?1 ?0 16:45 ? ? ? ? ?00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx ? ? ?4771 ? 4770 ?0 16:45 ? ? ? ? ?00:00:00 nginx: worker process
root ? ? ? 4783 ? 1196 ?0 16:46 pts/0 ? ?00:00:00 grep --color=auto nginx
[root@localhost ~]# cat /usr/local/nginx/conf/vhost/www.test.com.conf
server {
? ?listen ? ? ? 88;
? ?server_name ?www.test.com;
? ?location / {
? ? ? ?root ? html;
? ? ? ?index ?index.html index.htm;
? ?}
}
[root@localhost ~]# netstat -anput |grep 88|grep LISTEN
tcp ? ? ? ?0 ? ? ?0 0.0.0.0:88 ? ? ? ? ? ? ?0.0.0.0:* ? ? ? ? ? ? ? LISTEN ? ? ?4770/nginx: master ?
[root@localhost ~]# curl 127.0.0.1:88/
nginx test
案例3:使用ansible-playbook的role部署安裝tomcat服務(wù),且配置文件修改后會(huì)觸發(fā)重啟(下面僅看tomcat角色)
管理端: 192.168.171.128
[root@localhost ~]# tree ansible-playbook-roles ?#下面是nginx、mysql5.7、tomcat、httpd所有的,只看tomcat
ansible-playbook-roles
├── host
│?? └── hosts
├── playbook-all-roles.yml
└── roles
? ?├── httpd
? ?│?? ├── default
? ?│?? ├── files
? ?│?? │?? └── httpd.conf
? ?│?? ├── handlers
? ?│?? │?? └── main.yml
? ?│?? ├── meta
? ?│?? ├── tasks
? ?│?? │?? ├── config_httpd.yml
? ?│?? │?? ├── index_httpd.yml
? ?│?? │?? ├── install_httpd.yml
? ?│?? │?? ├── main.yml
? ?│?? │?? └── service_httpd.yml
? ?│?? ├── templates
? ?│?? │?? └── index.html
? ?│?? └── vars
? ?│?? ? ? └── main.yml
? ?├── mysql5.7
? ?│?? ├── default
? ?│?? ├── files
? ?│?? │?? ├── my.cnf
? ?│?? │?? ├── mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
? ?│?? │?? └── mysqld.service
? ?│?? ├── handlers
? ?│?? │?? └── main.yml
? ?│?? ├── meta
? ?│?? ├── tasks
? ?│?? │?? ├── create_mysql_user_and_dir.yml
? ?│?? │?? ├── init_mysql.yml
? ?│?? │?? ├── install_mysql_yilai.yml
? ?│?? │?? ├── jieya_mv_mysql.yml
? ?│?? │?? ├── main.yml
? ?│?? │?? ├── service_mysql.yml
? ?│?? │?? ├── transfer_mysql_config.yml
? ?│?? │?? ├── transfer_mysqld_service.yml
? ?│?? │?? └── transfer_mysql.yml
? ?│?? ├── templates
? ?│?? └── vars
? ?│?? ? ? └── main.yml
? ?├── nginx
? ?│?? ├── default
? ?│?? ├── files
? ?│?? │?? ├── index.html
? ?│?? │?? ├── nginx-1.23.3.tar.gz
? ?│?? │?? ├── nginx.conf
? ?│?? │?? └── www.test.com.conf
? ?│?? ├── handlers
? ?│?? │?? └── main.yml
? ?│?? ├── meta
? ?│?? ├── tasks
? ?│?? │?? ├── bianyi_and_install_nginx.yml
? ?│?? │?? ├── config_nginx.yml
? ?│?? │?? ├── index_nginx.yml
? ?│?? │?? ├── install_nginx_bianyi.yml
? ?│?? │?? ├── install_nginx_yilai.yml
? ?│?? │?? ├── main.yml
? ?│?? │?? ├── nginx_package_transfer_and_jieya.yml
? ?│?? │?? └── service_nginx.yml
? ?│?? ├── templates
? ?│?? └── vars
? ?│?? ? ? └── main.yml
? ?└── tomcat
? ? ? ?├── default
? ? ? ?├── files
? ? ? ?│?? ├── apache-tomcat-8.0.32.tar.gz
? ? ? ?│?? ├── index.html
? ? ? ?│?? ├── jdk-8u65-linux-x64.gz
? ? ? ?│?? └── server.xml
? ? ? ?├── handlers
? ? ? ?│?? └── main.yml
? ? ? ?├── meta
? ? ? ?├── tasks
? ? ? ?│?? ├── config_tomcat.yml
? ? ? ?│?? ├── index_tomcat.yml
? ? ? ?│?? ├── install_jdk1.8.yml
? ? ? ?│?? ├── install_tomcat.yml
? ? ? ?│?? ├── main.yml
? ? ? ?│?? └── service_tomcat.yml
? ? ? ?├── templates
? ? ? ?└── vars
? ? ? ? ? ?└── main.yml
[root@localhost ~]# cd ansible-playbook-roles
[root@localhost ansible-playbook-roles]# ls
host ?playbook-all-roles.yml ?roles
[root@localhost ansible-playbook-roles]# cat host/hosts #查看主機(jī)列表
[test]
192.168.171.129
192.168.171.130
[root@localhost ansible-playbook-roles]# cat playbook-all-roles.yml #查看選擇部署的某個(gè)role
#test: 為/etc/ansible/hosts中的主機(jī)列表 ?#task: 執(zhí)行的任務(wù)
#name: 描述信息 ? ? ? ? ? ? ? ? ? ? ?#yum: yum模塊,安裝服務(wù)的
#copy: copy模塊,遠(yuǎn)程傳遞文件的 ? ? ? #file: file模塊,遠(yuǎn)程創(chuàng)建目錄的
#service: service模塊,遠(yuǎn)程管理服務(wù)的
#remote_user: root 是指定遠(yuǎn)程主機(jī)上使用的用戶
#gather_facts: no 是默認(rèn)執(zhí)行playbook時(shí)候,默認(rèn)會(huì)收集目標(biāo)主機(jī)的信息,禁用掉能提高效率
---
#httpd role
- hosts: test
?remote_user: root
?gather_facts: no
?#下面是調(diào)用相應(yīng)的role,調(diào)用哪些role就部署哪些
?roles:
? ?#- role: httpd
? ?#- role: nginx
? ?- role: tomcat
? ?#- role: mysql5.7
[root@localhost ansible-playbook-roles]# ls roles/ ?#查看里面所有的role,只看tomcat的
httpd ?mysql5.7 ?nginx ?tomcat
[root@localhost ansible-playbook-roles]# ls roles/tomcat/ ?#查看tomcat的role的層級(jí)結(jié)構(gòu)
default ?files ?handlers ?meta ?tasks ?templates ?vars
[root@localhost ansible-playbook-roles]# ls roles/tomcat/default/ ? #default目錄沒(méi)用上,為空
為空
[root@localhost ansible-playbook-roles]# ls roles/tomcat/files/ ? ? #查看軟件包、配置文件和網(wǎng)頁(yè)文件
apache-tomcat-8.0.32.tar.gz ?index.html ?jdk-8u65-linux-x64.gz ?server.xml
[root@localhost ansible-playbook-roles]# cat roles/tomcat/files/index.html
tomcat test index
[root@localhost ansible-playbook-roles]# cat roles/tomcat/files/server.xml |grep 8081
? ?<Connector port="8081" protocol="HTTP/1.1"
[root@localhost ansible-playbook-roles]# ls roles/tomcat/handlers/ ?#查看修改配置后觸發(fā)的重啟任務(wù)
main.yml
[root@localhost ansible-playbook-roles]# cat roles/tomcat/handlers/main.yml
#修改配置后觸發(fā)重啟服務(wù):
- name: restart
?shell: ps -ef |grep tomcat |grep -v grep |awk '{print $2}'|xargs kill -9 &&
? ? ? ? cd "{{ tomcat_install_dir }}" && cd "{{ tomcat_jieyahou_name }}"/bin ?&& nohup ./startup.sh &
[root@localhost ansible-playbook-roles]# ls roles/tomcat/meta/ ? #meta目錄沒(méi)用上,為空
為空
[root@localhost ansible-playbook-roles]# ls roles/tomcat/tasks/ ?#查看所有任務(wù)和任務(wù)執(zhí)行順序
config_tomcat.yml ?index_tomcat.yml ?install_jdk1.8.yml ?install_tomcat.yml ?main.yml ?service_tomcat.yml
[root@localhost ansible-playbook-roles]# cat roles/tomcat/tasks/main.yml
- include: install_jdk1.8.yml
- include: install_tomcat.yml
- include: config_tomcat.yml
- include: index_tomcat.yml
- include: service_tomcat.yml
[root@localhost ansible-playbook-roles]# cat roles/tomcat/tasks/install_jdk1.8.yml
#解壓jdk壓縮包
- name: Unarchive jdk package
?unarchive:
? ?src: "{{ src_jdk }}"
? ?dest: "{{ jdk_install_dir }}"
#配置jdk環(huán)境變量
- name: set jdk global env
?shell: echo '''export JAVA_HOME=/usr/local/{{ jdk_jieyahou_name }}''' >> ~/.bashrc &&
? ? ? ? echo '''export PATH=$JAVA_HOME/bin:$PATH''' >> ~/.bashrc &&
? ? ? ? echo '''export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar''' >> ~/.bashrc &&
? ? ? ? source ~/.bashrc
#有yum源時(shí)jdk也可采用下面方式安裝
#安裝jdk環(huán)境
#- name: Install jdk1.8
# ?yum: name=java-1.8.0-openjdk state=installed
[root@localhost ansible-playbook-roles]# cat roles/tomcat/tasks/install_tomcat.yml
#解壓安裝tomcat軟件包
- name: Unarchive and install tomcat
?unarchive:
? ?src: "{{ src_tomcat }}"
? ?dest: "{{ tomcat_install_dir }}"
[root@localhost ansible-playbook-roles]# cat roles/tomcat/tasks/config_tomcat.yml
#配置tomcat,自定義tomcat配置文件
- name: config tomcat
?copy: src={{ src_tomcat_config }} dest={{ dest_tomcat_config }}
?notify: restart ? ? #修改配置時(shí)候觸發(fā)重啟的handler名稱,重啟tomcat服務(wù)
[root@localhost ansible-playbook-roles]# cat roles/tomcat/tasks/index_tomcat.yml
#自定義nginx的首頁(yè)并傳輸
- name: transfer tomcat index.html
?copy: src={{ src_tomcat_index }} dest={{ dest_tomcat_index }}
[root@localhost ansible-playbook-roles]# cat roles/tomcat/tasks/service_tomcat.yml
#啟動(dòng)tomcat,注意:tomcat首次啟動(dòng)需要用 nohup ./startup.sh & 或 nohup ./catalina.sh & 啟動(dòng),如果直接使用/.../.../tomcat.../bin/startup.sh則啟動(dòng)不了
- name: start tomcat
?shell: cd "{{ tomcat_install_dir }}" && cd "{{ tomcat_jieyahou_name }}"/bin ?&& nohup ./startup.sh &
[root@localhost ansible-playbook-roles]# ls roles/tomcat/templates/ ? ? #為空,沒(méi)用到
為空
[root@localhost ansible-playbook-roles]# ls roles/tomcat/vars/ ? ? ? ? ?#查看變量文件
main.yml
[root@localhost ansible-playbook-roles]# cat roles/tomcat/vars/main.yml #查看定義變量的內(nèi)容
src_jdk: "jdk-8u65-linux-x64.gz"
jdk_install_dir: "/usr/local/"
jdk_jieyahou_name: "jdk1.8.0_65"
src_tomcat: "apache-tomcat-8.0.32.tar.gz"
tomcat_install_dir: "/usr/local/"
tomcat_jieyahou_name: "apache-tomcat-8.0.32"
src_tomcat_index: "index.html"
dest_tomcat_index: "/usr/local/apache-tomcat-8.0.32/webapps/ROOT/"
src_tomcat_config: "server.xml"
dest_tomcat_config: "/usr/local/apache-tomcat-8.0.32/conf/server.xml"
[root@localhost ansible-playbook-roles]# ansible-playbook -i host/hosts playbook-all-roles.yml ?#執(zhí)行部署
所有被管理端:192.168.171.129和192.168.130查看tomcat服務(wù)部署和配置文件情況
[root@localhost ~]# ps -ef |grep tomcat
root ? ? ? 5363 ? ? ?1 22 17:08 ? ? ? ? ?00:00:01 /usr/local/jdk1.8.0_65/bin/java -Djava.util.logging.config.file=/usr/local/apache-tomcat-8.0.32/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/apache-tomcat-8.0.32/endorsed -classpath /usr/local/apache-tomcat-8.0.32/bin/bootstrap.jar:/usr/local/apache-tomcat-8.0.32/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/apache-tomcat-8.0.32 -Dcatalina.home=/usr/local/apache-tomcat-8.0.32 -Djava.io.tmpdir=/usr/local/apache-tomcat-8.0.32/temp org.apache.catalina.startup.Bootstrap start
root ? ? ? 5393 ? 1180 ?0 17:08 pts/0 ? ?00:00:00 grep --color=auto tomcat
[root@localhost ~]# cat /usr/local/apache-tomcat-8.0.32/conf/server.xml |grep 8081
? ?<Connector port="8081" protocol="HTTP/1.1"
[root@localhost ~]# netstat -anput |grep 8081|grep LISTEN
tcp6 ? ? ? 0 ? ? ?0 :::8081 ? ? ? ? ? ? ? ? :::* ? ? ? ? ? ? ? ? ? ?LISTEN ? ? ?5363/java ? ? ? ? ?
[root@localhost ~]# cat /usr/local/apache-tomcat-8.0.32/webapps/ROOT/index.html
tomcat test index
[root@localhost ~]# curl 127.0.0.1:8081/
tomcat test index
案例4:使用ansible-playbook的role部署安裝mysql5.7服務(wù),且配置文件修改后會(huì)觸發(fā)重啟(下面僅看mysql5.7角色)
管理端: 192.168.171.128
[root@localhost ~]# tree ansible-playbook-roles ?#下面是nginx、mysql5.7、tomcat、httpd所有的,只看mysql5.7
ansible-playbook-roles
├── host
│?? └── hosts
├── playbook-all-roles.yml
└── roles
? ?├── httpd
? ?│?? ├── default
? ?│?? ├── files
? ?│?? │?? └── httpd.conf
? ?│?? ├── handlers
? ?│?? │?? └── main.yml
? ?│?? ├── meta
? ?│?? ├── tasks
? ?│?? │?? ├── config_httpd.yml
? ?│?? │?? ├── index_httpd.yml
? ?│?? │?? ├── install_httpd.yml
? ?│?? │?? ├── main.yml
? ?│?? │?? └── service_httpd.yml
? ?│?? ├── templates
? ?│?? │?? └── index.html
? ?│?? └── vars
? ?│?? ? ? └── main.yml
? ?├── mysql5.7
? ?│?? ├── default
? ?│?? ├── files
? ?│?? │?? ├── my.cnf
? ?│?? │?? ├── mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz
? ?│?? │?? └── mysqld.service
? ?│?? ├── handlers
? ?│?? │?? └── main.yml
? ?│?? ├── meta
? ?│?? ├── tasks
? ?│?? │?? ├── create_mysql_user_and_dir.yml
? ?│?? │?? ├── init_mysql.yml
? ?│?? │?? ├── install_mysql_yilai.yml
? ?│?? │?? ├── jieya_mv_mysql.yml
? ?│?? │?? ├── main.yml
? ?│?? │?? ├── service_mysql.yml
? ?│?? │?? ├── transfer_mysql_config.yml
? ?│?? │?? ├── transfer_mysqld_service.yml
? ?│?? │?? └── transfer_mysql.yml
? ?│?? ├── templates
? ?│?? └── vars
? ?│?? ? ? └── main.yml
? ?├── nginx
? ?│?? ├── default
? ?│?? ├── files
? ?│?? │?? ├── index.html
? ?│?? │?? ├── nginx-1.23.3.tar.gz
? ?│?? │?? ├── nginx.conf
? ?│?? │?? └── www.test.com.conf
? ?│?? ├── handlers
? ?│?? │?? └── main.yml
? ?│?? ├── meta
? ?│?? ├── tasks
? ?│?? │?? ├── bianyi_and_install_nginx.yml
? ?│?? │?? ├── config_nginx.yml
? ?│?? │?? ├── index_nginx.yml
? ?│?? │?? ├── install_nginx_bianyi.yml
? ?│?? │?? ├── install_nginx_yilai.yml
? ?│?? │?? ├── main.yml
? ?│?? │?? ├── nginx_package_transfer_and_jieya.yml
? ?│?? │?? └── service_nginx.yml
? ?│?? ├── templates
? ?│?? └── vars
? ?│?? ? ? └── main.yml
? ?└── tomcat
? ? ? ?├── default
? ? ? ?├── files
? ? ? ?│?? ├── apache-tomcat-8.0.32.tar.gz
? ? ? ?│?? ├── index.html
? ? ? ?│?? ├── jdk-8u65-linux-x64.gz
? ? ? ?│?? └── server.xml
? ? ? ?├── handlers
? ? ? ?│?? └── main.yml
? ? ? ?├── meta
? ? ? ?├── tasks
? ? ? ?│?? ├── config_tomcat.yml
? ? ? ?│?? ├── index_tomcat.yml
? ? ? ?│?? ├── install_jdk1.8.yml
? ? ? ?│?? ├── install_tomcat.yml
? ? ? ?│?? ├── main.yml
? ? ? ?│?? └── service_tomcat.yml
? ? ? ?├── templates
? ? ? ?└── vars
? ? ? ? ? ?└── main.yml
[root@localhost ~]# cd ansible-playbook-roles
[root@localhost ansible-playbook-roles]# ls
host ?playbook-all-roles.yml ?roles
[root@localhost ansible-playbook-roles]# cat host/hosts #查看主機(jī)列表
[test]
192.168.171.129
192.168.171.130
[root@localhost ansible-playbook-roles]# cat playbook-all-roles.yml #查看選擇部署的某個(gè)role
#test: 為/etc/ansible/hosts中的主機(jī)列表 ?#task: 執(zhí)行的任務(wù)
#name: 描述信息 ? ? ? ? ? ? ? ? ? ? ?#yum: yum模塊,安裝服務(wù)的
#copy: copy模塊,遠(yuǎn)程傳遞文件的 ? ? ? #file: file模塊,遠(yuǎn)程創(chuàng)建目錄的
#service: service模塊,遠(yuǎn)程管理服務(wù)的
#remote_user: root 是指定遠(yuǎn)程主機(jī)上使用的用戶
#gather_facts: no 是默認(rèn)執(zhí)行playbook時(shí)候,默認(rèn)會(huì)收集目標(biāo)主機(jī)的信息,禁用掉能提高效率
---
#httpd role
- hosts: test
?remote_user: root
?gather_facts: no
?#下面是調(diào)用相應(yīng)的role,調(diào)用哪些role就部署哪些
?roles:
? ?#- role: httpd
? ?#- role: nginx
? ?#- role: tomcat
? ?- role: mysql5.7
[root@localhost ansible-playbook-roles]# ls roles/ ?#查看里面所有的role,只看mysql5.7的
httpd ?mysql5.7 ?nginx ?tomcat
[root@localhost ansible-playbook-roles]# ls roles/mysql5.7/ ?#查看mysql5.7的role的層級(jí)結(jié)構(gòu)
default ?files ?handlers ?meta ?tasks ?templates ?vars
[root@localhost ansible-playbook-roles]# ls roles/mysql5.7/default/ #default目錄沒(méi)用上,為空
為空
[root@localhost ansible-playbook-roles]# ls roles/mysql5.7/files/ ? #查看軟件包、配置文件和啟動(dòng)腳本
my.cnf ?mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz ?mysqld.service
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/files/my.cnf |grep 3306
port = 3306
port = 3306
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/files/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/data/mysql5.7/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 15000
[root@localhost ansible-playbook-roles]# ls roles/mysql5.7/handlers/ ? #查看修改配置后觸發(fā)的重啟任務(wù)
main.yml
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/handlers/main.yml
#修改配置文件后觸發(fā)服務(wù)啟動(dòng)時(shí)用
- name: restart ?#定義被觸發(fā)的handler名稱,當(dāng)修改配置文件后會(huì)根據(jù)該名稱觸發(fā)重啟服務(wù)
?service: name=mysqld state=restarted
[root@localhost ansible-playbook-roles]# ls roles/mysql5.7/meta/ ?#meta目錄沒(méi)用上,為空
為空
[root@localhost ansible-playbook-roles]# ls roles/mysql5.7/tasks/ ?#查看所有任務(wù)和任務(wù)執(zhí)行順序
create_mysql_user_and_dir.yml ?install_mysql_yilai.yml ?main.yml ? ? ? ? ? transfer_mysql_config.yml ? ?transfer_mysql.yml
init_mysql.yml ? ? ? ? ? ? ? ? jieya_mv_mysql.yml ? ? ? service_mysql.yml ?transfer_mysqld_service.yml
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/tasks/main.yml
- include: install_mysql_yilai.yml
- include: transfer_mysql.yml
- include: jieya_mv_mysql.yml
- include: create_mysql_user_and_dir.yml
- include: transfer_mysql_config.yml
- include: init_mysql.yml
- include: transfer_mysqld_service.yml
- include: service_mysql.yml
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/tasks/install_mysql_yilai.yml
#安裝mysql相關(guān)依賴
- name: install mysql yilai
?yum: name=libaio-devel state=installed
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/tasks/transfer_mysql.yml
#傳輸mysql壓縮包
- name: transfer mysql package
?copy: src={{ src_mysql }} ?dest=/opt/
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/tasks/jieya_mv_mysql.yml
#解壓mysql壓縮包并移動(dòng),下面是判斷,如果/data不存在則創(chuàng)建,如果存在則不創(chuàng)建
- name: create data
?shell: cd / ?&&
? ? ? ?[ ! -d data ] && mkdir data || break
- name: Unarchive mysql package
?shell: cd /opt/ && tar -zxf {{ src_mysql }} &&
? ? ? ? mv {{ mysql_jieyahou_name }} {{ mysql_install_dir }}
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/tasks/create_mysql_user_and_dir.yml
#創(chuàng)建mysql用戶,數(shù)據(jù)目錄和日志目錄,并設(shè)置權(quán)限
- name: create mysql user
?shell: user_name=`cat /etc/passwd|grep mysql|wc -l` &&
? ? ? ? [ ${user_name} -eq 0 ] && useradd -s /sbin/nologin mysql || break
? ? ? ? #useradd -s /sbin/nologin mysql &&
- name: create mysql log data
?shell: mkdir {{ mysql_data_dir }} &&
? ? ? ? mkdir {{ mysql_log_dir }} &&
? ? ? ? chown -R mysql.mysql {{ mysql_install_dir }} &&
? ? ? ? echo '''export PATH=/data/mysql5.7/bin/:$PATH''' >> ~/.bashrc &&
? ? ? ? source ~/.bashrc
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/tasks/transfer_mysql_config.yml
#準(zhǔn)備mysql配置文件,傳輸過(guò)去
- name: transfer my.conf
?copy: src={{ config_mysql }} dest=/etc/
?notify: restart ? ? #修改配置時(shí)候觸發(fā)重啟的handler名稱,重新加載mysqld服務(wù),需要和handlers目錄中文件中名字一致
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/tasks/init_mysql.yml
#初始化mysql
- name: init mysql
?shell: mysqld --initialize --user=mysql --basedir={{ mysql_install_dir }} --datadir={{ mysql_data_dir }}
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/tasks/transfer_mysqld_service.yml
#準(zhǔn)備mysqld.service文件,傳輸過(guò)去,交給systemctl管理服務(wù),并重新加載
- name: transfer mysqld.service
?copy: src={{ service_mysql }} dest=/etc/systemd/system/
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/tasks/service_mysql.yml
#刷新service文件和啟動(dòng)mysql
- name: flush service conf
?shell: systemctl daemon-reload &&
? ? ? ? systemctl enable mysqld &&
? ? ? ? systemctl start mysqld
#修改mysql的登錄密碼,初始化安裝后的mysql,初始密碼會(huì)在相應(yīng)日志文件中,mysql_error.log中過(guò)濾password可以找出初始密碼進(jìn)行登錄,然后登錄mysql,使用set password='xx';修改密碼
#下面在腳本中,非交互式登錄mysql時(shí),獲取不到密碼變量的密碼,可以手動(dòng)登錄修改密碼
#- name: change mysql password wei '123456'
# ?shell: init_mysql_pass=`cat /data/mysql5.7/log/mysql_error.log |grep password |awk '{print $NF}'` &&
# ? ? ? ? mysql -uroot -p'${init_mysql_pass}' -e "set password='123456';"
[root@localhost ansible-playbook-roles]# ls roles/mysql5.7/templates/ ? ?#為空,沒(méi)用到
為空
[root@localhost ansible-playbook-roles]# ls roles/mysql5.7/vars/ ? ? ? ? ?#查看變量文件
main.yml
[root@localhost ansible-playbook-roles]# cat roles/mysql5.7/vars/main.yml ?#查看定義變量的內(nèi)容
src_mysql: "mysql-5.7.19-linux-glibc2.12-x86_64.tar.gz"
mysql_install_dir: "/data/mysql5.7"
mysql_data_dir: "/data/mysql5.7/data"
mysql_log_dir: "/data/mysql5.7/log"
mysql_jieyahou_name: "mysql-5.7.19-linux-glibc2.12-x86_64"
config_mysql: "my.cnf"
service_mysql: "mysqld.service"
[root@localhost ansible-playbook-roles]# ansible-playbook -i host/hosts playbook-all-roles.yml ?#執(zhí)行部署
所有被管理端:192.168.171.129和192.168.130查看mysql5.7服務(wù)部署和配置文件情況
[root@localhost ~]# ps -ef |grep mysql
mysql ? ? 18827 ? ? ?1 ?1 17:27 ? ? ? ? ?00:00:00 /data/mysql5.7/bin/mysqld --defaults-file=/etc/my.cnf
root ? ? ?18870 ? 1180 ?0 17:28 pts/0 ? ?00:00:00 grep --color=auto mysql
[root@localhost ~]# cat /etc/my.cnf|grep 3306
port = 3306
port = 3306
[root@localhost ~]# netstat -anput |grep 3306
tcp6 ? ? ? 0 ? ? ?0 :::3306 ? ? ? ? ? ? ? ? :::* ? ? ? ? ? ? ? ? ? ?LISTEN ? ? ?18827/mysqld ? ? ? ?
[root@localhost ~]# cat /data/mysql5.7/log/mysql_error.log |grep password ? #查看默認(rèn)初始登錄密碼
2023-04-09T17:27:32.136069+08:00 1 [Note] A temporary password is generated for root@localhost: Cf/f9nh+WEB.
[root@localhost ~]# source ~/.bashrc
[root@localhost ~]# mysql -uroot -p'Cf/f9nh+WEB.' ?#使用默認(rèn)初始密碼登錄
mysql> set password='123'; ? ? ? ? ? ? ? ? ? ? ? ? #修改登錄密碼
mysql> quit
[root@localhost ~]# mysql -uroot -p'123' ? ? ? ? ? #使用新密碼登錄
mysql> show databases;
+--------------------+
| Database ? ? ? ? ? |
+--------------------+
| information_schema |
| mysql ? ? ? ? ? ? ?|
| performance_schema |
| sys ? ? ? ? ? ? ? ?|
+--------------------+
mysql> quit