自定義變量 rsync客戶端備份(600) 使用ansible執行一條命令,這個命令就是ad-hoc,臨時執行 ansible查看幫助,使用的是ansible-doc命令 把ansible在命令行執行的命令(ad-hoc)寫入到文件中,那麼這個文件就叫作playbook,一般使用的yml(yaml)語法,能夠屢次使用 不能使用systemd service模塊來管理selinux firewalld --------------------------------------------------------------------------- 1.ping模塊,檢測 2.setup模塊,獲取主機信息 3.command模塊,執行簡單的命令 4.shell模塊,執行復雜的命令 5.cron模塊,添加定時任務,name註釋 state(present absent) 6.copy模塊,拷貝, 建立文件或目錄,修改已經存在的目錄的權限,dest目標目錄 owner group mode backup src源 7.file模塊,建立文件或目錄,修改已經存在的目錄的權限,建立軟硬鏈接,path定義目錄或文件,state(touch directory absent link hard) owner group mode recurse dest(連接到) 8.yum模塊,name(file http),state(present absent latest) disable_gpg_check,download_only=true 9.script模塊,-a '/root/dir.sh' 10.synchronize模塊, delete=yes(同步) src dest mode=push/pull 11.mount模塊 ,name:必選項,'哪一個文件掛載',state(present mount absent unmounted) 12.get_url模塊,下載,url dest指定下載目錄 mode owner group force_basic_auth=yes(覆蓋) 13.yum_repository模塊,功能:添加,刪除,修改yum源,name description baseurl gpgcheck enabled state 14.systemd模塊,遠程啓停,重載服務 name state(started stoped restarted reloaded enableed=yes daemon_reload自動重載 masked鎖) 15.service模塊 16.group模塊,name state gid 17.user模塊,group groups(append),uid password name system state(absent remove=no)shell generate_ssh_key create_home=false/no 18.unarchive模塊,壓縮解壓 src dest copy 29.selinux state(enforcing permissive disabled) 20.firewalld service port permanent永久 immediate臨時生效 state(enabled disabled) 21.lineinfile模塊,文本替換,刪除,path line state owner 22.stat模塊,獲取文件或目錄信息 ----------------------------------------------------------------------- ansible控制端(m01),上能夠建立目錄,存放不一樣的服務的相關文件,這樣用起來更方便 mkdir {nginx,php,rsync,nfs,httpd} rsync是以守護進程的方式啓動的 #rsync密碼文件的600必定要加 nfs客戶端的網段指定要和服務端一致 開啓防火牆的狀況下,能夠指定開啓服務或端口(nfs 80 ) ad-hoc寫入腳本,添加/bin/bash,就能夠作成一個腳本,相似於playbook 寫腳本 bash語法 寫Python Python語法 寫前端 html css js 寫playbook yml(yaml)語法 寫saltstack yml(yaml)語法,一般以sls結尾 CMDB 資產管理 tailf /var/log/cron #查看crond日誌
什麼是PlayBookphp
PlayBook
即"劇本"的意思,PlayBook是由如下部分組成的css
play
: 定義的是主機(hosts)的角色。
tasks
: 定義的是具體執行的任務。
playbook
: 由一個或多個play(主機)組成,一個play能夠包含多個task(臺詞,動做)html
簡單理解爲: 使用不一樣的模塊完成一件事情(目的)前端
在Ansible
中"劇本文件"是以yml結尾的文件。
在SaltStack
中"劇本文件"是以sls結尾的文件。
可是語法,使用的都是yaml
語法python
語法 | 描述 |
---|---|
縮進 | YAML使用固定的縮進風格表示層級結構,每一個縮進由兩個空格組成, 不能使用TAB |
冒號 | 以冒號結尾的除外,其餘全部冒號後面必須有空格 |
短橫線 | 表示列表項,使用一個短橫槓加一個空格,多個項使用一樣的縮進級別做爲同一列表 |
特色 | PlayBook | ad-hoc |
---|---|---|
完整性 | √ | ✘ |
持久性 | √ | ✘ |
執行效率 | 低 | 高 |
變量 | 支持 | 不支持 |
耦合度 | 低 | 高 |
1.PlayBook
功能比ad-hoc
更全,是對ad-hoc
的一種編排.
2.PlayBook
能很好的控制前後執行順序, 以及依賴關係.
3.PlayBook
語法展示更加的直觀.
4.playbook
能夠持久使用,ad-hoc
沒法持久使用.由於playbook能夠調用變量mysql
格式一,使用yml語法編輯playbook劇本 [root@m01 ~]# vim a.yml --- #加不加均可以 - hosts: web01 #PLAY [web01] tasks: #檢查 - name: install tree nfs-utiles #TASK [install tree nfs-utiles] yum: #模塊 name: tree #包名(能夠直接指定,或者使用列表項) state: present #動做 #檢查yml語法 [root@m01 ~]# ansible-playbook --syntax-check a.yml #執行playbook [root@m01 ~]# ansible-playbook a.yml #注意2468空格(能夠以tasks中的s name中的m 做爲參照),yml的報錯不許確 #一個hosts就是一個play #一個name,就是一個安裝的註釋,第二個註釋是指定包名 [root@m01 ~]# ansible-playbook a.yml web01: ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 已更改=0 沒法訪問=0 失敗=0 跳過=0 解救=0 忽略=0 格式二 [root@m01 ~]# vim a.yml - hosts: web01 tasks: - name: istall yum: name: - rsync #列表項 - httpd state: absent [root@web01 ~]# rpm -qa|grep httpd #有些包不能被卸載(系統依賴) httpd-tools-2.4.6-93.el7.centos.x86_64 [root@web01 ~]# rpm -qa|grep rsync 格式三(不推薦) [root@m01 ~]# vim a.yml - hosts: web01 tasks: - name: istall yum: name=rsync state=present 格式四 [root@m01 ~]# vim a.yml - hosts: web01 tasks: - name: istall yum: name: - rsync - httpd state: present - name: started service: name: rsyncd state: started #服務的啓動和中止不支持列表項,可是可使用變量的形式同時操做一臺主機上的多個服務 [root@m01 ~]# vim a.yml - hosts: web01 tasks: - name: istall yum: name: - rsync - httpd state: present - name: started rsyncd #分別指定啓動項 service: name: rsync state: started - name: started httpd service: name: httpd state: started ------------------------------------- - hosts: all remote_user: root vars: collect_info: "/data/test/{{ansible_all_ipv4['addresses']}}/" tasks: - name: create IP directory file: name: "{{collect_info}}" state: directory --------------------------------------- 格式五 [root@m01 ~]# vim a.yml - hosts: web01 tasks: - name: istall yum: name: - rsync - httpd state: present - name: started service: name: "{{ server }}" vars: #自定義變量(在模塊中定義變量) server: - rsyncd - httpd state: started #模擬執行,測試是否能夠執行 [root@m01 ~]# ansible-playbook -C a.yml 2. [root@m01 ~]# cat foo.yml --- - hosts: all remote_user: root #指定執行命令的用戶 vars: #自定義變量 file_name: zls.txt tasks: - name: Create New File file: name=/tmp/{{ file_name }} state=touch #
需求一:編寫安裝httpd劇本linux
#建立目錄劇本存放目錄 [root@m01 ~]# mkdir httpd #編輯Inventory [root@m01 ~]# vim /etc/ansible/hosts [web_group] web01 ansible_ssh_host=10.0.0.7 [root@m01 ~]# vim /root/httpd/httpd.yml - hosts: web01 tasks: - name: istall yum: name: - httpd state: present #檢查語法 [root@m01 ~]# ansible-playbook --syntax-check httpd/httpd.yml #測試安裝 [root@m01 ~]# ansible-playbook -C httpd/httpd.yml
需求二:安裝完httpd服務並啓動加入開機自啓nginx
[root@m01 ~]# vim /root/httpd/httpd.yml --- - hosts: web_group #安裝httpd tasks: - name: Install httpd Server yum: name: httpd state: present #啓動httpd - name: Start Httpd Server systemd: name: httpd state: started enabled: yes #測試安裝和啓動 [root@m01 ~]# ansible-playbook -C httpd/httpd.yml
需求三:編寫網站頁面並啓動web
--- - hosts: web_group #安裝httpd tasks: - name: Install httpd Server yum: name: httpd state: present #配置網站 - name: Config Httpd Server copy: content: syy_web_page dest: /var/www/html/index.html #啓動httpd - name: Start Httpd Server systemd: name: httpd state: started enabled: yes #執行 [root@m01 httpd]# ansible-playbook /root/httpd/httpd.yml
#建立目錄劇本存放目錄 [root@m01 ~]# mkdir httpd #編輯Inventory [root@m01 ~]# vim /etc/ansible/hosts [web_group] web01 ansible_ssh_host=10.0.0.7 [root@m01 ~]# vim /root/httpd/httpd.yml - hosts: web01 tasks: - name: istall yum: name: - httpd state: present - name: started httpd service: name: httpd state: started - name: create page copy: content: syy_page dest: /var/www/html/index.html owner: www group: www mode: 0644 #檢查語法 [root@m01 ~]# ansible-playbook --syntax-check httpd/httpd.yml #測試安裝 [root@m01 ~]# ansible-playbook -C httpd/httpd.yml #瀏覽器訪問 10.0.0.7
需求四:開啓防火牆端口sql
前提:1.作過祕鑰認證 2.主機清單配置無誤
1.建立劇本存放目錄 [root@m01 ~]# mkdir /ansible -p 2.編輯劇本 [root@m01 ~]# vim /ansible/firewalld.yml - hosts: web_group #安裝httpd tasks: - name: Install httpd Server yum: name: httpd state: present #配置網站 - name: Config Httpd Server copy: content: syy_web_page dest: /var/www/html/index.html #啓動httpd,並加入開機自啓動 - name: Start Httpd Server systemd: name: httpd state: started enabled: yes #啓動防火牆 - name: Start Firewalld Server systemd: name: firewalld state: started enabled: yes #開啓防火牆的80端口 - name: Config Firewalld Server firewalld: service: http immediate: yes permanent: yes state: enabled 打開瀏覽器訪問網站: http://10.0.0.7 http://10.0.0.8
需求五:不一樣的主機配置不一樣的網站
目前來講,想要根據不一樣主機配置不一樣的網站,咱們可使用多個play的方式, 可是在生產環境中,咱們須要寫循環,來知足咱們的需求,多個play瞭解便可 - hosts: web_group #安裝httpd tasks: - name: Install httpd Server yum: name: httpd state: present #啓動httpd - name: Start Httpd Server systemd: name: httpd state: started enabled: yes #啓動防火牆 - name: Start Firewalld Server systemd: name: firewalld state: started enabled: yes #開啓防火牆的80端口 - name: Config Firewalld Server firewalld: service: http immediate: yes permanent: yes state: enabled #單獨配置web01頁面 - hosts: web01 tasks: - name: Config Httpd Server copy: content: zls_web01_page dest: /var/www/html/index.html #單獨配置web02頁面 - hosts: web02 tasks: - name: Config Httpd Server copy: content: zls_web02_page dest: /var/www/html/index.html [root@m01 httpd]# ansible-playbook /root/httpd/httpd.yml 打開瀏覽器訪問網站: http://10.0.0.7 http://10.0.0.8 #一個playbook裏面寫多個play,會致使變量的重複獲取,影響劇本的執行效率 #能夠在content裏指定重複獲取的變量,web01(ansible_{{ansible}}),這樣指定的話就能夠避免變量的重複獲取,提升劇本執行效率 [root@m01 ~]# ansible-playbook a.yml PLAY [web01] *********************************************************************************************** TASK [Gathering Facts] ******* #劇本中一個hosts(play),獲取一次全部的變量 #變量的簡單使用 [root@m01 ~]# vim a.yml - hosts: web01 tasks: - name: istall yum: name: - httpd state: present - name: started httpd service: name: httpd state: started enabled: yes - name: create page copy: content: syy_{{ ansible_fqdn }}_{{ ansible_default_ipv4['address'] }}_page dest: /var/www/html/index.html owner: www group: www mode: 0644 #用'.'調用字典中的變量 content: syy_{{ansible_fqdn}}_{{ ansible_default_ipv4.address }}_page #Python中變量的定義和調用 [root@m01 ~]# python >>> dic={'ip':'10.0.0.7','fqdn':'web01'} >>> print dic['ip'] 10.0.0.7 >>> print dic['fqdn'] web01 >>> quit()
主機名 | wanIP | lanIP | 服務 | 角色 |
---|---|---|---|---|
m01 | 10.0.0.61 | 172.16.1.61 | Ansible | 控制端 |
backup | 10.0.0.41 | 172.16.1.41 | rsync服務端 | 被控端 |
web01 | 10.0.0.7 | 172.16.1.7 | rsync客戶端 | 被控端 |
web02 | 10.0.0.8 | 172.16.1.8 | rsync客戶端 | 被控端 |
#安裝ansible #編輯Ansible Inventory(配置主機清單) [root@m01 ~]# vim /etc/ansible/hosts #推送公鑰
#web安裝nginx - hosts: web_group tasks: - name: Install Nginx Server yum: name: nginx state: present #web配置nginx(須要提早修改控制端nginx配置文件) - name: Configure Nginx Conf copy: src: /root/ansible/nginx/nginx.conf dest: /etc/nginx/nginx.conf owner: root group: root mode: 0644 #web配置虛擬主機 - name: Configure Nginx Server copy: src: /root/ansible/nginx/wp.conf dest: /etc/nginx/conf.d/wp.conf owner: root group: root mode: 0644 #建立web的站點目錄 - name: Create HTML Directory file: path: /code owner: www group: www mode: 0755 state: directory #web啓動nginx - name: Start Nginx Server service: name: nginx state: started enabled: true #建立默認頁面 - hosts: web01 tasks: - name: Create web01 index.html copy: content: web01_page dest: /code/index.html owner: www group: www mode: 0644 - hosts: web02 tasks: - name: Create web02 index.html copy: content: web02_page dest: /code/index.html owner: www group: www mode: 0644
主機名 | wanIP | lanIP | 服務 | 角色 |
---|---|---|---|---|
m01 | 10.0.0.61 | 172.16.1.61 | Ansible | 控制端 |
backup | 10.0.0.41 | 172.16.1.41 | rsync服務端 | 被控端 |
web01 | 10.0.0.7 | 172.16.1.7 | rsync客戶端 | 被控端 |
web02 | 10.0.0.8 | 172.16.1.8 | rsync客戶端 | 被控端 |
nfs | 10.0.0.31 | 172.16.131 | rsync客戶端 | 被控端 |
#安裝ansible #編輯Ansible Inventory(配置主機清單) [root@m01 ~]# vim /etc/ansible/hosts ... [install_rsync] web01 ansible_ssh_host=172.16.1.7 asible_ssh_user=root ansible_ssh_port=22 web02 ansible_ssh_host=172.16.1.8 asible_ssh_user=root ansible_ssh_port=22 web03 ansible_ssh_host=172.16.1.9 asible_ssh_user=root ansible_ssh_port=22 backup ansible_ssh_host=172.16.1.41 asible_ssh_user=root ansible_ssh_port=22 nfs ansible_ssh_host=172.16.1.31 asible_ssh_user=root ansible_ssh_port=22 #推送公鑰
#建立rsync劇本存放目錄 [root@m01 ~]# mkdir /root/ansible/rsync -p #編輯Inventory(主機清單) [root@m01 ~]# vim /etc/ansible/rsync/hosts #準備rsync配置文件 [root@m01 rsyncd]# vim /root/ansible/rsync/rsyncd.conf #################################### 服務相關配置 ########################### uid = www #指定rsync進程啓動的用戶(打工的),和傳送文件的用戶---------useradd gid = www #指定rsync進程啓動的組 port = 873 #指定rsync使用的監聽端口(默認873端口,能夠改) fake super = yes #無需讓rsync以root身份運行,容許接收文件的 完整屬性(屬主屬組不變) use chroot = no #禁錮指定的目錄(只能推到指定的目錄,不緊固的話隨便推) max connections = 200 #最大鏈接數(同時鏈接的主機數,減小服務端負載) timeout = 600 #超時時間 ignore errors #忽略報錯 read only = false #不僅讀(可讀可寫) list = false #不容許別人查看模塊名 #################################### 命令相關配置 ########################### auth users = bck #傳輸文件的用戶(至關於密碼,沒有實際意義),客戶端認證1 secrets file = /etc/rsync.passwd #傳輸用戶文件的密碼文件,vim或echo/600,客戶端認證2 log file = /var/log/rsyncd.log #日誌文件,使用了rsync以後纔會生成 [backupmk] #模塊名,能夠隨便改,當心大寫字母,空格,數字,多模塊對應多主機(隨便推?),客戶端認證3 comment = welcome to oldboyedu backup! #註釋(廢物) path = /backup #備份的目錄-------mkdir/權限屬主屬組,,客戶端認證4
#rsync客戶端定時備份腳本 vim /root/ansible/rsync/bf.sh #!/bin/bash #主機名: H=$(hostname) #內網IP: IP=$(hostname -I|awk '{print $2}') #備份到哪: (前面/加後面不加) na=/backup #當前時間: #年月日 時分 C=$(date +%F-%R) #年月日 D=$(date +%F) #年月日時分秒 E=$(date +%F-%T) cde=$D #備份哪一個目錄:(先後都不要加根) A='backup' #以傳參的方式定義一個目錄 bf=${na}/${H}_${IP}_${D} [ -d $bf ]||mkdir -p $bf #校驗 #清理 cd /$A && cd .. && \ tar zcf ${bf}/${H}_${IP}_${cde}.$A.tgz $A cd ${bf} && \ md5sum ${H}_${IP}_${cde}.$A.tgz >${H}_${IP}_${cde}.$A.tgz.md5sum.passwd export RSYNC_PASSWORD=123 rsync -az ${na}/ bck@10.0.0.41::backupmk find $na -mitime +7 ! -name '$na' |xargs rm -rf crontab -e # 備份重要配置文件 編輯時間 編輯人:xxx 00 1 * * * /usr/bin/sh /etc/profile.d/bfpzwj.sh >>/dev/null
一鍵部署rsync
#編寫劇本 [root@m01 ~]# vim /root/ansible/rsync/rsyncd.yml - hosts: install_rsync tasks: #建立www組 - name: Create www Group group: name: www gid: 666 state: present #建立www用戶 - name: Create www User user: name: www group: www uid: 666 create_home: false shell: /sbin/nologin state: present #啓動防火牆 - name: Start Firewalld Server systemd: name: firewalld state: started enabled: yes #開啓防火牆的80 873 443 端口,nfs服務 - name: Open 80 Port firewalld: port: 80/tcp immediate: yes permanent: yes state: enabled - name: Open 443 Port firewalld: port: 443/tcp immediate: yes permanent: yes state: enabled - name: Open 873 Port firewalld: port: 873/tcp immediate: yes permanent: yes state: enabled - name: Open nfs Port firewalld: service: nfs state: enabled permanent: no #關閉selinux - name: Stop SeLinux selinux: state: disabled - hosts: install_rsync tasks: #安裝rsync - name: Install Rsyncd Server yum: name: rsync state: present - hosts: backup_group tasks: #推送rsync配置文件 - name: Scp Rsync Config copy: src: /root/ansible/rsync/rsyncd.conf dest: /etc/rsyncd.conf owner: root group: root mode: 0644 #建立密碼文件並受權 - name: Create Passwd File copy: content: 'bck:123' dest: /etc/rsync.passwd owner: www group: www mode: 0600 #建立/backup目錄 - name: Create backup Directory file: path: /backup state: directory mode: 0755 owner: www group: www recurse: yes - hosts: install_rsync tasks: #啓動rsync服務,並加入開機自啓 - name: Start Rsyncd Server systemd: name: rsyncd state: started enabled: yes #從新啓動rsync服務 - name: reStart Rsyncd Server systemd: name: rsyncd state: restarted #推送定時任務腳本 - hosts: web_group tasks: - name: Scp Rsync Config copy: src: /root/ansible/rsync/bf.sh dest: /root/bf.sh owner: root group: root mode: 0644 #編輯定時任務 - name: create backup crond cron: name: "backup web data" job: "/bin/bash /root/bf.sh &>/dev/null" #檢測語法 [root@m01 ~]# ansible-playbook --syntax-check /root/rsyncd/rsyncd.yml playbook: /root/rsyncd/rsyncd.yml #測試 [root@m01 ~]# ansible-playbook -C /root/rsyncd/rsyncd.yml
擴展需求:
1.給客戶端推送腳本
2.加入crontab作備份
完成剛開始學架構階段的rsync的實戰案例
部署NFS
服務,NFS
服務端提供掛載點給web01
和web02
主機名 | wanIP | lanIP | 服務 | 角色 |
---|---|---|---|---|
m01 | 10.0.0.61 | 172.16.1.61 | Ansible | 控制端 |
nfs | 10.0.0.31 | 172.16.1.31 | nfs服務端 | 被控端 |
web01 | 10.0.0.7 | 172.16.1.7 | nfs客戶端 | 被控端 |
web02 | 10.0.0.8 | 172.16.1.8 | nfs客戶端 | 被控端 |
#安裝ansible #編輯Ansible Inventory [root@m01 ~]# vim /etc/ansible/hosts ... [nfs_all:children] web_group nfs_group #推送公鑰 #建立項目存放目錄 [root@m01 ~]# mkdir /root/ansible/nfs -p #準備nfs配置文件 [root@m01 ~]# cat /root/ansible/nfs/nfs.exports /data 10.0.0.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
一鍵部署nfs
[root@m01 ~]# vim /root/nfs/nfs.yml - hosts: nfs_all tasks: #安裝nfs - name: Install nfs-utils yum: name: nfs-utils state: present #建立www組 - name: Create www Group group: name: www gid: 666 #建立www用戶 - name: Create www User user: name: www group: www uid: 666 create_home: false shell: /sbin/nologin #啓動防火牆 - name: Start Firewalld Server systemd: name: firewalld state: started enabled: yes #開啓防火牆的80端口 - name: Open 80 Port firewalld: port: 80/tcp immediate: yes permanent: yes state: enabled - name: Open 443 Port firewalld: port: 443/tcp immediate: yes permanent: yes state: enabled - name: Open 873 Port firewalld: port: 873/tcp immediate: yes permanent: yes state: enabled - name: Open nfs Port firewalld: service: nfs state: enabled permanent: no - hosts: nfs_group tasks: #推送配置文件 - name: Scp NFS Server copy: content: "/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)\n" dest: /etc/exports owner: root group: root mode: 0644 #建立掛載目錄並受權 - name: Create data Directory file: path: /data state: directory owner: www group: www mode: 0755 recurse: yes #啓動nfs-server - name: Start NFS Server systemd: name: nfs-server state: started enabled: yes #重啓nfs-server - name: reStart NFS Server systemd: name: nfs-server state: restarted enabled: yes #web01和web02掛載目錄 - hosts: web_group tasks: - name: Mount NFS Server mount: path: /opt src: 10.0.0.31:/data fstype: nfs opts: defaults state: mounted #推送備份腳本到nfs服務器 - name: Push NFS Backup Shell copy: src: /root/ansible/nfs/backup.sh dest: /root/backup.sh owner: root group: root mode: 0755 #添加定時任務 - name: Create Crond cron: name: NFS Backup Rsync job: '/bin/sh /root/backup.sh &>/dev/null' #檢查語法 [root@m01 ~]# ansible-playbook --syntax-check /root/ansible/nfs/nfs.yml playbook: /root/nfs/nfs.yml #執行 [root@m01 ~]# ansible-playbook /root/ansible/nfs/nfs.yml
擴展需求:
1.給web提交做業代碼
2.部署nfs,並掛載/var/www/html/upload目錄
使用playbook
實現一套LAMP
架構。
1.反面教材以下
主機名 | wanIP | lanIP | 服務 | 角色 |
---|---|---|---|---|
m01 | 10.0.0.61 | 172.16.1.61 | Ansible | 控制端 |
web01 | 10.0.0.7 | 172.16.1.7 | nfs客戶端 | 被控端 |
web02 | 10.0.0.8 | 172.16.1.8 | nfs客戶端 | 被控端 |
web03 | 10.0.0.9 | 172.16.1.9 | nfs客戶端 | 被控端 |
2.準備
由於這只是一個練習,因此咱們將apache mariadb php所有都寫在一個yml文件中,而且放在一個目錄下,
注意:在生產中,咱們是不會這麼作的,咱們須要每個服務單獨拎出來,解耦。
#建立項目目錄 [root@m01 ~]# mkdir /root/lamp/ #編輯Inventory [root@m01 lamp]# cat /etc/ansible/hosts ... [nfs_all:children] web_group nfs_group #自定義變量(變量能夠定義在劇本中,也能夠定義在文件中) [root@m01 ~]# vim /root/lamp/web_group packages: - httpd - mariadb-server - php - php-mysql - php-pdo
3.編寫劇本
[root@m01 ~]# vim /root/lamp/lamp.yml - hosts: web_group tasks: #安裝指定服務和PHP - name: Install httpd mariadb php Server yum: name: "{{ packages }}" vars: packages: - httpd - mariadb-server - php - php-mysql - php-pdo #安裝httpd - hosts: web_group tasks: - name: Install httpd Server yum: name: httpd state: present #啓動httpd服務 - name: Start httpd Server systemd: name: httpd state: started enabled: yes #從新啓動httpd服務 - name: reStart httpd Server systemd: name: httpd state: restarted enabled: yes #安裝mariadb - hosts: mariadb_group tasks: - name: Install mariadb Server yum: name: mariadb-server state: present #啓動mariadb服務 - name: Start httpd Server systemd: name: mariadb state: started enabled: yes #從新啓動mariadb服務 - name: reStart httpd Server systemd: name: mariadb state: restarted enabled: yes #下載wordpress - name: Get Wordpress Package get_url: url: "http://test.driverzeng.com/Nginx_Code/wordpress-5.0.3-zh_CN.tar.gz" dest: /tmp #解壓wordpress - name: Unarchive Wordpress Package unarchive: src: /var/www/html/wordpress-5.0.3-zh_CN.tar.gz dest: /var/www/html copy: no #檢查語法 [root@m01 lamp]# ansible-playbook --syntax-check /root/lamp/lamp.yml playbook: /root/lamp/lamp.yml #執行 [root@m01 lamp]# ansible-playbook /root/lamp/lamp.yml 打開瀏覽器訪問: http://10.0.0.7/wordpress/wp-admin/setup-config.php http://10.0.0.8/wordpress/wp-admin/setup-config.php
擴展需求:
1.使用php鏈接數據庫
2.使用Ansible建立數據庫wordpress
#相似於: create database wordpress
3.使用Ansible建立數據庫用戶wordpress
#相似於: grant all on *.* to wordpress@'%' identified by 'zls';