【Vagrant+VirtualBox創建自動化虛擬環境】Ansible測試Playbook

文章目錄

    • Vagrant
      • 安裝vagrant
      • 安裝 VirtualBox
      • 如何使用
    • Ansible
      • 安裝Ansible
      • Playbook測試
        • 創建`hosts`文件
        • 創建`setup.yml`文件

Vagrant

Vagrant是一個基于Ruby的工具,用于創建和部署虛擬化開發環境。它使用Oracle的開源VirtualBox虛擬化系統,使用 Chef創建自動化虛擬環境

Documentation | Vagrant | HashiCorp Developer官方手冊

HashiCorp Cloud Platform-Vagrant查詢鏡像網站

安裝vagrant

Install | Vagrant | HashiCorp Developer

安裝 VirtualBox

Oracle VirtualBox

啟動報錯Error relaunching VirtualBox VM process: 5

  • 避坑!注意卸載完美平臺再啟動恢復(不玩cs無視之)

如何使用

如何在 Vagrant 中使用這個盒子
第 1 步
選項 1:創建 Vagrantfile 并啟動 box (Windows用cmd)vagrant init bento/ubuntu-20.04 --box-version 202407.23.0選項 2:打開 Vagrantfile 并將內容替換為以下內容
#-----------------------s-----------------------------
hosts = {"host1" => "192.168.0.221","host2" => "192.168.0.222","host3" => "192.168.0.223"
}Vagrant.configure("2") do |config|hosts.each do |name, ip|config.vm.define name do |machine|machine.vm.box = "bento/ubuntu-20.04"machine.vm.box_version = "202407.23.0"machine.vm.hostname = "%s" % namemachine.vm.network :public_network,bridge: "en1", ip: ipmachine.vm.provider "virtualbox" do |v|v.name = namev.customize ["modifyvm", :id, "--memory", 1024]v.customize ["modifyvm", :id, "--cpus", 2]endendend
end#-----------------------e-----------------------------
步驟 2
啟動您的虛擬機vagrant up #啟動
vagrant halt #關閉
vagrant destroy #銷毀
vagrant ssh #使用MobaXterm登錄可用vagrant創建的私鑰登錄(.vagrant\machines\host1\virtualbox\private_key),賬戶名vagrant,密碼空
  • 網絡

    • network

      • 公共網絡(與本機同網段)machine.vm.network :public_network
      • 私有網絡(NAT)machine.vm.network :public_network
    • bridge 如果主機上有多個網絡接口可用,Vagrant 將 要求您選擇虛擬機應橋接到的接口。默認的 可以通過向網絡定義添加子句來指定接口。:bridge

       #Vagrant 將 要求您選擇虛擬機應橋接到的接口。默認的 可以通過向網絡定義添加子句來指定接口config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"#對于某些提供程序,可以指定要橋接的適配器列表 對:config.vm.network "public_network", bridge: ["en1: Wi-Fi (AirPort)","en6: Broadcom NetXtreme Gigabit Ethernet Controller",]```
  • Hyper-V配置(服務器性能配置cpu、memory內存等) Configuration- Hyper-V Provider | Vagrant | HashiCorp Developer

Ansible

ansible是新出現的自動化運維工具,基于Python開發,集合了眾多運維工具(puppet、cfengine、chef、func、fabric)的優點,實現了批量系統配置、批量程序部署、批量運行命令等功能。Ansible架構相對比較簡單,僅需通過SSH連接客戶機執行任務即可

安裝Ansible

安裝 Ansible — Ansible 社區文檔

安裝完整的 Ansible 軟件包:pipx

#安裝pipx
sudo apt update
sudo apt install python3-pip -y
python3 -m pip install --user pipx
python3 -m pipx ensurepath # 把 ~/.local/bin 寫進 PATH
export PATH="$HOME/.local/bin:$PATH"
pipx --version
#安裝完整的 Ansible 軟件包
#apt install python3.8-venv
pipx install --include-deps ansible

Playbook測試

Ansible Playbook 提供可重復、可重用、簡單的配置管理和多機部署系統,非常適合部署復雜的應用程序。如果您需要多次使用 Ansible 執行任務,請編寫 playbook 并將其置于源代碼控制之下。然后,您可以使用 playbook 推送新配置或確認遠程系統的配置。

