feat: 🎸 Add support to display external name for dynamic hosts (#1664)

* feat: 🎸 Add support to display external name for dynamic hosts

✅ Closes: ICU-8795
This commit is contained in:
Zhihe Li authored and GitHub committed 2023-04-17 13:22:32 -04:00
1 parent a4395b85a6
commit 054881dc4e
8 files changed
+183 -105

No files matched your search

+11
View File
@@ -29,6 +29,12 @@ export default class HostModel extends GeneratedHostModel {
}) })
external_id; external_id;
@attr('string', {
description: 'The external facing name for the plugin based host.',
readOnly: true,
})
external_name;
// Aws specific // Aws specific
@attr({ @attr({
readOnly: true, readOnly: true,
@@ -89,4 +95,9 @@ export default class HostModel extends GeneratedHostModel {
this.plugin = { name: type }; this.plugin = { name: type };
} }
} }
// Plugin hosts can support an external name
get displayName() {
return this.name || this.external_name || this.id;
}
} }
+12 -2
View File
@@ -10,7 +10,9 @@ import generateId from '../helpers/id';
export default factory.extend({ export default factory.extend({
id: () => generateId('h_'), id: () => generateId('h_'),
name() {
if (this.type === 'static') return faker.random.words();
},
type() { type() {
return this.hostCatalog?.type || factory.attrs.type; return this.hostCatalog?.type || factory.attrs.type;
}, },
@@ -34,8 +36,16 @@ export default factory.extend({
} }
return result; return result;
}, },
// Return external fields only for plugins
external_id() { external_id() {
return faker.datatype.uuid(); if (this.type === 'plugin') {
return faker.datatype.uuid();
}
},
external_name(i) {
if (this.type === 'plugin') {
return `${this.plugin.name} provided name ${i}`;
}
}, },
// Only aws plugins have dns_names // Only aws plugins have dns_names
dns_names() { dns_names() {
@@ -11,7 +11,6 @@ import { faker } from '@faker-js/faker';
*/ */
export default Factory.extend({ export default Factory.extend({
type: 'static', type: 'static',
name: () => faker.random.words(),
description: () => faker.random.words(), description: () => faker.random.words(),
created_time: () => faker.date.recent(), created_time: () => faker.date.recent(),
updated_time: () => faker.date.recent(), updated_time: () => faker.date.recent(),
+8
View File
@@ -3,9 +3,15 @@
id: id:
label: ID label: ID
external_id:
label: External ID
help: A read-only ID given by the plugin host catalog provider
name: name:
label: Name label: Name
help: Name for identification purposes help: Name for identification purposes
external_name:
label: External Name
help: A read-only name given by the plugin host catalog provider
description: description:
label: Description label: Description
help: Description for identification purposes help: Description for identification purposes
@@ -153,10 +159,12 @@ disable_credential_rotation:
help: Azure host catalogs do not yet support credential rotation. help: Azure host catalogs do not yet support credential rotation.
dns_names: dns_names:
label: Latest DNS Names label: Latest DNS Names
help: Read-only DNS names given by the plugin host catalog provider
host: host:
label: Host label: Host
ip_addresses: ip_addresses:
label: Latest IP Addresses label: Latest IP Addresses
help: Read-only public and private IP addresses given by the plugin host catalog provider
sync-interval: sync-interval:
label: Sync Interval label: Sync Interval
help: Optional. Number of seconds between the time Boundary syncs hosts in this set. help: Optional. Number of seconds between the time Boundary syncs hosts in this set.
@@ -149,6 +149,7 @@ host-set:
host: host:
title: Host title: Host
title_plural: Hosts title_plural: Hosts
no_name_title: Unnamed Host
description: A host is a resource that may be accessed by a Boundary target. description: A host is a resource that may be accessed by a Boundary target.
messages: messages:
welcome: welcome:
+79 -54
View File
@@ -11,51 +11,70 @@
as |form| as |form|
> >
<form.input <Hds::Form::TextInput::Field
@value={{@model.type}} @value={{@model.type}}
@label={{t 'form.type.label'}} name='type'
readonly={{true}} disabled={{true}}
@disabled={{true}} as |F|
/>
<form.input
@name='name'
@type='name'
@value={{@model.name}}
@label={{t 'form.name.label'}}
@error={{@model.errors.name}}
@helperText={{t 'form.name.help'}}
readonly={{false}}
as |field|
> >
{{#if @model.errors.name}} <F.Label>{{t 'form.type.label'}}</F.Label>
<field.errors as |errors|> </Hds::Form::TextInput::Field>
{{#each @model.errors.name as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
<form.textarea {{#if @model.external_name}}
@name='description' <Hds::Form::TextInput::Field
@type='description' @value={{@model.external_name}}
@isInvalid={{@model.errors.external_name}}
name='external_name'
disabled={{true}}
as |F|
>
<F.Label>{{t 'form.external_name.label'}}</F.Label>
<F.HelperText>{{t 'form.external_name.help'}}</F.HelperText>
{{#if @model.errors.external_name}}
<F.Error as |E|>
{{#each @model.errors.external_name as |error|}}
<E.Message>{{error.message}}</E.Message>
{{/each}}
</F.Error>
{{/if}}
</Hds::Form::TextInput::Field>
{{/if}}
<Hds::Form::TextInput::Field
@value={{@model.external_id}}
@isInvalid={{@model.errors.external_id}}
name='external_id'
disabled={{true}}
as |F|
>
<F.Label>{{t 'form.external_id.label'}}</F.Label>
<F.HelperText>{{t 'form.external_id.help'}}</F.HelperText>
{{#if @model.errors.external_id}}
<F.Error as |E|>
{{#each @model.errors.external_id as |error|}}
<E.Message>{{error.message}}</E.Message>
{{/each}}
</F.Error>
{{/if}}
</Hds::Form::TextInput::Field>
<Hds::Form::Textarea::Field
@value={{@model.description}} @value={{@model.description}}
@label={{t 'form.description.label'}} @isInvalid={{@model.errors.description}}
@error={{@model.errors.description}} name='description'
@helperText={{t 'form.description.help'}} disabled={{true}}
disabled={{@model.isSaving}} as |F|
readonly={{false}}
as |field|
> >
<F.Label>{{t 'form.description.label'}}</F.Label>
<F.HelperText>{{t 'form.description.help'}}</F.HelperText>
{{#if @model.errors.description}} {{#if @model.errors.description}}
<field.errors as |errors|> <F.Error as |E|>
{{#each @model.errors.description as |error|}} {{#each @model.errors.description as |error|}}
<errors.message>{{error.message}}</errors.message> <E.Message>{{error.message}}</E.Message>
{{/each}} {{/each}}
</field.errors> </F.Error>
{{/if}} {{/if}}
</form.textarea> </Hds::Form::Textarea::Field>
<InfoField <InfoField
@value={{t 'descriptions.provider'}} @value={{t 'descriptions.provider'}}
@@ -69,27 +88,33 @@
</F.HelperText> </F.HelperText>
</InfoField> </InfoField>
<form.fieldset> <Hds::Form::Fieldset as |F|>
<:title>{{t 'form.ip_addresses.label'}}</:title> <F.Legend>{{t 'form.ip_addresses.label'}}</F.Legend>
<:body> <F.HelperText>{{t 'form.ip_addresses.help'}} </F.HelperText>
{{#each @model.ip_addresses as |ip_address|}} {{#each @model.ip_addresses as |ip_address|}}
<form.input <F.Control>
<Hds::Form::TextInput::Base
@value={{ip_address}} @value={{ip_address}}
readonly={{true}} disabled={{true}}
@disabled={{true}} @width='unset'
/> />
{{/each}} </F.Control>
</:body> {{/each}}
</form.fieldset> </Hds::Form::Fieldset>
<form.fieldset> <Hds::Form::Fieldset as |F|>
<:title>{{t 'form.dns_names.label'}}</:title> <F.Legend>{{t 'form.dns_names.label'}}</F.Legend>
<:body> <F.HelperText>{{t 'form.dns_names.help'}} </F.HelperText>
{{#each @model.dns_names as |dns_name|}} {{#each @model.dns_names as |dns_name|}}
<form.input @value={{dns_name}} readonly={{true}} @disabled={{true}} /> <F.Control>
{{/each}} <Hds::Form::TextInput::Base
</:body> @value={{dns_name}}
</form.fieldset> disabled={{true}}
@width='unset'
/>
</F.Control>
{{/each}}
</Hds::Form::Fieldset>
{{#if (can 'save model' @model)}} {{#if (can 'save model' @model)}}
<form.actions <form.actions
@@ -11,51 +11,70 @@
as |form| as |form|
> >
<form.input <Hds::Form::TextInput::Field
@value={{@model.type}} @value={{@model.type}}
@label={{t 'form.type.label'}} name='type'
readonly={{true}} disabled={{true}}
@disabled={{true}} as |F|
/>
<form.input
@name='name'
@type='name'
@value={{@model.name}}
@label={{t 'form.name.label'}}
@error={{@model.errors.name}}
@helperText={{t 'form.name.help'}}
readonly={{false}}
as |field|
> >
{{#if @model.errors.name}} <F.Label>{{t 'form.type.label'}}</F.Label>
<field.errors as |errors|> </Hds::Form::TextInput::Field>
{{#each @model.errors.name as |error|}}
<errors.message>{{error.message}}</errors.message>
{{/each}}
</field.errors>
{{/if}}
</form.input>
<form.textarea {{#if @model.external_name}}
@name='description' <Hds::Form::TextInput::Field
@type='description' @value={{@model.external_name}}
@isInvalid={{@model.errors.external_name}}
name='external_name'
disabled={{true}}
as |F|
>
<F.Label>{{t 'form.external_name.label'}}</F.Label>
<F.HelperText>{{t 'form.external_name.help'}}</F.HelperText>
{{#if @model.errors.external_name}}
<F.Error as |E|>
{{#each @model.errors.external_name as |error|}}
<E.Message>{{error.message}}</E.Message>
{{/each}}
</F.Error>
{{/if}}
</Hds::Form::TextInput::Field>
{{/if}}
<Hds::Form::TextInput::Field
@value={{@model.external_id}}
@isInvalid={{@model.errors.external_id}}
name='external_id'
disabled={{true}}
as |F|
>
<F.Label>{{t 'form.external_id.label'}}</F.Label>
<F.HelperText>{{t 'form.external_id.help'}}</F.HelperText>
{{#if @model.errors.external_id}}
<F.Error as |E|>
{{#each @model.errors.external_id as |error|}}
<E.Message>{{error.message}}</E.Message>
{{/each}}
</F.Error>
{{/if}}
</Hds::Form::TextInput::Field>
<Hds::Form::Textarea::Field
@value={{@model.description}} @value={{@model.description}}
@label={{t 'form.description.label'}} @isInvalid={{@model.errors.description}}
@error={{@model.errors.description}} name='description'
@helperText={{t 'form.description.help'}} disabled={{true}}
disabled={{@model.isSaving}} as |F|
readonly={{false}}
as |field|
> >
<F.Label>{{t 'form.description.label'}}</F.Label>
<F.HelperText>{{t 'form.description.help'}}</F.HelperText>
{{#if @model.errors.description}} {{#if @model.errors.description}}
<field.errors as |errors|> <F.Error as |E|>
{{#each @model.errors.description as |error|}} {{#each @model.errors.description as |error|}}
<errors.message>{{error.message}}</errors.message> <E.Message>{{error.message}}</E.Message>
{{/each}} {{/each}}
</field.errors> </F.Error>
{{/if}} {{/if}}
</form.textarea> </Hds::Form::Textarea::Field>
<InfoField <InfoField
@value={{t 'descriptions.provider'}} @value={{t 'descriptions.provider'}}
@@ -68,19 +87,20 @@
{{t 'resources.host-catalog.types.azure'}} {{t 'resources.host-catalog.types.azure'}}
</F.HelperText> </F.HelperText>
</InfoField> </InfoField>
<form.fieldset>
<:title>{{t 'form.ip_addresses.label'}}</:title>
<:body>
{{#each @model.ip_addresses as |ip_address|}}
<form.input <Hds::Form::Fieldset as |F|>
<F.Legend>{{t 'form.ip_addresses.label'}}</F.Legend>
<F.HelperText>{{t 'form.ip_addresses.help'}} </F.HelperText>
{{#each @model.ip_addresses as |ip_address|}}
<F.Control>
<Hds::Form::TextInput::Base
@value={{ip_address}} @value={{ip_address}}
readonly={{true}} disabled={{true}}
@disabled={{true}} @width='unset'
/> />
{{/each}} </F.Control>
</:body> {{/each}}
</form.fieldset> </Hds::Form::Fieldset>
{{#if (can 'save model' @model)}} {{#if (can 'save model' @model)}}
<form.actions <form.actions
@@ -31,10 +31,14 @@
<Rose::Table as |table|> <Rose::Table as |table|>
<table.header as |header|> <table.header as |header|>
<header.row as |row|> <header.row as |row|>
<row.headerCell>{{t 'form.name.label'}}</row.headerCell> {{#if @model.hostSet.isStatic}}
<row.headerCell>{{t 'form.name.label'}}</row.headerCell>
{{else}}
<row.headerCell>{{t 'form.external_name.label'}}</row.headerCell>
{{/if}}
<row.headerCell>{{t 'form.type.label'}}</row.headerCell> <row.headerCell>{{t 'form.type.label'}}</row.headerCell>
<row.headerCell>{{t 'form.id.label'}}</row.headerCell> <row.headerCell>{{t 'form.id.label'}}</row.headerCell>
{{#if @model.isStatic}} {{#if @model.hostSet.isStatic}}
<row.headerCell>{{t 'titles.actions'}}</row.headerCell> <row.headerCell>{{t 'titles.actions'}}</row.headerCell>
{{/if}} {{/if}}
</header.row> </header.row>