mirror of https://github.com/hashicorp/consul
155 lines
5.5 KiB
Handlebars
155 lines
5.5 KiB
Handlebars
{{!
|
|
Copyright (c) HashiCorp, Inc.
|
|
SPDX-License-Identifier: BUSL-1.1
|
|
}}
|
|
|
|
{{yield}}
|
|
<fieldset
|
|
class="policy-form"
|
|
disabled={{if (not (can "write policy" item=item)) "disabled"}}
|
|
...attributes
|
|
>
|
|
{{#yield-slot name='template'}}
|
|
{{else}}
|
|
<header>
|
|
Policy{{if allowIdentity ' or identity?' ''}}
|
|
</header>
|
|
{{#if allowIdentity}}
|
|
<p>
|
|
Identities are default policies with configurable names. They save you some time and effort you're using Consul for Connect features.
|
|
</p>
|
|
{{! this should use radio-group }}
|
|
<div role="radiogroup" class={{if item.error.Type ' has-error'}}>
|
|
{{#each templates as |template|}}
|
|
<label data-test-radiobutton={{concat 'template_' template.template}}>
|
|
<span>{{template.name}}</span>
|
|
<input type="radio" name={{concat name '[template]'}} value={{template.template}} checked={{eq item.template template.template}} onchange={{action (optional (changeset-set item 'template')) value='target.value'}}/>
|
|
</label>
|
|
{{/each}}
|
|
</div>
|
|
{{else}}
|
|
<input type="hidden" name={{concat name '[template]'}} value="" />
|
|
{{/if}}
|
|
{{/yield-slot}}
|
|
<label class="type-text{{if (and item.error.Name (not item.isPristine)) ' has-error'}}">
|
|
<span>Name</span>
|
|
<input type="text" value={{item.Name}} name="{{name}}[Name]" autofocus="autofocus" oninput={{action 'change'}} />
|
|
<em>
|
|
Maximum 128 characters. May only include letters (uppercase and/or lowercase) and/or numbers. Must be unique.
|
|
</em>
|
|
{{#if (and item.error.Name (not item.isPristine))}}
|
|
<strong>{{item.error.Name.validation}}</strong>
|
|
{{/if}}
|
|
</label>
|
|
<label for="" class="type-text" data-test-rules>
|
|
{{#if (eq item.template 'service-identity')}}
|
|
<CodeEditor
|
|
@readonly={{true}}
|
|
@name={{concat name "[Rules]"}}
|
|
@syntax="hcl"
|
|
@oninput={{action "change" (concat name "[Rules]")}}
|
|
>
|
|
<:label>
|
|
Rules <a href="{{env 'CONSUL_DOCS_URL'}}/guides/acl.html#rule-specification" rel="help noopener noreferrer" target="_blank">(HCL Format)</a>
|
|
</:label>
|
|
<:content><Consul::ServiceIdentity::Template
|
|
@nspace={{nspace}}
|
|
@partition={{partition}}
|
|
@name={{item.Name}}
|
|
/></:content>
|
|
</CodeEditor>
|
|
{{else if (eq item.template 'node-identity')}}
|
|
<CodeEditor
|
|
@readonly={{true}}
|
|
@name={{concat name "[Rules]"}}
|
|
@syntax="hcl"
|
|
@oninput={{action "change" (concat name "[Rules]")}}
|
|
>
|
|
<:label>
|
|
Rules <a href="{{env 'CONSUL_DOCS_URL'}}/guides/acl.html#rule-specification" rel="help noopener noreferrer" target="_blank">(HCL Format)</a>
|
|
</:label>
|
|
<:content><Consul::NodeIdentity::Template
|
|
@name={{item.Name}}
|
|
@partition={{partition}}
|
|
/></:content>
|
|
</CodeEditor>
|
|
{{else}}
|
|
<CodeEditor
|
|
@syntax="hcl"
|
|
@class={{if item.error.Rules "error"}}
|
|
@name={{concat name "[Rules]"}}
|
|
@value={{item.Rules}}
|
|
@onkeyup={{action "change" (concat name "[Rules]")}}
|
|
>
|
|
<:label>
|
|
Rules <a href="{{env 'CONSUL_DOCS_URL'}}/guides/acl.html#rule-specification" rel="help noopener noreferrer" target="_blank">(HCL Format)</a>
|
|
</:label>
|
|
</CodeEditor>
|
|
{{#if item.error.Rules}}
|
|
<strong>{{item.error.Rules.validation}}</strong>
|
|
{{/if}}
|
|
{{/if}}
|
|
</label>
|
|
{{#if (eq item.template 'node-identity')}}
|
|
|
|
<DataSource
|
|
@src={{uri '/*/*/*/datacenters'}}
|
|
@onchange={{action (mut datacenters) value="data"}}
|
|
/>
|
|
<label class="type-select" data-test-datacenter>
|
|
<span>Datacenter</span>
|
|
<PowerSelect
|
|
@options={{map-by 'Name' datacenters}}
|
|
@searchField="Name"
|
|
@selected={{or item.Datacenter dc}}
|
|
@searchPlaceholder="Type a datacenter name"
|
|
@onChange={{action "change" "Datacenter"}} as |Name|>
|
|
{{Name}}
|
|
</PowerSelect>
|
|
</label>
|
|
{{else}}
|
|
{{! only show Valid Datacenters for the default partition }}
|
|
{{#if (eq (or partition 'default') 'default')}}
|
|
<div class="type-toggle">
|
|
<span>Valid datacenters</span>
|
|
<label>
|
|
<input type="checkbox" name="{{name}}[isScoped]" checked={{if (not isScoped) 'checked' }} onchange={{action 'change'}} />
|
|
<span>All</span>
|
|
</label>
|
|
</div>
|
|
{{/if}}
|
|
{{#if isScoped }}
|
|
<DataSource
|
|
@src={{uri '/*/*/*/datacenters'}}
|
|
@onchange={{action (mut datacenters) value="data"}}
|
|
/>
|
|
|
|
<div class="checkbox-group" role="group">
|
|
{{#each datacenters as |dc| }}
|
|
<label class="type-checkbox">
|
|
<input type="checkbox" name="{{name}}[Datacenters]" value={{dc.Name}} checked={{if (includes dc.Name item.Datacenters) 'checked' }} onchange={{action 'change'}} />
|
|
<span>{{dc.Name}}</span>
|
|
</label>
|
|
{{/each}}
|
|
{{#each item.Datacenters as |dc| }}
|
|
{{#if (not (find-by 'Name' dc datacenters))}}
|
|
<label class="type-checkbox">
|
|
<input type="checkbox" name="{{name}}[Datacenters]" value={{dc}} checked="checked" onchange={{action 'change'}} />
|
|
<span>{{dc}}</span>
|
|
</label>
|
|
{{/if}}
|
|
{{/each}}
|
|
</div>
|
|
|
|
|
|
{{/if}}
|
|
{{/if}}
|
|
{{#if (eq item.template '') }}
|
|
<label class="type-text">
|
|
<span>Description (Optional)</span>
|
|
<textarea name="{{name}}[Description]" value={{item.Description}} oninput={{action 'change'}}></textarea>
|
|
</label>
|
|
{{/if}}
|
|
</fieldset>
|
|
|