前期準備

  #先生成公私鑰對ssh-keygen -t rsals /root/.ssh/  #有目錄id_rsa  id_rsa.pub#講vagrant創建的文件夾`.vagrant`傳到主機(我這里是Ubuntu24),修改權限chmod 600 .vagrant/machines/host1/virtualbox/private_keychmod 600 .vagrant/machines/host2/virtualbox/private_keychmod 600 .vagrant/machines/host3/virtualbox/private_key#先連接一遍測試	ssh -i .vagrant/machines/host1/virtualbox/private_key vagrant@192.168.0.221ssh -i .vagrant/machines/host2/virtualbox/private_key vagrant@192.168.0.222ssh -i .vagrant/machines/host3/virtualbox/private_key vagrant@192.168.0.223#連接報錯Failed to connect to the host via ssh: @@@WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! #使用 ssh-keygen 命令清除舊的公鑰ssh-keygen -R 192.168.0.221ssh-keygen -R 192.168.0.222ssh-keygen -R 192.168.0.223

如使用私鑰還需要密碼,在~/.ssh/ config添加以下內容

如果仍報錯 no mutual signature supported,需強制使用 RSA 算法:

sudo cat >> ~/.ssh/config << EOF
Host *PubkeyAcceptedKeyTypes=+ssh-rsaHostKeyAlgorithms=+ssh-rsa
EOF
創建hosts文件
host1 ansible_host=192.168.0.221
host2 ansible_host=192.168.0.222
host3 ansible_host=192.168.0.223[all:vars]
ansible_ssh_private_key_file=.vagrant/machines/{{ inventory_hostname }}/virtualbox/private_key
創建setup.yml文件

當前目錄下有以下文件/文件夾,再執行setup.yml

hosts、setup.yml、.vagrant/

ansible-playbook -i hosts setup.yml

---
# 目標主機組:all 表示所有主機
- hosts: all# 啟用權限提升(默認使用 sudo)become: true# 切換到 root 用戶執行任務become_user: root# 使用 vagrant 用戶進行 SSH 連接remote_user: vagrant# 禁用事實收集(目標機無 Python 時需關閉)gather_facts: falsetasks:# 1. 等待 SSH 服務就緒(在控制機本地執行)- name: Wait for ssh to be upbecome: false  # 此任務不需要提權wait_for:port: 22     # 檢測端口 22delay: 5     # 每次檢測間隔 5 秒connect_timeout: 5  # 連接超時時間timeout: 360  # 總等待時間(秒)host: "{{ ansible_host }}"  # 目標主機 IPdelegate_to: localhost  # 在控制機執行# 2. 安裝 Python(使用 raw 模塊繞過 Ansible 的 Python 依賴)- name: Installs pythonraw: |# 替換為國內鏡像源并更新#sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list#sed -i 's/esm.ubuntu.com//g' /etc/apt/sources.listapt-get update -y && apt-get install -y python  # 安裝 Pythonargs:executable: /bin/bash  # 指定解釋器# 3. 創建目標目錄(用于存放 SSH 密鑰)- name: Creates destination directoryfile:path: /root/.ssh/  # 目錄路徑state: directory   # 確保目錄存在mode: 0700         # 目錄權限owner: root        # 屬主# 4. 推送 RSA 公鑰(優先嘗試)- name: Pushes user's rsa key to root's vagrant boxcopy:src: ~/.ssh/id_rsa.pub          # 本地公鑰路徑dest: /root/.ssh/authorized_keys  # 目標路徑owner: rootmode: 0600       # 安全權限register: rsa       # 注冊結果變量ignore_errors: yes  # 允許失敗(若無 RSA 密鑰)# 5. 推送 DSA 公鑰(僅當 RSA 失敗時嘗試)- name: Pushes user's dsa key to root's vagrant boxcopy:src: ~/.ssh/id_dsa.pubdest: /root/.ssh/authorized_keysowner: rootmode: 0600when: rsa is failed  # 條件觸發register: dsaignore_errors: yes# 6. 推送 ED25519 公鑰(前兩者均失敗時嘗試)- name: Pushes user's ed25519 key to root's vagrant boxcopy:src: ~/.ssh/id_ed25519.pubdest: /root/.ssh/authorized_keysowner: rootmode: 0600when: dsa is failed  # 前兩個任務均失敗時執行# 7. 檢查 DNS 解析是否正常- name: Checks if resolver is working properlycommand: host -t A baidu.com  # 測試解析(原 ansible.cc 已過時)register: nsignore_errors: yes# 8. 若 DNS 解析失敗,配置備用 DNS(Google Public DNS)- name: Pushes new resolver configuration if resolver failslineinfile:path: /etc/resolv.confregexp: "^nameserver "line: "nameserver 114.114.114.114"  # 替換為 Google DNSstate: presentwhen: ns is failed# 9. 驗證 DNS 配置是否生效- name: Checks if resolver is working properly with new nameservercommand: host -t A baidu.comwhen: ns is failed# 10. 完成提示(調試用)- name: Final greetingdebug:msg: "All tasks completed! Your Vagrant VMs are ready."

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

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

