Oss workflow target egress filter (#1590)
* chore: 🤖 add egress filters to target
This commit is contained in:
1 parent
06b96c0315
commit
a6b2acc14d
5 files changed
+163
-37
No files matched your search
@@ -379,6 +379,13 @@ target:
|
|||||||
ingress-worker: Ingress worker
|
ingress-worker: Ingress worker
|
||||||
host: Host
|
host: Host
|
||||||
network: Private network
|
network: Private network
|
||||||
|
egress_worker_filter:
|
||||||
|
title: Egress worker filter
|
||||||
|
description: Optional. Specify workers that have access to the target (such as within a private network).
|
||||||
|
filter:
|
||||||
|
title: Filter
|
||||||
|
description: Boolean expression.
|
||||||
|
update_filter: Update Filter
|
||||||
credential-store:
|
credential-store:
|
||||||
title: Credential Store
|
title: Credential Store
|
||||||
title_plural: Credential Stores
|
title_plural: Credential Stores
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
</G.RadioCard>
|
</G.RadioCard>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</Hds::Form::RadioCard::Group>
|
</Hds::Form::RadioCard::Group>
|
||||||
<br />
|
|
||||||
{{else}}
|
{{else}}
|
||||||
<InfoField
|
<InfoField
|
||||||
@value={{t (concat 'resources.target.types.' @model.type)}}
|
@value={{t (concat 'resources.target.types.' @model.type)}}
|
||||||
@@ -185,42 +185,78 @@
|
|||||||
>
|
>
|
||||||
<F.Legend>{{t 'resources.target.workers.title'}}</F.Legend>
|
<F.Legend>{{t 'resources.target.workers.title'}}</F.Legend>
|
||||||
<F.HelperText>{{t 'resources.target.workers.description'}}</F.HelperText>
|
<F.HelperText>{{t 'resources.target.workers.description'}}</F.HelperText>
|
||||||
{{#if this.showDeprecationMessage}}
|
{{#unless this.migrateWorkerFilter}}
|
||||||
<F.Control>
|
{{#if this.showDeprecationMessage}}
|
||||||
<Hds::Alert @color='highlight' @type='inline' as |A|>
|
<F.Control>
|
||||||
<A.Title>{{t
|
<Hds::Alert @color='highlight' @type='inline' as |A|>
|
||||||
'resources.target.workers.deprecation_message.title'
|
<A.Title>{{t
|
||||||
}}</A.Title>
|
'resources.target.workers.deprecation_message.title'
|
||||||
<A.Description>{{t
|
}}</A.Title>
|
||||||
'resources.target.workers.deprecation_message.description'
|
<A.Description>{{t
|
||||||
}}</A.Description>
|
'resources.target.workers.deprecation_message.description'
|
||||||
</Hds::Alert>
|
}}</A.Description>
|
||||||
</F.Control>
|
</Hds::Alert>
|
||||||
{{/if}}
|
</F.Control>
|
||||||
<F.Control>
|
<F.Control>
|
||||||
<Hds::Form::TextInput::Field
|
<Hds::Form::TextInput::Field
|
||||||
@isRequired={{false}}
|
@isRequired={{false}}
|
||||||
@isOptional={{true}}
|
@isOptional={{true}}
|
||||||
@value={{@model.worker_filter}}
|
@value={{@model.worker_filter}}
|
||||||
@isInvalid={{@model.errors.worker_filter}}
|
@isInvalid={{@model.errors.worker_filter}}
|
||||||
@type='text'
|
@type='text'
|
||||||
name='worker_filter'
|
name='worker_filter'
|
||||||
disabled={{true}}
|
disabled={{true}}
|
||||||
{{on 'input' (set-from-event @model 'worker_filter')}}
|
{{on 'input' (set-from-event @model 'worker_filter')}}
|
||||||
as |F|
|
as |F|
|
||||||
>
|
>
|
||||||
<F.Label>{{t 'form.worker_filter.label'}}</F.Label>
|
<F.Label>{{t 'form.worker_filter.label'}}</F.Label>
|
||||||
<F.HelperText>{{t 'form.worker_filter.help'}}</F.HelperText>
|
<F.HelperText>{{t 'form.worker_filter.help'}}</F.HelperText>
|
||||||
{{#if @model.errors.worker_filter}}
|
</Hds::Form::TextInput::Field>
|
||||||
<F.Error as |E|>
|
</F.Control>
|
||||||
{{#each @model.errors.worker_filter as |error|}}
|
{{/if}}
|
||||||
<E.Message>{{error.message}}</E.Message>
|
{{/unless}}
|
||||||
{{/each}}
|
|
||||||
</F.Error>
|
|
||||||
{{/if}}
|
|
||||||
</Hds::Form::TextInput::Field>
|
|
||||||
</F.Control>
|
|
||||||
</Hds::Form::Fieldset>
|
</Hds::Form::Fieldset>
|
||||||
|
|
||||||
|
{{#if this.showUpdateWorkerFilterButton}}
|
||||||
|
{{#if form.isEditable}}
|
||||||
|
<Hds::Button
|
||||||
|
class='update-filter-button'
|
||||||
|
@text={{t
|
||||||
|
'resources.target.workers.egress_worker_filter.filter.update_filter'
|
||||||
|
}}
|
||||||
|
@color='secondary'
|
||||||
|
disabled={{form.disabled}}
|
||||||
|
{{on 'click' this.migrateWorkerFilters}}
|
||||||
|
/>
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
<WorkerDiagram::SingleFilter
|
||||||
|
@egressFilter={{this.egressWorkerFilterEnabled}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Form::Target::WorkerFilter
|
||||||
|
@name='egress_worker_filter'
|
||||||
|
@type='text'
|
||||||
|
@disabled={{form.disabled}}
|
||||||
|
@value={{@model.egress_worker_filter}}
|
||||||
|
@toggleAction={{this.toggleEgressWorkerFilter}}
|
||||||
|
@checked={{this.egressWorkerFilterEnabled}}
|
||||||
|
@toggleEnabled={{this.egressWorkerFilterEnabled}}
|
||||||
|
@errors={{@model.errors.egress_worker_filter}}
|
||||||
|
@onChange={{set-from-event @model 'egress_worker_filter'}}
|
||||||
|
@isInvalid={{@model.errors.egress_worker_filter}}
|
||||||
|
as |F|
|
||||||
|
>
|
||||||
|
{{#if @model.errors.egress_worker_filter}}
|
||||||
|
<F.Error as |E|>
|
||||||
|
{{#each @model.errors.egress_worker_filter as |error|}}
|
||||||
|
<E.Message>{{error.message}}</E.Message>
|
||||||
|
{{/each}}
|
||||||
|
</F.Error>
|
||||||
|
{{/if}}
|
||||||
|
</Form::Target::WorkerFilter>
|
||||||
|
|
||||||
|
{{/if}}
|
||||||
{{else}}
|
{{else}}
|
||||||
<Hds::Form::TextInput::Field
|
<Hds::Form::TextInput::Field
|
||||||
@isRequired={{false}}
|
@isRequired={{false}}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import { loading } from 'ember-loading';
|
|||||||
import { inject as service } from '@ember/service';
|
import { inject as service } from '@ember/service';
|
||||||
import { action } from '@ember/object';
|
import { action } from '@ember/object';
|
||||||
import { notifyError } from 'core/decorators/notify';
|
import { notifyError } from 'core/decorators/notify';
|
||||||
|
import { tracked } from '@glimmer/tracking';
|
||||||
// NOTE: this is all a temporary solution till we have a resource type helper.
|
// NOTE: this is all a temporary solution till we have a resource type helper.
|
||||||
const types = [...TYPES_TARGET].reverse();
|
const types = [...TYPES_TARGET].reverse();
|
||||||
const icons = {
|
const icons = {
|
||||||
@@ -13,6 +13,11 @@ const icons = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export default class FormTargetComponent extends Component {
|
export default class FormTargetComponent extends Component {
|
||||||
|
// =properties
|
||||||
|
@tracked egressWorkerFilterEnabled =
|
||||||
|
this.args.model.egress_worker_filter?.length;
|
||||||
|
|
||||||
|
@tracked migrateWorkerFilter = false;
|
||||||
// =services
|
// =services
|
||||||
|
|
||||||
@service confirm;
|
@service confirm;
|
||||||
@@ -47,6 +52,33 @@ export default class FormTargetComponent extends Component {
|
|||||||
return !this.args.model.isNew && this.args.model.worker_filter;
|
return !this.args.model.isNew && this.args.model.worker_filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* determines when the update worker filter button should be shown
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
get showUpdateWorkerFilterButton() {
|
||||||
|
return (
|
||||||
|
!this.args.model.isNew &&
|
||||||
|
this.args.model.worker_filter &&
|
||||||
|
!this.migrateWorkerFilter
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//actions
|
||||||
|
@action
|
||||||
|
toggleEgressWorkerFilter() {
|
||||||
|
this.egressWorkerFilterEnabled = !this.egressWorkerFilterEnabled;
|
||||||
|
}
|
||||||
|
// =actions
|
||||||
|
@action
|
||||||
|
migrateWorkerFilters() {
|
||||||
|
this.migrateWorkerFilter = true;
|
||||||
|
this.egressWorkerFilterEnabled = true;
|
||||||
|
// When update is clicked, copy worker filter value into egress filter.
|
||||||
|
this.args.model.egress_worker_filter = this.args.model.worker_filter;
|
||||||
|
this.args.model.worker_filter = '';
|
||||||
|
}
|
||||||
|
|
||||||
@action
|
@action
|
||||||
@loading
|
@loading
|
||||||
@notifyError(({ message }) => message)
|
@notifyError(({ message }) => message)
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<div class='target-worker-filter'>
|
||||||
|
<Hds::Form::Toggle::Field
|
||||||
|
name='target-worker-filter-toggle'
|
||||||
|
checked={{@checked}}
|
||||||
|
disabled={{@disabled}}
|
||||||
|
{{on 'change' @toggleAction}}
|
||||||
|
as |F|
|
||||||
|
>
|
||||||
|
<F.Label>{{t (concat 'resources.target.workers.' @name '.title')}}</F.Label>
|
||||||
|
<F.HelperText>{{t
|
||||||
|
(concat 'resources.target.workers.' @name '.description')
|
||||||
|
}}</F.HelperText>
|
||||||
|
</Hds::Form::Toggle::Field>
|
||||||
|
|
||||||
|
{{#if @toggleEnabled}}
|
||||||
|
<Hds::Form::TextInput::Field
|
||||||
|
@value={{@value}}
|
||||||
|
disabled={{@disabled}}
|
||||||
|
@type={{@type}}
|
||||||
|
name={{@name}}
|
||||||
|
{{on 'input' @onChange}}
|
||||||
|
as |F|
|
||||||
|
>
|
||||||
|
<F.Label>{{t
|
||||||
|
(concat 'resources.target.workers.' @name '.filter.title')
|
||||||
|
}}</F.Label>
|
||||||
|
<F.HelperText>{{t
|
||||||
|
(concat 'resources.target.workers.' @name '.filter.description')
|
||||||
|
}}
|
||||||
|
<Hds::Link::Inline @href={{doc-url 'target.worker-filters'}}>
|
||||||
|
{{t 'actions.learn-more'}}
|
||||||
|
</Hds::Link::Inline>
|
||||||
|
</F.HelperText>
|
||||||
|
{{yield F}}
|
||||||
|
</Hds::Form::TextInput::Field>
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
@@ -493,6 +493,20 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// target worker filters
|
||||||
|
// note re Button margin: this is a temp solution,
|
||||||
|
// when we migrate buttons to HDS, we will analyze the spacing
|
||||||
|
// issue in all scenarios to come up with an efficient solution
|
||||||
|
.update-filter-button {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.target-worker-filter {
|
||||||
|
.hds-form-field--layout-vertical {
|
||||||
|
margin-left: 2.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// json secret editor
|
// json secret editor
|
||||||
.secret-editor {
|
.secret-editor {
|
||||||
// Secret Editor body and gutter colors are based on the Monokai color template
|
// Secret Editor body and gutter colors are based on the Monokai color template
|
||||||
|
|||||||
Reference in new issue
Block a user