mirror of
https://github.com/portainer/portainer.git
synced 2025-07-19 13:29:41 +02:00
* fix(edge): filtering of edge devices [EE-3210] fixes [EE-3210] changes: - replaces `edgeDeviceFilter` with two filters: - `edgeDevice` - `edgeDeviceUntrusted` these filters will only apply to the edge endpoints in the query (so it's possible to get both regular endpoints and edge devices). if `edgeDevice` is true, will filter out edge agents which are not an edge device. false, will filter out edge devices `edgeDeviceUntrusted` applies only when `edgeDevice` is true. then false (default) will hide the untrusted edge devices, true will show only untrusted edge devices. fix(edge/job-create): retrieve only trusted endpoints + fix endpoint selector pagination limits onChange fix(endpoint-groups): remove listing of untrusted edge envs (aka in waiting room) refactor(endpoints): move filter to another function feat(endpoints): separate edge filters refactor(environments): change getEnv api refactor(endpoints): use single getEnv feat(groups): show error when failed loading envs style(endpoints): remove unused endpointsByGroup * chore(deps): update go to 1.18 * fix(endpoint): filter out untrusted by default * fix(edge): show correct endpoints * style(endpoints): fix typo * fix(endpoints): fix swagger * fix(admin): use new getEnv function Co-authored-by: LP B <xAt0mZ@users.noreply.github.com>
91 lines
2.5 KiB
JavaScript
91 lines
2.5 KiB
JavaScript
import _ from 'lodash-es';
|
|
import { confirmAsync } from '@/portainer/services/modal.service/confirm';
|
|
import { EdgeTypes } from '@/portainer/environments/types';
|
|
import { getEnvironments } from '@/portainer/environments/environment.service';
|
|
|
|
export class EdgeGroupFormController {
|
|
/* @ngInject */
|
|
constructor($async, $scope) {
|
|
this.$async = $async;
|
|
this.$scope = $scope;
|
|
|
|
this.endpoints = {
|
|
state: {
|
|
limit: '10',
|
|
filter: '',
|
|
pageNumber: 1,
|
|
totalCount: 0,
|
|
},
|
|
value: null,
|
|
};
|
|
|
|
this.associateEndpoint = this.associateEndpoint.bind(this);
|
|
this.dissociateEndpoint = this.dissociateEndpoint.bind(this);
|
|
this.getDynamicEndpointsAsync = this.getDynamicEndpointsAsync.bind(this);
|
|
this.getDynamicEndpoints = this.getDynamicEndpoints.bind(this);
|
|
this.onChangeTags = this.onChangeTags.bind(this);
|
|
|
|
$scope.$watch(
|
|
() => this.model,
|
|
() => {
|
|
if (this.model.Dynamic) {
|
|
this.getDynamicEndpoints();
|
|
}
|
|
},
|
|
true
|
|
);
|
|
}
|
|
|
|
onChangeTags(value) {
|
|
return this.$scope.$evalAsync(() => {
|
|
this.model.TagIds = value;
|
|
});
|
|
}
|
|
|
|
associateEndpoint(endpoint) {
|
|
if (!_.includes(this.model.Endpoints, endpoint.Id)) {
|
|
this.model.Endpoints = [...this.model.Endpoints, endpoint.Id];
|
|
}
|
|
}
|
|
|
|
dissociateEndpoint(endpoint) {
|
|
return this.$async(async () => {
|
|
const confirmed = await confirmAsync({
|
|
title: 'Confirm action',
|
|
message: 'Removing the environment from this group will remove its corresponding edge stacks',
|
|
buttons: {
|
|
cancel: {
|
|
label: 'Cancel',
|
|
className: 'btn-default',
|
|
},
|
|
confirm: {
|
|
label: 'Confirm',
|
|
className: 'btn-primary',
|
|
},
|
|
},
|
|
});
|
|
|
|
if (!confirmed) {
|
|
return;
|
|
}
|
|
|
|
this.model.Endpoints = _.filter(this.model.Endpoints, (id) => id !== endpoint.Id);
|
|
});
|
|
}
|
|
|
|
getDynamicEndpoints() {
|
|
return this.$async(this.getDynamicEndpointsAsync);
|
|
}
|
|
|
|
async getDynamicEndpointsAsync() {
|
|
const { pageNumber, limit, search } = this.endpoints.state;
|
|
const start = (pageNumber - 1) * limit + 1;
|
|
const query = { search, types: EdgeTypes, tagIds: this.model.TagIds, tagsPartialMatch: this.model.PartialMatch };
|
|
|
|
const response = await getEnvironments({ start, limit, query });
|
|
|
|
const totalCount = parseInt(response.totalCount, 10);
|
|
this.endpoints.value = response.value;
|
|
this.endpoints.state.totalCount = totalCount;
|
|
}
|
|
}
|