相關文章

AI在醫療領域的10大應用:從疾病預測到手術機器人

AI在醫療領域的10大應用&#xff1a;從疾病預測到手術機器人 系統化學習人工智能網站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目錄 AI在醫療領域的10大應用&#xff1a;從疾病預測到手術機器人摘要引言1. 醫學影像診斷&#xff1a;從靜態…

Win11 配置 Git 綁定 Github 賬號的方法與問題匯總

目錄 一、創建 Github 項目庫&#xff08;遠程倉庫&#xff09;二、配置安裝好的 Git1. 設置用戶信息2. 查看已配置的信息3. 建立本地倉庫4. Git 的常用命令1&#xff09;git checkout&#xff08;切換&#xff09;2&#xff09;git push&#xff08;上傳&#xff09;3&#xf…

6.應用層

6. 應用層 1. 概述 應用層是計算機網絡體系結構的最頂層&#xff0c;是設計和建立計算機網絡的最終目的&#xff0c;也是計算機網絡中發展最快的部分 早期基于文本的應用&#xff08;電子郵件、遠程登錄、文件傳輸、新聞組&#xff09;20世紀90年代將因特網帶入千家萬戶的萬維…

FPGA 100G UDP純邏輯協議棧

隨著器件等級的升高&#xff0c;高速serdes的線速率也隨之提高&#xff0c;RFSOC 4x最大可支持100G&#xff0c;主流方案為RDMA方案&#xff0c;該方案相對比較復雜&#xff0c;除了需要負責邏輯端的開發&#xff0c;還需操作系統中開發RDMA的驅動&#xff0c;對于對丟包不那么…

CSS實現DIV水平與垂直居中方法總結

大家好&#xff0c;歡迎來到程序視點&#xff01;我是你們的老朋友.小二&#xff01; CSS實現DIV水平與垂直居中方法總結 一、水平居中方案 標準方法 .center-div {margin-left: auto;margin-right: auto; }關鍵點&#xff1a;必須聲明DOCTYPE&#xff08;推薦XHTML 1.0 Tran…

Qt快速上手:QSettings高效配置讀寫實戰指南

文章目錄 前言一、QSettings初識&#xff1a;配置管理利器二、基礎操作三板斧2.1 文件讀寫基礎2.2 數據類型處理指南2.3 分組管理技巧 三、高級技巧&#xff1a;精準控制配置項3.1 監聽配置變更3.2 批量操作配置項 四、避坑指南&#xff1a;那些你可能會遇到的問題4.1 鍵順序重…

2025運維工程師面試題1(答案在后一張)

一、邏輯思維能力考核&#xff1a; 問題1&#xff1a; 3個人去投宿&#xff0c;一晚30元三個人每人掏了10元湊夠30元交給了老板后來老板說今天優惠只要25元就夠了&#xff0c;拿出5元命令服務生退還給他們&#xff0c;服務生偷偷藏起了2元&#xff0c;然后&#xff0c;把剩下…

react中封裝一個預覽.doc和.docx文件的組件

主要用到了mammoth這個插件,mammoth.js?是一個JavaScript庫&#xff0c;主要用于將Microsoft Word文檔&#xff08;.docx格式&#xff09;轉換為HTML。它可以通過Node.js環境使用&#xff0c;也可以直接在瀏覽器中使用。 關鍵代碼: import mammoth from mammoth; import { u…

c#WebsocketSever

這是一個winFrom的小工具&#xff0c;用于再本機創建一個c#服務的項目。 1、將本機ip地址改為左上角Ip&#xff0c;注意沒有“&#xff1a;”后的部分&#xff0c;那是端口號。 2、點擊中間按鈕&#xff0c;啟動服務器 3、如果啟動成功&#xff0c;會在下面顯示啟動成功&…

頂會招牌idea:機器學習+組合優化 優秀論文合集

2025深度學習發論文&模型漲點之——機器學習組合優化 機器學習&#xff08;ML&#xff09;與組合優化&#xff08;CO&#xff09;的交叉研究已成為運籌學與人工智能領域的前沿方向。傳統組合優化方法&#xff08;如分支定界、動態規劃&#xff09;雖在理論上有嚴格的性能保…

