1. 程式人生 > >kubernetes二次開發:(釋出/滾動升級/回滾) 公共方法的封裝

kubernetes二次開發:(釋出/滾動升級/回滾) 公共方法的封裝

// 釋出/回滾/滾動升級 公共方法
func HandlePRR(c *gin.Context, timesince time.Time, action, virtual_name, skyeye, workid string, fn func(*lcmongo.Program, lcmongo.Spec, chan error, string)) {
   // 更新資料庫 釋出時間/滾動升級時間/回滾時間  欄位
now, err := UpdateTimeField(action, virtual_name, skyeye)
   if err != nil {
      MongoDBError(c, 
Update, err, timesince) return } ProgramQuery(c, skyeye, virtual_name, timesince, func(program *lcmongo.Program, value lcmongo.Spec) { // 針對action = "publish"進行判斷,禁止重複釋出 if action == "publish" && value.Status == 1 { message := fmt.Sprintf("Project: [%s] has been publish, Please don't republish!"
, virtual_name) GeneralError(c, conflict, message, timesince) return } ch := make(chan error) ticker, timeout := TickerTimeOut(action) deployment_name := fmt.Sprintf("deployment-%s", value.Name) go func(p *lcmongo.Program, value lcmongo.Spec, ch_ chan error
, deployment_name string) { // 針對不同的action(publish/rollingupdate/rollback) // 自己寫處理邏輯 fn(p, value, ch_, deployment_name) }(program, value, ch, deployment_name) select { case err := <-ch: close(ch) // kubernetes統一錯誤錯誤 if err != nil { KubernetesError(c, Query, err, timesince) return } // 開啟定時器,不斷輪詢查詢deployment的pod數量 // 後續改成watche controller,效能更好 for { select { case <-ticker: deployment, err := K8s_Client.GetSpecNameSpaceDeployment(value.NameSpace, deployment_name) if err != nil { KubernetesError(c, Query, err, timesince) return } // pod數量達到預期,釋出成功,後期處理 if deployment.Status.UpdatedReplicas == int32(value.Replicas) && deployment.Status.AvailableReplicas == int32(value.Replicas) && deployment.Status.Replicas == int32(value.Replicas){ end_time := strconv.FormatInt(time.Now().Unix(), 10) his := &lcmongo.HistoryLog{ Id: bson.NewObjectId(), WorkdId: workid, Skyeye: skyeye, Virtual_Name: virtual_name, NameSpace: value.NameSpace, Operation_Type: action, Start_Time: now, End_Time: end_time, } if err := lcmongo.InsertDocument(Collection_HisLog, reflect.ValueOf(his)); err != nil { MongoDBError(c, Insert, err, timesince) return } if err := UpdateCountField(action, virtual_name, skyeye); err != nil { MongoDBError(c, Update, err, timesince) return } GeneralAllOk(c, timesince) return } case <-timeout: // 超時處理 defer func() { // 判斷action == "publish" && 釋出失敗 // 則刪除kubernetes已釋出資源 if action == "publish" { if err := CleanK8sResource(value.Name, value.NameSpace); err != nil { KubernetesError(c, Delete, err, timesince) return } } }() GeneralError(c, internalserver_error, "timeout!", timesince) return } } } }) }

相關推薦

kubernetes開發(釋出/滾動升級/) 公共方法封裝

// 釋出/回滾/滾動升級 公共方法 func HandlePRR(c *gin.Context, timesince time.Time, action, virtual_name, skyeye, workid string, fn func(*lcmongo.Progr

dedecms開發dedetemplate.class.php 動態模板類

filename 外部 運行 mpi public esc val net color dedecms二次開發目錄點這個:dedecms二次開發教程目錄 核心類文件 include/dedetemplate.class.php 用途:用於非核心模塊的動態頁面或列表頁的模板解

Eclipse開發開啟Eclipse幫助系統

BusyIndicator.showWhile(null, new Runnable() { @Override public void run() { PlatformUI.getWorkbench().getHelpSystem().displayHelpResource("

Eclipse開發開啟web 瀏覽器

try { IWorkbenchBrowserSupport workbenchBrowserSupport = PlatformUI.getWorkbench().getBrowserSupport(); IWebBrowser webBrowser = workbenchBrow

Eclipse開發SWT中使用Swing

在SWT出現之前,已經有眾多的Swing程式和控制元件被開發出來,為了充分利用這些現有的資源,SWT需要提供一種在SWT中使用Swing控制元件的途徑。 Swing是通過在AWT的Canvas控制元件上繪圖以顯示各種控制元件的,而AWT的控制元件與SWT的原理相似,都是直接對應到作業系統的

Eclipse開發Eclipse 外掛開發法則

擴充套件者     貢獻法則( Contribution Rule ):一切皆是貢獻。     遵循法則( Conformance Rule):外掛必須遵循預期的介面。  &nbs

openstack開發如何定製自己(企業)openstack圖示、標題等內容

問題導讀1.如何修改dasboard網站顏色?2.如何修改openstack dasboard網站標題?3.如何定製自己的logo,及品牌連線?本文定製包含以下內容:網站顏色Logo網站標題站點品牌連結幫助連線Logo和網站顏色1.建立兩個logo檔案,png格式,具有透明背

cropper.js 開發截圖並下載圖片

cropper.js 是一個基於jquery的圖片擷取庫。 參考:https://blog.csdn.net/weixin_38023551/article/details/78792400  我的程式碼也是基於這個同學的demo。 全程程式碼很長,所以我只貼出我改了的部分。  

Ecshop開發如何建立一個自定義頁面(一)

今天自己本機用wampserver搭建了一個環境,然後下載了Ecshop官方(UTF-8)最新版本,然後進行熟悉。 進入後臺簡單的操作了一下,想自己寫一個php頁面,並在模版中調用出來值。 第一步:在根目錄新建了一個test.php頁面。並寫上如下程式碼: 不過百度了一下

Revit開發NurbSpline中各個引數的含義

摘自百度的回答,基本滿足二開需求。瞭解一下:NURBS是Non-Uniform Rational B-Splines的縮寫,是非統一有理B樣條的意思。具體解釋是:.Non-Uniform(非統一):是指一個控制頂點的影響力的範圍能夠改變。當建立一個不規則曲面的時候這一點非常有

ecshop開發 Only variables should be passed by reference in的解決

//$tag_sel = array_shift(explode(' ', $tag)); 把上面的改為如下兩行即可:             $tag_arr=explode('',$tag);            $tag_sel = array_shift($tag

使用O2OA開發搭建企業辦公平臺(十七)資訊開發資訊釋出的審批功能

本部落格為O2OA系列教程、O2OA使用手冊,教程目錄和各章節天梯將在連載完後更新。 使用O2OA二次開發搭建企業辦公平臺(一)平臺部署篇:平臺下載和部署 使用O2OA二次開發搭建企業辦公平臺(二)平臺部署篇:埠衝突和伺服器埠配置 使用O2OA二次開發搭建企業辦公平臺(三)平臺部署篇:使用外部資料庫

基於.NET的CAD開發學習筆記AutoCAD .NET中的物件

1、CAD物件 一個CAD檔案(DWG檔案)即對應一個數據庫,資料庫中的所有組成部分,看的見(包括點、多段線、文字、圓等)和看不見(圖層、線型、顏色等)的都是物件,資料庫本身也是一個物件。 直線、圓弧、文字和標註等圖形物件都是物件。 線型與標註樣式等樣式設定都是物件。 圖層

基於.NET的CAD開發學習筆記一CAD開發入門

1、AutoCAD .NET API由不同的DLL檔案組成,它們提供用於訪問圖形檔案或AutoCAD應用程式的包含豐富的類、結構、方法和事件。每一個DLL檔案都定義不同的使用基於功能的庫組織元件的名稱空間。 下面是你將頻繁地要使用的AutoCAD .NET API 的三個主要的DLL檔案:

使用O2OA開發搭建企業辦公平臺(十)流程開發報銷審批流程需求和應用建立

本部落格為O2OA系列教程、O2OA使用手冊,教程目錄和各章節天梯將在連載完後更新。 使用O2OA二次開發搭建企業辦公平臺(一)平臺部署篇:平臺下載和部署 使用O2OA二次開發搭建企業辦公平臺(二)平臺部署篇:埠衝突和伺服器埠配置 使用O2OA二次開發搭建企業辦公平臺(三)平臺部署篇:使用外部資料庫

使用O2OA開發搭建企業辦公平臺(十)組織管理篇組織管理者設定

本部落格為O2OA系列教程、O2OA使用手冊,教程目錄和各章節天梯將在連載完後更新。 使用O2OA二次開發搭建企業辦公平臺(一)平臺部署篇:平臺下載和部署 使用O2OA二次開發搭建企業辦公平臺(二)平臺部署篇:埠衝突和伺服器埠配置 使用O2OA二次開發搭建企業辦公平臺(三)平臺部署篇:使用外部資料庫

使用O2OA開發搭建企業辦公平臺(十一)組織管理篇關於系統角色管理

本部落格為O2OA系列教程、O2OA使用手冊,教程目錄和各章節天梯將在連載完後更新。 使用O2OA二次開發搭建企業辦公平臺(一)平臺部署篇:平臺下載和部署 使用O2OA二次開發搭建企業辦公平臺(二)平臺部署篇:埠衝突和伺服器埠配置 使用O2OA二次開發搭建企業辦公平臺(三)平臺部署篇:使用外部資料庫

使用O2OA開發搭建企業辦公平臺(九)組織管理篇組織職務的建立和使用

本部落格為O2OA系列教程、O2OA使用手冊,教程目錄和各章節天梯將在連載完後更新。 使用O2OA二次開發搭建企業辦公平臺(一)平臺部署篇:平臺下載和部署 使用O2OA二次開發搭建企業辦公平臺(二)平臺部署篇:埠衝突和伺服器埠配置 使用O2OA二次開發搭建企業辦公平臺(三)平臺部署篇:使用外部資料庫

使用O2OA開發搭建企業辦公平臺(十三)流程開發報銷審批流程表單開發

本部落格為O2OA系列教程、O2OA使用手冊,教程目錄和各章節天梯將在連載完後更新。 使用O2OA二次開發搭建企業辦公平臺(一)平臺部署篇:平臺下載和部署 使用O2OA二次開發搭建企業辦公平臺(二)平臺部署篇:埠衝突和伺服器埠配置 使用O2OA二次開發搭建企業辦公平臺(三)平臺部署篇:使用外部資料庫

使用O2OA開發搭建企業辦公平臺(十四)流程開發使用資料字典進行報銷型別配置

本部落格為O2OA系列教程、O2OA使用手冊,教程目錄和各章節天梯將在連載完後更新。 使用O2OA二次開發搭建企業辦公平臺(一)平臺部署篇:平臺下載和部署 使用O2OA二次開發搭建企業辦公平臺(二)平臺部署篇:埠衝突和伺服器埠配置 使用O2OA二次開發搭建企業辦公平臺(三)平臺部署篇:使用外部資料庫