ansible Ad-Hoc YAML劇本

来源:https://www.cnblogs.com/xuxuxuxuxu/archive/2023/08/22/17647465.html
-Advertisement-
Play Games

# ansible、Ad-Hoc、YAML劇本 ## 1.簡介 ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程式部署、批量運行命令等功能。 ## 2.部署 1.dn ...


ansible、Ad-Hoc、YAML劇本

1.簡介

ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程式部署、批量運行命令等功能。

2.部署

1.dns resolve

ansible伺服器:192.168.70.42 配置阿裡yum源
ansible客戶機:192.168.70.35 192.168.70.36 配置阿裡yum源

伺服器和客戶機都做好功能變數名稱解析

vim /etc/hosts
192.168.70.35 host1
192.168.70.36 host2
192.168.70.42 ansible

2.install ansible (ansible伺服器)

yum install ansible -y

3.ssh-key免密連接

ssh-keygen   //一路回車 有yes填yes

ssh-copy-id [email protected]	//發送公鑰
ssh-copy-id [email protected]

ssh [email protected]   //測試連接
ssh [email protected]

4.ansible基礎

1.自定義主機清單 (ansible機器)

vim /etc/ansible/hosts
host1
host2

2.測試連通性

ansible localhost -m ping  //測試host1連通性 -m指定模塊

ansible host1 -m ping o  //一行簡簡潔輸出

3.know_hosts

ansible host2 -m ping -u root -k -o //沒有配置ssh免密可以互動式密碼驗證登錄 如果是第一次連接會報錯 需使用ansible host2 -m ping 交互yes之後才能

`去掉(yes/no)的詢問`
vim /etc/ssh/ssh_config
StrictHostKeyChecking no
systemctl restart sshd

ansible host2 -m ping -u root -k -o //再次測試

4.請註意ping和ssh

ping的通不代表ansible連接的上,ping ICMP:網際消息管理協議
ansible的ping事探測ssh程式是否連接。不是icmp協議,如果關比sshd服務,ping可以成功,ansible測試會依舊失敗。

5.Inventory主機清單

1.增加主機組

vim /etc/ansible/hosts
[webserver]
host1 ansible_ssh_user='root' 
host2 ansible_ssh_user='root'

ansible webserver -m ping -o

2.增加用戶名沒密碼(沒設置免密登錄,可以增加用戶名密碼)

vim /etc/ansible/hosts
host1 ansible_ssh_user='root' ansible_ssh_pass='123456'
host2 ansible_ssh_user='root' ansible_ssh_pass='123456'

//或者
host[1:2] ansible_ssh_user='root' ansible_ssh_pass='123456'

3.增加埠(host)

vim /etc/ssh/sshd_config
Port 22 改成Port 2222
systemctl restart sshd

測試連接
ansible host1 -m ping  //會發現失敗 ansible預設sshd埠還是22

回到ansible 修改用戶host的埠
vim /etc/ansible/hosts
host1 ansible_ssh_user='root' ansible_ssh_pass='123456' ansible_ssh_port='2222'  //指定ssh埠

再次測試
ansible host1 -m ping

4.組:變數

[webserver]
host1 ansible_ssh_port='2222'
host2 ansible_ssh_port='2222'

[webserver:vars]
ansible_ssh_user='root'
ansible_ssh_pass='123456'

5.子分組 (將不同的分組進行組合) 為了實驗方便我們先把host的sshd 埠改回預設

vim /etc/ansible/hosts
[apache]
host1
[nginx]
host2
[webserver:children]
apache
nginx

ansible webserver -m ping -o  //測試

6.自定義主機列表

vim hostlist
[dockers]
host1
host2

ansible -i hostlist dockers -m ping -o  //測試

6.Ad-Hoc點對點模式

臨時的,在ansible中是指需要快速執行的單條命令,並且不需要保存的命令。對於複雜的命令則為 playbook。

1.shell模塊

ansible webserver -m shell -a 'hostname' -o  //查看主機名稱

ansible webserver -m shell -a 'yum install mariadb -y' -o  //安裝mariadb

ansible webserver -m shell -a 'touch /tmp/777.txt' -o  //創建文件

2.複製模塊

ansible-doc copy  //查看幫助文檔

ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/2.txt'  //copy 如果和原先文件一樣 不會進行拷貝

ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/3.txt owner=root group=root mode=777'

ansible webserver -m copy -a 'src=/etc/hosts dest=/tmp/3.txt owner=root group=root mode=777 backup=yes'