服務器硬件老化導致性能下降的排查與優化

隨著企業數字化轉型的深入&#xff0c;服務器作為IT基礎設施的核心載體&#xff0c;其穩定性與性能直接影響業務連續性。然而&#xff0c;硬件老化導致的性能衰減問題普遍存在且易被忽視。本報告通過系統性分析服務器硬件老化現象&#xff0c;提出多維度排查方法與優化方案&…

刪除k8s某命名空間,一直卡住了怎么辦?

以 kubectl delete ns cert-manager 命令卡住為例&#xff0c;并且命名空間一直處于 Terminating 狀態&#xff0c;說明 Kubernetes 無法完成刪除操作&#xff0c;通常是因為 Finalizers 阻塞或某些資源無法正常清理。 解決方法 1. 檢查命名空間狀態 kubectl get ns cert-man…

【分享】變聲器大師[特殊字符]喬碧蘿同款變聲[特殊字符]游戲變聲[特殊字符]

多種變聲器效果可選&#xff1a;爺爺、大叔、小孩、機器人...... 使用變聲器時只需輕輕一點&#xff0c;讓你成為潮人 【應用名稱】&#xff1a;變聲器大師 【應用版本】&#xff1a;6.1.35 【應用大小】&#xff1a;116M 【測試機型】&#xff1a;小米14 【下載鏈接】:https:…

【Part 2安卓原生360°VR播放器開發實戰】第二節|基于等距圓柱投影方式實現全景視頻渲染

《VR 360全景視頻開發》專欄 將帶你深入探索從全景視頻制作到Unity眼鏡端應用開發的全流程技術。專欄內容涵蓋安卓原生VR播放器開發、Unity VR視頻渲染與手勢交互、360全景視頻制作與優化&#xff0c;以及高分辨率視頻性能優化等實戰技巧。 &#x1f4dd; 希望通過這個專欄&am…

【JavaScript】相等運算符、條件運算符

1、相等運算符 &#xff08;1&#xff09;&#xff08;相等&#xff09; 相等運算符用來比較兩個值是否相等&#xff0c;如果相等會返回true&#xff0c;否則返回false <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"…

OceanBase數據庫-學習筆記5-用戶

用戶相關命令 命令描述CREATE USER ‘username’‘host’ IDENTIFIED BY ‘password’;創建用戶。GRANT ALL PRIVILEGES ON database_name.* TO ‘test_user’‘%’;給用戶授權所有權限。GRANT SELECT, INSERT, UPDATE ON database_name.* TO ‘test_user’‘%’;給用戶授權指…

K8S Secret 快速開始

一、什么是 Secret&#xff1f; Kubernetes&#xff08;K8s&#xff09;中的 Secret 是一種用于存儲和管理敏感信息&#xff08;如密碼、令牌、證書、API 密鑰等&#xff09;的資源對象。它避免了將敏感數據明文寫入配置文件、鏡像或代碼中&#xff0c;提供了一種更安全的方式…

【分享】音頻音樂剪輯[特殊字符]人聲分離伴奏提取[特殊字符]拼接合并

音頻音樂剪輯是一款專業的剪輯軟件。在剪輯過程中&#xff0c;它可以對音頻進行拼接合成、音樂裁剪、變調變速、格式轉換&#xff0c;同時音頻音樂剪輯還是一款支持高清錄音、音頻降噪等眾多功能于一體的音頻制作軟件。 【應用名稱】&#xff1a;音頻剪輯 【應用版本】&#xf…

力扣-數據結構-二叉樹

94. 二叉樹的中序遍歷 給定一個二叉樹的根節點 root &#xff0c;返回 它的 中序 遍歷 。 示例 1&#xff1a; 輸入&#xff1a;root [1,null,2,3] 輸出&#xff1a;[1,3,2]示例 2&#xff1a; 輸入&#xff1a;root [] 輸出&#xff1a;[]示例 3&#xff1a; 輸入&#x…

oracle怎樣通過固化較優執行計劃來優化慢sql

一 問題描述 有次生產環境cpu使用率增高&#xff0c;ADDM報告提示某條sql比較耗費cpu&#xff1a; 提示&#xff1a; 在分析期間, 此 SQL 語句至少利用了 6 個不同的執行計劃 #查看該sql都有哪些執行計劃 SELECT * FROM table(DBMS_XPLAN.DISPLAY_AWR(sqlid值)); 我手動執…