mirror of https://github.com/portainer/portainer
74 lines
1.9 KiB
JavaScript
74 lines
1.9 KiB
JavaScript
import { NodeViewModel } from '../models/node';
|
|
|
|
angular.module('portainer.docker').factory('NodeService', [
|
|
'$q',
|
|
'Node',
|
|
function NodeServiceFactory($q, Node) {
|
|
'use strict';
|
|
var service = {};
|
|
|
|
service.nodes = nodes;
|
|
service.node = node;
|
|
service.updateNode = updateNode;
|
|
service.getActiveManager = getActiveManager;
|
|
|
|
function node(id) {
|
|
var deferred = $q.defer();
|
|
Node.get({ id: id })
|
|
.$promise.then(function onNodeLoaded(rawNode) {
|
|
var node = new NodeViewModel(rawNode);
|
|
return deferred.resolve(node);
|
|
})
|
|
.catch(function onFailed(err) {
|
|
deferred.reject({ msg: 'Unable to retrieve node', err: err });
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
function nodes() {
|
|
var deferred = $q.defer();
|
|
|
|
Node.query({})
|
|
.$promise.then(function success(data) {
|
|
var nodes = data.map(function (item) {
|
|
return new NodeViewModel(item);
|
|
});
|
|
deferred.resolve(nodes);
|
|
})
|
|
.catch(function error(err) {
|
|
deferred.reject({ msg: 'Unable to retrieve nodes', err: err });
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
function updateNode(node) {
|
|
return Node.update({ id: node.Id, version: node.Version }, node).$promise;
|
|
}
|
|
|
|
function getActiveManager() {
|
|
var deferred = $q.defer();
|
|
|
|
service
|
|
.nodes()
|
|
.then(function success(data) {
|
|
for (var i = 0; i < data.length; ++i) {
|
|
var node = data[i];
|
|
if (node.Role === 'manager' && node.Availability === 'active' && node.Status === 'ready' && node.Addr !== '0.0.0.0') {
|
|
deferred.resolve(node);
|
|
break;
|
|
}
|
|
}
|
|
})
|
|
.catch(function error(err) {
|
|
deferred.reject({ msg: 'Unable to retrieve nodes', err: err });
|
|
});
|
|
|
|
return deferred.promise;
|
|
}
|
|
|
|
return service;
|
|
},
|
|
]);
|