portainer/app/agent/services/volumeBrowserService.js

60 lines
1.8 KiB
JavaScript
Raw Normal View History

import angular from 'angular';
angular.module('portainer.agent').factory('VolumeBrowserService', VolumeBrowserServiceFactory);
function VolumeBrowserServiceFactory(StateManager, Browse, BrowseVersion1, API_ENDPOINT_ENDPOINTS, EndpointProvider, Upload) {
return {
ls,
get,
delete: deletePath,
rename,
upload,
};
function getAgentApiVersion() {
const state = StateManager.getState();
return state.endpoint.agentApiVersion;
}
function getBrowseService() {
const agentVersion = getAgentApiVersion();
return agentVersion > 1 ? Browse : BrowseVersion1;
}
function ls(volumeId, path) {
return getBrowseService().ls({ volumeID: volumeId, path, version: getAgentApiVersion() }).$promise;
}
function get(volumeId, path) {
return getBrowseService().get({ volumeID: volumeId, path, version: getAgentApiVersion() }).$promise;
}
function deletePath(volumeId, path) {
return getBrowseService().delete({ volumeID: volumeId, path, version: getAgentApiVersion() }).$promise;
}
function rename(volumeId, path, newPath) {
const payload = {
CurrentFilePath: path,
NewFilePath: newPath,
feat(host): Add host file browser with upload/download files (#2337) * feat(agent): add new host page * feat(agent): convert volume-browser to files-datatable * fix(agent): browse folders in file-datatable * feat(engine-details): replace engine view with host view * feat(engine-details): remove old panels * feat(engine-details): add basic engine-details-panel component * feat(engine-details): pass details to the different components * feat(engine-details): replace host-view with host-overview * feat(engine-details): add commaseperated filter * feat(engine-details): add host-view container component * feat(engine-details): add host-details component * feat(engine-details): build host details object * feat(engine-details): format engine version * feat(engine-details): get details for one node * feat(engine-details): pass is-agent from view * feat(engine-details): replace old node view with a new component * feat(engine-details): add swarm-node-details component * feat(engine-details): remove isSwarm binding * feat(engine-details): remove node-details and include in parent * feat(engine-details): add labels-table component * feat(engine-details): add update node service * feat(engine-details): add update label functionality * style(engine-details): remove whitespaces * feat(engine-details): remove old node page * feat(engine-details): pass is agent to host details * feat(host-details): hide missing info * feat(host-details): update node availability * style(host-details): remove obsolete event object * feat(host-details): fix labels not sending * feat(host-details): remove flags for hiding data * feat(host-details): create mock call to server for agent host info * style(host-details): fix spelling mistake in filter's name * feat(host-details): get info from agent * feat(host-details): hide engine labels when empty * feat(node-details): move labels table and save button * feat(host-info): add different urls for refresh * feat(host-details): show disk/devices info for agent * feat(host-view): add loading indicator to devices-panel * feat(host-details): add loading indicator to disks panel * feat(agent): fix browse volume * feat(agent): browse files * feat(agent): enable rename * feat(agent): download file * fix(agent): download file from root * feat(agent): delete file * style(agent): remove whitespaces * fix(agent): fix link on node browser * feat(agent): basic file uploader * feat(agent): add basic file upload * fix(volume-browser): move volume id to query params * feat(node-browser): moved uploader into browser * feat(node-browser): add upload spinner * feat(agent): browse files relative to root * feat(agent): browse standalone agent * feat(agent): move browse button from header * fix(agent): fix url of browser view * fix(agent): fix breadcrumb on title of host-browser * feat(agent): fix url on node-browser breadcrumb * refactor(agent): remove unused controller * refactor(docker): remove unused filter * refactor(docker): remove unused controllers * refactor(docker): remove isAgent binding
2018-10-11 22:32:17 +00:00
};
return getBrowseService().rename({ volumeID: volumeId, version: getAgentApiVersion() }, payload).$promise;
}
function upload(path, file, volumeId, onProgress) {
const agentVersion = StateManager.getAgentApiVersion();
if (agentVersion < 2) {
throw new Error('upload is not supported on this agent version');
}
const url = `${API_ENDPOINT_ENDPOINTS}/${EndpointProvider.endpointID()}/docker/v${agentVersion}/browse/put?volumeID=${volumeId}`;
return new Promise((resolve, reject) => {
Upload.upload({
url: url,
data: { file, Path: path },
}).then(resolve, reject, onProgress);
});
}
}