自動化之ansible(二)

一、ansible中playbook(劇本)

官方文檔:

Ansible playbooks — Ansible Community Documentation

1、playbook的基本結構

一個基本的playbook由以下幾個主要部分組成

hosts: 定義要執行任務的主機組或主機。
become: 是否需要使用超級用戶權限(如 sudo)。
vars: 在 Playbook 中定義變量。

tasks: 任務列表,指定要執行的操作。

注:playbook:由一個play或者多個play組成,一個paly可以包含多個task任務

ansible中playbook的文件結尾是.yml格式后綴

示例:

---
- name: Playbook名稱hosts: 主機組become: true  # 是否需要使用管理員權限(sudo)vars:  # 可選部分,定義變量variable_name: valuetasks:  # 任務列表- name: 任務1名稱module_name:  # Ansible模塊名稱parameter1: value1parameter2: value2- name: 任務2名稱module_name:parameter1: value1name: Playbook或Play的名稱,通常用于描述Playbook的作用。
hosts: 要運行任務的主機組。可以是inventory中定義的主機組,也可以是單個主機(如localhost)
become: 設為true時,任務將以管理員權限(sudo)執行。
vars: 定義變量,在Playbook中全局可用。
tasks: 包含一個或多個任務,每個任務由名稱和模塊組成。每個任務都會通過特定的模塊來執行指定的操作。

2、安裝和啟動nginx

[master-61 root ~/playbook] # cat nginx.yml 
---
- name: install nginxhosts: webbecome: truetasks:- name: install nginxyum:name: nginxstate: present- name: start nginxservice:name: nginxstate: startedenabled: true

?在執行playbook腳本時報錯了如下:

web7主機出現系統的文件系統被掛載為只讀模式,導致沒法執行yml腳本

解決方法:登錄上web-7主機,將文件系統重新掛載為讀寫模式

檢查文件系統的掛載狀態,確認是否為只讀模式
[web-7 root ~] # mount | grep ' / '
/dev/mapper/centos-root on / type xfs (ro,relatime,attr2,inode64,noquota)ro 表示只讀,這就意味著文件系統被掛載為只讀模式重新掛載為讀寫模式,重新掛載根文件系統(/)為讀寫模式
[web-7 root ~] # mount -o remount,rw /
[web-7 root ~] # df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 979M     0  979M   0% /dev
tmpfs                    991M     0  991M   0% /dev/shm
tmpfs                    991M  9.5M  981M   1% /run
tmpfs                    991M     0  991M   0% /sys/fs/cgroup
/dev/mapper/centos-root   37G  2.1G   35G   6% /
/dev/sda1               1014M  140M  875M  14% /boot
tmpfs                    199M     0  199M   0% /run/user/0
[web-7 root ~] # ls /root/
anaconda-ks.cfg  .bash_history    .bash_profile    .cshrc           .pki/            .tcshrc
.ansible/        .bash_logout     .bashrc          network.sh       .ssh/            .viminfo

重新執行playbook

先執行命令檢查一下是否正常
[master-61 root ~/playbook] # ansible-playbook -C nginx.yml PLAY [install nginx] **********************************************************************************TASK [Gathering Facts] ********************************************************************************
ok: [172.16.1.7]TASK [install nginx] **********************************************************************************
changed: [172.16.1.7]TASK [start nginx] ************************************************************************************
changed: [172.16.1.7]PLAY RECAP ********************************************************************************************
172.16.1.7                 : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

執行劇本

[master-61 root ~/playbook] # ansible-playbook nginx.yml PLAY [install nginx] **********************************************************************************TASK [Gathering Facts] ********************************************************************************
ok: [172.16.1.7]TASK [install nginx] **********************************************************************************
changed: [172.16.1.7]TASK [start nginx] ************************************************************************************
changed: [172.16.1.7]PLAY RECAP ********************************************************************************************
172.16.1.7                 : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

驗證web-7機器是否安裝啟動成功

二、ansible中roles角色

1、roles介紹

roles相當于是在ansible中playbooks的目錄組織結構。它可以將任務(tasks)、變量(vars)、文件(files)、模板(templates)、處理器(handlers)、默認值(defaults)、以及其他資源分組到一個單獨的目錄中,提升代碼的可維護性。

2、roles目錄結構如下

my_role/
├── defaults/
│   └── main.yml          # 默認變量
├── files/                # 存放靜態文件
├── handlers/
│   └── main.yml          # 任務完成后的處理器
├── meta/
│   └── main.yml          # 角色的元數據,例如依賴關系
├── tasks/
│   └── main.yml          # 主要的任務文件
├── templates/            # 存放 Jinja2 模板文件
├── tests/
│   └── test.yml          # 測試腳本
└── vars/└── main.yml          # 存放變量

