mirror of https://github.com/portainer/portainer
103 lines
3.8 KiB
JavaScript
103 lines
3.8 KiB
JavaScript
import angular from 'angular';
|
|
import PortainerError from 'Portainer/error';
|
|
|
|
angular.module('portainer.kubernetes').factory('HelmService', HelmService);
|
|
|
|
/* @ngInject */
|
|
export function HelmService(HelmFactory) {
|
|
return {
|
|
search,
|
|
values,
|
|
getHelmRepositories,
|
|
addHelmRepository,
|
|
install,
|
|
uninstall,
|
|
listReleases,
|
|
};
|
|
|
|
/**
|
|
* @description: Searches for all helm charts in a helm repo
|
|
* @param {string} repo - repo url to search charts for
|
|
* @returns {Promise} - Resolves with `index.yaml` of helm charts for a repo
|
|
* @throws {PortainerError} - Rejects with error if searching for the `index.yaml` fails
|
|
*/
|
|
async function search(repo) {
|
|
try {
|
|
return await HelmFactory.templates({ repo }).$promise;
|
|
} catch (err) {
|
|
throw new PortainerError('Unable to retrieve helm charts', err);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @description: Show values helm of a helm chart, this basically runs `helm show values`
|
|
* @param {string} repo - repo url to search charts values for
|
|
* @param {string} chart - chart within the repo to retrieve default values
|
|
* @returns {Promise} - Resolves with `values.yaml` of helm chart values for a repo
|
|
* @throws {PortainerError} - Rejects with error if helm show fails
|
|
*/
|
|
async function values(repo, chart) {
|
|
try {
|
|
return await HelmFactory.show({ repo, chart, type: 'values' }).$promise;
|
|
} catch (err) {
|
|
throw new PortainerError('Unable to retrieve values from chart', err);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @description: Show values helm of a helm chart, this basically runs `helm show values`
|
|
* @returns {Promise} - Resolves with an object containing list of user helm repos and default/global settings helm repo
|
|
* @throws {PortainerError} - Rejects with error if helm show fails
|
|
*/
|
|
async function getHelmRepositories(endpointId) {
|
|
return await HelmFactory.getHelmRepositories({ endpointId }).$promise;
|
|
}
|
|
|
|
/**
|
|
* @description: Adds a helm repo for the calling user
|
|
* @param {Object} payload - helm repo url to add for the user
|
|
* @returns {Promise} - Resolves with `values.yaml` of helm chart values for a repo
|
|
* @throws {PortainerError} - Rejects with error if helm show fails
|
|
*/
|
|
async function addHelmRepository(endpointId, payload) {
|
|
return await HelmFactory.addHelmRepository({ endpointId }, payload).$promise;
|
|
}
|
|
|
|
/**
|
|
* @description: Installs a helm chart, this basically runs `helm install`
|
|
* @returns {Promise} - Resolves with `values.yaml` of helm chart values for a repo
|
|
* @throws {PortainerError} - Rejects with error if helm show fails
|
|
*/
|
|
async function install(endpointId, payload) {
|
|
return await HelmFactory.install({ endpointId }, payload).$promise;
|
|
}
|
|
|
|
/**
|
|
* @description: Uninstall a helm chart, this basically runs `helm uninstall`
|
|
* @param {Object} options - Options object, release `Name` is the only required option
|
|
* @throws {PortainerError} - Rejects with error if helm show fails
|
|
*/
|
|
async function uninstall(endpointId, { Name, ResourcePool }) {
|
|
try {
|
|
await HelmFactory.uninstall({ endpointId, release: Name, namespace: ResourcePool }).$promise;
|
|
} catch (err) {
|
|
throw new PortainerError('Unable to delete release', err);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @description: List all helm releases based on passed in options, this basically runs `helm list`
|
|
* @param {Object} options - Supported CLI flags to pass to Helm (binary) - flags to `helm list`
|
|
* @returns {Promise} - Resolves with list of helm releases
|
|
* @throws {PortainerError} - Rejects with error if helm list fails
|
|
*/
|
|
async function listReleases(endpointId, { namespace, selector, filter, output }) {
|
|
try {
|
|
const releases = await HelmFactory.list({ endpointId, selector, namespace, filter, output }).$promise;
|
|
return releases;
|
|
} catch (err) {
|
|
throw new PortainerError('Unable to retrieve release list', err);
|
|
}
|
|
}
|
|
}
|