Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions agent/app/dto/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ type PortHelper struct {
}

type ContainerOperation struct {
TaskID string `json:"taskID"`
Names []string `json:"names" validate:"required"`
Operation string `json:"operation" validate:"required,oneof=up start stop restart kill pause unpause remove"`
}
Expand Down
4 changes: 3 additions & 1 deletion agent/app/dto/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ type ImageInfo struct {
}

type ImageLoad struct {
Path string `json:"path" validate:"required"`
TaskID string `json:"taskID"`
Path string `json:"path" validate:"required"`
}

type ImageBuild struct {
Expand Down Expand Up @@ -48,6 +49,7 @@ type ImagePush struct {
}

type ImageSave struct {
TaskID string `json:"taskID"`
TagName string `json:"tagName" validate:"required"`
Path string `json:"path" validate:"required"`
Name string `json:"name" validate:"required"`
Expand Down
45 changes: 28 additions & 17 deletions agent/app/service/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -895,25 +895,36 @@ func (u *ContainerService) ContainerOperation(req dto.ContainerOperation) error
return err
}
defer client.Close()
taskItem, err := task.NewTaskWithOps(strings.Join(req.Names, " "), req.Operation, task.TaskScopeContainer, req.TaskID, 1)
if err != nil {
return fmt.Errorf("new task for container commit failed, err: %v", err)
}

for _, item := range req.Names {
global.LOG.Infof("start container %s operation %s", item, req.Operation)
switch req.Operation {
case constant.ContainerOpStart:
err = client.ContainerStart(ctx, item, container.StartOptions{})
case constant.ContainerOpStop:
err = client.ContainerStop(ctx, item, container.StopOptions{})
case constant.ContainerOpRestart:
err = client.ContainerRestart(ctx, item, container.StopOptions{})
case constant.ContainerOpKill:
err = client.ContainerKill(ctx, item, "SIGKILL")
case constant.ContainerOpPause:
err = client.ContainerPause(ctx, item)
case constant.ContainerOpUnpause:
err = client.ContainerUnpause(ctx, item)
case constant.ContainerOpRemove:
err = client.ContainerRemove(ctx, item, container.RemoveOptions{RemoveVolumes: true, Force: true})
}
taskItem.AddSubTask(item, func(t *task.Task) error {
switch req.Operation {
case constant.ContainerOpStart:
err = client.ContainerStart(ctx, item, container.StartOptions{})
case constant.ContainerOpStop:
err = client.ContainerStop(ctx, item, container.StopOptions{})
case constant.ContainerOpRestart:
err = client.ContainerRestart(ctx, item, container.StopOptions{})
case constant.ContainerOpKill:
err = client.ContainerKill(ctx, item, "SIGKILL")
case constant.ContainerOpPause:
err = client.ContainerPause(ctx, item)
case constant.ContainerOpUnpause:
err = client.ContainerUnpause(ctx, item)
case constant.ContainerOpRemove:
err = client.ContainerRemove(ctx, item, container.RemoveOptions{RemoveVolumes: true, Force: true})
}
return err
}, nil)
}

go func() {
_ = taskItem.Execute()
}()
return err
}

Expand Down
93 changes: 57 additions & 36 deletions agent/app/service/image.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,51 +308,72 @@ func (u *ImageService) ImagePull(req dto.ImagePull) error {
}

func (u *ImageService) ImageLoad(req dto.ImageLoad) error {
file, err := os.Open(req.Path)
taskItem, err := task.NewTaskWithOps(req.Path, task.TaskImport, task.TaskScopeImage, req.TaskID, 1)
if err != nil {
return err
}
defer file.Close()
client, err := docker.NewDockerClient()
if err != nil {
return err
}
defer client.Close()
res, err := client.ImageLoad(context.TODO(), file)
if err != nil {
return err
}
defer res.Body.Close()
content, err := io.ReadAll(res.Body)
if err != nil {
return err
}
if strings.Contains(string(content), "Error") {
return errors.New(string(content))
return fmt.Errorf("new task for image import failed, err: %v", err)
}
taskItem.AddSubTask(i18n.GetWithName("TaskImport", req.Path), func(t *task.Task) error {
file, err := os.Open(req.Path)
if err != nil {
return err
}
defer file.Close()
client, err := docker.NewDockerClient()
if err != nil {
return err
}
defer client.Close()
res, err := client.ImageLoad(context.TODO(), file)
if err != nil {
return err
}
defer res.Body.Close()
content, err := io.ReadAll(res.Body)
if err != nil {
return err
}
if strings.Contains(string(content), "Error") {
return errors.New(string(content))
}
return nil
}, nil)
go func() {
_ = taskItem.Execute()
}()
return nil
}