每個目錄的用途如下:

defaults/main.yml:定義角色的默認變量,變量值可以被 Playbook 或其它角色覆蓋。
files/:存放一些靜態的文件,可以通過 copy 或 template 模塊來部署到目標主機。
handlers/main.yml:用于定義觸發特定條件時執行的處理器。通常是服務的重啟、重載等操作。
meta/main.yml:描述角色的元數據,如角色的依賴關系、作者信息等。
tasks/main.yml:包含角色的任務,定義了這個角色執行的具體工作。
templates/:存放 Jinja2 模板文件。你可以在角色中使用模板來動態生成文件。
tests/test.yml:用于測試角色是否正常工作,通常會包含一些驗證任務,確保角色行為符合預期。
vars/main.yml:存放角色的變量,這些變量在 Playbook 中可以覆蓋。

3、創建roles角色

命令:ansible-galaxy init 角色名

(11:04:31)[master-61 root /etc/ansible/roles] # ansible-galaxy init my_role
- Role my_role was created successfully
(11:04:35)[master-61 root /etc/ansible/roles] # 
(11:04:38)[master-61 root /etc/ansible/roles] # tree my_role/
my_role/
├── defaults
│?? └── main.yml
├── files
├── handlers
│?? └── main.yml
├── meta
│?? └── main.yml
├── README.md
├── tasks
│?? └── main.yml
├── templates
├── tests
│?? ├── inventory
│?? └── test.yml
└── vars└── main.yml8 directories, 8 files

4、使用roles角色

roles角色的執行流程:

定義tasks任務?--> 定義jinja2模板,作為配置文件用 --> 定義變量 --> 定義觸發 --> 定義roles的yml文件 -->檢查yml語法 --> 執行roles.yml文件 --> 查看nginx服務啟動狀態

4.1定義任務,在task/main.yml文件中定義任務

(14:45:56)[master-61 root /etc/ansible/roles/nginx] # cat tasks/main.yml ---
- name: "Install wget"yum:name: "wget"state: "present"- name: "Download nginx package"get_url:url: "http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm"dest: "/etc/ansible/roles/nginx/files/"
- name: "Copy nginx package to /tmp"copy:src: "nginx-1.18.0-1.el7.ngx.x86_64.rpm"dest: "/tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm"- name: "Install nginx from rpm package"yum:name: "/tmp/nginx-1.18.0-1.el7.ngx.x86_64.rpm"state: "latest"- name: "Configure nginx"template:src: "nginx.conf.j2"dest: "/etc/nginx/nginx.conf"tags:- "nginxconf"notify:- "Reload nginx configuration"- name: "Start nginx service"service:name: "nginx"state: "started"enabled: true

4.2?定義templates生成配置文件

(16:23:43)[master-61 root /etc/ansible/roles/nginx] # cat templates/nginx.conf.j2 
user nginx;  # 設置 Nginx 服務的系統使用用戶
worker_processes {{ ansible_processor_vcpus }};  # 工作進程數error_log /var/log/nginx/error.log warn;  # Nginx 的錯誤日志
pid /var/run/nginx.pid;  # Nginx 啟動時的 PIDevents {worker_connections 1024;  # 每個進程允許的最大連接數
}http {  # HTTP 請求配置,一個 http 可以包含多個 serverinclude /etc/nginx/mime.types;  # 定義 Content-Typedefault_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;  # 訪問日志sendfile on;  # 高效文件傳輸keepalive_timeout 65;  # 客戶端與服務端的超時時間server {  # HTTP 服務,一個 server 可以配置多個 locationlisten {{ nginx_config.nginx_port }};  # 服務監聽端口server_name localhost;  # 主機名、域名location / {root /usr/share/nginx/html;  # 頁面存放目錄index index.html index.htm;  # 默認頁面}error_page 500 502 503 504 /50x.html;  # 錯誤頁面重定向location = /50x.html {root /usr/share/nginx/html;  # 頁面存放的目錄}}include /etc/nginx/conf.d/*.conf;  # 包含其他配置文件
}

4.3定義變量,在vars/main.yml文件中定義變量

(14:49:48)[master-61 root /etc/ansible/roles/nginx] # vim  vars/main.yml 
---
nginx_config:nginx_port:888

4.4?定義觸發

(16:25:55)[master-61 root /etc/ansible/roles/nginx] # cat handlers/main.yml 
---
- name: reload new config service: name: nginxstatr: restarted

4.5定義劇本文件

(16:26:42)[master-61 root /etc/ansible/roles/nginx] # cat roles.yml 
- hosts: webremote_user: rootroles: - nginx

