Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2019 - PVE 社群 - Rails 串接 Proxmox VE API 自動化教學用虛擬機分配
Search
蒼時弦や
December 07, 2019
Programming
1
590
2019 - PVE 社群 - Rails 串接 Proxmox VE API 自動化教學用虛擬機分配
再接案公司用 Proxmox VE 建制簡易的練習 VM 環境,讓同事可以在需要的時候申請機器來練習使用。
蒼時弦や
December 07, 2019
Tweet
Share
More Decks by 蒼時弦や
See All by 蒼時弦や
2023 - RubyConfTW - Rethink Rails Architecture
elct9620
0
62
20230916 - DDDTW - 導入 Domain-Driven Design 的最佳時機
elct9620
0
320
2023 - WebConf - 選擇適合你的技能組合
elct9620
0
520
20230322 - Generative AI 小聚 ft. Happy Designer
elct9620
0
260
2022 - 默默會 - 重新學習 MVC 的 Model
elct9620
1
380
MOPCON 2022 - 從 Domain-Driven Design 看網站開發框架隱藏
elct9620
1
410
2022 - COSCUP - 我想慢慢寫程式該怎麼辦?
elct9620
0
210
2022 - COSCUP - 打造高速 Ruby 專案開發流程
elct9620
0
230
2021 - RubyKaigi - It is time to build your mruby VM on the microcontroller?
elct9620
0
190
Other Decks in Programming
See All in Programming
AWSでゲームサーバーを運用! Amazon GameLiftのお話
iriikeita
0
200
Clean Architecture by TypeScript & NestJS
ryounasso
0
150
Activities at Cairo Library
cairolibrary720
0
1.2k
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
81k
ぼっちを避けて楽しむためのアノテコノテ / Various Tips and Tricks to Avoid Loneliness and Have Fun
nrslib
3
1.7k
AWS CDKにおける「再利用性」を考える / aws-cdk-reusability
gotok365
6
1.3k
小さな開発会社を作った理由
polidog
0
1.9k
Ruby メモリ管理 プログラミング
megmogmog1965
0
130
DDDを志して3年経ったら「DDDの皮を被ったクリーンアーキテクチャ」になった話【デブサミ2024夏】
texmeijin
1
620
ピグパーティにおけるMongoDB CommunityバージョンからAtlasへの移行事例
10969hotaka
0
130
Rust.Nagoya #1
codemountains
0
170
わかりやすい正解を捨てて、コトに向き合う - スクラムフェス金沢2024 スポンサーセッション
yusukekokubo
0
170
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
332
56k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
18
1.2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
360
22k
The Straight Up "How To Draw Better" Workshop
denniskardys
229
130k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
29
2.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
90
47k
Robots, Beer and Maslow
schacon
PRO
157
8.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
24
1.8k
Making Projects Easy
brettharned
111
5.7k
How STYLIGHT went responsive
nonsquared
93
5k
Ruby is Unlike a Banana
tanoku
96
10k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
662
120k
Transcript
Rails 串接 Proxmox VE API 自動化教學用虛擬機分配 Photo by Franck V.
on Unsplash
WEB DEVELOPER GAME DEVELOPER ࣌ ݭ @elct9620
None
為什麼 使用 Proxmox VE?
Photo by Hal Gatewood on Unsplash 接案公司
Photo by Jordan Harrison on Unsplash 硬體資源不足
Photo by NESA by Makers on Unsplash 技術交接容易
為什麼 要做虛擬機練習系統?
Photo by Christina @ wocintechchat.com on Unsplash 熟悉 DevOps 的人太少
Photo by Jordan Sanchez on Unsplash 練習的機會不多
Photo by Christian Fregnan on Unsplash 人工開設虛擬機並不方便
如何用 Proxmox VE 解決 問題?
API Snapshot Qemu Agent + +
require 'net/http' rquire 'oj' uri = URI('https:!//192.168.100.220:8006/api2/json/access/ticket') req = Net!::HTTP!::Post.new
req['Content-Type'] = 'application/x-!!www-form-urlencoded' req.body = URI.encode_!!www_form(username: 'xxx@pve', password: 'xxx') token = {} Net!::HTTP.start(uri.host, uri.port, use_ssl: true) do |http| res = http.request(req) token = Oj.load(res.body)&.fetch('data', {}) end puts token['ticket'] # !=> XXXX puts token['CSRFPreventionToken'] # !=> XXX
require 'net/http' rquire 'oj' uri = URI(TICKET_URI) req = Net!::HTTP!::Post.new
req['Content-Type'] = 'application/x-!!www-form-urlencoded' req.body = URI.encode_!!www_form( username: 'xxx@pve', password: 'xxx' )
token = {} Net!::HTTP.start( uri.host, uri.port, use_ssl: true ) do
|http| res = http.request(req) token = Oj.load(res.body)&.fetch('data', {}) end puts token['ticket'] # !=> XXXX puts token['CSRFPreventionToken'] # !=> XXX
req = Net!::HTTP!::Get.new(uri) req['Cookie'] = "PVEAuthCookie=!#{token['ticket']}"
req = Net!::HTTP!::Post.new(uri) req['Cookie'] = "PVEAuthCookie=!#{token['ticket']}" req['CSRFPreventionToken'] = token['CSRFPreventionToken']
詳細的文件可以在 Wiki 中找到
非同步 行為處理
Proxmox!::API.post('nodes/pve/100/status/start') .fetch(:data) # !=> UPID:pve:00001560:3C9C598C:5C6944F7:qmstart: 100:user@pve:
需要自己用 UPID 確認狀態
loop do status = task('pve', upid) break if status['exitstatus'] !==
'OK' sleep 1 end
Snapshot Backup VS
None
如何 自動設定 SSH Key 到機器
None
None
File Write Qemu Agent VM PlayGround GitLab Public Key
File Write Qemu Agent VM PlayGround GitLab Public Key 從
GitLab 取出 使用者 Public Key
File Write Qemu Agent VM PlayGround GitLab Public Key 透過
Proxmox API 控制 Qemu Agent
File Write Qemu Agent VM PlayGround GitLab Public Key 將
Public Key 寫入 指定的虛擬機
預設 權限不足,需要自己調整 SELinux
None
THANKS