Linux架構25 ansible搭建交作業, playbook概述, playbook搭建httpd

战斗小人發表於2024-03-15

使用模組搭建交作業頁面

1.準備配置檔案到m01

[root@m01 ~]# rz httpd.conf

2.所有的壓縮包上傳到m01

[root@m01 ~]# rz php.tar.gz
[root@m01 ~]# rz kaoshi.zip

3.編寫ansible命令

#注:&&:前面執行完再執行後面的步驟(如果不加這些步驟會同時執行,有些沒執行,有些已經執行完)
#安裝httpd    
ansible 'web_group' -m yum -a 'name=httpd state=present' &&\
#解壓php包
ansible 'web_group' -m unarchive -a 'src=/root/php.tar.gz dest=/tmp/' &&\
#安裝php
ansible 'web_group' -m shell -a 'yum localinstall -y /tmp/*.rpm'

#解壓程式碼
ansible 'web_group' -m unarchive -a 'src=/root/kaoshi.zip dest=/var/www/html/' &&\
#建立檔案目錄
ansible 'web_group' -m file -a 'path=/var/www/html/upload state=directory' &&\
#建立使用者組
ansible 'all' -m group -a 'name=www gid=666 state=present' &&\
#建立使用者    create_home:是否建立家目錄   /sbin/nologin:不需要登入
ansible 'all' -m user -a 'name=www group=www uid=666 create_home=false shell=/sbin/nologin' &&\
#授權程式碼目錄
ansible 'web_group' -m file -a 'path=/var/www/ state=directory owner=www group=www' &&\
#推送httpd配置檔案
ansible 'web_group' -m copy -a 'src=/root/httpd.conf dest=/etc/httpd/conf/' &&\
#啟動httpd
ansible 'web_group' -m systemd -a 'name=httpd state=restarted enabled=yes' &&\

#安裝nfs服務
ansible 'all' -m yum -a 'name=nfs-utils state=present' &&\
#編輯nfs配置檔案
ansible 'nfs' -m copy -a 'content="/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)" dest=/etc/exports' &&\
#建立共享目錄並授權
ansible 'nfs' -m file -a 'path=/data state=directory owner=www group=www' &&\
#啟動nfs        enabled:開機自啟
ansible 'nfs' -m systemd -a 'name=nfs state=restarted enabled=yes' &&\
#掛載
ansible 'web_group' -m mount -a 'src=172.16.1.31:/data path=/var/www/html/upload fstype=nfs opts=defaults state=mounted'

Ansible playbook

一、playbook概述

1.什麼是playbook

PlayBook即"劇本""兵書"之意,Playbook是由以下部分組成的

play(host): 定義的是主機的角色。(主角還是配角)
book(task): 定義的是具體執行的任務。(角色的臺詞和動作)
playbook: 由一個或多個play(角色)組成,一個play(角色)可以包含多個task(臺詞,動作)。

簡單理解為:使用不同的模組完成一件事
在Ansible中"劇本檔案"是以yml結尾的檔案。
在SaltStack中"劇本檔案"是以sls結尾的檔案。
但是語法,使用的都是yaml語法

2.playbook組成

[root@m01 ~]# vim touch.yml        #內容縮排2格
#定義要執行動作的主機
- hosts: web_group        #算位數根據-的位置開始算
#定義操作的使用者
  remote_user: root        #預設root,可加可不加
#定義變數
  vars:
    file_name: lhd        #:後面一定要有空格
#動作
  tasks:
#註釋
    - name: Touch File
#模組與實際動作
      shell: touch /tmp/{{ file_name }}


#執行前先驗證語法(只能驗證語法,無法驗證邏輯)
[root@m01 ~]# ansible-playbook --syntax-check touch.yml 
playbook: touch.yml        #說明語法沒錯


#執行
[root@m01 ~]# ansible-playbook touch.yml
#TASK [Gathering Facts] 這一步是最慢的,從每個客戶端中收錄資訊(主機名,目錄,磁碟,記憶體之類的資訊)
#PLAY RECAP 輸出結果


# 先建立資料夾再建立檔案
[root@m01 ~]# vim touch.yml
- hosts: web_group
  vars:
    file_name: lhd
  tasks:
    - name: Mkdir File
      file:
        path: /tmp/file
        state: directory
        
    - name: Touch file
      shell: touch /tmp/file/{{ file_name }}

3.playbook與ad-hoc

特定PlayBookad-hoc
完整性 ×
永續性 ×
執行效率
變數 支援 不支援
耦合度
1.PlayBook功能比ad-hoc更全,是對ad-hoc的一種編排
2.PlayBook能很好的控制先後執行順序,以及依賴關係
3.PlayBook語法展現更加的只管
4.PlayBook可以持久使用,ad-hoc無法持久使用

4.YAML語法

語法描述
縮排 YAML使用固定的縮排風格表示層級結構,每個縮排由兩個空格組成,不能使用TAB
冒號 以冒號結尾的除外,其他所有冒號後面所有必須有空格
短橫線 表示列表項,使用一個短橫槓加一個空格,多個項使用同樣的縮排級別作為同一列表
#縮排:
中國:
  上海:
  北京:
    - 朝陽區
    - 昌平
    - 大興區
    
#中橫線:
代表是一層,表示同一個佇列

二、playbook實戰

1.部署httpd

1)配置主機清單

[root@m01 ~]# vim /etc/ansible/hosts
[web_group]
web01
web02

2)測試主機

[root@m01 ~]# ansible 'web_group' -m ping
web02 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
web01 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}

2.編寫劇本

#建立專案目錄
[root@m01 project]# tree /project
/project
└── httpd

[root@m01 httpd]# vim httpd.yml
- hosts: web_group
  tasks:
#關閉防火牆
    - name: Stop Firewalld
      service:
        name: firewalld
        state: stopped
        enabled: no

#關閉selinux
    - name: Stop Selinux
      selinux:
        state: disabled

#安裝httpd
    - name: Install Httpd Server
      yum:
        name: httpd
        state: present
        
#啟動httpd
    - name: Start Httpd Server
      systemd:
        name: httpd
        state: started
        enabled: yes
        
#新增訪問頁面
    - name: Config index.html
      copy:
        content: test http
        dest: /var/www/html/index.html


#檢查語法
[root@m01 httpd]# ansible-playbook --syntax-check httpd.yml 
playbook: httpd.yml

#測試
瀏覽器輸入
10.0.0.7
10.0.0.8

相關文章