4.6?檢查yml文件語法是否正確,如果報錯需要檢查對應配置文件

(16:27:11)[master-61 root /etc/ansible/roles/nginx] # ansible-playbook --syntax-check roles.yml playbook: roles.yml

4.7?執行roles.yml文件

(10:48:31)[master-61 root /etc/ansible/roles/nginx] # ansible-playbook roles.yml PLAY [web] ********************************************************************************************TASK [Gathering Facts] ********************************************************************************
ok: [172.16.1.8]
ok: [172.16.1.7]TASK [nginx : Install wget] ***************************************************************************
ok: [172.16.1.7]
ok: [172.16.1.8]TASK [Download nginx package] *************************************************************************
ok: [172.16.1.7]
ok: [172.16.1.8]TASK [Install nginx from rpm package] *****************************************************************
ok: [172.16.1.7]
ok: [172.16.1.8]TASK [Configure nginx] ********************************************************************************
changed: [172.16.1.7]
changed: [172.16.1.8]TASK [Start nginx service] ****************************************************************************
changed: [172.16.1.7]
changed: [172.16.1.8]PLAY RECAP ********************************************************************************************
172.16.1.7                 : ok=6    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
172.16.1.8                 : ok=6    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

4.8 檢查服務啟動狀態

web-7和web-8中nginx服務都正常啟動

網頁訪問也正常

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70443.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70443.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70443.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python 神經網絡教程,神經網絡模型代碼python,小白入門基礎教程

文章目錄 前言1. 神經網絡基礎概念1.1 神經元1.2 激活函數1.3 神經網絡結構1.4 安裝 Python1.5 選擇開發環境2. 使用numpy構建簡單神經網絡 3. 使用PyTorch構建復雜神經網絡 前言 本教程旨在為廣大初學者和有一定基礎的開發者提供一個系統、全面且深入的 Python 神經網絡學習指…

SOME/IP--協議英文原文講解10

前言 SOME/IP協議越來越多的用于汽車電子行業中,關于協議詳細完全的中文資料卻沒有,所以我將結合工作經驗并對照英文原版協議做一系列的文章。基本分三大塊: 1. SOME/IP協議講解 2. SOME/IP-SD協議講解 3. python/C舉例調試講解 4.2.2 Req…

Spring框架基本使用(Maven詳解)

前言: 當我們創建項目的時候,第一步少不了搭建環境的相關準備工作。 那么如果想讓我們的項目做起來方便快捷,應該引入更多的管理工具,幫我們管理。 Maven的出現幫我們大大解決了管理的難題!! Maven&#xf…

用大內存主機下載Visual Studio

用一臺內存達到128G的主機下載Visual Studio 2022,用的是公司網絡。下載速度讓我吃了一驚,沒人用網絡了?還是網站提速了?以前最大只能達到5MB/秒。記錄這段經歷,是用來分析公司網絡用的......

Ubuntu20.04.2安裝Vmware tools