3.用戶模塊

ansible-doc user  //查看幫助文檔

ansible webserver -m user -a 'name=xux state=present'  //創建用戶

echo '123456' | openssl passwd -1 -stdin  //系統存儲的是密文 需要將輸入的密碼轉化為加密後的密文
ansible webserver -m user -a 'name=xux password="$1$g93P3CoY$YPuV8anNPa8HBhnfMncB60"'  //修改密碼

ansible webserver -m user -a 'name=xux shell=/sbin/nologin append=yes'  //修改用戶屬性

ansible webserver -m user -a 'name=xux state=absent'  //刪除用戶

4.軟體包管理

ansible-doc yum  //查看幫助文檔

ansible webserver -m yum -a 'name="*" stale=lastest'  //升級所有包

ansible webserver -m yum -a 'name=vsftpd state=present'  //安裝vsftpd

ansible webserver -m yum -a 'name=vsftpd state=absent'  //卸載vsftpd

ansible webserver -m yum -a 'name=vsftpd state=latest'  //升級vsftpd

5.服務模塊

ansible-doc service  //查看幫助文檔

ansible webserver -m service -a 'name=vsftpd state=started'  //開啟httpd服務

ansible webserver -m service -a 'name=vsftpd state=stopped'  //關閉httpd服務

ansible webserver -m service -a 'name=vsftpd state=restarted'  //重啟httpd服務

ansible webserver -m service -a 'name=vsftpd state=started enabled=yes'  //開啟開機自啟

ansible webserver -m service -a 'name=vsftpd state=started enabled=no'  //關閉開機自啟

6.文件模塊

ansible-doc file  //查看幫助文檔

ansible webservice -m file -a 'path=/tmp/11.txt mode=771 state=touch'  //創建文件

ansible webserver -m file -a 'path=/tmp/asb mode=770 state=directory'  //創建目錄

7.收集模塊

ansible-doc setup  //查看幫助文檔

ansible host1 -m setup  //列出常見常熟

ansible host1 -m setup -a 'filter=ansible_all_ipv4_addresses'  //查詢ip地址

7.YAML

YAML Ain’t Markup Language-非標記語言

示例:通過YAML編寫一個簡單的劇本,完成web的部署,配置,啟動的全過程。

1.準備

ansible all -m yum -a 'name=httpd state=removed' -o  //清理一下環境
yum install -y httpd  //準備配置文件
mkdir apache
cd apache
cp -rf /etc/httpd/conf/httpd.conf .
grep '^Listen' httpd.conf
Listen 8080  //修改埠

2.編寫劇本

編寫
vim apache.yaml
- hosts: host2
  tasks:
  - name: install apache packages
    yum: name=httpd state=present
  - name: copy apache conf
    copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
  - name: ensure apache is running
    service: name=httpd state=started enabled=yes
    
測試
ansible-playbook apache.yaml --syntax-check
ansible-playbook apache.yaml --list-tasks
ansible-playbook apache.yaml --list-hosts

執行
ansible-playbook apache.yaml

3.優化

如果我們在配置文件中修改了apache埠號為9000,那麼我們再次重啟會發現文件會被拷貝過去,但是伺服器並沒沒有重啟。
因為劇本中寫的服務啟動,並沒有重啟服務。需要優化一下劇本代碼,如果執行copy語句那麼notify會觸發,接著會執行handlers中的語句重啟服務。
- hosts: webserver
  tasks:
  - name: install apache packges for xux
    yum: name=httpd state=latest
  - name: copy apache conf file for xux
    copy: src=./httpd.conf dest=/etc/httpd/conf/httpd.conf
    notify: restart apache service for xux
  - name: ensure apache si running
    service: name=httpd state=started enabled=yes
  handlers:
  - name: restart apache service for xux
    service: name=httpd state=restarted

8.Role-角色扮演

roles則是在ansible中,playbooks的目錄組織結構。將代碼或文件進行模塊化,成為roles的文件目錄組織結構,易讀,代碼可重用,層次清晰。

示例:通過role遠程部署nginx並配置

1.準備目錄

nginx 角色名
files  普通文件
handlers  觸發器程式
tasks  主任務
templates 金甲模板(有變數的文件)
vars 自定義變數
[root@localhost ~]# mkdir roles/nginx/{files,handlers,tasks,templates,vars} -p

touch roles/site.yaml roles/nginx/{handlers,tasks,vars}/main.yaml

echo 1234 > roles/nginx/files/index.html

