From 5a104c43b869351cb977575ac1f70639807a0413 Mon Sep 17 00:00:00 2001 From: xAt0mZ Date: Fri, 22 Nov 2019 02:25:25 +0100 Subject: [PATCH] feat(app): push pull template edit --- app/portainer/services/api/registryService.js | 30 +++++++++++-------- app/portainer/services/api/templateService.js | 29 +++++++++++++----- .../templates/edit/templateController.js | 1 - 3 files changed, 39 insertions(+), 21 deletions(-) diff --git a/app/portainer/services/api/registryService.js b/app/portainer/services/api/registryService.js index 112a9b00e..8b19cc3bd 100644 --- a/app/portainer/services/api/registryService.js +++ b/app/portainer/services/api/registryService.js @@ -81,25 +81,31 @@ function RegistryServiceFactory($q, $async, Registries, DockerHubService, ImageH return $q.all(promises); }; + service.retrievePorRegistryModelFromRepositoryWithRegistries = retrievePorRegistryModelFromRepositoryWithRegistries; + + function retrievePorRegistryModelFromRepositoryWithRegistries(repository, registries) { + const model = new PorImageRegistryModel(); + const registry = _.find(registries, (reg) => _.includes(repository, reg.URL)); + if (registry) { + const lastIndex = repository.lastIndexOf(registry.URL) + registry.URL.length; + const image = repository.substring(lastIndex + 1); + model.Registry = registry; + model.Image = image; + } else { + model.UseRegistry = false; + model.Image = repository; + } + return model; + } + async function retrievePorRegistryModelFromRepositoryAsync(repository) { try { - const model = new PorImageRegistryModel(); const [registries, dockerhub] = await Promise.all([ service.registries(), DockerHubService.dockerhub() ]); registries.concat([dockerhub]); - const registry = _.find(registries, (reg) => _.includes(repository, reg.URL)); - if (registry) { - const lastIndex = repository.lastIndexOf(registry.URL) + registry.URL.length; - const image = repository.substring(lastIndex + 1); - model.Registry = registry; - model.Image = image; - } else { - model.UseRegistry = false; - model.Image = repository; - } - return model; + return retrievePorRegistryModelFromRepositoryWithRegistries(repository, registries); } catch (err) { throw { msg: 'Unable to retrieve the registry associated to the repository', err: err } } diff --git a/app/portainer/services/api/templateService.js b/app/portainer/services/api/templateService.js index 6c56a604c..a94c46d82 100644 --- a/app/portainer/services/api/templateService.js +++ b/app/portainer/services/api/templateService.js @@ -5,18 +5,27 @@ import { } from '../../models/template'; angular.module('portainer.app') -.factory('TemplateService', ['$q', 'Templates', 'TemplateHelper', 'ImageHelper', 'ContainerHelper', -function TemplateServiceFactory($q, Templates, TemplateHelper, ImageHelper, ContainerHelper) { +.factory('TemplateService', ['$q', 'Templates', 'TemplateHelper', 'RegistryService', 'DockerHubService', 'ImageHelper', 'ContainerHelper', +function TemplateServiceFactory($q, Templates, TemplateHelper, RegistryService, DockerHubService, ImageHelper, ContainerHelper) { 'use strict'; var service = {}; service.templates = function() { var deferred = $q.defer(); - Templates.query().$promise + $q.all({ + templates: Templates.query().$promise, + registries: RegistryService.registries(), + dockerhub: DockerHubService.dockerhub() + }) .then(function success(data) { - var templates = data.map(function (item) { - return new TemplateViewModel(item); + data.registries.concat([data.dockerhub]); + const templates = data.templates.map(function (item) { + const res = new TemplateViewModel(item); + const registry = RegistryService.retrievePorRegistryModelFromRepositoryWithRegistries(res.RegistryModel.Registry, data.registries); + registry.Image = res.RegistryModel.Image; + res.RegistryModel = registry; + return res; }); deferred.resolve(templates); }) @@ -29,10 +38,15 @@ function TemplateServiceFactory($q, Templates, TemplateHelper, ImageHelper, Cont service.template = function(id) { var deferred = $q.defer(); - + let template; Templates.get({ id: id }).$promise .then(function success(data) { - var template = new TemplateViewModel(data); + template = new TemplateViewModel(data); + return RegistryService.retrievePorRegistryModelFromRepository(template.RegistryModel.Registry); + }) + .then((registry) => { + registry.Image = template.RegistryModel.Image; + template.RegistryModel = registry; deferred.resolve(template); }) .catch(function error(err) { @@ -52,7 +66,6 @@ function TemplateServiceFactory($q, Templates, TemplateHelper, ImageHelper, Cont return Templates.create(payload).$promise; }; - // TODO CHANGE service.update = function(model) { var payload = new TemplateUpdateRequest(model); return Templates.update(payload).$promise; diff --git a/app/portainer/views/templates/edit/templateController.js b/app/portainer/views/templates/edit/templateController.js index a887ef0b9..227507a3b 100644 --- a/app/portainer/views/templates/edit/templateController.js +++ b/app/portainer/views/templates/edit/templateController.js @@ -8,7 +8,6 @@ function ($q, $scope, $state, $transition$, TemplateService, TemplateHelper, Net actionInProgress: false }; - // TODO CHANGE $scope.update = function() { var model = $scope.template;