func (u *ImageService) ImageSave(req dto.ImageSave) error {
client, err := docker.NewDockerClient()
taskItem, err := task.NewTaskWithOps(req.Name, task.TaskExport, task.TaskScopeImage, req.TaskID, 1)
if err != nil {
return err
return fmt.Errorf("new task for image export failed, err: %v", err)
}
defer client.Close()
taskItem.AddSubTask(i18n.GetWithName("TaskExport", req.Name), func(t *task.Task) error {
taskItem.Log(req.TagName)
client, err := docker.NewDockerClient()
if err != nil {
return err
}
defer client.Close()

out, err := client.ImageSave(context.TODO(), []string{req.TagName})
if err != nil {
return err
}
defer out.Close()
file, err := os.OpenFile(fmt.Sprintf("%s/%s.tar", req.Path, req.Name), os.O_WRONLY|os.O_CREATE|os.O_EXCL, constant.FilePerm)
if err != nil {
return err
}
defer file.Close()
if _, err = io.Copy(file, out); err != nil {
return err
}
out, err := client.ImageSave(context.TODO(), []string{req.TagName})
if err != nil {
return err
}
defer out.Close()
file, err := os.OpenFile(fmt.Sprintf("%s/%s.tar", req.Path, req.Name), os.O_WRONLY|os.O_CREATE|os.O_EXCL, constant.FilePerm)
if err != nil {
return err
}
defer file.Close()
if _, err = io.Copy(file, out); err != nil {
return err
}
return nil
}, nil)
go func() {
_ = taskItem.Execute()
}()
return nil
}