軟件版本:Vmware Workstation Pro 17.6.2 操作系統鏡像文件:ubuntu-20.04.2-desktop-amd64 方式1:用iso鏡像安裝 沒用這種方法,太麻煩 方式2:用apt安裝Open VM Tools 如果你使用的是較新的Ubuntu版本(如…

Mac系統下使用Docker快速部署MaxKB:打造本地知識庫問答系統

隨著大語言模型的廣泛應用,知識庫問答系統逐漸成為提升工作效率和個人學習的有力工具。MaxKB是一款基于LLM(Large Language Model)大語言模型的知識庫問答系統,支持多模型對接、文檔上傳和自動爬取等功能。本文將詳細介紹如何在Ma…

2526考研資料分享 百度網盤

通過網盤分享的文件:01、2026【考研數學】 鏈接: https://pan.baidu.com/s/1N-TlXcCKMcX1U-KBr0Oejg?pwducbe 提取碼: ucbe 提取碼:98wg--來自百度網盤超級會員v3的分享 通過網盤分享的文件:01、2026【考研政治】 鏈接: https://pan.baidu.com/s/1N-T…

【信息系統項目管理師-案例真題】2013下半年案例分析答案和詳解

更多內容請見: 備考信息系統項目管理師-專欄介紹和目錄 文章目錄 試題一【問題? 1】(12 分)【問題? 2】(10 分)【問題 3】( 3 分 )試題二【問題? 1】(3? 分)【問題? 2】(10? 分)【問題? 3】(3? 分)【問題? 4】(9? 分)試題三【問題? 1】(12? 分)?【問題? 2】(8?…

idea連接gitee(使用idea遠程兼容gitee)

文章目錄 先登錄你的gitee拿到你的郵箱找到idea的設置選擇密碼方式登錄填寫你的郵箱和密碼登錄成功 先登錄你的gitee拿到你的郵箱 具體位置在gitee–>設置–>郵箱管理 找到idea的設置 選擇密碼方式登錄 填寫你的郵箱和密碼 登錄成功

UNIAPP開發之利用阿里RTC服務實現音視頻通話后端THINKPHP5

下面是一個使用ThinkPHP 5實現后端邏輯的示例。我們將創建一個簡單的ThinkPHP 5項目來處理生成推流和播流地址的請求。 后端部分(ThinkPHP 5) 1. 初始化ThinkPHP 5項目 首先,確保你已經安裝了Composer。然后使用Composer創建一個新的Think…

嵌入式開發崗位認識

目錄 1.核心定義2.崗位方向3.行業方向4.技術方向5.工作職責6.核心技能7.等級標準8.優勢與劣勢9.市場薪資10. 發展路徑11. 市場趨勢12. 技術趨勢 1.核心定義 嵌入式系統: 以應用為中心,以計算機技術為基礎,軟硬件可裁剪的專用計算機系統 特點…

圖解循環神經網絡(RNN)

目錄 1.循環神經網絡介紹 2.網絡結構 3.結構分類 4.模型工作原理 5.模型工作示例 6.總結 1.循環神經網絡介紹 RNN(Recurrent Neural Network,循環神經網絡)是一種專門用于處理序列數據的神經網絡結構。與傳統的神經網絡不同&#xff0c…

MySQL數據庫入門到大蛇尚硅谷宋紅康老師筆記 高級篇 part 2

第02章_MySQL的數據目錄 1. MySQL8的主要目錄結構 1.1 數據庫文件的存放路徑 MySQL數據庫文件的存放路徑:/var/lib/mysql/ MySQL服務器程序在啟動時會到文件系統的某個目錄下加載一些文件,之后在運行過程中產生的數據也都會存儲到這個目錄下的某些文件…

http 響應碼影響 video 標簽播放視頻

背景 使用后端給的文件下載接口地址實現視頻播放,但是 video 標簽一直無法播放視頻如下圖,把接口地址放到瀏覽器請求能直接下載。但就是不能播放 原因 http 響應碼不正確,返回201是無法播放視頻200可以如下圖 狀態碼的影響: 20…

OneNote手機/平板“更多筆記本”中有許多已經刪掉或改名的,如何刪除

問題描述: OneNote 在手機或平板上添加“更多筆記本”中,有許多已經刪掉或改名的筆記本!如何刪除? OR:如何徹底刪除OneNote中的筆記本? 處理做法: 這個列表對應365里面的【最近打開】&#…

LeetCode--23. 合并 K 個升序鏈表【堆和分治】

23. 合并 K 個升序鏈表 給你一個鏈表數組,每個鏈表都已經按升序排列。 請你將所有鏈表合并到一個升序鏈表中,返回合并后的鏈表。 正文 這道題有多種解決方案 堆 比較容易,又比較直觀的就是堆排序,將每個節點加入最小根堆中&…

【 Avalonia UI 語言國際化 I18n】圖文結合教學,保姆級教學,語言國際化就是這么簡單(.Net C#)

完整項目地址 github : https://github.com/Crazy-GrowUp/AvaloniaI18nTest/tree/master gitee :https://gitee.com/jack_of_disco/avalonia-i18n-test 0.項目新建 Properties 文件夾 對應的項目配置文件里面就會增加 <Folder Include"Properties\" /> 1.項…

點擊el-dialog彈框跳到其他頁面瀏覽器的滾動條消失了多了 el-popup-parent--hidden

點擊el-dialog彈框跳到其他頁面瀏覽器的滾動條消失了 在使用 el-dialog 彈框時&#xff0c;Element Plus 會在彈框打開時自動給 body 添加 el-popup-parent–hidden 類&#xff0c;以隱藏滾動條。如果在跳轉到其他頁面時滾動條沒有恢復&#xff0c;可能是因為 el-dialog 沒有正…

JWT認證機制

Session認證機制中需要配合cookie才能實現&#xff0c;由于cookie默認不支持跨域訪問&#xff0c;當涉及到前端跨域請求后端接口時&#xff0c;需要做很多額外的配置&#xff0c;才能實現跨域session認證。所以這里不推薦使用session身份認證機制&#xff0c;一般推薦使用jwt認…

netcore 啟用gzip壓縮及緩存

public void ConfigureServices(IServiceCollection services) {....// 配置gzip 與 br的壓縮等級為最優services.Configure<BrotliCompressionProviderOptions>(options > {options.Level CompressionLevel.Optimal;});services.Configure<GzipCompressionProvid…