vault/ui/lib/kubernetes/addon/components/page/role/create-and-edit.hbs
Jordan Reimer b0ce08bb4b
Button Conversion Part 1 (#23633)
* adds codemod for transforming button element to hds component

* runs button codemod on kmip and kubernetes enginges

* manully updates kuberenetes roles button

* runs button codemod on ldap engine

* manually updates remaining ldap buttons

* updates button codemod to check if all child nodes were included in text arg construction

* runs button codemod on kv engine

* adds comment for future kv button update

* Update ui/lib/kv/addon/components/page/secret/details.hbs

Co-authored-by: claire bontempo <68122737+hellobontempo@users.noreply.github.com>

* updates remaining instance of toolbar-link class on button and adds class name transform to button codemod

* adds display inline override to hds button

* updates hds button display override to inline-flex

* updates ldap account check in button to tertiary

* updates ldap library check out icon to tertiary and adds icon

---------

Co-authored-by: claire bontempo <68122737+hellobontempo@users.noreply.github.com>
2023-10-13 09:38:57 -06:00

157 lines
5.1 KiB
Handlebars

{{!
Copyright (c) HashiCorp, Inc.
SPDX-License-Identifier: BUSL-1.1
~}}
<PageHeader as |p|>
<p.top>
<Page::Breadcrumbs @breadcrumbs={{@breadcrumbs}} />
</p.top>
<p.levelLeft>
<h1 class="title is-3">
{{if @model.isNew "Create Role" "Edit Role"}}
</h1>
</p.levelLeft>
</PageHeader>
<hr class="is-marginless has-background-gray-200" />
<p class="has-top-margin-m">
A role in Vault dictates what will be generated for Kubernetes and what kind of rules will be used to do so. It is not a
Kubernetes role.
</p>
<div class="is-flex-row has-top-margin-s">
{{#each this.generationPreferences as |pref|}}
<RadioCard
@title={{pref.title}}
@description={{pref.description}}
@icon="token"
@value={{pref.value}}
@groupValue={{@model.generationPreference}}
@onChange={{this.changePreference}}
data-test-radio-card={{pref.value}}
/>
{{/each}}
</div>
<div class="has-top-margin-xl has-bottom-margin-l">
<h2 class="title is-4">
Role options
</h2>
<hr class="is-marginless has-background-gray-200" />
</div>
{{#if @model.generationPreference}}
<form id="role" {{on "submit" this.onSave}} data-test-policy-form>
{{#if this.errorBanner}}
<MessageError @errorMessage={{this.errorBanner}} class="has-top-margin-s" />
{{/if}}
{{#each @model.filteredFormFields as |field|}}
<FormField @attr={{field}} @model={{@model}} @modelValidations={{this.modelValidations}} />
{{/each}}
<div class="has-bottom-margin-s">
<ToggleButton
data-test-field="annotations"
@isOpen={{this.showAnnotations}}
@openLabel="Hide annotations and labels"
@closedLabel="Annotations and labels"
@onClick={{fn (mut this.showAnnotations)}}
/>
{{#if this.showAnnotations}}
<div class="box" data-test-annotations>
{{#each this.extraFields as |field|}}
<div class={{if (eq field.type "labels") "has-top-margin-xl"}}>
<h2 class="title is-4">Extra {{field.type}}</h2>
<p>
{{field.description}}
See
<ExternalLink @href="https://kubernetes.io/docs/concepts/overview/working-with-objects/{{field.type}}/">
Kubernetes
{{singularize field.type}}
documentation here
</ExternalLink>.
</p>
<KvObjectEditor
class="has-top-margin-m"
data-test-kv={{field.type}}
@value={{get @model field.key}}
@onChange={{fn (mut (get @model field.key))}}
/>
</div>
<hr />
{{/each}}
</div>
{{/if}}
</div>
{{#if (eq @model.generationPreference "full")}}
<div class="has-top-margin-m has-bottom-margin-l" data-test-generated-role-rules>
<h2 class="title is-4">
Generated role rules
</h2>
<FormFieldLabel
for="templates"
@label="Role rules template"
@subText="Start with a template for role rules based on your use case"
/>
<div class="select is-fullwidth">
<select id="templates" data-test-select-template {{on "change" this.selectTemplate}}>
{{#each this.roleRulesTemplates as |template|}}
<option selected={{eq this.selectedTemplateId template.id}} value={{template.id}}>
{{template.label}}
</option>
{{/each}}
</select>
</div>
{{#let (find-by "id" this.selectedTemplateId this.roleRulesTemplates) as |template|}}
<JsonEditor
class="has-top-margin-l"
data-test-rules
@title="Role rules"
@value={{template.rules}}
@mode="ruby"
@valueUpdated={{fn (mut template.rules)}}
@helpText={{sanitized-html this.roleRulesHelpText}}
>
<Hds::Button
@icon="reload"
@text="Restore example"
@color="secondary"
class="toolbar-button"
{{on "click" this.resetRoleRules}}
data-test-restore-example
/>
</JsonEditor>
{{/let}}
</div>
{{/if}}
{{#if this.invalidFormAlert}}
<div class="control" data-test-invalid-form-alert>
<AlertInline @type="danger" @paddingTop={{true}} @message={{this.invalidFormAlert}} @mimicRefresh={{true}} />
</div>
{{/if}}
</form>
{{else}}
<EmptyState
class="is-shadowless"
@title="Choose an option above"
@message="To configure a Vault role, choose what should be generated in Kubernetes by Vault."
/>
{{/if}}
<hr class="is-marginless has-background-gray-200" />
<div class="has-top-margin-l has-bottom-margin-s">
<Hds::Button
@text="Save"
@icon={{if this.save.isRunning "loading"}}
type="submit"
form="role"
disabled={{or (not @model.generationPreference) this.save.isRunning}}
data-test-save
/>
<Hds::Button @text="Back" @color="secondary" class="has-left-margin-s" data-test-cancel {{on "click" this.cancel}} />
</div>