Expand Down
2 changes: 2 additions & 0 deletions agent/app/task/task.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ const (
TaskSync = "TaskSync"
TaskBuild = "TaskBuild"
TaskPull = "TaskPull"
TaskImport = "TaskImport"
TaskExport = "TaskExport"
TaskCommit = "TaskCommit"
TaskPush = "TaskPush"
TaskClean = "TaskClean"
Expand Down
7 changes: 7 additions & 0 deletions agent/i18n/lang/en.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,11 @@ ErrRuntimeNoPort: "The runtime environment is not set with a port, please edit t
Status: 'Status'
start: 'Start'
stop: 'Stop'
restart: 'Restart'
kill: 'Force Stop'
pause: 'Pause'
unpause: 'Resume'
remove: 'Delete'
delete: 'Delete'
ErrDefaultWebsite: 'Default website has been set, please cancel it before setting!'

Expand Down Expand Up @@ -343,6 +348,8 @@ TaskBuild: 'Build'
TaskPush: 'Push'
TaskClean: "Cleanup"
TaskHandle: 'Execute'
TaskImport: "Import"
TaskExport: "Export"
Website: 'Website'
App: 'Application'
Runtime: 'Runtime environment'
Expand Down
7 changes: 7 additions & 0 deletions agent/i18n/lang/es-ES.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,11 @@ ErrRuntimeNoPort: "El entorno de ejecución no tiene configurado un puerto, edí
Status: 'Estado'
start: 'Iniciar'
stop: 'Detener'
restart: 'Reiniciar'
kill: 'Detener Forzosamente'
pause: 'Pausar'
unpause: 'Reanudar'
remove: 'Eliminar'
delete: 'Eliminar'
ErrDefaultWebsite: 'El sitio web predeterminado ya está configurado, ¡cancélelo antes de configurar!'

Expand Down Expand Up @@ -341,6 +346,8 @@ TaskCommit: 'Commit'
TaskBuild: 'Construir'
TaskPush: 'Subir'
TaskHandle: 'Ejecutar'
TaskImport: "Importar"
TaskExport: "Exportar"
Website: 'Sitio web'
App: 'Aplicación'
Runtime: 'Entorno de ejecución'
Expand Down
7 changes: 7 additions & 0 deletions agent/i18n/lang/ja.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,11 @@ ErrRuntimeNoPort: "ランタイム環境にポートが設定されていませ
Status: 'ステータス'
start: '開始'
stop: '停止'
restart: '再起動'
kill: '強制停止'
pause: '一時停止'
unpause: '再開'
remove: '削除'
delete: '削除'
ErrDefaultWebsite: 'デフォルト Web サイトが既に設定されています。設定する前にキャンセルしてください!'

Expand Down Expand Up @@ -342,6 +347,8 @@ TaskBuild: 'ビルド'
TaskPush: 'プッシュ'
TaskClean: "クリーンアップ"
TaskHandle: '実行'
TaskImport: "インポート"
TaskExport: "エクスポート"
Website: 'ウェブサイト'
App: 'アプリケーション'
Runtime: 'ランタイム環境'
Expand Down
7 changes: 7 additions & 0 deletions agent/i18n/lang/ko.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,11 @@ ErrRuntimeNoPort: "런타임 환경에 포트가 설정되지 않았습니다.
Status: '상태'
start: '시작'
stop: '중지'
restart: '재시작'
kill: '강제 중지'
pause: '일시 정지'
unpause: '재개'
remove: '삭제'
delete: '삭제'
ErrDefaultWebsite: '기본 웹사이트가 이미 설정되었습니다. 설정하기 전에 취소하세요!'

Expand Down Expand Up @@ -343,6 +348,8 @@ TaskBuild: '빌드'
TaskPush: '푸시'
TaskClean: "정리"
TaskHandle: '실행'
TaskImport: "가져오기"
TaskExport: "내보내기"
Website: '웹사이트'
App: '애플리케이션'
Runtime: '런타임 환경'
Expand Down
7 changes: 7 additions & 0 deletions agent/i18n/lang/ms.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,11 @@ ErrRuntimeNoPort: "Persekitaran runtime tidak diset dengan port, sila edit perse
Status: 'Status'
start: 'Mulakan'
stop: 'Berhenti'
restart: 'Mulakan Semula'
kill: 'Hentikan Paksa'
pause: 'Jeda'
unpause: 'Sambung Semula'
remove: 'Padam'
delete: 'Padam'
ErrDefaultWebsite: 'Laman web lalai telah ditetapkan, sila batalkan sebelum menetapkan!'

Expand Down Expand Up @@ -343,6 +348,8 @@ TaskBuild: 'Bina'
TaskPush: 'Tolak'
TaskClean: "Pembersihan"
TaskHandle: 'Laksanakan'
TaskImport: "Import"
TaskExport: "Eksport"
Website: 'Laman web'
App: 'Aplikasi'
Runtime: 'Persekitaran masa jalan'
Expand Down
7 changes: 7 additions & 0 deletions agent/i18n/lang/pt-BR.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,11 @@ ErrRuntimeNoPort: "O ambiente de tempo de execução não está configurado com
Status: 'Status'
start: 'Iniciar'
stop: 'Parar'
restart: 'Reiniciar'
kill: 'Parar Forçadamente'
pause: 'Pausar'
unpause: 'Retomar'
remove: 'Excluir'
delete: 'Excluir'
ErrDefaultWebsite: 'O site padrão já foi definido, cancele-o antes de definir!'

Expand Down Expand Up @@ -343,6 +348,8 @@ TaskBuild: 'Construir'
TaskPush: 'Empurrar'
TaskClean: "Limpeza"
TaskHandle: 'Executar'
TaskImport: "Importar"
TaskExport: "Exportar"
Website: 'Site'
App: 'Aplicativo'
Runtime: 'Ambiente de tempo de execução'
Expand Down
7 changes: 7 additions & 0 deletions agent/i18n/lang/ru.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,11 @@ ErrRuntimeNoPort: "Среда выполнения не настроена с п
Status: 'Статус'
start: 'Запустить'
stop: 'Остановить'
restart: 'Перезапустить'
kill: 'Принудительно Остановить'
pause: 'Приостановить'
unpause: 'Возобновить'
remove: 'Удалить'
delete: 'Удалить'
ErrDefaultWebsite: 'Веб-сайт по умолчанию уже установлен, отмените его перед настройкой!'

Expand Down Expand Up @@ -343,6 +348,8 @@ TaskCommit: 'Kоммит'
TaskPush: 'Push'
TaskClean: "Очистка"
TaskHandle: 'Выполнить'
TaskImport: "Импорт"
TaskExport: "Экспорт"
Website: 'Be6-сайт'
App: 'Приложение'
Runtime: 'Среда выполнения'
Expand Down
8 changes: 8 additions & 0 deletions agent/i18n/lang/tr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,13 @@ ErrRuntimeNoPort: "Çalışma zamanı ortamı bir porta sahip değil, lütfen ö
Status: 'Durum'
start: 'Başlat'
stop: 'Durdur'
restart: 'Yeniden Başlat'
kill: 'Zorla Durdur'
pause: 'Duraklat'
unpause: 'Devam Et'
remove: 'Sil'
delete: 'Sil'
ErrDefaultWebsite: "Varsayılan bir web sitesi zaten ayarlanmış. Yeni bir tane ayarlamadan önce lütfen iptal edin!"

#ssl
ErrSSLCannotDelete: '{{ .name }} sertifikası bir web sitesi tarafından kullanılıyor ve silinemez'
Expand Down Expand Up @@ -343,6 +349,8 @@ TaskBuild: 'Yapı'
TaskPush: 'Gönder'
TaskClean: "Temizleme"
TaskHandle: 'Yürüt'
TaskImport: "İçe Aktar"
TaskExport: "Dışa Aktar"
Website: 'Web Sitesi'
App: 'Uygulama'
Runtime: 'Çalışma ortamı'
Expand Down
7 changes: 7 additions & 0 deletions agent/i18n/lang/zh-Hant.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,11 @@ ErrRuntimeNoPort: "執行環境未設定埠,請先編輯執行環境"
Status: '狀態'
start: '開啟'
stop: '關閉'
restart: '重啟'
kill: '強制停止'
pause: '暫停'
unpause: '恢復'
remove: '刪除'
delete: '刪除'
ErrDefaultWebsite: '已經設置默認網站,請取消後再設置!'

Expand Down Expand Up @@ -342,6 +347,8 @@ TaskBuild: '建置'
TaskPush: '推送'
TaskClean: "清理"
TaskHandle: '執行'
TaskImport: "導入"
TaskExport: "導出"
Website: '網站'
App: '應用程式'
Runtime: '運作環境'
Expand Down
Loading
Loading