playbook初識和簡單使用

回顧

自定義變量
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日誌

Ansible PlayBook初識

什麼是PlayBookphp

PlayBook即"劇本"的意思,PlayBook是由如下部分組成的css

play: 定義的是主機(hosts)的角色。
tasks: 定義的是具體執行的任務
playbook: 由一個或多個play(主機)組成,一個play能夠包含多個task(臺詞,動做)html

簡單理解爲: 使用不一樣的模塊完成一件事情(目的)前端


Ansible中"劇本文件"是以yml結尾的文件。
SaltStack中"劇本文件"是以sls結尾的文件。
可是語法,使用的都是yaml語法
python

YAML語法

語法 描述
縮進 YAML使用固定的縮進風格表示層級結構,每一個縮進由兩個空格組成, 不能使用TAB
冒號 以冒號結尾的除外,其餘全部冒號後面必須有空格
短橫線 表示列表項,使用一個短橫槓加一個空格,多個項使用一樣的縮進級別做爲同一列表

PlayBook與ad-hoc

特色 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客戶端 被控端

m01準備

#安裝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客戶端 被控端

m01準備

#安裝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服務端提供掛載點給web01web02

環境

主機名 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客戶端 被控端

m01準備

#安裝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';
相關文章
相關標籤/搜索