diff --git a/.changelog/12354.txt b/.changelog/12354.txt
new file mode 100644
index 0000000000..a81bb29bce
--- /dev/null
+++ b/.changelog/12354.txt
@@ -0,0 +1,3 @@
+```release-note:improvement
+ui: Include details on ACL policy dispositions required for unauthorized views
+```
diff --git a/ui/packages/consul-lock-sessions/app/templates/dc/nodes/show/sessions.hbs b/ui/packages/consul-lock-sessions/app/templates/dc/nodes/show/sessions.hbs
index b868871f78..b6cb1107a7 100644
--- a/ui/packages/consul-lock-sessions/app/templates/dc/nodes/show/sessions.hbs
+++ b/ui/packages/consul-lock-sessions/app/templates/dc/nodes/show/sessions.hbs
@@ -70,17 +70,18 @@ as |route|>
- Consul provides a session mechanism which can be used to build distributed locks. Sessions act as a binding layer between nodes, health checks, and key/value data. There are currently no lock sessions present, or you may not have permission to view lock sessions.
-
- {{#if (gt items.length 0)}}
- No auth methods where found matching that search, or you may not have access to view the auth methods you are searching for.
- {{else}}
- There don't seem to be any auth methods, or you may not have access to view auth methods yet.
- {{/if}}
-
- Binding rules allow an operator to express a systematic way of automatically linking roles and service identities to newly created tokens without operator intervention.
-
- A set of rules that can control which namespace tokens created via this auth method will be created within. Unlike binding rules, the first matching namespace rule wins.
-
- {{#if (gt items.length 0)}}
- No policies where found matching that search, or you may not have access to view the policies you are searching for.
- {{else}}
- There don't seem to be any policies, or you may not have access to view policies yet.
- {{/if}}
-
- {{#if (gt items.length 0)}}
- No roles where found matching that search, or you may not have access to view the roles you are searching for.
- {{else}}
- There don't seem to be any roles, or you may not have access to view roles yet.
- {{/if}}
-
- {{#if (gt items.length 0)}}
- No tokens where found matching that search, or you may not have access to view the tokens you are searching for.
- {{else}}
- There don't seem to be any tokens, or you may not have access to view tokens yet.
- {{/if}}
-
- {{#if (gt items.length 0)}}
- No intentions where found matching that search, or you may not have access to view the intentions you are searching for.
- {{else}}
- There don't seem to be any intentions, or you may not have access to view intentions yet.
- {{/if}}
-
- {{#if (gt items.length 0)}}
- No K/V pairs where found matching that search, or you may not have access to view the K/V pairs you are searching for.
- {{else}}
- You don't have any K/V pairs, or you may not have access to view K/V pairs yet.
- {{/if}}
-
- There don't seem to be any registered nodes, or you may not have access to view nodes yet.
-
- This node has no service instances{{#if (gt items.length 0)}} matching that search{{/if}}.
-
- {{#if (gt items.length 0)}}
- No services where found matching that search, or you may not have access to view the services you are searching for.
- {{else}}
- There don't seem to be any registered services, or you may not have access to view services yet.
- {{/if}}
-
- Welcome to Lock Sessions
-
-
+ {{t 'routes.dc.nodes.show.sessions.empty.header'
+ items=items.length
+ }}
+
+
- {{#if (gt items.length 0)}}
- No auth methods found
- {{else}}
- Welcome to Auth Methods
- {{/if}}
+ {{t 'routes.dc.auth-methods.index.empty.header'
+ items=items.length
+ }}
No binding rules
+
+ {{t 'routes.dc.acls.auth-methods.show.binding-rules.index.empty.header'}}
+
No namespace rules
+
+ {{t 'routes.dc.acls.auth-methods.show.nspace-rules.index.empty.header'}}
+
- {{#if (gt items.length 0)}}
- No policies found
- {{else}}
- Welcome to Policies
- {{/if}}
+ {{t 'routes.dc.acls.policies.index.empty.header'
+ items=items.length
+ }}
- {{#if (gt items.length 0)}}
- No roles found
- {{else}}
- Welcome to Roles
- {{/if}}
+ {{t 'routes.dc.acls.roles.index.empty.header'
+ items=items.length
+ }}
- {{#if (gt items.length 0)}}
- No tokens found
- {{else}}
- Welcome to ACL Tokens
- {{/if}}
+ {{t 'routes.dc.acls.tokens.index.empty.header'
+ items=items.length
+ }}
- {{#if (gt items.length 0)}}
- No intentions found
- {{else}}
- Welcome to Intentions
- {{/if}}
+ {{t 'routes.dc.intentions.index.empty.header'
+ items=items.length
+ }}
- {{#if (gt items.length 0)}}
- No K/V pairs found
- {{else}}
- Welcome to Key/Value
- {{/if}}
+ {{t 'routes.dc.kv.index.empty.header'
+ items=items.length
+ }}
- {{#if (gt items.length 0)}}
- No nodes found
- {{else}}
- Welcome to Nodes
- {{/if}}
+ {{t 'routes.dc.nodes.index.empty.header'
+ items=items.length
+ }}
- {{#if (gt items.length 0)}}
- No services found
- {{else}}
- Welcome to Services
- {{/if}}
+ {{t 'routes.dc.services.index.empty.header'
+ items=items.length
+ }}
- The following list shows individual HTTP paths exposed through Envoy for external services like Prometheus. Read more about this in our
- There are no individual HTTP paths exposed through Envoy for external services like Prometheus. Read more about this in our
- {{t "routes.dc.services.instance.upstreams.tproxy-mode.body"}} -
+ {{t "routes.dc.services.instance.upstreams.tproxy-mode.body" + htmlSafe=true + }}
-
- This service has no upstreams{{#if (gt items.length 0)}} matching that search{{/if}}. -
+ {{t "routes.dc.services.instance.upstreams.empty" + items=items.length + htmlSafe=true + }}- There are no instances{{#if (gt items.length 0)}} matching that search{{/if}}. -
+ {{t "routes.dc.services.show.instances.empty" + items=items.length + htmlSafe=true + }}- {{#if (gt items.length 0)}} - No intentions where found matching that search, or you may not have access to view the intentions you are searching for. - {{else}} - There don't seem to be any intentions, or you may not have access to view intentions yet. - {{/if}} -
+ {{t 'routes.dc.services.intentions.index.empty.body' + items=items.length + htmlSafe=true + }}- The following services may receive traffic from external services through this gateway. Learn more about configuring gateways in our - step-by-step guide. -
- There are no linked services{{#if (gt items.length 0)}} matching that search{{/if}}. -
+ {{t "routes.dc.services.show.services.empty" + items=items.length + htmlSafe=true + }}- There are no tags. -
+ {{t 'routes.dc.services.show.tags.empty.body' + htmlSafe=true + }}- There are no upstreams{{#if (gt items.length 0)}} matching that search{{/if}}. -
+ {{t "routes.dc.services.show.upstreams.empty" + items=items.length + htmlSafe=true + }}
+ {items, select,
+ 0 {There don't seem to be any registered Nodes in this Consul cluster}
+ other {No Nodes were found matching your search}
+ }, or you may not have service:read
and node:read
permissions access to this view.
+
+ Consul provides a session mechanism which can be used to build distributed locks. Sessions act as a binding layer between Nodes, Health Checks, and Key/Value data. There are currently no Lock Sessions present, or you may not have key:read
or session:read
permissions.
+
+ This Node has no Service Instances{items, select, + 0 {} + other { matching that search} + }. +
healthchecks: title: Health Checks empty: |- This node has no health checks{items, select, + This Node has no Health Checks{items, select, 0 {} other { matching that search} }. @@ -34,15 +68,65 @@ dc:
This node has a failing serf node check. The health statuses shown on this page are the statuses as they were known before the node became unreachable.
- services: - title: Service Instances - rtt: - title: Round Trip Time - sessions: - title: Lock Sessions - metadata: - title: Metadata services: + index: + empty: + header: | + {items, select, + 0 {Welcome to Services} + other {No Services found} + } + body: | +
+ {items, select,
+ 0 {There don't seem to be any registered services in this Consul cluster}
+ other {No Services were found matching your search}
+ }, or you may not have service:read
and node:read
access to this view. Use Terraform, Kubernetes CRDs, Vault, or the Consul CLI to register Services.
+
+ The following list shows individual HTTP paths exposed through Envoy for external services like Prometheus. Read more about this in our documentation. +
+ + empty: + body: | ++ There are no individual HTTP paths exposed through Envoy for external services like Prometheus. Read more about this in our documentation. +
+ healthchecks: + empty: | ++ This instance has no health checks{items, select, + 0 {} + other { matching that search} + }. +
+ critical-serf-notice: + header: Failing serf check + body: | ++ This instance has a failing serf node check. The health statuses shown on this page are the statuses as they were known before the node became unreachable. +
+ upstreams: + tproxy-mode: + header: Transparent proxy mode + body: | ++ The upstreams listed on this page have been defined in a proxy registration. There may be more upstreams, though, as "transparent" mode is enabled on this proxy. +
+ footer: | + + empty: | ++ This Service Instance has no Upstreams{items, select, + 0 {} + other { matching that search} + }. +
show: topology: notices: @@ -87,30 +171,168 @@ dc: + intentions: + index: + empty: + header: | + {items, select, + 0 {Welcome to Intentions} + other {No Intentions found} + } + body: | +
+ {items, select,
+ 0 {There don't seem to be any Intentions in this Consul cluster}
+ other {No Intentions were found matching your search}
+ }, or you may not have intentions:read
permissions access to this view.
+
+ This Service has no Instances{items, select, + 0 {} + other { matching that search} + }. +
+ services: + intro: | ++ The following services may receive traffic from external services through this gateway. Learn more about configuring gateways in our step-by-step guide. +
+ empty: | ++ There are no Services{items, select, + 0 {} + other { matching that search} + }. +
+ tags: + empty: + header: Welcome to Tags + body: | ++ There are no tags for this Service. +
upstreams: intro: |
Upstreams are services that may receive traffic from this gateway. If you are not using Consul DNS, please make sure your Host:
header uses the correct domain name for the gateway to correctly proxy to its upstreams. Learn more about configuring gateways in our documentation.
- This instance has no health checks{items, select, + This Service has no Upstreams{items, select, 0 {} other { matching that search} }.
- critical-serf-notice: - header: Failing serf check - body: | -- This instance has a failing serf node check. The health statuses shown on this page are the statuses as they were known before the node became unreachable. -
- upstreams: - tproxy-mode: - header: Transparent proxy mode - body: The upstreams listed on this page have been defined in a proxy registration. There may be more upstreams, though, as "transparent" mode is enabled on this proxy. - footer: Read the documentation + routing-config: source: Routing Configuration + intentions: + index: + empty: + header: | + {items, select, + 0 {Welcome to Intentions} + other {No Intentions found} + } + body: | +
+ {items, select,
+ 0 {There don't seem to be any Intentions in this Consul cluster}
+ other {No Intentions were found matching your search}
+ }, or you may not have intentions:read
permissions access to this view.
+
+ {items, select,
+ 0 {There don't seem to be any K/V pairs in this Consul cluster yet}
+ other {No K/V pairs were found matching your search}
+ }, or you may not have key:read
permissions access to this view.
+
+ {items, select,
+ 0 {There don't seem to be any Tokens}
+ other {No Tokens were found matching your search}
+ }, or you may not have acl:read
permissions to view Tokens yet.
+
+ {items, select,
+ 0 {There don't seem to be any Policies}
+ other {No Policies were found matching your search}
+ }, or you may not have acl:read
permissions to view Policies yet.
+
+ {items, select,
+ 0 {There don't seem to be any Roles}
+ other {No Roles were found matching your search}
+ }, or you may not have acl:read
permissions to view Roles yet.
+
+ Binding rules allow an operator to express a systematic way of automatically linking roles and service identities to newly created tokens without operator intervention. +
+ nspace-rules: + empty: + header: No Namespace Rules + body: | ++ A set of rules that can control which namespace tokens created via this auth method will be created within. Unlike binding rules, the first matching namespace rule wins. +
+ + index: + empty: + header: | + {items, select, + 0 {Welcome to Auth Methods} + other {No Auth Methods found} + } + body: | +
+ {items, select,
+ 0 {There don't seem to be any Auth Methods}
+ other {No Auth Methods were found matching your search}
+ }, or you may not have acl:read
permissions to view Auth Methods yet.
+