yum install -y nginx && cp /etc/nginx/nginx.conf roles/nginx/templates/nginx.conf.j2

[root@localhost ~]# tree roles/
roles/
├── nginx
│   ├── files
│   │   └── index.html
│   ├── handlers
│   │   └── main.yaml
│   ├── tasks
│   │   └── main.yaml
│   ├── templates
│   └── vars
│       └── main.yaml
└── site.yaml

2.編寫任務

vim roles/nginx/tasks/main.yaml
- name: install epel-release packge
  yum: name=epel-release state=latest
- name: install nginx packge
  yum: name=nginx state=latest
- name: copy index.html
  copy: src=index.html dest=/usr/share/nginx/html/index.html
- name: copy nginx.conf template
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
  notify: restart nginx
- name: make sure nginx service running
  service: name=nginx state=started enabled=yes
Template:
Template模板在運用時與copy模塊類似,區別在於可以在Ansible的Playbook執行的時候,根據一定的條件靈活的設置要複製文件中的部分關鍵內容。
在Ansible中,Templat模板使用jinjia2語言進行配置,模板文件的尾碼名為.j2。

3.準備配置文件

vim roles/nginx/templates/nginx.conf.j2
worker_processes auto; 改成 worker_processes {{ ansible_processor_cores }};  //ansible內置變數

worker_connections 1024; 改成 worker_connections {{ worker_connections }};  //自定義變數

4.編寫變數

vim roles/nginx/vars/main.yaml
worker_connections: 10240

5.編寫處理程式

vim roles/nginx/handlers/main.yaml
---
- name: restart nginx
  service: name=nginx state=restarted

6.編寫劇本

vim roles/site.yaml
- hosts: webserver
  roles:
  - nginx

7.實施

cd roles
ansible-playbook site.yaml --syntax-check  //測試
ansible-playbook site.yaml  //實施劇本

文章內容主要參考:b站磊哥5.Ansible 自動化運維實戰


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ## 一,下載安裝相關 ### 1,這個軟體什麼作用? Anaconda:Python大禮包(包含解析器,一系列庫,軟體包管理器Conda) 主要作用,不用配庫,如果需要庫a,anaconda會把庫a相關的依賴庫一併打包下載 次要作用,可以同時安裝不同版本的python,和對應依賴庫,相互隔離。 # ...
  • [TOC] # 本篇前瞻 好的,現在你已經來到一個新的小結,在這裡你將學習到go語言的重要內容,習得go 25個關鍵字中的12個:var, const, if, else, switch, case, default, fallthrough, for, break, goto, continue, ...
  • GitHub的Codespaces為個人用戶提供了免費的4核8G伺服器資源,今天就來實戰如何用桌面版vscode連接codespace伺服器做遠程開發,把編譯運行下載等耗時耗資源的操作都轉移到雲端進行,還能為應用創建各種docker服務,這都不要錢! ...
  • 先決條件 Visual Studio 2019 v16.9 預覽版1或更高版本(通過WSL可選組件進行.NET調試)。若要檢查 WSL 組件,請選擇 “工具” > “獲取工具和功能” 。 在 Visual Studio 安裝程式中,選擇 “單個組件”,然後鍵入 “WSL” 搜索安裝組件 。 安裝WS ...
  • ## 中台框架後端項目 Admin.Core 的介紹與配置說明 > 中台admin是前後端分離許可權管理系統,Admin.Core為後端項目,基於.NET 7.0開發。 > 支持多租戶、數據許可權、動態 Api、任務調度、OSS 文件上傳、滑塊拼圖驗證、多資料庫,分散式緩存、分散式事務等 - 項目地址 ...
  • ## 背景 ​ 我們寫博客難免需要大量圖片,如果把圖片一張張上傳到博客相冊再引用圖片鏈接,就很麻煩。所以需要一種手段,讓我們可以在本地寫完博客內容後,自動把博客引用的圖片傳到網上,併在網上發佈。 ​ 這時候就需要***dotnet-cnblog*** :博客園文章快捷發佈工具 ## 環境準備 ### ...
  • 整體統一前端框架,使用VUE重新寫,支持Windows模式和傳統菜單導航模式切換。整體框架支持租戶,全面支持雲端部署與應用。全新界面設計,提升用戶的易用性。 ...
  • Woa(Wechat Official Account)是一個基於.net 7開發的微信公眾平臺介面項目,利用Supabase作為數據存儲和消息通信服務,同時提供了ChatGPT和Claude2等目前熱門的生成式AI會話功能接入。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...