From d3df6334c26685c53469db3aaf0a779bd40fa9cf Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Mon, 24 Jun 2024 15:40:57 +0100 Subject: [PATCH 001/590] AAP-25774 Add sync script to 2.5 branch (#1476) --- bin/sync_docs.sh | 19 +++++++++++++++++++ bin/sync_ocp_latest.sh | 13 +++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 bin/sync_docs.sh create mode 100644 bin/sync_ocp_latest.sh diff --git a/bin/sync_docs.sh b/bin/sync_docs.sh new file mode 100644 index 0000000000..6b383e4548 --- /dev/null +++ b/bin/sync_docs.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +###### +# This script synchronizes content to the downstream repository. +# A Jenkins job configures the source and target repositories and runs this script directly. +# If you commit changes to this script you should verify the Jenkins job runs successfully. +###### + +# Set the path to the source and target directories. +# The source directory contains the content that you want to synchronize. +source=source +# The target directory is the location where you want to synchronize content. +target=target + +# Clean the existing downstream and release-note folders. +rm -rf $target/downstream + +# Copy the content of the downstream and release-note folders. +cp -r $source/downstream $target/downstream diff --git a/bin/sync_ocp_latest.sh b/bin/sync_ocp_latest.sh new file mode 100644 index 0000000000..217c388759 --- /dev/null +++ b/bin/sync_ocp_latest.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Set the path to the file that contains the ":OCPLatest:" attribute. +attributes=../downstream/attributes/attributes.adoc + +# Retrieve the OCP attributes file from the OpenShift docs repository. +curl https://raw.githubusercontent.com/openshift/openshift-docs/main/_attributes/ocp-attributes.adoc -o ocp-attributes.adoc +# Save the value of the "product-version" attribute as a variable. +ocpversion=$(sed -n -e 's/^:product-version: //p' ocp-attributes.adoc) +# Replace the value of the "OCPLatest" attribute with the value of the "product-version" attribute. +sed -i -e "s/^:OCPLatest:.*/:OCPLatest: $ocpversion/" $attributes +# Delete the OCP attributes file. +rm -f ocp-attributes.adoc From 8e319e89f0a22811d5d7f5096145f524f84d73b5 Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Mon, 24 Jun 2024 15:58:58 +0100 Subject: [PATCH 002/590] Archive Ansible Creator Guide for 2.5 (#1477) --- .../{titles => archive/archived-titles}/dev-guide/aap-common | 0 .../{titles => archive/archived-titles}/dev-guide/attributes | 0 downstream/{titles => archive/archived-titles}/dev-guide/core | 0 .../{titles => archive/archived-titles}/dev-guide/dev-guide | 0 .../{titles => archive/archived-titles}/dev-guide/docinfo.xml | 0 downstream/{titles => archive/archived-titles}/dev-guide/images | 0 .../{titles => archive/archived-titles}/dev-guide/master.adoc | 0 .../{titles => archive/archived-titles}/dev-guide/navigator | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename downstream/{titles => archive/archived-titles}/dev-guide/aap-common (100%) rename downstream/{titles => archive/archived-titles}/dev-guide/attributes (100%) rename downstream/{titles => archive/archived-titles}/dev-guide/core (100%) rename downstream/{titles => archive/archived-titles}/dev-guide/dev-guide (100%) rename downstream/{titles => archive/archived-titles}/dev-guide/docinfo.xml (100%) rename downstream/{titles => archive/archived-titles}/dev-guide/images (100%) rename downstream/{titles => archive/archived-titles}/dev-guide/master.adoc (100%) rename downstream/{titles => archive/archived-titles}/dev-guide/navigator (100%) diff --git a/downstream/titles/dev-guide/aap-common b/downstream/archive/archived-titles/dev-guide/aap-common similarity index 100% rename from downstream/titles/dev-guide/aap-common rename to downstream/archive/archived-titles/dev-guide/aap-common diff --git a/downstream/titles/dev-guide/attributes b/downstream/archive/archived-titles/dev-guide/attributes similarity index 100% rename from downstream/titles/dev-guide/attributes rename to downstream/archive/archived-titles/dev-guide/attributes diff --git a/downstream/titles/dev-guide/core b/downstream/archive/archived-titles/dev-guide/core similarity index 100% rename from downstream/titles/dev-guide/core rename to downstream/archive/archived-titles/dev-guide/core diff --git a/downstream/titles/dev-guide/dev-guide b/downstream/archive/archived-titles/dev-guide/dev-guide similarity index 100% rename from downstream/titles/dev-guide/dev-guide rename to downstream/archive/archived-titles/dev-guide/dev-guide diff --git a/downstream/titles/dev-guide/docinfo.xml b/downstream/archive/archived-titles/dev-guide/docinfo.xml similarity index 100% rename from downstream/titles/dev-guide/docinfo.xml rename to downstream/archive/archived-titles/dev-guide/docinfo.xml diff --git a/downstream/titles/dev-guide/images b/downstream/archive/archived-titles/dev-guide/images similarity index 100% rename from downstream/titles/dev-guide/images rename to downstream/archive/archived-titles/dev-guide/images diff --git a/downstream/titles/dev-guide/master.adoc b/downstream/archive/archived-titles/dev-guide/master.adoc similarity index 100% rename from downstream/titles/dev-guide/master.adoc rename to downstream/archive/archived-titles/dev-guide/master.adoc diff --git a/downstream/titles/dev-guide/navigator b/downstream/archive/archived-titles/dev-guide/navigator similarity index 100% rename from downstream/titles/dev-guide/navigator rename to downstream/archive/archived-titles/dev-guide/navigator From 42e2c6f94e88e237f51cced3eae9e91bde2aa147 Mon Sep 17 00:00:00 2001 From: Robert Grange <95885266+rogrange@users.noreply.github.com> Date: Mon, 24 Jun 2024 16:52:22 -0400 Subject: [PATCH 003/590] Updated system requiremenst for planning guide. Updated attributes file. (#1478) (#1480) These changes are for AAP-22715 to update the system requirements for the Planning Guide. A change has also been made to the 'attributes.adoc' file to update {CoreInstVers} from 2.14 to 2.15 to concide with the new system requirments for 2.5 EA. Resolves: AAP-22715 Also Resolves: AAP-22628 --- downstream/attributes/attributes.adoc | 2 +- .../modules/platform/ref-system-requirements.adoc | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/downstream/attributes/attributes.adoc b/downstream/attributes/attributes.adoc index f0391dba2f..5f80cd3db0 100644 --- a/downstream/attributes/attributes.adoc +++ b/downstream/attributes/attributes.adoc @@ -8,7 +8,7 @@ :CentralAuth: central authentication :PlatformVers: 2.5 //The Ansible-core version required to install AAP -:CoreInstVers: 2.14 +:CoreInstVers: 2.15 //The Ansible-core version used by the AAP control plane and EEs :CoreUseVers: 2.15 :PlatformDownloadUrl: https://access.redhat.com/downloads/content/480/ver=2.5/rhel---9/2.4/x86_64/product-software diff --git a/downstream/modules/platform/ref-system-requirements.adoc b/downstream/modules/platform/ref-system-requirements.adoc index cd12a0f28d..17c051fb60 100644 --- a/downstream/modules/platform/ref-system-requirements.adoc +++ b/downstream/modules/platform/ref-system-requirements.adoc @@ -14,15 +14,19 @@ Your system must meet the following minimum system requirements to install and r h| Subscription | Valid {PlatformName} | -h| OS | {RHEL} 8.6 or later 64-bit (x86, ppc64le, s390x, aarch64) |{PlatformName} is also supported on OpenShift, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/deploying_the_red_hat_ansible_automation_platform_operator_on_openshift_container_platform/index[Deploying the Red Hat Ansible Automation Platform operator on OpenShift Container Platform] for more information. +h| OS | {RHEL} 8.8 or later 64-bit (x86, ppc64le, s390x, aarch64) |{PlatformName} is also supported on OpenShift, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/deploying_the_red_hat_ansible_automation_platform_operator_on_openshift_container_platform/index[Deploying the Red Hat Ansible Automation Platform operator on OpenShift Container Platform] for more information. h| Ansible-core | Ansible-core version {CoreInstVers} or later | {PlatformNameShort} includes execution environments that contain ansible-core {CoreUseVers}. -h| Python | 3.9 or later | +h| Python | 3.11 or later | h| Browser | A currently supported version of Mozilla FireFox or Google Chrome | -h| Database | PostgreSQL version 13 | +h| Database | PostgreSQL version 15 | + +h| RAM | 16 GB minimum | + +h| CPUs | 4 | |=== The following are necessary for you to work with project updates and collections: From 1d70a1d5a2a7666cddbb4b3e261b16456f98ef3e Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Tue, 25 Jun 2024 08:52:57 +0100 Subject: [PATCH 004/590] Create new ports and networks routing table (#1460) (#1481) * Create new ports and networks routing table Inconsistencies in firewall documentation https://issues.redhat.com/browse/AAP-21720 * Create new ports and networks routing table Added two rows Inconsistencies in firewall documentation https://issues.redhat.com/browse/AAP-21720 * Create new ports and network routing table Correction Inconsistencies in firewall documentation https://issues.redhat.com/browse/AAP-21720 --- .../assembly-network-ports-protocols.adoc | 251 ++++-------------- 1 file changed, 55 insertions(+), 196 deletions(-) diff --git a/downstream/assemblies/platform/assembly-network-ports-protocols.adoc b/downstream/assemblies/platform/assembly-network-ports-protocols.adoc index 5f0bf54e33..35f37503ae 100644 --- a/downstream/assemblies/platform/assembly-network-ports-protocols.adoc +++ b/downstream/assemblies/platform/assembly-network-ports-protocols.adoc @@ -17,216 +17,75 @@ In some of the following use cases, hop nodes are used instead of a direct link .{PlatformNameShort} Network ports and protocols image::aap-network-ports-protocols.png[Interaction of Ansible Automation Platform components on the network with information about the ports and protocols that are used.] -The following tables show the default {PlatformName} destination ports required for each application. +The following table indicates the destination port and the direction of network traffic: [NOTE] The following default destination ports and installer inventory listed are configurable. If you choose to configure them to suit your environment, you might experience a change in behavior. +.Network ports and protocols +[cols="12%,12%,17%,17%,20%,27%,27%",options="header",] +|=== +| Port | Protocol | Service | Source | Destination | Required for | Installer Inventory Variable +| 22 | TCP | SSH | Installer node | {HubNameStart} | Installation (temporary) | `ansible_port` +| 22 | TCP | SSH | Installer node | Controller node | Installation (temporary) | `ansible_port` +| 22 | TCP | SSH | Installer node | EDA node | Installation (temporary) | `ansible_port` +| 22 | TCP | SSH | Installer node | Execution node | Installation (temporary) | `ansible_port` +| 22 | TCP | SSH | Installer node | Hop node | Installation (temporary) | `ansible_port` +| 22 | TCP | SSH | Installer node | Hybrid node | Installation (temporary) | `ansible_port` +| 22 | TCP | SSH | Installer node | PostgreSQL database| Remote access during installation (temporary) | `pg_port` +| 80/443 | TCP | HTTP/HTTPS | Installer node | {HubNameStart} | Allows installer node to push the execution environment image to {HubName} when using the bundle installer. | Fixed value +| 80/443 | TCP | HTTP/HTTPS | Execution node | {HubNameStart} | Allows execution nodes to pull the execution environment image from {HubName}. | Fixed value +| 443 | TCP | HTTPS | Controller node | Client | Web UI/API +This exposes the mesh ingress receptor entry point for inbound connections.| `nginx_https_port` +| 443 | TCP | HTTPS | Controller node | {OCPShort} | Only required when using container groups to run jobs. | Host name of OpenShift API server +| 5432 | TCP | PostgreSQL | Controller node | PostgreSQL database | Open only if the internal database is used along with another component. Otherwise, this port should not be open. | `automationcontroller_pg_port` +| 5432 | TCP | PostgreSQL | EDA node | PostgreSQL database | Open only if the internal database is used along with another component. Otherwise, this port should not be open. | `automationedacontroller_pg_port` +| 5432 | TCP | PostgreSQL | {HubNameStart} | PostgreSQL database | Open only if the internal database is used along with another component. Otherwise, this port should not be open. | `automationhub_pg_port` +| 27199 | TCP | Receptor | Controller node | Execution node | Configurable -.PostgreSQL -[options="header"] -|=== -|Port |Protocol |Service |Direction |Installer Inventory Variable |Required for -|22 -|TCP -|SSH -|Inbound and Outbound -|`ansible_port` -|Remote access during installation -|5432 -|TCP -|Postgres -|Inbound and Outbound -|`pg_port` -a|Default port - -ALLOW connections from controller(s) to database port -|=== +Mesh nodes directly peered to controllers. -.{ControllerNameStart} -[options="header"] -|=== -|Port |Protocol |Service |Direction |Installer Inventory Variable |Required for -|22 -|TCP -|SSH -|Inbound and Outbound -|`ansible_port` -|Installation - -|80 -|TCP -|HTTP -|Inbound -|`nginx_http_port` -|UI/API - -|443 -|TCP -|HTTPS -|Inbound -|`nginx_https_port` -|UI/API - -|5432 -|TCP -|PostgreSQL -|Inbound and Outbound -|`pg_port` -a|Open *only* if the internal database is used along with another component. Otherwise, this port should not be open - -Hybrid mode in a cluster - -|27199 -|TCP -|Receptor -|Inbound and Outbound -|`receptor_listener_port` -|ALLOW receptor listener port across all controllers for mandatory and automatic control plane clustering -|=== +Direct nodes involved. +27199 communication can be both ways (depending on installation inventory) for execution nodes +| `receptor_listener_port` -.Hop Nodes -[options="header"] -|=== -|Port |Protocol |Service |Direction |Installer Inventory Variable |Required for -|22 -|TCP -|SSH -|Inbound and Outbound -|`ansible_port` -|Installation - -|27199 -|TCP -|Receptor -|Inbound and Outbound -|`receptor_listener_port` -a|Mesh - -ALLOW connection from controller(s) to Receptor port -|=== +`peers` +| 27199 | TCP | Receptor | Controller node | Hop node | Configurable -.Execution Nodes -[options="header"] -|=== -|Port |Protocol |Service |Direction |Installer Inventory Variable |Required for -|22 -|TCP -|SSH -|Inbound and Outbound -|`ansible_port` -|Installation - -|80/443 -|TCP -|SSH -|Inbound and Outbound -|Fixed value (maps to Table 5.7 {HubNameStart}'s "User interface" port) -|Allows execution nodes to pull the {ExecEnvShort} image from {HubName} - -|27199 -|TCP -|Receptor -|Inbound and Outbound -|`receptor_listener_port` -a|Mesh - Nodes directly peered to controllers. No hop nodes involved. 27199 is bi-directional for the execution nodes - -ALLOW connections from controller(s) to Receptor port (non-hop connected nodes) - -ALLOW connections from hop node(s) to Receptor port (if relayed through hop nodes) -|=== +ENABLE connections from hop nodes to Receptor port if relayed through hop nodes. | `receptor_listener_port` -.Control Nodes -[options="header"] -|=== -|Port |Protocol |Service |Direction |Installer Inventory Variable |Required for -|22 -|TCP -|SSH -|Inbound and Outbound -|`ansible_port` -|Installation - -|27199 -|TCP -|Receptor -|Inbound and Outbound -|`receptor_listener_port` -a|Mesh - Nodes directly peered to controllers. Direct nodes involved. 27199 is bi-directional for execution nodes - -ENABLE connections from controller(s) to Receptor port for non-hop connected nodes - -ENABLE connections from hop node(s) to Receptor port if relayed through hop nodes -|443 -|TCP -|Podman -|Inbound -|`nginx_https_port` -|UI/API -|=== +`peers` +| 27199 | TCP | Receptor | Controller node | Hybrid node | Configurable -.Hybrid Nodes -[options="header"] -|=== -|Port |Protocol |Service |Direction |Installer Inventory Variable |Required for -|22 -|TCP -|SSH -|Inbound and Outbound -|`ansible_port` -|Installation - -|27199 -|TCP -|Receptor -|Inbound and Outbound -|`receptor_listener_port` -a|Mesh - Nodes directly peered to controllers. No hop nodes involved. 27199 is bi-directional for the execution nodes - -ENABLE connections from controller(s) to Receptor port for non-hop connected nodes - -ENABLE connections from hop node(s) to Receptor port if relayed through hop nodes - -|443 -|TCP -|Podman -|Inbound -|`nginx_https_port` -|UI/API -|=== +ENABLE connections from controllers to Receptor port if relayed through non-hop connected nodes. | `receptor_listener_port` -.{HubNameStart} -[options="header"] -|=== -|Port |Protocol |Service |Direction |Installer Inventory Variable |Required for -|22 -|TCP -|SSH -|Inbound and Outbound -|`ansible_port` -|Installation - -|80 -|TCP -|HTTP -|Inbound -| Fixed value -|User interface -|443 -|TCP -|HTTPS -|Inbound -| Fixed value -|User interface -|5432 -|TCP -|PostgreSQL -|Inbound and Outbound -|`automationhub_pg_port` -a|Open *only* if the internal database is used along with another component. Otherwise, this port should not be open +`peers` +| 27199 | TCP | Receptor | Execution node | Hop node | Configurable + +Mesh 27199 communication can be both ways (depending on installation inventory) for execution nodes + +ALLOW connection from controller(s) to Receptor port | +`receptor_listener_port` + +`peers` +| 27199 | TCP | Receptor | Execution node | Controller node | Configurable + +Mesh 27199 communication can be both ways (depending on installation inventory) for execution nodes + +ALLOW connection from controller(s) to Receptor port | +`receptor_listener_port` + +`peers` |=== +[NOTE] +==== +* Hybrid nodes act as a combination of control and execution nodes, and therefore Hybrid nodes share the connections of both. + +* If `receptor_listener_port` is defined, the machine also requires an available open port on which to establish inbound TCP connections, for example, 27199. +==== + .{InsightsName} [options="header"] |=== From 6356525d663b8a296266af6fbdfd8934583f7c82 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Tue, 25 Jun 2024 13:13:15 +0100 Subject: [PATCH 005/590] Adding proc content (AAP-22718) (#1483) (#1484) * adding proc content (AAP-22718) * Adding PR Suggestions --- .../platform/assembly-aap-backup.adoc | 4 +-- .../platform/assembly-aap-recovery.adoc | 3 +- .../proc-aap-platform-gateway-backup.adoc | 32 ++++++++++++++++++- .../proc-aap-platform-gateway-restore.adoc | 32 +++++++++++++++++-- 4 files changed, 65 insertions(+), 6 deletions(-) diff --git a/downstream/assemblies/platform/assembly-aap-backup.adoc b/downstream/assemblies/platform/assembly-aap-backup.adoc index 36b77815cb..92bd4ab473 100644 --- a/downstream/assemblies/platform/assembly-aap-backup.adoc +++ b/downstream/assemblies/platform/assembly-aap-backup.adoc @@ -9,10 +9,10 @@ ifdef::context[:parent-context: {context}] [role="_abstract"] -Backing up your {PlatformName} deployment involves creating backup resources for your deployed {HubName} and {ControllerName} instances. Use these procedures to create backup resources for your {PlatformName} deployment. +Backing up your {PlatformName} deployment involves creating backup resources for your deployed instances. Use the following procedures to create backup resources for your {PlatformName} deployment. //part of 2.5 release, (AAP-22178) uncomment when publishing [gmurray] -include::platform/proc-aap-platform-gateway-backup.adoc[leveloffset=+1] +//include::platform/proc-aap-platform-gateway-backup.adoc[leveloffset=+1] include::platform/proc-aap-controller-backup.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-aap-recovery.adoc b/downstream/assemblies/platform/assembly-aap-recovery.adoc index 6b87e7237e..704b685bc9 100644 --- a/downstream/assemblies/platform/assembly-aap-recovery.adoc +++ b/downstream/assemblies/platform/assembly-aap-recovery.adoc @@ -7,7 +7,8 @@ ifdef::context[:parent-context: {context}] :context: aap-recovery [role="_abstract"] -If you lose information on your system or issues with an upgrade, you can use the backup resources of your deployment instances. Use these procedures to recover your {ControllerName} and {HubName} deployment files. +If you lose information on your system or experience issues with an upgrade, you can use the backup resources of your deployment instances. Use the following procedures to recover your {PlatformNameShort} deployment files. + //part of 2.5 release, (AAP-22178) uncomment when publishing [gmurray] //include::platform/proc-aap-platform-gateway-restore.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc b/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc index 6274e4e6e7..524dda9a4d 100644 --- a/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc +++ b/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc @@ -1,3 +1,33 @@ [id="aap-platform-gateway-backup_{context}"] -= Backing up your AnsibleAutomationPlatform resource += Backing up your AnsibleAutomationPlatform deployment +Regularly backing up your *AnsibleAutomationPlatform* deployment is vital to protect against unexpected data loss and application errors. *AnsibleAutomationPlatform* hosts any enabled components (such as, {ControllerName}, {HubName}, {EDAName}, and {LightspeedShortName}), when you back up *AnsibleAutomationPlatform* you also back up these components. + +.Prerequisites +* You must be authenticated on Openshift cluster. +* The {OperatorPlatform} has been installed on the cluster. +* The *AnsibleAutomationPlatform* instance is deployed using the {OperatorPlatform}. + +.Procedure +. Log in to {OCP}. +. Go to menu:Operators[Installed Operators]. +. Select the {OperatorPlatform} installed on your project namespace. +. Go to your *All Instances* tab, and click btn:[Create New]. +. Select *Ansible Automation Platform Backup* from the list. ++ +NOTE: When creating the *Ansible Automation Platform Backup* resource it also creates backup resources for each of the nested components that are enabled. ++ +. In the *Name* field, enter a name for the backup. +. In the *Deployment name* field, enter the name of the deployed {PlatformNameShort} instance being backed up. For example if your {PlatformNameShort} deployment must be backed up and the deployment name is myaap, enter 'myaap' in the *Deployment name* field. +. Click btn:[Create]. + +.Verification +To verify that your backup was successful you can: + +. Log in to {OCP}. +. Go to menu:Operators[Installed Operators]. +. Select the {OperatorPlatform} installed on your project namespace. +. Click *All Instances*. + +The *All Instances* page displays the main backup and the backups for each component with the name you specified when creating your backup resource. The status for these instances should state *Running* or *Successful*. + diff --git a/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc b/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc index 8f0d5b9ce8..51274db663 100644 --- a/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc +++ b/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc @@ -1,3 +1,31 @@ -[id="aap-platform-gateway-restore"] +[id="aap-platform-gateway-restore_{context}"] -= Recovering your AnsibleAutomationPlatform resource += Recovering your AnsibleAutomationPlatform deployment +*AnsibleAutomationPlatform* hosts any enabled components (such as, {ControllerName}, {HubName}, {EDAName}, and {LightspeedShortName}), when you recover *AnsibleAutomationPlatform* you also restore these components. + +.Prerequisites +* You must be authenticated with an Openshift cluster. +* You have installed the {OperatorPlatform} on the cluster. +* The *AnsibleAutomationPlatformBackups* deployment is available in your cluster. + +.Procedure +. Log in to {OCP}. +. Go to menu:Operators[Installed Operators]. +. Select the {OperatorPlatform} installed on your project namespace. +. Go to your *All Instances* tab, and click btn:[Create New]. +. Select *Ansible Automation Platform Restore* from the list. +. For *Name* enter the name for the recovery deployment. +. For *New Ansible Automation Platform Name* enter the new name for your {PlatformNameShort} instance. +. *Backup Source* defaults to *CR*. +. For *Backup name* enter the name your chose when creating the backup. +. Click btn:[Create]. + +Your backups starts restoring under the *AnsibleAutomationPlatformRestores* tab. + +NOTE: The recovery is not complete until all the resources are successfully restored. Depending on the size of your database this this can take some time. + +.Verification +To verify that your recovery was successful you can: + +. Go to menu:Workloads[Pods]. +. Confirm that all pods are in a *Running* or *Completed* state. From e6eb382d9643045ffc9fb034abba9d63fdb1ade7 Mon Sep 17 00:00:00 2001 From: EMcWhinn <122449381+EMcWhinn@users.noreply.github.com> Date: Wed, 26 Jun 2024 14:47:13 +0100 Subject: [PATCH 006/590] Update controller doc titles for 2.5 (#1486) (#1488) Titles updated as per: https://miro.com/app/board/uXjVNGGa88w=/ https://issues.redhat.com/browse/AAP-25866 --- .../titles/controller/controller-admin-guide/docinfo.xml | 4 ++-- .../titles/controller/controller-admin-guide/master.adoc | 2 +- .../titles/controller/controller-api-overview/docinfo.xml | 2 +- .../titles/controller/controller-api-overview/master.adoc | 2 +- .../titles/controller/controller-user-guide/docinfo.xml | 4 ++-- .../titles/controller/controller-user-guide/master.adoc | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/downstream/titles/controller/controller-admin-guide/docinfo.xml b/downstream/titles/controller/controller-admin-guide/docinfo.xml index a22b7974ff..2038c1e996 100644 --- a/downstream/titles/controller/controller-admin-guide/docinfo.xml +++ b/downstream/titles/controller/controller-admin-guide/docinfo.xml @@ -1,7 +1,7 @@ -Automation controller administration guide +Configuring automation execution Red Hat Ansible Automation Platform 2.5 -Administrator Guide for Automation Controller +Administrator guide for automation controller Learn how to manage automation controller through custom scripts, management jobs, and more. diff --git a/downstream/titles/controller/controller-admin-guide/master.adoc b/downstream/titles/controller/controller-admin-guide/master.adoc index 0e285bfe8f..e8a730e679 100644 --- a/downstream/titles/controller/controller-admin-guide/master.adoc +++ b/downstream/titles/controller/controller-admin-guide/master.adoc @@ -9,7 +9,7 @@ include::attributes/attributes.adoc[] // Book Title -= Automation controller administration guide += Configuring automation execution The {ControllerName} Administration Guide describes the administration of {ControllerName} through custom scripts, management jobs, and more. Written for DevOps engineers and administrators, the {ControllerName} Administration Guide assumes a basic understanding of the systems requiring management with {ControllerName}s easy-to-use graphical interface. diff --git a/downstream/titles/controller/controller-api-overview/docinfo.xml b/downstream/titles/controller/controller-api-overview/docinfo.xml index a866e685ea..7047335f62 100644 --- a/downstream/titles/controller/controller-api-overview/docinfo.xml +++ b/downstream/titles/controller/controller-api-overview/docinfo.xml @@ -1,4 +1,4 @@ -Automation controller API overview +Automation execution API overview Red Hat Ansible Automation Platform 2.5 Developer overview for the {ControllerName} API diff --git a/downstream/titles/controller/controller-api-overview/master.adoc b/downstream/titles/controller/controller-api-overview/master.adoc index cb57796ed5..d7c16b455d 100644 --- a/downstream/titles/controller/controller-api-overview/master.adoc +++ b/downstream/titles/controller/controller-api-overview/master.adoc @@ -8,7 +8,7 @@ include::attributes/attributes.adoc[] // Book Title -= Automation controller API overview += Automation execution API overview Thank you for your interest in {PlatformName}. {PlatformNameShort} helps teams manage complex multitiered deployments by adding control, knowledge, and delegation to Ansible-powered environments. diff --git a/downstream/titles/controller/controller-user-guide/docinfo.xml b/downstream/titles/controller/controller-user-guide/docinfo.xml index ab2fc6ca91..bac7173b64 100644 --- a/downstream/titles/controller/controller-user-guide/docinfo.xml +++ b/downstream/titles/controller/controller-user-guide/docinfo.xml @@ -1,7 +1,7 @@ -Automation controller user guide +Using automation execution Red Hat Ansible Automation Platform 2.5 -User Guide for Automation Controller +User guide for automation controller This guide describes the use of the Red Hat Ansible Automation Platform Controller (automation controller). diff --git a/downstream/titles/controller/controller-user-guide/master.adoc b/downstream/titles/controller/controller-user-guide/master.adoc index e530de6e13..4a5c84388b 100644 --- a/downstream/titles/controller/controller-user-guide/master.adoc +++ b/downstream/titles/controller/controller-user-guide/master.adoc @@ -9,7 +9,7 @@ include::attributes/attributes.adoc[] // Book Title -= Automation controller user guide += Using automation execution Thank you for your interest in {PlatformName} {ControllerName}. {ControllerNameStart} helps teams manage complex multitiered deployments by adding control, knowledge, and delegation to Ansible-powered environments. From b890a1f38188f464fb8645ba561546cde58368a7 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Thu, 27 Jun 2024 11:31:08 +0100 Subject: [PATCH 007/590] Adding in SME feedback on backup and restore drafts (#1491) (#1492) * Adding in SME feedback on draft * PR suggestions --- .../platform/assembly-aap-backup.adoc | 6 ++++- .../proc-aap-platform-gateway-backup.adoc | 26 ++++++++++++++++--- .../proc-aap-platform-gateway-restore.adoc | 9 ++++++- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/downstream/assemblies/platform/assembly-aap-backup.adoc b/downstream/assemblies/platform/assembly-aap-backup.adoc index 92bd4ab473..b84390d5f2 100644 --- a/downstream/assemblies/platform/assembly-aap-backup.adoc +++ b/downstream/assemblies/platform/assembly-aap-backup.adoc @@ -9,7 +9,11 @@ ifdef::context[:parent-context: {context}] [role="_abstract"] -Backing up your {PlatformName} deployment involves creating backup resources for your deployed instances. Use the following procedures to create backup resources for your {PlatformName} deployment. +Backing up your {PlatformName} deployment involves creating backup resources for your deployed instances. +Use the following procedures to create backup resources for your {PlatformName} deployment. +We recommend taking backups before upgrading the {OperatorPlatform}. +Take a backup regularly in case you want to restore the platform to a previous state. + //part of 2.5 release, (AAP-22178) uncomment when publishing [gmurray] //include::platform/proc-aap-platform-gateway-backup.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc b/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc index 524dda9a4d..a5c8d74eaf 100644 --- a/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc +++ b/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc @@ -1,7 +1,7 @@ [id="aap-platform-gateway-backup_{context}"] = Backing up your AnsibleAutomationPlatform deployment -Regularly backing up your *AnsibleAutomationPlatform* deployment is vital to protect against unexpected data loss and application errors. *AnsibleAutomationPlatform* hosts any enabled components (such as, {ControllerName}, {HubName}, {EDAName}, and {LightspeedShortName}), when you back up *AnsibleAutomationPlatform* you also back up these components. +Regularly backing up your *AnsibleAutomationPlatform* deployment is vital to protect against unexpected data loss and application errors. *AnsibleAutomationPlatform* hosts any enabled components (such as, {ControllerName}, {HubName}, and {EDAName}), when you back up *AnsibleAutomationPlatform* the operator will also back up these components. .Prerequisites * You must be authenticated on Openshift cluster. @@ -18,9 +18,22 @@ Regularly backing up your *AnsibleAutomationPlatform* deployment is vital to pro NOTE: When creating the *Ansible Automation Platform Backup* resource it also creates backup resources for each of the nested components that are enabled. + . In the *Name* field, enter a name for the backup. -. In the *Deployment name* field, enter the name of the deployed {PlatformNameShort} instance being backed up. For example if your {PlatformNameShort} deployment must be backed up and the deployment name is myaap, enter 'myaap' in the *Deployment name* field. +. In the *Deployment name* field, enter the name of the deployed {PlatformNameShort} instance being backed up. For example if your {PlatformNameShort} deployment must be backed up and the deployment name is aap, enter 'aap' in the *Deployment name* field. . Click btn:[Create]. +This results in an *AnsibleAutomationPlatformBackup* resource. The the resource YAML is similar to the following: + +---- +apiVersion: aap.ansible.com/v1alpha1 +kind: AnsibleAutomationPlatformBackup +metadata: + name: backup + namespace: aap +spec: + no_log: true + deployment_name: aap +---- + .Verification To verify that your backup was successful you can: @@ -29,5 +42,12 @@ To verify that your backup was successful you can: . Select the {OperatorPlatform} installed on your project namespace. . Click *All Instances*. -The *All Instances* page displays the main backup and the backups for each component with the name you specified when creating your backup resource. The status for these instances should state *Running* or *Successful*. +The *All Instances* page displays the main backup and the backups for each component with the name you specified when creating your backup resource. +The status for the following instances must be either *Running* or *Successful*: + +* AnsibleAutomationPlatformBackup +* AutomationControllerBackup +* EDABackup +* AutomationHubBackup + diff --git a/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc b/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc index 51274db663..6e6841ad21 100644 --- a/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc +++ b/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc @@ -1,7 +1,14 @@ [id="aap-platform-gateway-restore_{context}"] = Recovering your AnsibleAutomationPlatform deployment -*AnsibleAutomationPlatform* hosts any enabled components (such as, {ControllerName}, {HubName}, {EDAName}, and {LightspeedShortName}), when you recover *AnsibleAutomationPlatform* you also restore these components. +*AnsibleAutomationPlatform* manages any enabled components (such as, {ControllerName}, {HubName}, and {EDAName}), when you recover *AnsibleAutomationPlatform* you also restore these components. + +In previous versions of the {OperatorPlatform}, it was necessary to create a restore object for each component of the platform. +Now, you create a single *AnsibleAutomationPlatformRestore* resource, which creates and manages the other restore objects: + +* AutomationControllerRestore +* AutomationHubRestore +* EDARestore .Prerequisites * You must be authenticated with an Openshift cluster. From 7dc0fa52e1f9d93db38784856c6cd2607f6b046a Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Mon, 1 Jul 2024 08:59:10 +0100 Subject: [PATCH 008/590] Adding manifest deprication warning to execution environments doc (#1489) (#1505) * Adding manifest deprication warning to Creating and consuming execution environments doc ch. 5 and 5.1 * Update proc-obtain-images.adoc based on feedback made two changes greg suggested - used BaseURL attributre - used btn feature of Asciidoc markdown for accessibility * Update assembly-populate-container-registry.adoc based on feedback - changed the URL at the bottom to get it to work with Asciidoc markup "link:" * fixed minor errors - changed Simple Account Access to the correct Simple Content Access in the prereq list - changed the link to be functional at the very end Co-authored-by: Anni <36550943+annibond@users.noreply.github.com> --- .../assembly-populate-container-registry.adoc | 14 +++++++------ .../modules/hub/proc-obtain-images.adoc | 21 +++++++++++++++++-- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/downstream/assemblies/hub/assembly-populate-container-registry.adoc b/downstream/assemblies/hub/assembly-populate-container-registry.adoc index 31d00049c2..b882a35bfe 100644 --- a/downstream/assemblies/hub/assembly-populate-container-registry.adoc +++ b/downstream/assemblies/hub/assembly-populate-container-registry.adoc @@ -10,10 +10,10 @@ ifdef::context[:parent-context: {context}] [role="_abstract"] -By default, {PrivateHubName} does not include container images. -To populate your container registry, you must push a container image to it. +By default, {PrivateHubName} does not include container images. +To populate your container registry, you must push a container image to it. -You must follow a specific workflow to populate your {PrivateHubName} container registry: +You must follow a specific workflow to populate your {PrivateHubName} container registry: * Pull images from the Red Hat Ecosystem Catalog (registry.redhat.io) * Tag them @@ -21,16 +21,18 @@ You must follow a specific workflow to populate your {PrivateHubName} container [IMPORTANT] ==== -Image manifests and filesystem blobs were both originally served directly from `registry.redhat.io` and `registry.access.redhat.com`. -As of 1 May 2023, filesystem blobs are served from `quay.io` instead. +Image manifests and filesystem blobs were both originally served directly from `registry.redhat.io` and `registry.access.redhat.com`. +As of 1 May 2023, filesystem blobs are served from `quay.io` instead. * Ensure that the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_planning_guide/ref-network-ports-protocols_planning[Network ports and protocols] listed in _Table 5.10. Execution Environments (EE)_ are available to avoid problems pulling container images. Make this change to any firewall configuration that specifically enables outbound connections to `registry.redhat.io` or `registry.access.redhat.com`. -Use the hostnames instead of IP addresses when configuring firewall rules. +Use the hostnames instead of IP addresses when configuring firewall rules. After making this change you can continue to pull images from `registry.redhat.io` and `registry.access.redhat.com`. You do not require a `quay.io` login, or need to interact with the `quay.io` registry directly in any way to continue pulling Red Hat container images. + +However, manifests, sometimes called “subscription allocations”, on the web-based Red Hat Subscription Management are no longer supported as of early 2024 with one exception: If a system is part of a closed network or “air gapped” system that does not receive its updates from Red Hat’s servers directly, manifests are supported until the release of Red Hat Satellite 6.16. Keep up to date with link:access.redhat.com/articles/1365633[Red Hat Satellite Release Dates] for the announcement for Red Hat Satellite 6.16's release date announcement. ==== include::hub/proc-obtain-images.adoc[leveloffset=+1] diff --git a/downstream/modules/hub/proc-obtain-images.adoc b/downstream/modules/hub/proc-obtain-images.adoc index 56e3593dc4..b0628e19d0 100644 --- a/downstream/modules/hub/proc-obtain-images.adoc +++ b/downstream/modules/hub/proc-obtain-images.adoc @@ -8,11 +8,26 @@ [role="_abstract"] Before you can push container images to your {PrivateHubName}, you must first pull them from an existing registry and tag them for use. The following example details how to pull an image from the Red Hat Ecosystem Catalog (registry.redhat.io). +[IMPORTANT] +==== +As of early 2024, Red Hat no longer supports manifests or manifest lists on the Red Hat Subscription Management web platform, which has also been used interchangeably with “subscription allocations.” Red Hat also no longer supports most manifest functionality in Red Hat Satellite with one exception: +* Red Hat Satellite users in closed network or “air gapped” networks that do not receive their updates directly from Red Hat servers can currently still use `access.redhat.com` until the release of Red Hat Satellite 6.16. + +New Red Hat accounts automatically use Simple Content Access for their subscription tooling. New Red Hat accounts and existing Satellite customers who can connect to Red Hat’s servers can find their manifests at `console.redhat.com`. +==== + .Prerequisites -You have permissions to pull images from registry.redhat.io. + +* You have permissions to pull images from registry.redhat.io. + +* A Red Hat account with Simple Content Access enabled. .Procedure +. If you need to access your manifest for your container images log in to link:console.redhat.com/subscriptions/manifests[Red Hat Console]. + +. Click the three-dot menu for the manifest you need for your container images, and click btn:[Export manifest]. + . Log in to Podman by using your registry.redhat.io credentials: + ----- @@ -43,4 +58,6 @@ $ podman images [role="_additional-resources"] .Additional resources -* See link:https://redhat-connect.gitbook.io/catalog-help/[Red Hat Ecosystem Catalog Help] for information on registering and getting images. +* See link:redhat-connect.gitbook.io/catalog-help/[Red Hat Ecosystem Catalog Help] for information on registering and getting images. + +* See link:{BaseURL}/subscription_central/1-latest/html/creating_and_managing_manifests_for_a_connected_satellite_server/index[Creating and managing manifests for a connected Satellite Server] to learn more about the changes coming to Red Hat subscription tooling From 10b5941eeaefc86efb2dfd4d7aff4ac9a8b0b893 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Mon, 1 Jul 2024 12:13:27 +0100 Subject: [PATCH 009/590] 2.5 Update containerized install guide to incorporate gateway (#1506) (#1507) * Update containerized install guide to incorporate gateway https://issues.redhat.com/browse/AAP-18760 --- ...sembly-aap-containerized-installation.adoc | 19 +++-- .../proc-downloading-containerized-aap.adoc | 12 ++-- .../proc-installing-containerized-aap.adoc | 21 +++++- .../platform/proc-using-postinstall.adoc | 2 +- ...ccessing-control-auto-hub-eda-control.adoc | 70 ++++++++++++------- .../ref-using-custom-tls-certificates.adoc | 14 ++-- 6 files changed, 89 insertions(+), 49 deletions(-) diff --git a/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc b/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc index bb08181afc..71b6ae17b2 100644 --- a/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc +++ b/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc @@ -15,28 +15,27 @@ endif::[] :context: aap-containerized-installation [role="_abstract"] -Ansible Automation Platform is a commercial offering that helps teams manage complex multi-tier deployments by adding control, knowledge, and delegation to Ansible-powered environments. - -This guide helps you to understand the installation requirements and processes behind our new containerized version of Ansible Automation Platform. This initial version is based upon {PlatformNameShort} 2.4 and is being released as a Technical Preview. Please see link:https://access.redhat.com/support/offerings/techpreview[Technology Preview Features Support Scope] to understand what a technical preview entails. +{PlatformNameShort} is a commercial offering that helps teams manage complex multitiered deployments by adding control, knowledge, and delegation to Ansible-powered environments. +This guide helps you to understand the installation requirements and processes behind the containerized version of {PlatformNameShort}. .Prerequisites -* A RHEL 9.2 based host. Minimal OS base install is recommended. -* A non-root user for the RHEL host, with sudo or other Ansible supported privilege escalation (sudo recommended). This user is responsible for the installation of containerized {PlatformNameShort}. -* It is recommended setting up an *SSH public key authentication* for the non-root user. For guidelines on setting up an SSH public key authentication for the non-root user, see link:https://access.redhat.com/solutions/4110681[How to configure SSH public key authentication for passwordless login]. -* SSH keys are only required when installing on remote hosts. If doing a self contained local VM based installation, you can use *ansible_connection: local* as per the example which does not require SSH. -* Internet access from the RHEL host if using the default online installation method. +* A RHEL 9.2 based host. Minimal operating system (OS) base install is recommended. +* A non-root user for the {RHEL} host, with sudo or other Ansible supported privilege escalation (sudo recommended). This user is responsible for the installation of containerized {PlatformNameShort}. +* It is recommended that you set up an *SSH public key authentication* for the non-root user. For guidelines on setting up an SSH public key authentication for the non-root user, see link:https://access.redhat.com/solutions/4110681[How to configure SSH public key authentication for passwordless login]. +* SSH keys are only required when installing on remote hosts. If doing a self contained local VM based installation, you can use *ansible_connection: local*. +* Internet access from the {RHEL} host if using the default online installation method. == System Requirements -Your system must meet the following minimum system requirements to install and run Red Hat Containerized Ansible Automation Platform. +Your system must meet the following minimum system requirements to install and run Red Hat Containerized {PlatformNameShort}. [cols=2] |====================== | Memory | 16Gb RAM | CPU | 4 CPU | Disk space | 40Gb -| Disk IOPs | 1500 +| Disk IOPS | 1500 |====================== diff --git a/downstream/modules/platform/proc-downloading-containerized-aap.adoc b/downstream/modules/platform/proc-downloading-containerized-aap.adoc index 9b8451c9fe..c75fe43ad1 100644 --- a/downstream/modules/platform/proc-downloading-containerized-aap.adoc +++ b/downstream/modules/platform/proc-downloading-containerized-aap.adoc @@ -8,23 +8,23 @@ .Procedure -. Download the latest installer tarball from link:https://access.redhat.com/downloads/content/480/ver=2.4/rhel---9/2.4/x86_64/product-software[access.redhat.com]. This can be done directly within the RHEL host, which saves time. +. Download the latest installer .tar file from link:{PlatformDownloadUrl}[access.redhat.com]. This can be done directly within the {RHEL} host, which saves time. -. If you have downloaded the tarball and optional manifest zip file onto your laptop, copy them onto your RHEL host. +. If you have downloaded the .tar file and optional manifest .zip file onto your laptop, copy them onto your {RHEL} host. + -Decide where you would like the installer to reside on the filesystem. Installation related files will be created under this location and require at least 10Gb for the initial installation. +Decide where you want the installation program to reside on the filesystem. Installation related files will be created under this location and require at least 10Gb for the initial installation. + -. Unpack the installer tarball into your installation directory, and cd into the unpacked directory. +. Unpack the installation program .tar file into your installation directory, and navigate to the unpacked directory. + .. online installer + ---- -$ tar xfvz ansible-automation-platform-containerized-setup-2.4-2.tar.gz +$ tar xfvz ansible-automation-platform-containerized-setup-.tar.gz ---- + .. bundled installer + ---- -$ tar xfvz ansible-automation-platform-containerized-setup-bundle-2.4-2-.tar.gz +$ tar xfvz ansible-automation-platform-containerized-setup-bundle--.tar.gz ---- diff --git a/downstream/modules/platform/proc-installing-containerized-aap.adoc b/downstream/modules/platform/proc-installing-containerized-aap.adoc index 0ababc924f..8c200bc53f 100644 --- a/downstream/modules/platform/proc-installing-containerized-aap.adoc +++ b/downstream/modules/platform/proc-installing-containerized-aap.adoc @@ -13,10 +13,10 @@ For convenience an example inventory file is provided, that you can copy and mod [NOTE] ==== -There is no default database choice given in the inventory file. You must follow the instructions in the inventory file to make the appropriate choice between an internally provided postgres, or provide your own externally managed and supported database option. +There is no default database choice given in the inventory file. You must follow the instructions in the inventory file to make the appropriate choice between an internally provided Postgres, or provide your own externally managed and supported database option. ==== -Edit the inventory file by replacing the `< >` placeholders with your specific variables, and uncommenting any lines specific to your needs. +Edit the inventory file by replacing the `< >` placeholders with your specific variables, and uncommenting any lines specific to your needs. Refer to the `README.md` file for more information about optional and required variables. ---- @@ -39,6 +39,11 @@ fqdn_of_your_rhel_host ansible_connection=local [automationeda] fqdn_of_your_rhel_host ansible_connection=local +# This section is for your AAP Gateway host(s) +# ----------------------------------------------------- +[automationgateway] +fqdn_of_your_rhel_host ansible_connection=local + # This section is for your AAP Execution host(s) # ------------------------------------------------ #[execution_nodes] @@ -141,6 +146,18 @@ eda_pg_password= #eda_tls_cert= #eda_tls_key= +# AAP Gateway - mandatory +# ------------------------------ +gateway_admin_password= +gateway_pg_host=fqdn_of_your_rhel_host +gateway_pg_password= + +# AAP Gateway - optional +# ----------------------------- +# To use custom TLS certificate/key you need to set these variables +#gateway_tls_cert= +#gateway_tls_key= + # AAP Execution Nodes - optional # ----------------------------- #receptor_port=27199 diff --git a/downstream/modules/platform/proc-using-postinstall.adoc b/downstream/modules/platform/proc-using-postinstall.adoc index 8852c919e8..da3df34d16 100644 --- a/downstream/modules/platform/proc-using-postinstall.adoc +++ b/downstream/modules/platform/proc-using-postinstall.adoc @@ -7,7 +7,7 @@ [role="_abstract"] -Use the experimental postinstaller feature of containerized {PlatformNameShort} to define and load the configuration during the initial installation. This uses a configuration-as-code approach, where you simply define your configuration to be loaded as simple YAML files. +Use the postinstaller feature of containerized {PlatformNameShort} to define and load the configuration during the initial installation. This uses a configuration-as-code approach, where you simply define your configuration to be loaded as simple YAML files. . To use this optional feature, you need to uncomment the following vars in the inventory file: + diff --git a/downstream/modules/platform/ref-accessing-control-auto-hub-eda-control.adoc b/downstream/modules/platform/ref-accessing-control-auto-hub-eda-control.adoc index 19eb0578b8..a67c54fd74 100644 --- a/downstream/modules/platform/ref-accessing-control-auto-hub-eda-control.adoc +++ b/downstream/modules/platform/ref-accessing-control-auto-hub-eda-control.adoc @@ -1,54 +1,72 @@ :_mod-docs-content-type: REFERENCE -[id="accessing-control-auto-hub-eda-control_{context}"] +[id="accessing-gateway_{context}"] -= Accessing {ControllerName}, {HubName}, and {EDAcontroller} += Accessing platform gateway [role="_abstract"] -After the installation completes, these are the default protocol and ports used: +After the installation completes, the default protocol and ports used for platform gateway are 80 (http) and 443 (https). -* http/https protocol +You can customize the ports with the following variables: -* Ports 8080/8443 for {ControllerName} - -* Ports 8081/8444 for {HubName} +---- +gateway_nginx_http_port: 8500 -* Ports 8082/8445 for {EDAcontroller} +gateway_nginx_https_port: 8501 +---- +If you want to disable https, set `gateway_nginx_disable_https` to `true`: -These can be changed. Consult the *README.md* for further details. It is recommended that you leave the defaults unless you need to change them due to port conflicts or other factors. +---- +gateway_nginx_disable_https: true +---- +[NOTE] +==== +Consult the *README.md* for further details. Leave the defaults unless you need to change them due to port conflicts or other factors. +==== -.Accessing {ControllerName} UI +.Accessing platform gateway UI -The {ControllerName} UI is available by default at: +The platform gateway UI is available by default at: ---- -https://:8443 +https://:443 ---- -Log in as the admin user with the password you created for *controller_admin_password*. +Log in as the admin user with the password you created for *gateway_admin_password*. -If you supplied the license manifest as part of the installation, the {PlatformNameShort} dashboard is displayed. If you did not supply a license file, the *Subscription* screen is displayed where you must supply your license details. This is documented here: link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_operations_guide/assembly-aap-activate[Chapter 1. Activating Red Hat Ansible Automation Platform]. +// Michelle: Removing additional component UI references as platform gateway UI will be used going forward - AAP-18760 +// .Accessing {ControllerName} UI -.Accessing {HubName} UI +// The {ControllerName} UI is available by default at: -The {HubName} UI is available by default at: +// ---- +// https://:8443 +// ---- ----- -https://:8444 ----- +// Log in as the admin user with the password you created for *controller_admin_password*. -Log in as the admin user with the password you created for *hub_admin_password*. +// If you supplied the license manifest as part of the installation, the {PlatformNameShort} dashboard is displayed. If you did not supply a license file, the *Subscription* screen is displayed where you must supply your license details. This is documented here: link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_operations_guide/assembly-aap-activate[Chapter 1. Activating {PlatformName}]. +// .Accessing {HubName} UI -.Accessing {EDAName} UI +// The {HubName} UI is available by default at: -The {EDAName} UI is available by default at: ----- -https://:8445 ----- +// ---- +// https://:8444 +// ---- + +// Log in as the admin user with the password you created for *hub_admin_password*. + + +// .Accessing {EDAName} UI + +// The {EDAName} UI is available by default at: +// ---- +// https://:8445 +// ---- -Log in as the admin user with the password you created for *eda_admin_password*. +// Log in as the admin user with the password you created for *eda_admin_password*. diff --git a/downstream/modules/platform/ref-using-custom-tls-certificates.adoc b/downstream/modules/platform/ref-using-custom-tls-certificates.adoc index e8b4a03e82..c2f4ec3991 100644 --- a/downstream/modules/platform/ref-using-custom-tls-certificates.adoc +++ b/downstream/modules/platform/ref-using-custom-tls-certificates.adoc @@ -8,7 +8,7 @@ [role="_abstract"] -By default, the installer generates TLS certificates and keys for all services which are signed by a custom Certificate Authority (CA). You can provide a custom TLS certificate/key for each service. If that certificate is signed by a custom CA, you must provide the CA TLS certificate and key. +By default, the installer generates TLS certificates and keys for all services that are signed by a custom Certificate Authority (CA). You can provide a custom TLS certificate and key for each service. If that certificate is signed by a custom CA, you must provide the CA TLS certificate and key. * Certificate Authority ---- @@ -16,19 +16,25 @@ ca_tls_cert=/full/path/to/tls/certificate ca_tls_key=/full/path/to/tls/key ---- -* Automation Controller +* Platform gateway +---- +gateway_tls_cert=/full/path/to/tls/certificate +gateway_tls_key=/full/path/to/tls/key +---- + +* {ControllerNameStart} ---- controller_tls_cert=/full/path/to/tls/certificate controller_tls_key=/full/path/to/tls/key ---- -* Automation Hub +* {HubNameStart} ---- hub_tls_cert=/full/path/to/tls/certificate hub_tls_key=/full/path/to/tls/key ---- -* Automation EDA +* {EDAName} ---- eda_tls_cert=/full/path/to/tls/certificate eda_tls_key=/full/path/to/tls/key From 3c6120d8ffe3e375ed6a82b367334e34d598f255 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Tue, 2 Jul 2024 10:28:05 +0100 Subject: [PATCH 010/590] Create Containerized AAP Troubleshooting content (#1499) (#1508) Create Containerized AAP Troubleshooting content https://issues.redhat.com/browse/AAP-15683 --- ...pendix-troubleshoot-containerized-aap.adoc | 9 + ...ref-containerized-troubleshoot-config.adoc | 23 ++ ...ef-containerized-troubleshoot-install.adoc | 133 ++++++++ .../ref-containerized-troubleshoot-ref.adoc | 311 ++++++++++++++++++ .../aap-containerized-install/master.adoc | 3 + 5 files changed, 479 insertions(+) create mode 100644 downstream/assemblies/platform/assembly-appendix-troubleshoot-containerized-aap.adoc create mode 100644 downstream/modules/platform/ref-containerized-troubleshoot-config.adoc create mode 100644 downstream/modules/platform/ref-containerized-troubleshoot-install.adoc create mode 100644 downstream/modules/platform/ref-containerized-troubleshoot-ref.adoc diff --git a/downstream/assemblies/platform/assembly-appendix-troubleshoot-containerized-aap.adoc b/downstream/assemblies/platform/assembly-appendix-troubleshoot-containerized-aap.adoc new file mode 100644 index 0000000000..84dfcc4910 --- /dev/null +++ b/downstream/assemblies/platform/assembly-appendix-troubleshoot-containerized-aap.adoc @@ -0,0 +1,9 @@ +[id="appendix-troubleshoot-containerized-aap"] += Troubleshooting containerized {PlatformNameShort} + +Use this information to troubleshoot your containerized {PlatformNameShort} installation. + +include::platform/ref-containerized-troubleshoot-install.adoc[leveloffset=+1] +include::platform/ref-containerized-troubleshoot-config.adoc[leveloffset=+1] +include::platform/ref-containerized-troubleshoot-ref.adoc[leveloffset=+1] + diff --git a/downstream/modules/platform/ref-containerized-troubleshoot-config.adoc b/downstream/modules/platform/ref-containerized-troubleshoot-config.adoc new file mode 100644 index 0000000000..17732e9094 --- /dev/null +++ b/downstream/modules/platform/ref-containerized-troubleshoot-config.adoc @@ -0,0 +1,23 @@ +[id="ref-containerized-troubleshoot-config"] + += Troubleshooting containerized {PlatformNameShort} configuration + +// New items have appeared within installation program directory once an install has been run. What are these items? + +.Sometimes the post install for seeding my {PlatformNameShort} content errors out. This could manifest itself as output similar to this: + +---- +TASK [infra.controller_configuration.projects : Configure Controller Projects | Wait for finish the projects creation] *************************************** +Friday 29 September 2023 11:02:32 +0100 (0:00:00.443) 0:00:53.521 ****** +FAILED - RETRYING: [daap1.lan]: Configure Controller Projects | Wait for finish the projects creation (1 retries left). +failed: [daap1.lan] (item={'failed': 0, 'started': 1, 'finished': 0, 'ansible_job_id': '536962174348.33944', 'results_file': '/home/aap/.ansible_async/536962174348.33944', 'changed': False, '__controller_project_item': {'name': 'AAP Config-As-Code Examples', 'organization': 'Default', 'scm_branch': 'main', 'scm_clean': 'no', 'scm_delete_on_update': 'no', 'scm_type': 'git', 'scm_update_on_launch': 'no', 'scm_url': 'https://github.com/user/repo.git'}, 'ansible_loop_var': '__controller_project_item'}) => {"__projects_job_async_results_item": {"__controller_project_item": {"name": "AAP Config-As-Code Examples", "organization": "Default", "scm_branch": "main", "scm_clean": "no", "scm_delete_on_update": "no", "scm_type": "git", "scm_update_on_launch": "no", "scm_url": "https://github.com/user/repo.git"}, "ansible_job_id": "536962174348.33944", "ansible_loop_var": "__controller_project_item", "changed": false, "failed": 0, "finished": 0, "results_file": "/home/aap/.ansible_async/536962174348.33944", "started": 1}, "ansible_job_id": "536962174348.33944", "ansible_loop_var": "__projects_job_async_results_item", "attempts": 30, "changed": false, "finished": 0, "results_file": "/home/aap/.ansible_async/536962174348.33944", "started": 1, "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []} +---- + +The `infra.controller_configuration.dispatch` role uses an asynchronous loop with 30 retries to apply each configuration type, and the default delay between retries is 1 second. If the configuration is large, this might not be enough time to apply everything before the last retry occurs. + +Increase the retry delay by setting the `controller_configuration_async_delay` variable to something other than 1 second. For example, setting it to 2 seconds doubles the retry time. The place to do this would be in the repository where the controller configuration is defined. It could also be added to the `[all:vars]` section of the installation program inventory file. + +A few instances have shown that no additional modification is required, and re-running the installation program again worked. + +//I have updated a configuration file, how do I get changes to apply? +// diff --git a/downstream/modules/platform/ref-containerized-troubleshoot-install.adoc b/downstream/modules/platform/ref-containerized-troubleshoot-install.adoc new file mode 100644 index 0000000000..908f51e0e4 --- /dev/null +++ b/downstream/modules/platform/ref-containerized-troubleshoot-install.adoc @@ -0,0 +1,133 @@ +[id="ref-containerized-troubleshoot-install"] + += Troubleshooting containerized {PlatformNameShort} installation + +//Upgrades How do I update my components with a new image? +// + +//The UI is inaccessible. What should I check? +//What should I check for? +//Database migrations - where? +//Are containers running web UI services - details? + +// I cannot log in to the UI + +//How do I check or reset the admin password? +//How do I check any LDAP configured logins? + +.The installation takes a long time, or has errors, what should I check? + +. Ensure your system meets the minimum requirements as outlined in the installation guide. Items such as improper storage choices and high latency when distributing across many hosts will all have a significant impact. + +. Check the installation log file located by default at `./aap_install.log` unless otherwise changed within the local installer `ansible.cfg`. + +. Enable task profiling callbacks on an ad hoc basis to give an overview of where the installation program spends the most time. To do this, use the local `ansible.cfg` file. Add a callback line such as this under the `[defaults]` section: + +---- +$ cat ansible.cfg +[defaults] +callbacks_enabled = ansible.posix.profile_tasks +---- + +.{ControllerNameStart} returns an error of 413 + +This error is due to `manifest.zip` license files that are larger than the `nginx_client_max_body_size` setting. If this error occurs, you will need to change the installation inventory file to include the following variables: + +---- +nginx_disable_hsts: false +nginx_http_port: 8081 +nginx_https_port: 8444 +nginx_client_max_body_size: 20m +nginx_user_headers: [] +---- + +The current default setting of `20m` should be enough to avoid this issue. + +.The installation failed with a “502 Bad Gateway” when going to the controller UI. + +This error can occur and manifest itself in the installation application output as: + +---- +TASK [ansible.containerized_installer.automationcontroller : Wait for the Controller API to te ready] ****************************************************** +fatal: [daap1.lan]: FAILED! => {"changed": false, "connection": "close", "content_length": "150", "content_type": "text/html", "date": "Fri, 29 Sep 2023 09:42:32 GMT", "elapsed": 0, "msg": "Status code was 502 and not [200]: HTTP Error 502: Bad Gateway", "redirected": false, "server": "nginx", "status": 502, "url": "https://daap1.lan:443/api/v2/ping/"} +---- + +* Check if you have an `automation-controller-web` container running and a systemd service. + + +[NOTE] +==== +This is used at the regular unprivileged user not system wide level. If you have used `su` to switch to the user running the containers, you must set your `XDG_RUNTIME_DIR` environment variable to the correct value to be able to interact with the user `systemctl` units. +==== + +---- +export XDG_RUNTIME_DIR="/run/user/$UID" +---- + +---- +podman ps | grep web +systemctl --user | grep web +---- + +No output indicates a problem. + + +. Try restarting the `automation-controller-web` service: ++ +---- +systemctl start automation-controller-web.service --user +systemctl --user | grep web +systemctl status automation-controller-web.service --user +---- ++ +---- +Sep 29 10:55:16 daap1.lan automation-controller-web[29875]: nginx: [emerg] bind() to 0.0.0.0:443 failed (98: Address already in use) +Sep 29 10:55:16 daap1.lan automation-controller-web[29875]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) +---- ++ +The output indicates that the port is already, or still, in use by another service. In this case `nginx`. + +. Run: ++ +---- +sudo pkill nginx +---- ++ +. Restart and status check the web service again. + +Normal service output should look similar to the following, and should still be running: + +---- +Sep 29 10:59:26 daap1.lan automation-controller-web[30274]: WSGI app 0 (mountpoint='/') ready in 3 seconds on interpreter 0x1a458c10 pid: 17 (default app) +Sep 29 10:59:26 daap1.lan automation-controller-web[30274]: WSGI app 0 (mountpoint='/') ready in 3 seconds on interpreter 0x1a458c10 pid: 20 (default app) +Sep 29 10:59:27 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:27,043 INFO [-] daphne.cli Starting server at tcp:port=8051:interface=127.0.> +Sep 29 10:59:27 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:27,043 INFO Starting server at tcp:port=8051:interface=127.0.0.1 +Sep 29 10:59:27 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:27,048 INFO [-] daphne.server HTTP/2 support not enabled (install the http2 > +Sep 29 10:59:27 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:27,048 INFO HTTP/2 support not enabled (install the http2 and tls Twisted ex> +Sep 29 10:59:27 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:27,049 INFO [-] daphne.server Configuring endpoint tcp:port=8051:interface=1> +Sep 29 10:59:27 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:27,049 INFO Configuring endpoint tcp:port=8051:interface=127.0.0.1 +Sep 29 10:59:27 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:27,051 INFO [-] daphne.server Listening on TCP address 127.0.0.1:8051 +Sep 29 10:59:27 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:27,051 INFO Listening on TCP address 127.0.0.1:8051 +Sep 29 10:59:54 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:54,139 INFO success: nginx entered RUNNING state, process has stayed up for > th> +Sep 29 10:59:54 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:54,139 INFO success: nginx entered RUNNING state, process has stayed up for > th> +Sep 29 10:59:54 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:54,139 INFO success: uwsgi entered RUNNING state, process has stayed up for > th> +Sep 29 10:59:54 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:54,139 INFO success: uwsgi entered RUNNING state, process has stayed up for > th> +Sep 29 10:59:54 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:54,139 INFO success: daphne entered RUNNING state, process has stayed up for > t> +Sep 29 10:59:54 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:54,139 INFO success: daphne entered RUNNING state, process has stayed up for > t> +Sep 29 10:59:54 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:54,139 INFO success: ws-heartbeat entered RUNNING state, process has stayed up f> +Sep 29 10:59:54 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:54,139 INFO success: ws-heartbeat entered RUNNING state, process has stayed up f> +Sep 29 10:59:54 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:54,139 INFO success: cache-clear entered RUNNING state, process has stayed up fo> +Sep 29 10:59:54 daap1.lan automation-controller-web[30274]: 2023-09-29 09:59:54,139 INFO success: cache-clear entered RUNNING state, process has stayed up +---- + +You can run the installation program again to ensure everything installs as expected. + +.When attempting to install containerized {PlatformNameShort} in {AWS} you receive output that there is no space left on device + +---- +TASK [ansible.containerized_installer.automationcontroller : Create the receptor container] *************************************************** +fatal: [ec2-13-48-25-168.eu-north-1.compute.amazonaws.com]: FAILED! => {"changed": false, "msg": "Can't create container receptor", "stderr": "Error: creating container storage: creating an ID-mapped copy of layer \"98955f43cc908bd50ff43585fec2c7dd9445eaf05eecd1e3144f93ffc00ed4ba\": error during chown: storage-chown-by-maps: lchown usr/local/lib/python3.9/site-packages/azure/mgmt/network/v2019_11_01/operations/__pycache__/_available_service_aliases_operations.cpython-39.pyc: no space left on device: exit status 1\n", "stderr_lines": ["Error: creating container storage: creating an ID-mapped copy of layer \"98955f43cc908bd50ff43585fec2c7dd9445eaf05eecd1e3144f93ffc00ed4ba\": error during chown: storage-chown-by-maps: lchown usr/local/lib/python3.9/site-packages/azure/mgmt/network/v2019_11_01/operations/__pycache__/_available_service_aliases_operations.cpython-39.pyc: no space left on device: exit status 1"], "stdout": "", "stdout_lines": []} +---- + +If you are installing a `/home` filesystem into a default {AWS} marketplace RHEL instance, it might be too small since `/home` is part of the root `/` filesystem. You will need to make more space available. The documentation specifies a minimum of 40GB for a single-node deployment of containerized {PlatformNameShort}. + diff --git a/downstream/modules/platform/ref-containerized-troubleshoot-ref.adoc b/downstream/modules/platform/ref-containerized-troubleshoot-ref.adoc new file mode 100644 index 0000000000..e060670f70 --- /dev/null +++ b/downstream/modules/platform/ref-containerized-troubleshoot-ref.adoc @@ -0,0 +1,311 @@ +[id="ref-containerized-troubleshoot-ref"] + += Containerized {PlatformNameShort} reference + +.Can you provide details of the architecture for the {PlatformNameShort} containerized design? + +We use as much of the underlying native RHEL technology as possible. For the container runtime and management of services we use Podman. Many Podman services and commands are used to show and investigate the solution. + +For instance, use `podman ps`, and `podman images` to see some of the foundational and running pieces: + +---- +[aap@daap1 aap]$ podman ps +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +88ed40495117 registry.redhat.io/rhel8/postgresql-13:latest run-postgresql 48 minutes ago Up 47 minutes postgresql +8f55ba612f04 registry.redhat.io/rhel8/redis-6:latest run-redis 47 minutes ago Up 47 minutes redis +56c40445c590 registry.redhat.io/ansible-automation-platform-24/ee-supported-rhel8:latest /usr/bin/receptor... 47 minutes ago Up 47 minutes receptor +f346f05d56ee registry.redhat.io/ansible-automation-platform-24/controller-rhel8:latest /usr/bin/launch_a... 47 minutes ago Up 45 minutes automation-controller-rsyslog +26e3221963e3 registry.redhat.io/ansible-automation-platform-24/controller-rhel8:latest /usr/bin/launch_a... 46 minutes ago Up 45 minutes automation-controller-task +c7ac92a1e8a1 registry.redhat.io/ansible-automation-platform-24/controller-rhel8:latest /usr/bin/launch_a... 46 minutes ago Up 28 minutes automation-controller-web + +[aap@daap1 aap]$ podman images +REPOSITORY TAG IMAGE ID CREATED SIZE +registry.redhat.io/ansible-automation-platform-24/ee-supported-rhel8 latest b497bdbee59e 10 days ago 3.16 GB +registry.redhat.io/ansible-automation-platform-24/controller-rhel8 latest ed8ebb1c1baa 10 days ago 1.48 GB +registry.redhat.io/rhel8/redis-6 latest 78905519bb05 2 weeks ago 357 MB +registry.redhat.io/rhel8/postgresql-13 latest 9b65bc3d0413 2 weeks ago 765 MB +[aap@daap1 aap]$ +---- + +//Describe AAP Controller containers: + +//Describe AAP Hub containers: + +//Describe EDA Controller containers: + +Containerized {PlatformNameShort} runs as rootless containers for maximum out-of-the-box security. This means you can install containerized {PlatformNameShort} by using any local unprivileged user account. Privilege escalation is only needed for certain root level tasks, and by default is not needed to use root directly. + +Once installed, you will notice certain items have populate on the filesystem where the installation program is run (the underlying RHEL host). + +---- +[aap@daap1 aap]$ tree -L 1 +. +├── aap_install.log +├── ansible.cfg +├── collections +├── galaxy.yml +├── inventory +├── LICENSE +├── meta +├── playbooks +├── plugins +├── README.md +├── requirements.yml +├── roles +---- + +Other containerized services that make use of things such as Podman volumes, reside under the installation root directory used. Here are some examples for further reference: + +The containers directory contains some of the Podman specifics used and installed for the execution plane: + +---- +containers/ +├── podman +├── storage +│ ├── defaultNetworkBackend +│ ├── libpod +│ ├── networks +│ ├── overlay +│ ├── overlay-containers +│ ├── overlay-images +│ ├── overlay-layers +│ ├── storage.lock +│ └── userns.lock +└── storage.conf +---- + +The controller directory has some of the installed configuration and runtime data points: + +---- +controller/ +├── data +│ ├── job_execution +│ ├── projects +│ └── rsyslog +├── etc +│ ├── conf.d +│ ├── launch_awx_task.sh +│ ├── settings.py +│ ├── tower.cert +│ └── tower.key +├── nginx +│ └── etc +├── rsyslog +│ └── run +└── supervisor + └── run +---- + +The receptor directory has the {AutomationMesh} configuration: + +---- +receptor/ +├── etc +│ └── receptor.conf +└── run + ├── receptor.sock + └── receptor.sock.lock +---- + +After installation, you will also find other pieces in the local users home directory such as the `.cache` directory: + +---- +.cache/ +├── containers +│ └── short-name-aliases.conf.lock +└── rhsm + └── rhsm.log +---- + +As we run by default in the most secure manner, such as rootless Podman, we can also use other services such as running `systemd` as non-privileged users. Under `systemd` you can see some of the component service controls available: + +The `.config` directory: + +---- +.config/ +├── cni +│ └── net.d +│ └── cni.lock +├── containers +│ ├── auth.json +│ └── containers.conf +└── systemd + └── user + ├── automation-controller-rsyslog.service + ├── automation-controller-task.service + ├── automation-controller-web.service + ├── default.target.wants + ├── podman.service.d + ├── postgresql.service + ├── receptor.service + ├── redis.service + └── sockets.target.wants +---- + + +This is specific to Podman and conforms to the Open Container Initiative (OCI) specifications. Whereas Podman run as the root user would use `/var/lib/containers` by default, for standard users the hierarchy under `$HOME/.local` is used. + +The `.local` directory: + +---- +.local/ +└── share + └── containers + ├── cache + ├── podman + └── storage + +As an example `.local/storage/volumes` contains what the output from `podman volume ls` provides: + +[aap@daap1 containers]$ podman volume ls +DRIVER VOLUME NAME +local d73d3fe63a957bee04b4853fd38c39bf37c321d14fdab9ee3c9df03645135788 +local postgresql +local redis_data +local redis_etc +local redis_run +---- + +We isolate the execution plane from the control plane main services (PostgreSQL, Redis, {ControllerName}, receptor, {HubName} and {EDAName}). + +Control plane services run with the standard Podman configuration (`~/.local/share/containers/storage`). + +Execution plane services use a dedicated configuration or storage (`~/aap/containers/storage`) to avoid execution plane containers to be able to interact with the control plane. + + +.How can I see host resource utilization statistics? + +* Run: + +---- +$ podman container stats -a +---- + +---- +podman container stats -a +ID NAME CPU % MEM USAGE / LIMIT MEM % NET IO BLOCK IO PIDS CPU TIME AVG CPU % +0d5d8eb93c18 automation-controller-web 0.23% 959.1MB / 3.761GB 25.50% 0B / 0B 0B / 0B 16 20.885142s 1.19% +3429d559836d automation-controller-rsyslog 0.07% 144.5MB / 3.761GB 3.84% 0B / 0B 0B / 0B 6 4.099565s 0.23% +448d0bae0942 automation-controller-task 1.51% 633.1MB / 3.761GB 16.83% 0B / 0B 0B / 0B 33 34.285272s 1.93% +7f140e65b57e receptor 0.01% 5.923MB / 3.761GB 0.16% 0B / 0B 0B / 0B 7 1.010613s 0.06% +c1458367ca9c redis 0.48% 10.52MB / 3.761GB 0.28% 0B / 0B 0B / 0B 5 9.074042s 0.47% +ef712cc2dc89 postgresql 0.09% 21.88MB / 3.761GB 0.58% 0B / 0B 0B / 0B 21 15.571059s 0.80% +---- + +The previous is an example of a Dell sold and offered containerized {PlatformNameShort} solution (DAAP) install and utilizes ~1.8Gb RAM. + + +.How much storage is used and where? + +As we run rootless Podman the container volume storage is under the local user at `$HOME/.local/share/containers/storage/volumes`. + +. To view the details of each volume run: ++ +---- +$ podman volume ls +---- ++ +. Then run: ++ +---- +$ podman volume inspect +---- + +Here is an example: + +---- +$ podman volume inspect postgresql +[ + { + "Name": "postgresql", + "Driver": "local", + "Mountpoint": "/home/aap/.local/share/containers/storage/volumes/postgresql/_data", + "CreatedAt": "2024-01-08T23:39:24.983964686Z", + "Labels": {}, + "Scope": "local", + "Options": {}, + "MountCount": 0, + "NeedsCopyUp": true + } +] +---- + + +Several files created by the installation program are located in `$HOME/aap/` and bind-mounted into various running containers. + + +. To view the mounts associated with a container run: ++ +---- +$ podman ps --format "{{.ID}}\t{{.Command}}\t{{.Names}}" +---- ++ +---- +Example: +$ podman ps --format "{{.ID}}\t{{.Command}}\t{{.Names}}" +89e779b81b83 run-postgresql postgresql +4c33cc77ef7d run-redis redis +3d8a028d892d /usr/bin/receptor... receptor +09821701645c /usr/bin/launch_a... automation-controller-rsyslog +a2ddb5cac71b /usr/bin/launch_a... automation-controller-task +fa0029a3b003 /usr/bin/launch_a... automation-controller-web +20f192534691 gunicorn --bind 1... automation-eda-api +f49804c7e6cb daphne -b 127.0.0... automation-eda-daphne +d340b9c1cb74 /bin/sh -c nginx ... automation-eda-web +111f47de5205 aap-eda-manage rq... automation-eda-worker-1 +171fcb1785af aap-eda-manage rq... automation-eda-worker-2 +049d10555b51 aap-eda-manage rq... automation-eda-activation-worker-1 +7a78a41a8425 aap-eda-manage rq... automation-eda-activation-worker-2 +da9afa8ef5e2 aap-eda-manage sc... automation-eda-scheduler +8a2958be9baf gunicorn --name p... automation-hub-api +0a8b57581749 gunicorn --name p... automation-hub-content +68005b987498 nginx -g daemon o... automation-hub-web +cb07af77f89f pulpcore-worker automation-hub-worker-1 +a3ba05136446 pulpcore-worker automation-hub-worker-2 +---- ++ + +. Then run: ++ +---- +$ podman inspect | jq -r .[].Mounts[].Source +---- ++ +---- +Example: +/home/aap/.local/share/containers/storage/volumes/receptor_run/_data +/home/aap/.local/share/containers/storage/volumes/redis_run/_data +/home/aap/aap/controller/data/rsyslog +/home/aap/aap/controller/etc/tower.key +/home/aap/aap/controller/etc/conf.d/callback_receiver_workers.py +/home/aap/aap/controller/data/job_execution +/home/aap/aap/controller/nginx/etc/controller.conf +/home/aap/aap/controller/etc/conf.d/subscription_usage_model.py +/home/aap/aap/controller/etc/conf.d/cluster_host_id.py +/home/aap/aap/controller/etc/conf.d/insights.py +/home/aap/aap/controller/rsyslog/run +/home/aap/aap/controller/data/projects +/home/aap/aap/controller/etc/settings.py +/home/aap/aap/receptor/etc/receptor.conf +/home/aap/aap/controller/etc/conf.d/execution_environments.py +/home/aap/aap/tls/extracted +/home/aap/aap/controller/supervisor/run +/home/aap/aap/controller/etc/uwsgi.ini +/home/aap/aap/controller/etc/conf.d/container_groups.py +/home/aap/aap/controller/etc/launch_awx_task.sh +/home/aap/aap/controller/etc/tower.cert +---- + ++ + +. If the `jq` RPM is not installed, install with: ++ +---- +$ sudo dnf -y install jq +---- + +// Reference How do I check on the health of the service and that all components are running? +// +// I am experiencing errors and want to look for the application logs, where do I look? +// + diff --git a/downstream/titles/aap-containerized-install/master.adoc b/downstream/titles/aap-containerized-install/master.adoc index 1a5cf65b27..18762f4cc7 100644 --- a/downstream/titles/aap-containerized-install/master.adoc +++ b/downstream/titles/aap-containerized-install/master.adoc @@ -11,3 +11,6 @@ include::attributes/attributes.adoc[] include::{Boilerplate}[] include::platform/assembly-aap-containerized-installation.adoc[leveloffset=+1] + +[appendix] +include::platform/assembly-appendix-troubleshoot-containerized-aap.adoc[leveloffset=1] From 23e393c98948ae0888bbb29758dd89754af14de6 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Tue, 2 Jul 2024 11:59:58 +0100 Subject: [PATCH 011/590] 2.5 Create additional settings modules (#1490) (#1512) * Create additional settings modules https://issues.redhat.com/browse/AAP-24538 --- downstream/images/platform_gateway_full.png | Bin 0 -> 92338 bytes .../images/platform_gateway_settings_page.png | Bin 0 -> 131681 bytes downstream/images/troubleshooting_options.png | Bin 0 -> 16757 bytes downstream/images/user_preferences_page.png | Bin 0 -> 32292 bytes .../platform/proc-custom-logos-images.adoc | 26 +++++ .../proc-settings-platform-gateway.adoc | 97 ++++++++++++++++++ .../proc-settings-troubleshooting.adoc | 19 ++++ .../proc-settings-user-preferences.adoc | 50 +++++++++ 8 files changed, 192 insertions(+) create mode 100644 downstream/images/platform_gateway_full.png create mode 100644 downstream/images/platform_gateway_settings_page.png create mode 100644 downstream/images/troubleshooting_options.png create mode 100644 downstream/images/user_preferences_page.png create mode 100644 downstream/modules/platform/proc-custom-logos-images.adoc create mode 100644 downstream/modules/platform/proc-settings-platform-gateway.adoc create mode 100644 downstream/modules/platform/proc-settings-troubleshooting.adoc create mode 100644 downstream/modules/platform/proc-settings-user-preferences.adoc diff --git a/downstream/images/platform_gateway_full.png b/downstream/images/platform_gateway_full.png new file mode 100644 index 0000000000000000000000000000000000000000..99882b4d694e154e8ebced13c620402d7b171aaa GIT binary patch literal 92338 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 |-atA>mlc&x1=;oLg6q>T=W>(fA2uptZzj5VX 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 W^5#t1*Co;|Yi>G9b;!hF)&Bsb@O@bT literal 0 HcmV?d00001 diff --git a/downstream/images/troubleshooting_options.png b/downstream/images/troubleshooting_options.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc2374af7aee0d02d16c391376e830ac909acac GIT binary patch literal 16757 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 S+RShT)UhKc71QNSF8?3t(mqK5 literal 0 HcmV?d00001 diff --git a/downstream/images/user_preferences_page.png b/downstream/images/user_preferences_page.png new file mode 100644 index 0000000000000000000000000000000000000000..c77ef8abd75b41948723011f7e256cb159246695 GIT binary patch literal 32292 zcmdSCcTm;Y_C0tF-L|$$8$b*Ml^{wG1Q8?{P`Ctq z5XssINR}*F$r;HRW*z%ERWpBmU(Nh}Q)5-v6NGy|_ndw9UVE*z&%1Z=g7lV6dp1!h zlr2;lDP;=f*HaYAnm51witpr%|8^4pv)=9uRrNRgar@2iF23Gve@??*#oE~3@rtbx z#pIf`l@X7ffvu6zH9J#l`>}QT68Iq=@dQ?PINLcikAnR!b)-x)qRZF^A6bdVaDs@`b>BVrHqtnCL)#CBS658qQNA_$_ zIdHm$(JYbgoRyGyBk#G3LUH=C-f_)Z=j0X@D&Ec2LPwM!ESdwK;b9l^D{pvt0vAH>_X($xvY6p>X@B z?Ry`F5qy!AZmBoco>#_WidVj*DJ6&B9Xsn%>iB z=K6p3&o5+AA_zg1T~dEO-5;AOrJlhrY^?*F{=_oV}CXdjlAmszsx)f^Y5}sDb&<-v^d-UP zXjAI)FU~bBI{Z9C{(AlEWu&BTHD_4!SzB9+oH%hv`q93HD$kYh>Tv0yQokcy4P?PY z9R?%*x&3=tNeT7#@4GI^$lQIzA{mk}9Cq$O`Q8BiOxtq@r5~xjI&<65!XnmMilUJ!LiPf<6XtYbvWJ=~SN_%Q;9#NB3NwLm}vRMc7K5TD)qqo_J41kh*57 zvD)R!FD2%?cj#u{sL<)f`}I24#V8fHwYIdhxaFMn+FI2uDsGmI53giu8nd*t)ZO17 z6QJiptq2ls{Bzv~W*4jQ@NglQDO110YO+a5Nw$uT>bE!13)*x_wPo6IYRDPg zRJA=xmS*UwG@d_oi9X-5*{w5bkB75PF<*z;y_^dZWnG7;rNI>!@|ZR4zw1mm|GQ%p z3R~gFkBoGAA-9>uT^MPbg@rQ&{rHr^ZtX9LQBMw;|AMgG%*n}lmbSm-bw-BpDtF0s zM@Qj*3JQ3d=Lh4HX@1$Owl+5W{@j{Zl{~)vbGvtP%iiN@hdQwKUXNyr9`5b64L|?T zrMtDrd$$3v>u9UUgCUg&nQh@t-Sx}b)GAeESXtZarOf>y%S~rJSybGv9Kf~K27mV&H0}B zy%j;xFJH2@WjV<4Xuqv%&vjK9w#I(PVX-eIXuLv_i*ubFRTTHyD}1fLj4%Hw+x)`9 zVe9rBhCUw_$)vk?f14g{)3#_#s$ZBMQp>b8qSkC+aeMjt^-+?gO{zi=5WzRb+7qe1 z99(!zQJcBzK;o}V)bb@zYOIAGQyZrAJW zGCP`x4K&3AE`0r)jvSbij-xS%`QC?Z>;tWtb~qINc!eX<($eHfj$BIkjDuL8tS>2Y z^5jtY^JC4gul&u%B_W}=Wsl(Jw^l7r4@z%+xL5c>ONMnL;$iy329{4BKAeuflvslU zXE188vNXRiUd-YrWO0c{FGnLKCFTBu2elvm-Z1^mi{-HPTgy0|%r};n%By?~&#I`N zI$7~$!rN)Vu8F3XNbZx%roUvPC_Ooj?@kp*W^XF*duqP;?~YNvCr=%aShJm;-e|>t zxx|-KCBbf>hJCUM1w}|qOl&jtJkAfz@8QFTLWeIUn92woR!_2&Soyl+H*Aj}jYg{x zY~K({K_TEjey!DXTr2xV;&@Mh{vITn;{l5cL&?6np<yoIZz$yO#I$RR#wQFNJ!p zm~~eMw>&o7yj$R7r;d};yUfw1R1=;`qdEs!pBsG@K>-Qvw>Iu5?+f75zb4V1<7{`9 z_HB6B(z4|(k7lkx@uS@b&wC%uUmZ@ZDp%aXBx1{^Ip0$ju=n`!<9FB$Mw-*_TwyHA z9?J_FE_uE|d~S?SX!3?0f1Oc4O6Pl_2VLsdI2bGPM6aZU+SI(WJ@%oq_5QlX%??dQ z!8zt69~8x$1u#&F(Mr5}$iQYe7PIKH}6KquK>6DenV<3__Xegm3c z1&#dyhx{{E>cU7yhy6r%iJ{T?hkMw4OQyaU1Ru8wJggRHI39N?F)+(@~PN+Y!K45h!$|!k{8%=qd9^L!8=?rj*Bz z|FF~Fwrv|NLN0*UY@jBR7V-J>ML! zt548Warx@v;^c(44x^goKi{yr92s@tX3)~a3G2H#aBfm!F^WBsDdat)#N@LZViBjrZ)9z9yW@@St(7(T1kK08N8 zPw(APyf~7FHQz)atwsrVxE(7LxOVLt7l-a>mC5SL^5KgwPu+JwqGG2;D~2{88FY7c z(gvRi42nidXLH%yxN#{&%-R0iKfmbad+264DvYjXo8zd)S+(Z6s(aC~__MiB*Q*Dj zc--$9wLa{bZ#mgpLC_47gqwz*p59^IthD>|M>r%UCH?sH^^D5={c>~N=RTesmqF|^cTD7&^h zGC+^U)|Th4jap@E=Q@}1WlO>5!Uwz9sUaaDy4 z-dYJc460_nd)H5@aIRFTWLac4s;Z(`hUXq3^QXUVW_)~Ygep+gheX#)x5CoXS@__v zYRtvJ7KO2)r%xI?8X5%FTwm?D&-Q@rOL&nn;~o34fhTE?Dypg!C6}js+udh%$;Uy8kvf|8WTfB%}@29plU0)6bWo%`HYZ*hZq^E?!UKPnI{8BiM zPK;S?l-9fJSF+y5Z+>^7YGR>dOpdm)FvREV>MHpr$IHu0p2K%@0l|-T;nF^Wvuf$) zY6K($%hpr|pLCe&S7H)#x=0c%4s%_C<}tDisEmp#u7Iyf6Z*6fzm@87>~eqNhu?PzcWN=wSV~VA&0xsvBTZOV^6ou&O;YZAw8%7P4!lV zCSxH>>g&~zuWJH@ESTdH19D$X*SemY(vALWk7}bzp?GS{I}?U2aYM0VqV#o&WAyvy ze*-)GNakX|P5GywCZYpfmm{OT-28I$;- zLx*HsF0*(e_>Ne&=g+Dk9X<#P3!~NFd-SLw_@rZv)uY|9c72rs&*cep7q#zy`SIgN zLnG|K?3WSaItLg3#*Tu5f}H45X%_d0zcDS z?8O@swF9nd^6~NYls`ur>-gGr{Y{2ayt4TEXZXA2yR3(goU;r``fXtMbLd=Y5;p&{rs58ROyjqQ+!EU7NFRv z!d?0?h9xxfh6K$(VdEMgjZ_ux*!8<%uj+EU^V_uk;oILi3S=?M{Y;L@(WDx0y@$K8U zy|e6c{({(T?m_p}<=H!_sgq|HfpP*;EE;+3=280ttIkPFM?32YUu!+uxL3%$&Okrl z2ZHu~`SPWgKUGHNXuId?vb0_{zBbIS{r>&>b`PZxS)Tw(4(;H=y7 zbR%6Z!@qfna?{%{c4(lxDpVi2wKk)}BOb@(u;RhD$tpxbm9Ia(@j&mv!02d1j3+dU=5yk1{W*L`1dxdjT zT3_r$xxRUB{v!fnSn8%vJIJK1mOqb-!-DhzEOPR2GG9 z%GudD7V&~kAVAb{^aZco&wL;zp&~EuU6@p*IPs^*f7Xxke)1NR-_M`;-%iu~Z(xG{ z`?vVAJb6k=N~+iUXS$)V20#08jOgBFWf`}d{#-js%^JDOKiBU6P4?=)f9C(1Ap8H@ zTPWL1_A0Qmvm4DE6;O3^%eiV`aLkpFLNVM^aMT`n&!l}Ue}5%~^1c}`w12cM+lSi@ z`O)M!GllYfRe*iX_CNk$^(`^3$iiN4^Ta07)dS|`)Cq`F#(^TG?6S(`@y zxL_&FHmUOJs(F2!n%QCNkHrILz64~= z44Lm9xAAF1bJ>?>T(Rf&?b}?)Iyk1)_)f@WP*Y1IfO3Pi(LS3PxMR3A-yA}c8bm7` zIL3GH-aT78JCuCWEN{*O2mU!wNgbf4r=QlaDVqGc;=bCiy@jWJ9p(FhAiVj(u_ja> zpM-p~S`N~D_Jw+Sm_B!z9vnz-)N>6R|7HF97?~#r6jf(6Gf|?E&uetr@A}k^6l`#~ zAr<5OQEK>oF4U9H@ zm4hE$gL|IkzZ?ybh@Dj7_%xOs`Nrl3Rb{!ri_W4s&5Zos{at*#ZHtfly;wXhg2KfGc#s5^O{0&I*i^- zpd%w$FEv_sPV*dgavqw_vpD3}wovyJ$ldh|SXM;Pxs z%578TU32=r_;mE6y!un^uMT!k*v6Xh>tKN|MzNpL(bb)~OM~cj+ zTx$~rucinpR|!P~j0-!6nAkJ7H#O(FW)LDb-LgqpE&fu)cTimkXV0AZ3)L{{*)zsO z{d_(8BbNk2_nx@^60{Y~eB$82ciGuP;HZW2StLE&-Wc#5NT%}|sA|`Buxq@Lsh)Ux zVjbl&z3kINueP(x%Fw`CMPh{xA3D^3JKtLJ2-pExw-=lzc)%^z*eS2~wc>{DXh zzKO;{xw(0|b$CtZ=qN8(G|+s~Ss5HRP|lwM2W4hv#ySi&WVuYo*^h1ejDApsrW$^J z3kb+_Qc{Nm1ywnGseqVjd2aLNM&LA)5ZhchNu@!;$#=HwHO@QD$#E;#87#5w2jc#DCDMN?YR@<<4PAVJ}z|9N;BQ>=;%nAzOn$m z#-Zf=B((cw0O$ZipHmEqnHL>*F80|3FTBpM&1=#T2}=9S60F6wzgH`68U;NZ(9rDb z`#%Zwowu@Jv4vSogT-?x1*}4(fKjO_{t0jK1V1_XrE4u^>E!Z68K07FbPzKD=-vsCiBC%m1w2Q`W1g9S zV8EVer5ZoX^Z=K2A3!J^>K z7LsY$%&`8wJ*g6l!^f;z-ziB*Nc6rnsR)b&nRNu=iO5mH13SzNYgRntKRcE?8*={9 zzS#X|@5s;?xHVqdbQPK5Fp~s|oN004L~Dj=^#O%vM^9Tdr&XiRi}sORIZ-i*$cbj) z)rnbMna%Ib!s)C7QRoNWP%TcCij-FO^7P-z!L#llcL`&@lbJb*(BI&PM6Z9nDe|72 zAb&pnq?wVHvZf|Y2rP&7a^7($1V%hLC~aQ+h{?P$sm)-ua^LUtPgeh8=^577Nuoa- z|AiK6)Yltgo{I{|g?I@beQk z&`pz1dfr}Zi$hu|Eh;*H<;oRO8h+ifCxT95?rUtR=X_7V9zoN`419V^s*_F{FH&r} z&I7(Gf)M+R53Kg;%r6ALLWp9RRtyn~W$~ChjlQfJykK3rg*s`c0mPHjoF|PZYqVnv zrD97Y?IUs)=$>#r2;cN5Gz^&5GtL>sFzlW4WE41)2sAeFAP)oi4ep%xX1t=*+hU!s z22OH%AUbq#YM?fb^zuFTH;9ic&xIlzJIqfQO%FGzpfS0GQ&N}j=?R8Q77dwyZfkdNw@VE$o>2rqLpX zTW`Kc5`Xn~p1#++m2xT&ZSfC<0lAZrM$6SoH#Y)Z)%YdDI&^=@96n;X1KLM383B;R zU~#T+>t@wGHoWEK6;!qvWZz@M7orZOZkC-N@7-ZL2u$FXpr7w?Cq6!Y+pb+Ew{G9w z&EZ?}Ou*>A&G)aT4`L5BUDcEIgf>&%%mcp-0)>APv(XgDLB zmcfTxqS4udLU;wkCm?E& ze<%V?Ufaq``PyMM_x&6CK%6%p?pY9|dq4*=*jzvdw`IeI4PEG5dKWE_EoxL(R&tLe z&T^xtItXr}X}qq}8@Y0KdwV-WO39JroU3(7x-DTV%NhnC67iD2D!mgRRC@DN9^9)r z{B2=cFyI$tE8B@~>Vs!rub?_SM9048&XtHc;c2iITc}0-)!|$4X~7Umj4!{Fy0`s2 z6rEZzFQf*1d>@I0PY`QNzr23+t+VrLYnDUV3D1?BD;5?(z0XYWlO+<4X4PT0pByu} zFu91uVx)OjNi1?#7zl1Ikdc)+y4||NB|#KA;XQfRwQSHdh*klXGa4aL0t7{9ihcX` zfnKIkm8(L;d;0qiL1qv#tC2!ePIv`ntCot2ilxcrw}1WhSGko!pdgj-K}cu#^e1x# z&nWHr=>?c=ciki5_HOOEb$)oBEli?yVdB0eY=pXclAWEsef#zh(@LalSHrfn%Eb@! z1MSA~5BCVw;AlD^R7gGpuJuI&%4Rm+Sx6GfJ|-qL5OX9GV)JEXWnIFYzZlv)Eooo5 zH`tzGKcGC)k*|-3Qi@ehnB7QmazkVMWR&OjG!X85G=X;N>gtmzwmqd>yu246*0^_0 ztmd#t#(EX*=2Q%+13-QX6~s>GwRML?@Clm(g*RRV2S>UpHnsO*#j8V@x9y1ZvwCZ( z$gfSI=!qe0RDcb-ySpR4e!Z-l>mpPbnKJhK)~%O-_9|xEH$*lr&*cI1kQTla@s2ZJ zpXFdd74RW+8sV*o=me~Lh@W3+|Ni|oJ3h(`lo(nZ*~{6td1M`hV${1`eAGwfzZbktRW`B$%AHD@~}0xge)4sAQTE- z`DZ<GuDv|>q6YcS7%BpBWIVLruwUiiZzXt z%XRp0X^zgE`}APF%4lomG`JIhHqAJ#^tkylT5O@%jT<*=a*eW;C%>BP#c@y^7I3A| zRO3{+giJr5>hM@hT$mk8M!Jka0Uhkf&rj0N=fxA=_VS9yp@g>HXOQ0Z)=HaHQlhe< zSs(|6NAryoAha?{a=OQ|%N7<19jtb#FQ?Ceg9m%MyA9jxjvVX(xITGf_%mdT?yjzI zG;iYLIq_=oL=$jd7>Fj=619Y_ZIK}c@K06sDX-4EmoYJiz}t%!^v%3n`^zR%NOq#` z3u(^D{)>B)+~>Y|(IU`|SRnHd&g~e}Udq=(BNLNo9L&M#MtyZ`Vm(9}dOkg!Vjq@9 z8oL~cbHc`s<*(+E7(}Lv2S$R_A8K3`l1Nf^MFme&?ekba&r4)Ekd)%CwPg(=lP2k8 zhJjEcryrVzPn(`O|2Fh5??`y{RfRTU!|8YIIEa?@!Q}GdY$G6(AszpOKNF4*FcsdBPBV_VawFIKhu%eECan zEUm1B?E5b^wX_V?#j0SnLcv5`zIG5XPm2I&cnFAS)7GuWt-ZH`PGYSMq0C2LDYyd- zUkL;-)ETgegVo_)1e$DR5;eu6Onm?DG<-u>S2rE_z>iDiJXsMU!=lc7Dl9xl>mC@0 zCB_&Oy*SO(DEwLkfeOeK7iL9PYVU44NIqPWZgyb6m{Xv02b~AFF3XiDQXv_5v?4k@ zS9S4dbzeXH?S~|@`GuM-Fs*uRlmZckM%r_=X;aM>$)soYWg}k_UKRi9C+WFjB6^(i z{y`#wj%*ByA#f}&QN9rRmw>ArzP?`r1RHa;@czPlUnmH~mv|6!K-Pu+a337OTRU6a zS|@h1LkS?7bz8P${j0MZ9x{t-0YU~W@8CWATuUD05-lDd?G7DF63}NnU^9V?^JiB# z2w63&szk{vAYPIX;o21B0+Kz;j&~fe|e?_ zDVi1?9lhtcrKv=SR=G;d#r^J!BN_Ma-BW@aXBvEgRzfE$)p?@3`u(5lrWeQZkFc?^ zDU|sGRB=B?@#YRual1Yu%_>e56s(C#35~tNr}ey))HBI-M=$UO!?xAMezGW_ZXU3OWhv#SfAQV=`|(TNr& zt0aAS+J2$jOh5P^pV(!iYaMxs!%eAW1qEk;xKz*u9CMYy>)TZoa`gX8!O2J>bhBWH zFs55axhX&0YWdgJfB%I-d93%p###11BhIo-+OEjUm#2It0(> zGf}>SRo07wuXDcC3>Ex(6`sPC+`F6<$|-Y=wZH%T2>%Z~aR0L>-OgH-3B|)4Ez5K9 z%^=IxI@ioyDSgTXYrr$$C5T4p_Pfh~5a8nJw>SG8Vj$GM6Sr^Oia{MP|ML1u)I$So z?n37SK4wj0q(k$TwUHgj@WT1q5)^W=(FD;wiM3!kl<%k20d)`r8Ts#z@@1ca#oRvmLd7lcH z9F9VR20(UVX2w4`IXO_!EDR|lLR;raAaVuC>kCNZ2-CFaYh%>0GO#mhQc@oemg(d; zDS2&Waw*-mmh#;`Bzyg*kdVK;?m&OU9xeOYg+Q z#X*WV6K58X;qIC$f&ilw_O|7^3ZHG>Kw&+&53&U4pL+5*67CD85E8X=oKo~WmmPow zRjrX8j_ocU?<$@~0}_Xa1%=`^IP;Eg9VH)f~a1BL+Z!yEJ5}-6c2hi@Yyx_p2 zl_s-w>sDF>oQhmH*kCTRq17aT2{rEggx#9#jt=#pp@G5=z#+j#h0!YjIFd-u$X3QP ze}o>PQUOGrNAvcsqnwJ$#>=<64Dsa7G+XSE^vEd;Sg+?XZ$v;_Gt&IA-Ev4pS*^*y z=Ec$!ibm?L-ed$}-(fbkk1v+qjbUp7Kst!AgFcD_??Nqs$?WWvetx=n0K?c zPs7JyN13PRQkFvG5o&{{`5oT;*RA_vZr-E-4#gwoY ztibxBnq_ZBd^)J!{-L3vr0;~luQg>i(kwKoK~yCaZ%wxozE7VU^+OF>l>;)MbkTNlT<}b!01@t{tV|B5jTV906@z_%k>Vzh|1>^HP!+Z2^_2o* z+1RpMKnm$s_1<=Nf({A$LEsV?1=TRAjqX@JpBEdp2r5TGKH^{jwilnsBUas5kL87l>1jXgE{RzXgIa0N zQQ85Z$~rpqv0gPmxxvGePd#OMB-T<+4eV3N`D5c_m=wuLN7F+cUy4u8i(9v0E8EEs z!~r+d&R{$4;wcwz{S@z{@`vhomdZ5$NhsdIq$kYorrkceqpG4b@@zd|K; z?RS=x%$IL7oumT!Nn@kTTi>NbDTXGEv}AC$d;wZ(1@?WLx4Po`pbLbYDwLR>&d!NX z8l40xLQkCrgLy5j&C$`tGe+JU2kD%_rCd&hi)I$4BL)V8IQy&%zFG4IB7b2t* zUW|Yu=gD4hXhCEpNJ=h$#;=v{;eOvvUT%q%N>DDg8hnx%IsfpksRAUVLt2F{Lf#Yf z6zEa@DuPt;<`;ou(rtTW(PN%5DDtj`)f#V}$GH$(4v`fr;Wx^|z8!7_=qMxin%7dq zJQMgs9!KC|Nu0dN$WT<7hi!sLvS7yQ5g9}sCcXni%iBX4H%7D`vPkOT-Kt&3a-$vF zou#q=Ad+i|TmjNsf$8K8Riq@6kk6ezABR^lN1Z~Wl8&@lJZOz$epuu6%dN~}F?5nk z-=EAHfh{E=o4>k}ja4|Ht*xEAy0XYHg0_etFS36i;{eECf`t>C;%Z4NLbi-Bksm+9 zb_y+25(rRG?vYOI6%`8A)zu}Bii?WSPsow(7RbH_KpUwm7W6(X0`8?F5Iz7MpAlaU z0J!PLyW2_w_(HKEhp1Y4Zkc#i(%KQYin@6z`^E@}NnW^2NLz;Ncq!jw`6)CddiYrM z-NtXD&Zb}fuy#@dX|E1lIB0$}5*F|P5O2i~c-ZkW$ENEJTpZnfeVm}z5!tdxoB|m( zFi!pQ>#uMp>JT{}-2F>%>>RF#f2G_k?&<3@$=e`anc4Ron7<)eKba&N)aZJkTKb(k zBOv9Fqk~i7$3~hi#6~R&K!mHs6~dEaE98azot|yn!4U&a)x13?v$d@auS)#KW+?rl zE>kg?trp3-QNST`G!Pj{D2Z_zDOXV%0@w%~LEY%3JF&u*I9>p7D+Jb%o=2-rhl7nx z3R%jfTMQ+;9u*oQnH<7L9Y>ew{8mkG*emikKp^rGD%wG_2O)`~F026ey?8vZ*dSpr zLD}PZNYWy$2T=(MePciV=0>yH*`}y1+~dDIqB1_+CYaH(CKNcx;|?KOet* zu?EqSZd!c?jtEt#FR}r=_|WEDaJJFq-av@gFSB+AJGS$$Zd*9usqxBHPPfgo`7{lk z1$LYF_MJP24;(l{+7~bbgjP?~NI8QgXnY}JrwSM~`GSRBPOKcyOvvU3d}sUhEI|{N zcpddOVI1X*IoOd>=o4Jp3hm zG~1^(luU~BvQi<~G<28vI!q6$5o0wrFt&Zw%FC1Kvp}m!8`f>6@=bZsbEP1Pf%T`WrCCU> zmX()(nwXeK#92VII55Tw;F_mPI76Qei5>QLVuZv7DnNW!ncFjY4hXjTkg#2bv+#sU zsAtnq&`KdWp{Z8EhvP04<7R;D<*KPIrj+aAQ1L=UWfj8#D!RWONngC`;(6imwq>Rh z*G~b!)Z{o%s=hI#78VsrOvOHWy5Oo2TBU;cb>feZM)KqSGt$-Pjt7jP_kDaaPGHi- zMHjFg!jF@wE=ZEx`QD&C0)}^qYKo{(q>-3d#;^~aZs>%^b3pH)fWok`?MO-=3=j{5XJ}GW-M|@;4za&6TKDjAhURg;rQ_$;7&rELd|h| zC7JLAm8~I3H>ficyb)Bx`kW_bfG=qvHP8q{`-(-mXXs&JKwL@+|6X;->>dlL)}*z8 z4C&Lhf&*0#3QR;)RF-z1fhP{u(V!}5Q);_-bza}CQf{_qrhFeW;2FQg2L1dr2-^iz zeU+Rl(4=blOA`<5$J+O8+x7~jTH~o^y15?`6okY)dnWDkQyB)uTL~9~Cg>>}-Xad4 zyrgvb*!)$-J9w~2;xGC#ntI;{(cNQaaDNxani@ou5#Am>Vl60~Bt(t{cw-Xb7<~vw zcfb*E2O^W?UmRQ|pb_MgG!z8V{n6@PUpY(9t#J`CirDnpNlzb%H;+M4>n*+joM@`I z>H@rb-`l&6oLVG1A||^p&eX%~O2k9bK9SiIBu+9)MFtI=J*@NQqh16D*CY6sfrUYQ zfSP&0{ny`IDp96T2(qq!`wLc5P`6~x3k4>sOz2n2`#{pxkphhuBL|ucOyRYw8}&UC zQT3sWebzZn01xyeiG}`y>DC?XFBqvj{-1MmKV1lwNJK+$7^vgUl^CE3VhV+u_a(Z| z0pwaj218IxwGTExGI5)qh()Cu{E`xm9gPM!LrFM?MU-<8@xf_E-$sx<%zYOjwiGUO z5YIBs*`3Y1!-g7@htQ=lC{{&$gm{~kv26%2*d7HdIuGQBAsftW?z3%?JzpWSkKj!OwGmBdm0C5Pu>vyH#t*ACA4$EK*usNNr=G2iN2G-HsYGb z<0;?;8H_MxM34jl{~hkL!Dr5%1%K@wFzPo-pId>)y zXeI$^HXg*ofM{{rM>?9I)A!4{i=)|l;LRY_J6@fSpdNJDK9-(%P$JI~^a0Y9BoiWU zO~Ru@vJKHA{oiDgl%a~dy=ukeDbyK& zQX^9q3gzp(KlAu0m*Sn^fqW6;QS#4e*R0mU**Pgz1PjI;=Zg(tccv%!~cqX+s52m=4-Q&dtiLHs-QT(84_Ve%5fzigbd?4C;%sa$ z7CjOj8U#|KN4wj1_qxtlVi&$Jt!4eW8Sh8`p!~Z@_|6S43ij^bKd(=&KlStPH{148 z{?B>h;jL?an)fM}9e=y|^M@$eXDL|sfB*d7--7xJQaN>q7kkn7l%F^m6xE~=Ibq@9 zDhY}|en-rwhK-^eCBIvf+h0R+adu4c0WX!tEa4V|Lh=dZ0vZK1d+Ck8~ zP6h}=rrsm!*B#q82f7cWK-se*y?7GjzF41<F$CH>1 zHtR3grwOJEO541<#`4~zsy9D!xqF=GXnXGBl*KlKsbW{FsjIsc#ot}O5Z!WIE$>Na zf1!GrxNa^U%>X^P5}FzG#XKZ4BOL<|6bN2xeJAC&3PnH-{1mZ7qt92oAz9PnLA3KOa!Ah3Pu%Mkv~~ar2CX)B`>kNUf5nMIV?rfNDbIY(N>msAV~;QI`1u zomJ*d%RM*W)#n3-1nGHydanqyTNm1zfa`QZyprNupYc5 zJ+QJ-30!RVShONNKIwGf(cjL^0=^(-r_)t|+>wBfy`TiBrBxy8D6EMQWsWz80miYY z{uqJXwDSVWL$vNhtAJN6Z0Q3e zk43nOI(>i1p%{{YSTTc*1T^sn756e?zFELjC?QW!pJT9v*qUI>juJO<3A7iERT#=3 za%`|_%Tj{@Ru#es@g||oK1U!orlr%M1jAi12;_86bc6V6e~K-OsH}gvrmE>gpUeER zUI{bW>Z%%K1FMFebSx52e_YpqR*(ke8n&%?#7Z21GMQFYn1=!B48}>xm~NsOG}B9j z{Bsz(L~b}BaFu98pvB1p2A*_G0>AYvVdW0I25?Sp`t7&RpduV#t#TOtQq55Xh7Cdg zi#rUYc)b8OH#fo=P?d2qh!OxBhB;oIFlrd+WAfLOxvl=YJVJc1<3e(EU$^tA> zq%}gTFa$=2c*t=&*{FnrCwLJ}6k+vAhKQ645Ck1ckPu-WL0fiO3MbCW!Td?EI%)o) zHjz6P1fl3#wdZIejcnSySrtcK4e%GZlVh;WXc*%mHS%y`J5Nkm83B-pZ=x!mA1js-0DcoFV(c0jv9cnX;(1!rTdN?U zRT%IrfHRG}`Hcba&(k#F^qqErokku!TY@AVv)C8Wq+)~F>FI~n(P&Yc&{`D92!QAp z1kHR54x8~uoX4Lyj2;M2dx~0o;>*25@eoOjCc#J!j!InK`VJMb>7Zb znL}`L6>=3TdwTC>&cGmC#Atwa!=Sv_M?7Sai0x87U0_3nA&qgM7j4LtfI5`};2nj= z0zV9ee1rHH_D^ruS!Xu4~%iWLOr|=N?H_V z^v=^Vp{96S!0>tu)*tWmRFFuojJ)#$>S<636>ge`Cd);FhGZ&Tl+0tmRH6Nal^xc$Dy7(vZV9+dm#vhK}V~=$(ilcAgRVA#K zM^Y3X7{_l9t3O@qlf3Bq!lR)_uYbb?+`OVZI4vF#>fnz(_)zkh}auKn0z zjBTW$_|KObWf9XJn1Q=Xnj*wsDT+7>t>X0;_X>dszG}*)Qtko?z#n^g*$E@tKZenW zipVnlGy@2t8OFF_1fj_gPofHX_!2;c;wSYjpQXSU&17BM>T$w-~(fB_mV;lz^!XOV~7 z6_$~_Q!1OPWC4K5(-TuZ#Hi0iO~M)fsLcV4iGEZGen)mHVp0Xu`@}FP?)3c>4j)(w zC-2$2GRh!*h^>RLO&A2saG4qA^7Qn?WTHTQ(QlNS;=h5E08%5>7o#t7J}bG)Uq7tF zN4)?G6LBA1<+1QiS#gAwjg5-Y?zfdK$n>g)hK4U(_nGDD3wSI!S$%nZ8a0o2+KV1B z1%1Vi$s`LzIBZz4f~r8=m001Im`m&jGmDwxSE#Ol5-*0WwK)vYPLrYy7kvWqB@q^h z%uT#lh`2ZuXp8~;&2iyH3|f9uSR%4KSM$#MFed_h!~kRP54wR-?19>XyI76@z!ENr z)H%So$Wlg-$x%dy1X=8YpCdPA3{+=EqB-SD(cmWd5d#cSFlj0RKQ_P+HU&2hOgz-s z_7xOJ5C@jNy*)jVNEu~UQx1VI!GIvFRSo){%k<$(C~(B2PsV#liGqkHWKy}0T7$&Y z1D_CHn_Q!j1u+GcJ_8AanznF~@Hm#wQ^PClQKZ$2Wys z=mO^xA@eZF@i8X#`nP`;MzhDrZ-a*?S2b+RGhH?_EPtj%@DX%vwde~>1mZ!NQv)bb zPE;UW7nys3qE80w5iU_6m42Wf9D=xvWoX9)=N%6PocM$@Pq;ByEPAkyF#2o2+st1o z3^y;tQdMM2B27VO({B8OfKoCnk2ohL6~fBcc7J*Wk77{_JZoZ@39AJRCKAvxSapJH zbaZr-m&rt1&iLeHEm}9?)x|b~5T}-73UP65{Pr97&ky=P zrXBvvr~AJ!8!ORkS*3lL{d{~BrCVSY^knk-c*@e?x+fgQ2MumjVGK1~jy- zp)C23d`mh%m~x|&jtDjWzJo*lGYm<}k=Gzkyaw5B3WCq9?V$!jK(b<%yXGIndL7b7 z+UWWFB>54LdB8%2GN=ETcO5J7KtpZy=hfX~!VGgR^eJ<^_PwN8^s{7K+N!29R5BR? zNCk%#4h0!-q%ABF;RIqB^{{Wv)xDwOyWxT%`Z9o;NJB>zs7K;Q8brD_tI7Ye;tzxt zk7h&b_2myL^{^zo0!6?jCbks2=o>h68)<3?5gDsITYK5#SIU>a(P78Iyg@!WnXM!d z>#HbHjc+G7qYzq6+PT=`dI;Ds`KsqJOOb{)0JtQ|JYTs5d6?X<#^y&Iv+#nwmQ=#~ z_;XBAcEn-LP4Q2U8<_6OA$bu#lnDBKIhXfF16 ze>{5X<`{<{?hHT%cXzHbMOh$6S^=3aUDiX*w#S#dC5g75aLu zOxs9&7*_BbWN-=THKUjGHPh})`0++^4VC1|+`-DcBH_1+67y1{qod^ZDS|mhN0Z2; z*Lf!R(QO?Z>fy`bp~6)|2>KtxNfp8!s!+?wHBv#vh5~VuJm!>MAJA>A0@!M2kY{KAW+2 zafKHrlu*&t|6KbE%-LM<1u+&Y1BFTw6$|XvA44yq*7vp|e&XPq<}WRWs7eq(!wKJG zl8f{6v6xRH2#COLpw_|M+4fq5he1UuZaGkkRW6K5L?OgQ32IOuu6q1>Q}A-~&^<_F zxO1Y|g$IK({54S*g5!w255@)l-V^LccZEv0Yk{Il7ilM647kV=ru(pdgsQNanMI?6 zi-OXT6v!ku3>#l`6iszOgJ_dJga%s!ndT(28_gahB-jVyTEpwr!`EzmOfq_E!5Hxn zhnu(veTSo6T2;kY>He5=_6i_cG!V%kAaYvCj*cw8y!3+nF$<6)Lb&t6$wx*Ploj!L z!6jZ&P;jv5WY6|gj+*f4rXcG)F1#&~v(U>vNUew%bs!7@RA_ZFkM_>SfK+JU(Mw3T zYS6feTWS}dUYgm#*x5A{+Clclodd@yVbZ>%SZzxVWY;C4JJGznidE`$L1lpe)#py;vh5oZ)K54fDQN*)YWP{VuBID%sASnIPJvbN){Svhw8(?1Y6xj!~(f5l3;#z z*{63WTPtoA9fyOTd_uH}HGphno(~oo4kd#YU_W9hC1W$hT?XEZ7wt!o7}k=wHdp4l z=!k-bI3vTT+uc_?7qyAm$+oXDk%;WzvEW@!M1l10&sy_U(+uQZj$OQ$msf=(WrPZ8 zsvD>d>2-)mx<{}41<1|N6--aaNOXooPA04y!1i&AKe20{Ua!+W44ImI`9(!oxl1`#0} z_UBmC9aGdqB9EgPse=~~_GNY1Z_^ck0Yb2ag9nlZOs+)-J%!#7HuH~K9dJaF*2H~f zzK@^`G6F?3?&Hp#+OvfjH^@XDd2zy!k){s<3%P>~9mL1xUDVP*p?GMhvvvlfVq-B@TvwuYSQrZc+=tI?BWuLs?!nyb8xd| z>pT928|6D@S8-1zXn}HEi4q8Z%SVxrh({HS2C#4K4%b&ChE+Hi_+j1SFJe4~`#*zH z_862Sg?dLvo8)xmV|bSfPDhYIck$5BO@i=WOZPks8#|^m$PJ{a$mr|G)=(lgfa4M% zD+cD`cqm>X5Zzg%srEfhx(F#I@(;j6ineV?V!|-C2y%p^zXt?PwD=R%1EYe@b|`W| zVt@YmXB5%jL`9pQc~+cMJSkoNLZlWB(Dns8OFJzQlq-6tOaTDLXD+Rx*fM{_llgJ!BW|P2#`70|_SaaVS zm}67{_?BALWf8IcxRYDs^Mc(Oi!idBputn|K0#veYrWCbF60n#)deUL#zXWX-@c7P z?J7cSYOFfawxe2YKN8unb6|#v)rSoIBcGBBK>=wG!heEz5>3pGB=j2k1aeEKtUtGz z-3WXt)sVkbVG<0Q0;hRG|7)(}m>x#^#42ZqHx}#H5`mVU*f&T40wEt_E~bb(S?}3I z-1+y`y-w~fTv`p+2b_Rp)L{?{jCF_teHa6dAAj|S`N@E1k-K;XqzcVkrZ(tEF z8X88BkqBZ7{UCx7;0j|BoI@C3goHwF5CooX1eQV_w>hXB2Jl;pk3{abfErVu#rGA)5*1!tM|0dx=W1^!wuA601mP1J z3B?$_mkus6CH$N{vLPJ##m!Y%8G?q+XBA!rVQ1S&PwZtLpj#NFFSchpDxz}Jl%3pF zpehi80y={WZthZpoKEIFkv>x%WdkUZ%MD+2HK-&kVv=JQu`xn8Nu}b7y*dC@gXNa? zH%1T0En2AIgi$3Et*?VQ8>Ijz>%pTCjl-$ej6sIUGnLI1 zo{X+z1zsTqpUgiHc1zBm`<`$<5x0+^%_w@N!O0B$6ZvciGc2;o!Q%>7Z5|#;l3-Ki zO(&uz;yRCvzG7z~W=Ruf7TWTTw&Ghw{(-n)=PLIfzGRq)IKzk#hqI4X%!a@nT+k3= zY_RU;oLJ`j$5XA=m)MHH+K_uth}V$N(*%^bfB&%I96|aaVvl;WE-ei%+g2W_9CPL7Y8zzVY9Fc$vXcJ&E@E^|O zbkx0)qJjGqQ=O`G6icQRkXOjPWMmxyGio4F3t?GNwK*#fzTZx3bqFoI`Xn?|Kg>sa z9zra6HmC`uuuGsT{tPhVTi-XuMu2R{CD{b7kO#?`4x_D_AiRhyrHV#cV=`y1^8w9p zx#5EW7d>UpQJlEk<@jN#8J`m-JwFO*!@K1MP!mzSRqtGydj|a$a4cZ>gq}x@RS;H#{x@6NPB9-P zg`<*@^b639>bvXTH1tE5LqAq-13p#*#3j2ZM+4qu8rnBMCh_Zr4K3wn_k!(Eabidt z4MxWWBRQly9jM;HUb5T7cFC0+APkw)*MS@Dg$fE4x`)y82gpuR;q#8CL}Bl8KR?rx-T^wWv#sfq(== zf;};Wm1|4~T6bD}{KcU#pR`H9i89}*PoC;^JjIRSz~n#f;DiFDF?)fS$Us=gq5$}0 zSl`o~U2gH^lT-9YZis_9d}3mP#+*CWjXqc2-dTL%1f+94vKM9O?PCGzWb(miBYCLEhLIT{AI9y^$bapuf0+JHOd@f+t~%YB|c z(MK1VK3A4u`nNY%2jq7R^3a?BO&h@sErlFiN&ug=KZUTWAeu~&V+wJh*{sHDSI_Mc zQvCAe3SY`qR`8h)(z}9y0fnv9#vL8k*^p2#P@c~9%mccTAhTYnf8ZfEGF2p$6?O-A zWm9*rwxS~2x{UIvrZLmn1{6fh24$5|E=aZ{8o&dLf zWnR5{HSEe>eG`?goIxSQrx{BkUs3!4Ev(#xFrAf@VPPApqr8Mk5FYN-}C{02)b9p4zdfIldlg;ks4mePwqewa9{vPr;tE-}%}kScICV1OXr> zh0IA00SPsGgM(vDPMM{nkSA5dIc2X)+Q1%Ih?vTmgqy$>FX#j2<~!(+iAN?I^sL*> z+Ws!qYZcUAEWJH7yps2=)JEF#%~LOZb}ORiIN#bf^uQN?VHg?Ts{jC}f4M7N?nanI zn)QC+;k9q>`ZCg&`&>dQdi847!EfKFAZC0I{GkvHji3m?N>FsXd3VL5J9)Y`5`9wQ zKZmH{#Ma%N^bKghEb6G_rpPx$Csos}2(vM!xUFp6JQ}uS5@-xnN(6Up-o#||yYvl> zmN&W#T~Fp}o7%^t+f&qisS(Z$?YzG+GEg{$UO0$V;LNt+gQ&t%AVV(q0AZ7>9)-;| zqI~MIQFY|TcTY#@?GFu9L?XBJ#Wr=HeSb{3C;ca9D}>h%0PRS0!@CL@$gsL#Fr=Jj z=*Err{+%i^2aHu9RHaPp@H@R_HHGzvi#T7v3xHdD5)Lmj57@x@i62w<>M`nS&{P^I zx}!A&voIMK1U78iI4BWSH}0QAHIdR0akCLkFe7dm> z%5Ro&I(72#@w}tWnEWLiV)+yARz7%OPxs)P>fS0DQ(bDUQ;|6%DWk!9G4!$Qi-6{- zb)`UZtO%EiEnZ(_{{fyEJxu_Bq;zH~TOGkCk z`?|#ZmK=l!Cedsx6n%VJlRP3N_U?V_%~Xlmu(k4Y^T!^MrZOQPniPCL+uTRHM`4>r z0_tJw_&twO$Xyx99+C2uyGMuTo?}c|vxope_B)5vgtjp zKf60Z1t{IyuRc%4Rc;hWxbga@OQa@lI_xrjtR_AEQXq2Vt=G=N0o~3DL?jyX-t8Yf z@8+MXPyK-?dhK-PyxTQ{?(T}%AaQX0{Eut>Hidfe1C6KfAg~d5XwO9rD4@ok zN@v@2{69%*e>mlTnQHg%{uK$KcF6hJV#2O)jhl`qp-Cn~5{y04JWD(qlbke+2*V<- z5Ro&U7Obw&(;)?;U+=<-M`3c9Yb`Du&MHmWUE>Kw~#@6`AWq=vqgyCw22 z+_AeV1z=UywERw#GEw&QyzFPqSMtKRqJC3T- zQ=bknZMOd~J}%DRztgTcv0j+gdEmjt@!W*rl>z(!%HwQ+t$Q>5 zuAtXsLY3?o0ZkH-^}RlQoF`chpPa-*{z`#n$2MO14LhiklA^v|^Rt7aRta1ra>7Ru zS7@&wE(BROnnX6yfSaAcJ~>xOfX#Y}j&dMLVKr;gW6+v*a_x1_OuUkwEkaDdrB{oz zLGpKKk-W5J!guvFfn;oA2Z0sphkI9{5^Jsd7lJ0JIger|$BQT9hq)B5%6opJ@^D@cG*U&bRfk{B4_Dc2fJAhv#z zfx683&!HV2A-mI?QM^6AO+meflK2UAuM@hW{_3RZBxd8BNe`zbB#)cBbL6DDy58z7>DiN#d7n#Z1Tb^mYIHTLZR^G_JnE4JJfPL@W zWE!;_{4ioh;m^jc{Mx{Ce5!w~J)94)jR)1;{C;fg>mb|L&%R`zFTIq-2@GSP`3s7f z7yZr$)0EXzly^Og?5#!i`E9MNCZ>m9KFTX%eO39l@muoh8v>y)cwB)C0dLN9Sch+{02uG>n-rVk zpJG05!>k(amriqe=ia@nCyyRHd3Eq2gso$czI`x_e#&prj;GePUBeP@t?4;fAoqE| zn7M`8WLcZ7Ek zcftXCi>dCZ-YLjN$LJP>`AcM9m{9A70`K>A4<0_Of?h1pz0Kv5Y6}{8!Hx7^p3FIa z?o3~FQK$m-WfsHXeW7Gla1Nym#&bT;i+G{?LL|rChCa48p`K2>S7~!NxohZK{W^9$ zJS}3`{=w?@DP+=E_X!xVp!TJf_n!2T^K&uNkWKkGJXr4AqTL(M=4AGtQC*zER2dLg z6F;!RFYz&-P9H!w_C1|Lr^&S&DA!UYLGvC!_-am~k_(m-2P7OuLT)gMSRac`$m3eX z0+qv`K8(jaGX$VwBKo-YIfpKTg%JrC>x1H=N!2)!`%I5nKquflAtcW8*ST9?;bJ7Q zfu=BFSh7%4ega0|G9nxL{%yF$(Iq*}OTb`$?aJ@l4s`@oRxOnFfGJeVU2QyJVM8uB zQEA6hFQuZE9R&H6Y@-yNxX$4x*#;yN$F#7Uac3e0p#;#c)4|1@9h}@YJthqvQ4=dU zJ1(sfku#F3JX$RM@~4j%Z~qQjB*BOb!$T8+G`}alXI8CY2QOf^+=pk}7=I}^W9Hd} z9*y~X#FAE_k@jPJQ^1!(nM`R8J@RcsJ#-r?1_`+A+&28HlNg+e>+hl{+^dTTGM-Y{ zviMIGElF!__cyd*dpmCi9n>|FghKNs`pC%mRUY#iXjhPpZdVMBfS9!oIa2s`I#>$N z$ioS~gouYo9w3hqMLu&1L8CbUwmisUoQ4b$bY4q+L_1mk8;Nl3Woy~jr{FkN`l?`@L$q$|{BAu7}eNZb_ptDXQ9 zm%T4_qrs+u;pJJkNabui?7IEfxV9v%{0FmPg3XV=^?&uW zwXDZ~#5U*TT4P0E_|B#w13BnedE;~p`5p~i@M!|po-SF|qseub;|2mW2 z-*`h+0}M_Wg0**1n=_`|M^nQ-jIybxDLe8`qKIWyYvA2<9$@?6|1fig@4qu27~%N^4cf5(FIb90LU2QZr0`TS`n7eV1M z(hslr+m zP*sX?<$87XE487hHo~r;f#rx9>AAVpizbTsX4bAVPv5Z}zI+mO*@?O%-lCivAzW)Qhfcsg-?egWY3gN7uDKSH|A;2}sJtEJkV_ z-u73l+`4sNgZ?NO=*$GFmUU^%AU(`va&{79LQoNyuJujFK(q7wt8M~6X<7>R{4DK0 z(cm=J9)B)C-k7r_GE!cP466};I&RhY$_Z2U)-2p52@4qEEbbY-oAXDM*vUndg3v1p z)=dwdQlID^4KE;j5#w5a2ulgoNmfc3#6IPb`g#T% zw}NzBMk&5jq97?@2K+K-&fO|bf0g&jWdO+nhPg_qJPg8h&j+0Flc8O2+dXKy>34=! z4KsAw&V-OcGb&CXWD<`{NWsjW7#kZKcrL0b08G3IwRqQvaEuE%e3J4+Ky|kr-grW% z7WSRoePx%;yu!82I^Z$gsPUSMY! z>kf(EbezhZs)q`C_rk2Qch+j@;wUsF)Kj?tJ6v zgn$kQQvx5jV8*fwt~-#q(b;}@omifR1QFr*pK r`spRu%zpYTe!4F(b^jCANZZ`4K7E3IwF<9*!C?Bu*pX>(O Date: Tue, 2 Jul 2024 15:26:35 +0100 Subject: [PATCH 012/590] Update Configuring Controller Chapter (#1487) (#1516) * Update Configuring Controller Chapter Added Settings information Update Controller Configuration chapter of CAG from Settings document https://issues.redhat.com/browse/AAP-25711 * Update Configuring Controller Chapter Added Analytics Update Controller Configuration chapter of CAG from Settings document https://issues.redhat.com/browse/AAP-25711 * Update Configuring Controller Chapter Corrections Update Controller Configuration chapter of CAG from Settings document https://issues.redhat.com/browse/AAP-25711 * Update Configuring Controller Chapter Correction Update Controller Configuration chapter of CAG from Settings document https://issues.redhat.com/browse/AAP-25711 * Update Configuring Controller Chapter Correction Update Controller Configuration chapter of CAG from Settings document https://issues.redhat.com/browse/AAP-25711 --- .../assembly-ag-controller-config.adoc | 12 +-- downstream/images/automation_analytics.png | Bin 0 -> 65907 bytes downstream/images/job-settings-full.png | Bin 0 -> 102736 bytes downstream/images/logging-settings.png | Bin 0 -> 98622 bytes .../images/settings_subscription_page.png | Bin 0 -> 35651 bytes .../images/subscriptions_first-page.png | Bin 0 -> 71006 bytes downstream/images/system-settings-full.png | Bin 0 -> 93031 bytes downstream/images/system_settings_page.png | Bin 0 -> 51200 bytes .../proc-controller-configure-analytics.adoc | 28 ++++++ .../proc-controller-configure-jobs.adoc | 93 ++++++++++++++++-- ...oc-controller-configure-subscriptions.adoc | 25 +++++ .../proc-controller-configure-system.adoc | 71 ++++++++----- .../proc-controller-set-up-logging.adoc | 8 +- .../ref-controller-logging-settings.adoc | 6 ++ 14 files changed, 204 insertions(+), 39 deletions(-) create mode 100644 downstream/images/automation_analytics.png create mode 100644 downstream/images/job-settings-full.png create mode 100644 downstream/images/logging-settings.png create mode 100644 downstream/images/settings_subscription_page.png create mode 100644 downstream/images/subscriptions_first-page.png create mode 100644 downstream/images/system-settings-full.png create mode 100644 downstream/images/system_settings_page.png create mode 100644 downstream/modules/platform/proc-controller-configure-analytics.adoc create mode 100644 downstream/modules/platform/proc-controller-configure-subscriptions.adoc create mode 100644 downstream/modules/platform/ref-controller-logging-settings.adoc diff --git a/downstream/assemblies/platform/assembly-ag-controller-config.adoc b/downstream/assemblies/platform/assembly-ag-controller-config.adoc index f825566196..28036b3727 100644 --- a/downstream/assemblies/platform/assembly-ag-controller-config.adoc +++ b/downstream/assemblies/platform/assembly-ag-controller-config.adoc @@ -4,21 +4,21 @@ You can configure some {ControllerName} options using the *Settings* menu of the User Interface. -//Each tab contains fields with a *Reset* option, enabling you to revert any value entered back to the default value. -//*Reset All* enables you to revert all the values to their factory default values. +*Save* applies the changes you make, but it does not exit the edit dialog. -//*Save* applies the changes you make, but it does not exit the edit dialog. To return to the *Settings* page, from the navigation panel select {MenuAEAdminSettings} or use the breadcrumbs at the top of the current view. //Now a separate option covered by Donna //include::platform/proc-controller-authentication.adoc[leveloffset=+1] -include::platform/proc-controller-configure-jobs.adoc[leveloffset=+1] +include::platform/proc-controller-configure-subscriptions.adoc[leveloffset=+1] include::platform/proc-controller-configure-system.adoc[leveloffset=+1] +include::platform/proc-controller-configure-jobs.adoc[leveloffset=+1] +include::platform/ref-controller-logging-settings.adoc[leveloffset=+1] //The only directly controller related thing here is the custom logo which is covered separately //include::platform/proc-controller-configure-user-interface.adoc[leveloffset=+1] -//This doesn't exisat in the documented form //include::platform/proc-controller-configure-usability-analytics.adoc[leveloffset=+2] -include::platform/con-controller-custom-logos.adoc[leveloffset=+1] +//include::platform/con-controller-custom-logos.adoc[leveloffset=+1] +include::platform/proc-controller-configure-analytics.adoc[leveloffset=+1] include::platform/con-controller-additional-settings.adoc[leveloffset=+1] //This should be in Hala's documentation //include::platform/proc-controller-obtaining-subscriptions.adoc[leveloffset=+1] diff --git a/downstream/images/automation_analytics.png b/downstream/images/automation_analytics.png new file mode 100644 index 0000000000000000000000000000000000000000..c60744f773ca4fa5ad4f3b738e9deb1e35e074e1 GIT binary patch literal 65907 zcmdSBc{rEt-aY&+6@@57$&j%mnF&#b5E_h$GSBmrA!8X55gAL#kOq<=V};BiN|_=Q zA`}ssz3bY$d++Bte!t^*|9Ss;_i^9%F22Kco#$s*pS9L`g`YX4OucQ-HWG#$Nz0|lULQI!2f(H%&+0^yWN$}xobIDx_g?qT9B+9og6F< zxtY0ISU9>_JGoDhRm$Q;hlm#`xLTOF+c-J0Yuh+jkn}9f*@eZ~PkK1A3kwR1vI`!O z5|oq@5n?~C!7i_*ZN1-im_%YHsVW}V_DY%j>}`1J`?}n;-W_whJ>|E4o_wCBxc_Y9 z{<8&64vjO(_WBK-@2Kj9>y7zEYM8ci_b4^7a%7qx(6@}!KDo{2)w2P%0jbKL^%_f=FdX&Eb-U}9y8I($V!vQL6UDyNyTQSmlJ4A*aAyjpm8aN;|EzJ+ zGfR>F{b%9_Gv70~b`rn%*Ka9euEnbS=P&ydIZkry`0s1O_lGO~`(?x%xYGas^G40w zh?AQ)Znz#1aaL1vW6&`Y{vn;w)(%cj=ZK4sPfJhVsHD_n^51*)-9CIQT+|qe-`HE>6E@$6(uF5g@s=k>do|wj2We+Ot!YR z)*m0myp;d%>h5#pNi+!DMoDRLie2aTuOVgnUAvk%>HqUVw3_6$cNO{g_~eftKmL^L z0KWX}*|Se4{>LZG=w)-o9%Fyh!J-oHx3Un!9DL`Wz1tV;D`gw67~8<2GI!R>?}-13 zWU)i9u0!&|f|r+%Pp5%;@W+s`G3#kB8T?~yWAmjhf{~hKCu#8YRr2ZIzk|!lj<~wH zP5Am<{_|7m#ibvDcAYs=MvQ;IUG(`L-k41rgSt!dbbc@VGHXedW4mPs!hv5s#I`jo3C7C)qJNvv&c~12!nVOmwHJh886JO-2FK0&e`Gu!4zTjqR zs!@g%c4fzo9YL|NJIiXhXwpqjo;)c(+In{fBV*V7{FrsO!Kw{E2O@O$E<@q1e)6>U%e0<^;gMxy**4K`1XO+43@}*2!&aJ;|Bda5J zibM6*v5kR`9_{}<*`t-k74qCeE%wfxi0Nr(FE1~4LBTTu9=adX6v#_UOONU3==}6h z8)|=`c1BMx?D69RQG1VQW=OSv`0(Y+mtU&X_5yr7xYvCOq4zcJh*R%j-q2qe5PggH z^hVOhj~_`SavIhZ4mKsfh3S1OtE;%XeKRjbO=~F-KUHtuY&~@Tx%Ew^t^Z!w%!-ea z;am=y)-%IzGzUVs>^{c^2M1TZf4^gPw5{R$hleq@ZgD31H0z%`H@G}inP_*n0QIVB z_{}XL@0npK)mXoiqN1XCK6AFyUN1wpkH}4pz0YWDYYQtV5cXgALQXnnYs;6Op1w!w zxzFg((ABs&`pM5PO41bm?(0n{z3hgb@#`f(MMTb?ITI*i)jGJgx{R-H2;NFpx){ND_(Znu z)9L9i3Vo$6WJ3+n%JTA8y5~-uI8oi#xA*<~_mZAJ_wEt1-K3|d_cCDpqWPj(L)4cB zwt(6vI@!eAa`X$gFpJw))lfW353Vk_wQ-gR^n1+eHYF+yc7}=>LU#Xtgn`IyH>8uP}Ky^z`(! zbab5BQTY7NpINqT+ji#c+1CXY%{P;ht_7?ulJ8g3C9dholP8F(hHE=G1+7~5=1;JQ zTGQ4??k1zArhabMwO#tsWMFxDdE+J;Gpd7nxwV~74c@=-bP{#y-;283U0^{e?$}3B zpVa6=QLUJUL!k?d?e|6{?z3%DRJ<<8J zrYZhlNUZNr{f(=kp<75*Z{JcsJzrE^6+~8MbMfLu>rc-QIQErpAi8KRR^8aznu39W zfob<{6YNl_|7y9q(ArG%VP{v@>MNTm?>~MVj%H-qTkNp^&>@EMA@%k(?t%kY5dA_+ zCfpav_~WCq$MmZo&fIm1zbosvhf_JKmWUsu8rEy@eTMS6eACT+pFfA}RE-q+jimeV z@N`2s9q-N9*eht`coDmh&<-N-?;pSVgyr3*rlxI3nqxhs8tHKf39ef$Q5D9<#v1zs z(#H*p?RSULutjM-Jhe|ui~+ry$OLC+!IYGgJo_GDyg{CwwyL?Aa=`Boi>aB}FLZ1C zkb|3hb6Q#&laT2qnWIN58-*VJ1w^Td=#KOZ69Vhnz2$DMuFf;VszitMl}%li@t#rq z`dJDghSt`1SE11IZFO}BrI7!MSI+sOZRmBkzBi=c9=6c1MjDhj>Le$|!~|hy7M7OM zQ3U&}zEp=0%O)NA0ZUT$g1f2YDPHHbJbwrY%j04HwXfWRGAkAz}hXBTlcB|yKzi4P!G&K#*CHb5$~mXeOz%X>WmG<4K z|K)KcM$DZ%%{PWP!XqLmiLwKb(^nb527L5-s&YL_A#A%UOEm5qL8y3&Jdlp})P0?7 zUCk~=TG~LAD2k)DR|{Uq_%HvEKoh%nhv%nb*0{>~6CaCJ>~Ket9^>>^u3mj#?qO$c zVL>dKYebBYZuY`8ub7ya#-^r?O{^9NAKt$o_@ySy47o`xiK!_EI;&EriKAl_I;y~i zjv_lfNhzu7`uZ*3zker+InuIp#%;8<4#5^O{_ewvt7wMp?d`NcTaAq>{1?i#?fcB? zBVUhqWCIspxp|Y8-=J9CdJPzhMEdcmNFi0$FR-ANm-O7eC-z{&(63A%X=6>zoyGP& z8%a#!_Dsc21KTY|)&rh+xVhCN95NXE`gJ3!lfdgq{K3k~DmMk#2|o{Ys$A9Gzx^-J zwb?J$+Nr&AmdmN=skERVEt109*Vw0`Z1t_|BR0sU-H&IUS5)@{C0DtZRq`9#>cOta*~nG7uo7qIJ?@MGce$k zkukJBZ)0cW?$N0LQ+h_?Km>YgW zm*(AZml9Y5E&jb8i-v}Vq@*N?B(I zo-La_Zv=IG=EI6p)dT zQA{u@bLH-QW)yw&@;o~)FL^ZU(P|(E=aD9cn2|qI1JM-}jo&Z$%8~}(r77$e5J-6JfAr{4 zQdL7VTei&h-HeQ3Yym4f=y=ov!@|gS@t+Gsgy*I_+E8}zU_j;%gpE9z4*8}{$Jl9) zX=qTR)!jN^>C#00_L8gXPVW?5ardz^kDff?IB;MqYEEcjp~$z^yAck(#b3U?y(3)0 z{TD!gj6Z+0H49hLL6d?=a&zj7Ra8=XpsRZQ)#X3c=%%Rp9HTEvOO1bhtt<6gF4mqa zD=RZWbvpOlddH@X8_GSWqOOwDT-R_vA}u{cbh=kQV)*&wj~^~yYq#dh@v!XOOUuM` zt;nwHD@Fiitc;-Z;4!8>dvp&NoIih^z<7%@Bc?+h9v*c-z(!u^(9W8v9 zysqx9$;rw4j~-DRJa`bT_q6q1&a*=C(RZ{?85yzhp1xOmo#9}f_pGI;?MI4Jr%n+y zUt34Vj)C*>IA%V>0v=IOdbCZ`W=kt8PGRAKrX-z?9iA@*42mO}4IXjm4=73kyJIBX z$H_^C;VJm;T^7W9>85W0KhppuZ?qpuj%?LLP(N;B-m`~e|9%R!1pecwMUJ1#xkW>7 z7Z-~I?Ob!JSUe%{>+c+|qH!SaHq~vd6YR8uK&7tKkGyBUi3alT(^OGW2`nq~ewCAL z)ppNoelq#v2!@_AiF+FY@y)TZvBW~4H$OSKh@3P*Y?1<>KNsD9@ZiwL$69^N6c10Q zMginrZ5Sf17|^o2*nyc<#*2jN$HmRP!NPN60!`H2loWo^`5xf%Jd5UCq7I+vX;@{d zl0~crhla>V1dc}=Gvv-i6L2w${#@op4m>A6i((Op>&*Z-DfRlraV9~f!ee4rVqk*O z$&=fD_P>h2iW8Ybq(lF!%V9hkw+B%p`#xX%+tJ!-ZR4Mw1-)_m_U*naXSK94P)bsh zm?a#Yw`QW|af*m&Okc4U0FEgrDHV=^H@OcG!9k}Y*6~1%kyHgJj4_7&Ljf+`8R3WVD9>&56fz(UtBpC7 zarxT8e=;TUyp=sh7j29CeYXijLHv2bhhpE1j_m#7+qd@sH=K3onW;U6+AA+FZ(Gzq zBNUyvTTf*Vy3th>T#_*Yx)jqC$=OpnT=SQZ^jR~v@UP#$Z$$}3bekc?ILHfWsHo^q z7U=AK_&6N}<(Ps38R^WqbNf4%{+YRR8%K)SbaXn-e~!t_$~rOBO*^yI2h0J=<<>ZA z(goSEGD&3BX#Yz_dV1|_57ZnM67BBY;rOAOnJ@#uCPEqu8dugj^CIS+tlze{SNSeu z?-1jOGz-)u0*4~~iFpj@>e_|+k00r=#+#b@wI%Gk1%pFFIe2)spi9+ZS`-Xe^Nrji zwr#5aRZW)09YHV!7&wPM71tPX(-GAVK2`0+!=QeaeTrSJ=4g$Nm z4${!jfNfxxm1QM>Lb_7K{j{_o38()1rKL$P6qI+NH=iqaKOm8C=f#W5MV`lsZ9Z(l z*k0;0$5&llU0T9iURqk!)O2#vRV`7V4uv=0u1f%4bM?i<<9|U~>OH|gT*p;aw}RIq zP?@EUXZz2(lNPIj4 z5KB}DC1dBK)*v$SjTWOBXvilGErG$&uQsN(g@N7!5(ojV)_oBPPRf7jJMUgBV{2>c zyZ7&pXPmfEH9Gs{+qY0kMgikDvD|0QoT(!E=Il3(mU~B;FO<6c{)osUhFRQm z9AA*~-#NkKsjib1XRv6>lCN}cVmdeyU0q$w9wAq+l1cQ_{Y@0wH)G=L@{IxYXu>yd z-`++7(_*U-rtr_O!BBRCpkhu-Ri{^waH^Tqn#*}|cGVdFX=*-arc+QyNtMH(!EP zqPKMN42vj{+0p&|;K!%eze~q_9U2;08lME9PX`DV6c(=TEpZyroqA}DD?xpdR|q@) z4`qCF%Zw6F%&x;1saT_Vf7|pH9}1<~eFZbU>xi(hFy;@kQSFtaMRl^q2Q1A^gaK%OK`R&TaQoSJ#N5)dQ$OV^ z(bYbE+5=KR^RO1S0&@Xk&iMl>`@1qXtJ=D{jUg~<> z-|e7SEbz;Bva&;U1Viyh0D#rzcest%P z5wi$NNvX~G^XHiajY$_Pe7B-qmgPJYh%31YW{aPn-}XW(W_jIb7Y`+N|7Ta$(+|&| z;&K5!70l}P1Q6T~nQ#SMFclTm;N)Z^5Fd$zF1uMaH5z;TC0cHcl-kw+#1)g8N`oIB z(8?MF(YHCZjXbqY8PJr(E-bt=Dk=&SheC zkp>3`0}mM#8-x1xm6RU%(3ynT3rY=5N&7a0j=)*|cw1Z7x-n0}RSOFy{aO!4VM=jlw{V&YqqP9oc%n z&`2burE5NXphJBl2v1EdEg_%Z)+k43aquAu400h{@uo)|PX&{>UszkmPEbNnoY(PZ~gpWn1)>IhFE;O}*X(B%S1@a1G~2OvFMr%4K?#WlkP;h?jh!ua8LB@{0FpuU5WL=G zuqvoe^zh-s1U!^*?4#XXlc{>kd9qvR(c{M^SV1CW)Ya9&+=igiG`-Xiv1~bppTAF6 zq6Aw>jS6t>+O=bdbr6X+las^!SC@!(`{~oC>AAT&kYOYe`m!=&Wcyx85;6e@uNur2 zxCQI>%&jHcjf{+}ZEba#!@zMy-ng-Ww6wHDNDSbbcCfJ>o-5ufeTj;Q>!E15ccAjY z2JEb;s9=)yl@zz{X4k&-ttHt|z8O>|Fkq?s_gHm@f7)HJ@6U>Ep%_duWy&?A`$S9c zDX=JN21YgkMXGY@R48Dd&!3;vP}c}H``etArR7(YlR69zAz2e+WA~9L*TTb(gQDC( zGV+^?*Y<$4rt3|AT1$(LP1cw8g*tNn-D54@v{K>*L5nLYD&9w_5_arafB4`*2vzn$J=O*Ib|Pxm?$)>!Lc!d z(@gu0-k&7lbg`(}*3Pc$(dmCG^}f_Xl+H|K-7!7A#ATI}>b@I_z3sF~3p8USN=+4Po50jP%EfdAy+(V#1#8*K$J+c}l8Ls?CY5?d%A zzK5iurlvs12g>8aph7ko6x;9cPSkX95dsZV`ojOVxWjc68;bZHV(gwHo76Dq;l7O> z9Nubt=FJ-Y;8S(jjNAlqk&o% z$$E6p{>wu>;P{-!-tB{~%5mh#ZZPDJG)LRy)+15mhDS$-uv|nv#VVUvT82(e+Ix9> ze*uU9+>{3|f|27LSTs@3qK>`~l#Riwkje2zSHyEP>|WiYb%Rlwy5_*XEy%%#|!Z99UWFX zp_(ZSA+ZkVo?t9%y1SV$Xb^M$lSn;Lm#>P$!^2hRNn;we>Ch*Qfrf|*+0xQNR8**{ zW~k8~FU8g+THAqC^4z~`rbxPMBqQGr{%o_apC56%7$?&}=#T=j3TBw62$mr-GBVF~ zFL?s)AOZdz#n&qbSK+FMQjdUZfs$(84JF$GTTNX0hbe6 zC1k;$KYxz(6!Okb4baHR$)R+;dG0{e@d`g_qIiA(PLw4Vm;3zhCH`^`D5=K~Z1GYU z0)yYZJ3}nu)h*QWKn%{`+qsGB4-E|!E|K_e*lQV!Qcx{Mf>$E|1II1Hb+N5mx1zW@ zjS2pPXI7No-Tgl-46+B@zO}rDmTGZ63oOQf|MDT=oG_H?rb7wbY6*>dn;&vOJwR3K zNI1a9S52UsgalnDmzeT>Z52yj>nI6X`1ENSz^oXxyVOrzjiRHY!yZ1gQV7#|_Oq|- zDo_Dz7Dk(F)imiY&riNSEw}pdoykq9OTWGl63% z-l2;xnPgZ`kD1xpUPpQSg3=eiyaZegbanWHFvt)^l=jwCxoG_6f@6MPg`a`7@q9|k zUX0isr4@sN#!&O^yYr5p+OZb!;K75u!onIr=%50{z|3<%5j$8|ZnU>+meoSe=f_JG zm6f|nqi`)mHn@f>U&PgO{^kg2a=4%eqC;z>+wOC@Sh@T6D+~v9DOh;pm!ELe)zzWL zJemnTNjg_(Nev9_GSPWR{f@YXWABHXe1GO5BdKJ(rjPxcSfpQeDr;#`m+@QDo?IDU zsvSM{(M7-4tynVllV;rMGAG~G;T|VQdQVc^G}P4v{g&J_A3p3VUn4jT)J%?13rou@ z082=5j?wkGE+c1W=bJWuV&C1;a~JviafO^(eyI?bx!iyD?FLgSd}tJ`KE}AOm~Wsw zKPgj$i?ZzOgjgo&JV=7!!O%<#DqZ(yt zWbDDdODNFyb8}l)pXTOb?!83Ne^^-Lv(?plz4Pa{Db<~p=3N5<#du|kwoQOK0mIV3 z4P;vyJy;@k9g4N{E1=lAH7Fy4^IKbLGy;p0mv=OxqC2Opcx`Fo8Km^mN)LDUcbG9D z`cgq)N?4>$jBOn9GX2*K<0uq!y5?bp5%bJml?p0cB%{;-DE@ue2p%4uQqW)a_V#;3 zE0ze}AWi(y(@$z0+nM>N#L_^b#;YILuLAyrIJl;av9Ads8Q;Xw=O#sXqt@U>txDM$pJ7P;ZM|bi4XHdj3y8M@8m5!6kw- z$3z+|x3)m$D{Ex!n~h=w?MNO4ju5b+*aZLlHuL9C14b4C0YLX)zANQXeYkSv3b=;X zkQp&@$pd%g`7K{cV}jLS3m`14W;Kw((H0Hm`k_DLYltZYgE4M9=fVqJa|4lj;vKn9 z$*GtK>jTA8wf4365MV$gTBGug+1c5A|5YD+EjbVj5L;knrQDy&G1wqR{V9@@k^8!H86hN=|bl>&WKcqmY559jsdyaMIb7FcGbnKJl;^A?fSegDphMYhV zrBPN^#-2|+TOvz1w|sw2lG90chkS2y6JFZjMvO?c((&% z7jNy4uJI^lQlGz^?*gG!V+OrqQWLuM=o30NwzeCuEZ{H!>cD_>&e~glS)*=9v+syO zyZ3Wpn@8#_L}_tkE6A@-v0RlnGqZZnV+9u z_oq+QnDAg&*_=66^7RvF!yh`Ve;#{XFoy03v~_(om!ZpP-^daD^I#oAL70^sWhhZX zwNy0N0S!kguHqx0}d4?pGhKQ;~>znAX|6EXk)Zq?aeGNIzd`mnxM={BouW-gkw(i?Rvuxc6Y{egDlF5 zA4kk;Sj1LvJ~+~!c|c(}a)-RE8id{K#5w-+&#!6RmC~_3Z(_0!0cZx;WR6A}DOCUR z)vF%lZg7*gk59o=#qufhS8b_sRuI6fz*||u&t!_B-yVu>WW!KCMh=&W{E`wYKv`pG zu>41l-UYc43CMV3WMss}gZRtaWD(^@YnXNm!ITw3Gfs$)ugf}hw+YsUvPH^W{Koi~ z_WU>0n;hr@eFK1A#+dQ?2Jj#Is=y7xMQmn~aFzvmjJ*qb4 z_%mgw%7V~d6JlaspX-qo7ZfxG4{97KG!JB12&`Dx^~{L);!8h1i4}vQ(>-^tk;yE_ zsM6oC_wLcl2}O>dZ^P^g$Eki#>p_VKT6V zAV{EjuzvMSW{^dUk?$>U-h=}dUK6T6hc5Tw!v`}AC-m2k%E+X=@>@;ZN!ojH8*r7?t*N!-0o zr-64b{F}*OYww8K?7R#Hqq(Wc^p3cLDG?N>@5z|t$Q#Yf&s!!ZC-)UVU9tdWWhjjx z3hn9bEkv2lL$*8j_F$4Jw(a1H`BBAWMoCI4@ast-Z`1kEQp0&`l zyo5#^veXa7Cm9U(3sCRP&CO7R4#_>g8Qh4+u|+As&1(GrNZe; zQ?LPagP$a3tjlnWNTYHr16L_IKFsvft6(7vE(iDTM}QzpW$Q<0^}!VAwLuC5e` zvg%L84$V-x4hrwmUnAoq9|0qnMFW(W2}lB3JDp2=x`c$5@vf6}A12u*EisL+tE#FZUArwUEhk&=N~8E-G(HF8K@WDKRzRya$>z0o^OTz<+YrTQ}uDGWyd=lW)ii-gx=^FZvCMMDiOEG#r52+1<&GWkgLeE98< zX++5aGlUg9YyJxJr775?N5ZdA;QJW6(F?o5AwP+8@$j&KA%pQx$s;aJ3#rSxwMG*CO+O6K3?l{`UdevD%xu% zha4{JeH$98fyX5z3%1dGz`tz{${MjM8-oHpKxLg=g`r4YSvl;*O?{ZW?i_Kmj4y@O zeh{44a~re=3)7MiA>EN`h4zq62w~@tZ>4P7BT=kJn}FL&6|*x}4fMTtzNxATgt_t_ z@h|GH5cqF#49`S`jc3sDRD%1At~@Y~JKTMG@VF&d4rt6zYS(_03<&F{9jIe-Q?r3-0)R651yqmHXSY%`$|aTm2@4ZCa#6Q8X!Eo#h9?Zq=F+1Pca%TLFU!%kBau3m5q8K5kh! zA@e}2->PxTaxXuOOE|$msR2R6G`bC`TK(=FEviyc)af`>z0Azas;(|QYbi4-V5G)3 zZ;pdaBux466RPGsD}bNVmtZ%T$ zpjUz?x}GUO_lA-Hrhn%PjiT=p49nMYi1!y*s1Y*@^czCvfwG5TfnBLGzL!)D~YoZCKwB_$bl_nJ9V>Q4Fs2E3KCHG5W?*!Vg7-RM2OMHj|VjhU1KsU zx_Dm&g|*WTZ8NUJx97wI5m`*A=5ek@~`g3y+(pJ{3`7Xp~1)!Ow2M=#_IWKfQi}vBYoAWhE{M_KxV!{D7wRE24b||M^cVlWgBqEPd@Ta`ROqZd-M?mI>3J&h7cIo zNyrGeP0v25HF9Vik~x3Y;gcC?E>JAo1d~>OgLw#i-Sn?tI}9oWqU*-T&*qH<`~Bz7v$=(%MMrqEv$NfthHO7%Q3Enu#gf!? zb|x6;Vt7WCd8!lnb$W4y?~QoeE8{c{{pBeB+oCoc^U@E~Drsy{23u!69#r(If3h=H z9Y5%(IuH{ZRZ=d?6K*YO%7?HX5!DNH-NrcX*L=LT|4{lG*^*}pUxF;J>gdoJmVqjgT-hBD`vgW<5O>rl znAW%h04|QX8Hj12MMXu8-eNXWKw~kze-Ne_NE1o-G1@Z`^PMP#=or;CH6dA0RQ5qE z1Wvyx)!9U3KEVj!atR+hh%(H=#0_g5C5#Q~>Ny2|I5YFEvoka*>eLOhoN#1qO-Ba< zYS|XjbK8z5x}L%M|5gy1*0-nP_=devEH5f9;hLU2)>CxjG~^7>)!CPhnIQq6W0VAK z^Yrzul>z3||LqdxAkRr`s5m$k%|M=?!0XK-v444B9L1b4$92E-76Aa6;QH2-c{KXu zhlC=VXxMn6w4_6kBatxf=X>g=Z;w{8X=`JVawjZ zQ)JBQsX)Gd0f%&~N0v}A0ap!vEOByhnENb-=9vGGo|!q|%l6THwLN8Y;-p_mvS?RT z`=hqfI$$=pm#SK!jcnXRcVl2=gm#>`jG}4``G;cr_IgynQdhJA(4JK^aw~!Oen>m2 z_IFW|>R=rs6iHb0*wId~KT2@G=~)703JMAa0;9r$7Kp6cd&G4USR|c_k9@+A9ucAt z@@Pl|5hm``&#zsN5{LQWHBtz^sB4&daN;53(=QN6ZEu2Sh3x^Y)dW{p zRBqh~2Q%zBgvJnew7A5qVS8GwwYNH;2-?tV#8vjkjO^?PtQcY3M-Df>eX9hsFZ`*S z;lrox{cygCFzCafca>NL5I1O_ zH4s&TSxs^dVwhW)?{y;lKiH3bM~|`)s-47u?^O&uP23e=M2ITfU1&uE9&sAwq~*4l z+W!3M8XCDl;*1VR{2N#?IPallvl_C6U0b6h5lS+e$jrN$Y#*O$WHFfEEf{(nH(CTg9hUF868k;wmBD;M9c_5G}E8FuJ<`_@tBN z5U=?0h(W^aBTE~ zU%=5FSl-^Os>FYEYVLiHH6^HQXvsL57Y4a%YaQXxhUdi;t~=t`mZqj=p3MiI72q;c zGsX_55${tNMvr38OYJDoH`P;RS-`6krbeueGrkR*>k>}zO&Ms$#BnlM)8Ms_0Iylb zBbfPJI(^9yWgju6IW#B!`_FNQ&ckoL*R&$acrwejgaS3rF?f0m#I)~qYLDADqpZp$ ze@zjf8cw9IvIIqmPJ@V#Bsj8o4;Pmp_(I@Ac=GfEcuK+^hJNubLzxETC&sK@@@A~C zK;h)uCW7q**n1C;BZ7~N03rni3lCkMK7C3MqA)?!z|nW_-aWA756>i{6#QQ#wNFVP z-=iVM5NOre-F>)z6!`#ag?;=C;w3a8VVBgU$^8Yg3JMBfCE;p)^l2`ES=gKchQjNZ z8VS`1C$qZCJ+ix9IN(Qs110kK)h%fVKEf@%olTZsoK?T~GNQuy(xqK@_}yJxUV|(p z?0t`WFJtmWY6O8>^h}%h`t=G5ff;K2m>u{ z>KewSG*C+N79am>H^#4NFDKHF2%9iucI)@)o43Fph;ic!%<+;gUpE1YOqfKhO}*y@ zi@C74m9||Lue(;v4c0=ZVNb!qYVaBunHR1YC&M)S#jqS3-wGWj%qD7A9CeEZr9fz&iEGfpN>H_7J`)sC_~({1S*$Zhb`rnzGRk;r98h zHqm#+|8MGN2VZnuXTl@5;+)a5styMnE?*mGhAFlV%kdt*A9t8V!IuCiz3Be&INR)O z`(jUZ^+sqs5T8evR^Vwa{WX{Qy#(JK1P4D@M&iQY^3n6Q*T86ibVqGf26svb-bB`e zMMg$-5gCP!D-MUs^zZLlq$htHTG*G+v zuUzUwp>{?ytAPXJEQ>|2<3+_ z`XHTr1;0Wl)oY{^_Zqp#qVKz^PrGY&AP;)xUD?viugpvi*rzyGgu4;&|a ze57!nghLGGjUniP3!rLP8FXkBei6DF6rTc;S8^PNbpk=y{Jw?Hg|1$-uCgoSfWoMR>;I zenSt%qPpLc=)!-_gD(odCocIPm(c%b$KvCzd%rdP#|to#-rle~gyP2A*AE(|oYzN` z%_|OWAWh#sSfj2?y&8GPEbhUU$Rh0t)4Bg~C9U*KX6hH?kGAfwrFq!y%>M0$_Q>a) ziu!Gd;&JL6nOk=5+=<5A|IXx}i(ibs**jz}ol)@a{d&;Htz0BY+Sx5Et8B(r+6gbK z*@Hjcf*d{w&`Zq{YWVr|GR0J209V2thLkHAo&%j~>X|(cq(9g(kmO{pjf_YX$xo(e2o=0UaZMc6D|23l8*_%n>+JN@~x82Qx=#B5-Th zKYrA1bp5b~gW4__2h(iO(RC^mM(QBk;cyypg2%+dg1bW)hibgQg}tifeP*{o_2Nsf zARL5~x)3Iro*OgF4UCD#HL`Y3+EV}~Rh~rbgNQeaomg3v`hO1T>t%QVb<+O&^^5RN z;#lyXJstZ_f)v0^42;21BDHm~@1s=sa}hqu=BN%?=~t8I_I!>}Y~;0txGK+>(oP_e zf6MEJ*&ge=<3qy55AB$3Bj>W()%hg1DUO~&uw9cZ!AE2G{Ilo%-x9xitr)21JA}w( zT0U0CiCkRm+r6G6)WF8-Bk3o{cme!1CMG>|?R-nO)FneU020+osmm?SO&V zi5_pXG(KHx7&2+Rxew!(#*NNJoD@5!uTLBo1`jLtL?Q0?Z+AR_;C|kjimuFH-&3|8 z50)h}Xl2PSHXdS1B|H4CtMteXEEl6G9DhaUD@x<`u}d-Q?MgbPuew1x?Yx&AyM1edl$|pmD|} z-Ji>T-nR36acLsAtiF8Lx$gAzM-%1SIIgKYz80M6-X&O*GQc**PbSiGrrv3wZFWJ% zb+lhgV)U+Cs|D2~%bmlNc~0rumU)bLr`1(#QZI)!zVYkb@OE65@@4=vo9v1m?(M5Mcl$BO`-9>&wGb|0@`B8((h4X{#hOO=v;H*=^#amHoi0%bsXgn@Kp~ z9|~Vk4J=Gh=W0RhWVQ}Cuj=sFQ|XvI(ITHMpBRkv+;e>)y(>k$x8JmFl}lZ6$L0@3 z`>bEeP)Hx$8InrLlsE1p^E+Ylakt~7y(M8^|1=z^wo82bO+s>l^OM4t({0*GIa`C8 z`t-)~MCdQ>V4x9GYa23aN~W>Slcb&7wZ*vQmrAYGOlI*^KJS5~-V4m3=TDA(I7!yp zrqt~6OG&DwD}2pWuaPcLWR_btli`cLqCni}Ld}Txp83^ys*xjWW96fFoj;ebQ3_3; zkrdsv>DXme_N*6*oSf?e0^dun7QA!!5Ip7cpxUI@;G+?J;8x!Bn-|VSI(X8Vym(;V zbJ|Mw{{4^d?lzblVe*mOcq5VgxZm1A_rAI9ZJe{D`_;mSUeZU{w7#!)XCm|WyUAs5 zxBS$}h4Ywu6o<`niLiG3FuO7B<$5MGwdxQi3SCSr$WtN6Blp56exf1e$(;;{taZspEVS3>AXIZyu9tzeCU_ENon?; zSJY`Qom^X7&a+FH%Wt6gDXrSIkT)xMw%&_u;*x z^8P&n+Z9WUYG^MWpK2mvDPmcfN|GsRDPrS0Ykk$llSX6@I*zxy)Ws+CL={&&WmDyB6<1UF0#VRGWhdn)DF%QRXF89j4IHRo1d2886cpg3BDF| zSse&w#m=oXG!3u-!_T~5{07Ey{&RUGkh#R^Z8UkDYHv6>I=dT(3;>w$JP~txhH%+G z5O_Ck*|Me7cTpIApeP@0{om7~-&%N{#5*D#YUB4j|iYq3JPq6rnb!0OVdf$pK z#2(BVdDBxs{X~I;nUZ4!Dlu7;3?<>D0tzM$9^nKwB~GnTu}IMaW^-6HwzSayl!jr4 zIB-uKL&7M>$G=RdrXwH><=}s`$h`v>&EF>}d|ATNdCr?6k%J z+;Gobg=S40V4rq=e`FGe6%N{y1sx+!DO9z$?}X83?88GEoD(}hCEx@1Xc(J+AXHft z7vk|FFMSsa+8uN|A?gu~DBMXt!(yqg7}rV(MHfScnSfhyr8AIz%e}Nw|kahPG!x4H*4JIwZJ))`k=9LW&6j)=XCRO2wSYu*HCy~Hc zRY9pzYX1b53-2J0E1$=CYNN5wFC;*=hrCMWbNfj*qhYM`TOj|YNvKiCdP`SGo|^x6 z{(XhlxUFWpxhvhXO8C!=Uz*xUnSDOTl_&MOY0{U5wXMyM^F`H~5Aa*!Z|Rz4!cMmm zn$2hiEF<_Y-#t^c=P-@=VcFph`2%m(GeA@xPDlj*H#POsd+kcNgmvB?RcBgPe_r@+J%a>9~77Wweoj+91ZMQ3&yD>eboYs@m zu|yl=A+V4oRA{7_$Uq-o`AuDxp)SENib4Od@PnH+hkWbA`%fB&>nrigl-;}`&HCoN zlh502*RO}n>D*q8y*qp0alm}a%@jW5e8WVm&6jrV=(;IYVfXayqY;f3-@Sb=b;w;6J4esX zAI-m9k`uR=wT4P=e%>soapqc_d?z|(r&U0b%BR#nX8D2nWYMwbtW7r@{7Tu~8@;*3 zw8pM@)IZ&M^^vv!-j<+suBD03Z?8~2QzEaiLve)(XVi(jyiECol(%NReR9HYH$Urs zQ5##}R}l~?v*-0rxsGR2%MWsnjAkVF9Nsti>xF$na+_7Od|~qUPsWx7Jm*SV;}gH< z^jGU)JEhP93rAzhS}bRo#cM_eR_SlGT2SxWoR`{mq7YxQYiDX(g3%2#x>Jh6JVP$! z!>;^xFJ*3SuKy-d&qNvd*2-gavG9^~f5G5Fti?0anWS;UfN#H~)RJ1;tTOadS4}20 zls#X zwt<6BC(N7CG?SHl>eja8)>zV|dg=HFqrZA4f;V;!m3Z1O#5jkK9DG|-a}^#o6@qA+ zvv1GDgG}lnr6fbHH>mJEa*&_jyPxoY{M&lK-5?U(U`E(~Fg=^#2^Quc`zK)`%>jYP z53(|;9*=I(hf{_yXb?6K)vL`T1)!S>Q40$3xPyeGq(&U;tHJRLebmkeGmuA33HPAN3HLyo5HP6p_bXd6(AO8jVS@S*SAEcCZqCleFf!5Rx`C(rhUcc>fhYJB z@yj>_S6EbJ0Uj_hNzc-f2PXwAf&Qy4K*Z)iMzn{mivP%wWIR+QAKXL%B#dpny}0$B zPoJ*GIbjy7uEZU@C6r-I9Is)T?8ZQ%4>*D_+2h&ARH6^*kn zH^-smRw1xkgySjS0SwD)a3r;Ol0`MV*7}fId*PN8!J%I7i?O;TSUgKd$JSh<%2p;b zd$4PSH3{Dk{x(t7>qKlqv?Ss2A}l}PUHK0lj35N`BT`a?o$ZShc%2=^uR&oG{tbPc z1jNpoV#y8VVT|SPP{BRlNrCTaBLBtx=~hM zUVyf}YtNo0Jg=tJf902Q_+0GA6Ycjnn^_0q{i66k>!!YOy?5ai9)GsDn2$pO3Ab-I z;mB1hk9rdOiVP1=sEwUnA&ykUJV#e*!*1{t*kcr_cAIcBIF&3M0t>R<6ZK$UyC-`U zKaH>DS0B6CKAG4urNGMU&y_+HOyb{FSCM-tGVy!<^_mlWi7^dUbGs@`KcvV}uwAk{ zuX9D^E9=P*uHN=*bxdCvx#cq#cU@7z-Z1Ek<9M?;%;#SQ9 zR?E680f`so^y-8mFHe|iGu=CmE>np=F9^zBM)z!SICU|P91i%}F5u9% zsu;6+F`2!6_mp<0uY(|}s$%EzqP-~dx|M2=+<@H06A^1(XXuu>`Qn@D{r%tc^M)5s ziLD2avBNg=tA-#k=|ZV2b)=n);I;b^XB zjW(w=RIA8Q^xf7v?4s0r`L2Nsv-fkZn;hR+?dR1fP_~p7N=k>$rW7n2Ca`Pjv=v3` zD^ZE8obxJJU~8>qNwq1H$r5if8aB*+w4KddayygRWZ12@hRq#w>! z!G@+*#`$+v_+9>TbOcX>YWei(_Q**1v(Zt}^mN7E&(MyO>XC6hjWL|f4lrFAUjpBJ za)b`YDeI$Hns*5pHeQctPF;VXx{V{gLPEGc31nwsF|2w*JhT)^Ac|+_<{0!xF@NR2 zdace*`zp$pN8p+$5id{{V&W*#n30{je3~H>$k9 z+>5fwwIzl)|F-j5Tu6St5G4hLv3kAu!OIn`aQPb!^6>J8fmx3W2@O5jQo`33V-Y>o zB&(c2&7m_VL%bN!hhgo)XLe0vW8j5dmkQTI9ZPK zK{a61UDj5-{~zk!Dz2)vZQq`V0@A2-2?#16r2>-DB_ImYEz(FxNp}bWDxe|_D&5^7 zASm74-QE1J@jPq2@4NeLej983mP?p(jxoo5-&dUHajB`PC4fv29HRk^Tgx5-@*;0E zh?EzO-?1(b-xvRG+m)F(Th@bHcw_1y@g?t2uL53|d6PSB za--Fm5e^z;w!EUN#^VuXn_<7%dA{Awk@j4CuqCF_y?t1^93RBOexGA!wWgsW_)0CU z;VEujriGdCEGj|fzlsaLBPVyp6C zEE8(G%rtB-)JNI*;`vW&`j<_fV+Yr5+Igre4KU8$%62}Blv2>|8?T)sj(g{owIZUV z^QPKIzj%*hj8Ws|7uEwt^?fz8eemO<3^xwH?_3xgeik9aBTm*gs7!~(kOZ4Ame%0BdEG_}} zG+ph#-~ff`9Z{Y4KHo%#I%1CPi974W@jB@3^e4ns%&6leWQFlJmt0RzwDG@H z^@v9eWHE$o-e6;;$WT_xhEr0Ss{Im5i;Wb_B?1$vpun=Vlk;bO>*A6OVwR^WSx)O| z`3DJLL&WMqoabPOMS3Oq3ShSbav4ix2V{DPXB})$S*>=T11ogh+03DF41d{HWfjZm z4{Hco$_egnL-U_tN&W(LNZZ_4$!lGZ#OuKkN^Erj4k%FfBV9WBwi6JKz`;(>#)c1o zHIucpwjq)SrOLTU#M0>)(9CViMozb?CmF?Jvj}VZvGc73W*wm zr}Dj?S>tkmk91$4g#{p2Z^&4K3kza-Iw5t%iO0N~cgUxHYpE?~Om@h~`x0n5 zYoR%eDK?+!9%sycCy)E{D?h{L5S|(`^z!1T z4fAxzx!g}hWbtY3*qbJGq`8;x*yFjt`AUXU#JpJdQzA>oQz~zs0ortbo z^M)7(!7)LuZ(Fuj>WX2!@j(1_iRjGRBwZ3Xaitg&SK<0s@DK1U&4BZ-|{e$4vhF zy)4{FrSkUtet94h!58oo9^bM@K`-gdh5C#@;0L`={n}l~;}Ovc6xUIp$qS)+bPb_2 z!NR*qh=tfb0p=wuUy`(K!%GGBzr;~j-G`~);}}?EE0T6tLA3=wf?Dv*A}b%FLSBCU zHm&nknu>?cPzhjEaW+_+rK-j?Ka+!fNz5=bcV5yp^vAvSo`bTdDj$3ddp_v3kFN9a zvdt3@2dN9(*u1={qyIjvLNi%ij1iZA`*j#PG2^2L%Fk;f<74RT;_+zM%)Bb-h6XQG zZOaPZJiNi#SWcrLbp4FWemDNcX=gRsgHLl2F0~}hw;y`NMlfT0l!#4jIQ&e0dR|W& zqvY$rFWMz7M#K)WcLDJ$le8b+V+V3fpJH7&G5D5)rH6Yc^kZ1Jo;PDS5o_MB;}JD` zS6(4-MD$LlJ41Ezr z>e9cQe)?{V0ZNNNmWIomkJVe6|YL}84;lRd_C%IIa+n(oc=8RWJ&Om z(M}tY>He*Z=jdG^&cuu18RPZkVRz4yulP)6SV8PRt*2iJ%1b;jSHt9Kd-94VTIn*B z8}-jBVB!BFCBN2_)^4K_q43=dOKy7lSHRbkE2V{S^c2}=i#)MjHzXnGpx^c#U@)~0 zpX06l;pY1N342N_g4Y4DB4SVebixWGK5#jSLCRvJkOKuogsLne(id-zAbugeR32Or z?RN!Zk}u>C28Wwd(h6)Br>fdu`Zwv%B-hf`&WL>hVi~046k!CG(Nd2KArNS#T5T*Y z27;mkI7roQM6FY6;rfmrww;^8?xnvL-;sY8kl#)~rC-*Hs5A z>q3;_&gDz z3nEAYH0h)@Z+LVxf(c34FBkj5&5{8=kcYP4UPNYgM1aOL?&$cqeti7Dq+#$kLo;9d z`z~NKeXFR1uVXQ<4{3Z{5TeuVCUx1E>bfe470iC;fFxzucGVPn-r=HTK*{mGeTxn6 z+<1Pk^mC%;!fxcxJ}u~taJc#2x^a^}b=FJnJ^G)OZ1nruMt556^v0#hh3!pl+VD<< zu;EP|)1x0rFp`G)KA~B^Y^<-qL!GxGmk)*MH&)sH4A(>{Oc%0PxleC$+Ko+?&gC$!eamF0Apyg z=#T$WbNw?-Cm0qsLBljP`0<7X1*F?i6oZK+tRsRA;+4N~T}^E95^td2_;I8EAtym_km4w@{T%bT@+R4@G zCO&GJ!JZ_I4f6`9=lt`X2AWw$=?x1rdW#WQ0%3o|+?8bbM%II?r#7R}-fo_S2b7T- z5W*%*U@9@_z(b@tc5!A~j6ehr52aaGprT|m|A(9voazWi6@(WE7YO9ChTxs$y22rZ zD3(B+!~tFl5S-qGqZF1Nl*z;Xc%>o+S-=?pXr&(HF#x0qhSO9Zs#4&ljchjti6E#K z(GeDJukvp}_JbF~7=QyDu|xhbMIpk%Dd>a1 zUWG6kpgIPW4jNeJ9Kgj%8=(aIE?@!nynfQqXfSnr`B1E8& zi5&V>K(z?bm*^WCV;ULF$wpQbf@VwvKzN8E2!UHhM+d-_Ps8sLTSWsS8@N++5DP#D z9q}^&E!zi*SFKt+@REr95;UrQU%rqd;xlMOFx->34KG@~{~^;-tr*ca2SOxW2Pztf zeGy6v7|m|Yy8yWY(awQt_Oc-^Xv?q&2oPo&P#1u`7zhO{w0M6Tnn$)NqngJlMe6F% zGVlj~?2BxzAYl9>LOkeTfEn<$-^sk3u#_zQngEzLyn$3;Ev*e@C{Rwae}Ik)aF^hQ zB5V+-=b;cHJrwf-fbRe@{PUv)+Mw5OGoO3`VHF1m{+LTB>539tMQ%~s4@uQqQfhGR zn*Vw@R34LLyzS7LA``WN}ye_f#Kj z2DN_VH5O&J3;hr$cg|QdOmpx=BAUd^BvrL6W=UAT>~rUf?S_S5q4Ll6Y#3(*{z#9o zG~i`l3ww=kU;!YR5oHhbQjkD3vYSlUT>!K_SYY=#qh z-@*q+LSDHp!>RQ)`jdYDo3})^qtzL&;M1^Kpveb>R&1dtlAUO_TNcA_SFuOZ- zBx~20LRx3lrdc>a6b$8i3o_+vxF7d;vx2D`_VOyj*ybymL|;1-e*YHapOuJB(VL~! z!2^33>q%vfAI31xbDzHNJl3PPSh>vpuN1)`EQ$@z{fW7%7+_bWVg+MjRQuV9Xrj4}DF9 zy$;HIWOXA#M{jS@)SW47Uc`+LvP2HRItGdOA;ekO6LO1-o4~aHGP?lGCjcQskS2vz zV-(Q#3;>rpH06vG(BtR*AX6ZT6ZXJ|x-mfHMZk>%?%ZfT_C8}^_0%B^OAwnQUL#O1 zA__+kU*6UF0sJD6`$@t7^AjO*ad83Bs;ZgLEgJ-K2d-ZDV*@N|040OC2Mw}$)hP!g zQwO~zV*CJgMFY@lV8@eyjN)awChP(T&I`1#Nnqcp{b5WBHu*m>Jc`p#8ErbG^9%LW zp>&L>U64-$qJ3=G37Y`Jc`I8O-0lc&3AQ@~CIxrw9mG?JHWUP)zhI7l^>XiBWQiho z3~c_(eb-~r6{EOWI2&+}ub_~=Hnd7=L1YN>UoQ}`YksHs+}-*K4jk}I zD3et(&C1Q>GUE%ZS6v9wRQ`@CA3vqxTQtpnPb9_g>ztYW{c{$)QQgi;=3kdkr^h$1 zLO_3Qfih^w%I|IZcKxFWA&cwOKXN$QXx%gZ>KpzHhVGe7`)%q0<1c}KcnCl0_%_RF z+>B=NJU&$o9Dc?4&BO3yOnlViV`#v;uMJN2So>j|H@=ka?iM_tdixExrth9#8`sV| ziFt7@%>#-Nf9|M52?|s`&bzH!tfXi*N2T-eK^SJ(r8NmhJohIs(zJoV6d7meO(@!O zkodQ_pFI$Vb<|zp?N%jws_jbi{^DGuM9Zc1097 z<`oo_{tTf4n7NjNnM3@_>BiU4!#~Smw6{Tn*m4m7VJiMvYzQ%7 z&02CF(&;uM;xn)n!IJZAo12CM2h^|dm!TVslvb&Y?`7CI3&}O-uY>ncK> zD&SWsb>3kDb$TcC=QDMxD8TF{35mh~e87(cMV(nbaL;VURZqo-BwR64ht4Av94igo z3Oge${}l7)|KZ_U5M`}oFmf4b3l<6u|MoWkcH!_D6t#RGY{D1<4U9Ewu+YDhUjOE2 z8rxcvowrMcL(ys*IM!7@$``+ITkS0)zJumCBtM@sW(JfPbJ}CO^XNd`(zv?ANyy>9 z|F?HCFX7RRIa5|j(6Me;u?Wsq@r5k2Om*@ykoVu39q9u9ZLU?%wFY5ms4-S36ve`W4)M$!y3u{YO6 zY)M{_qTLd$zD3b4`OlBe%B3Se_}$SekcX0$V?3|=&q#=4W*Ge8j_3bQpxO@2$cvLs z^<%WL`6Y}V)?iC`P1kdlN(l8>N*gWem>Dt-YKFDK>XV}|tfQ|#Z~r^yDx5v-g}1bC z_^_17|GEB9JixO4&oy4u+zI^OcM?rWy7}*K!;eG+!>|9(kBT#6|KA~5Y5za^#T(TQ zXjpU;#cqmTnW9T8rp)L#{2oEqB3}Onye1)VqadPn2VLENh0kW>R}jw+?OFp*R;%bZ&-mB{e1qZ2(~hlAIsJ z$}l&oMyJEB|u<|C|@sQQ8xd3`4MOBR3K(@yJ{OdiV~Y2KYDt zpIQ%&M2I}zeVPJyBQkE~E6;0ukWf8|GO)BkYkM?CU=z=1-c5HdZC zmci=z4Pt%3?sTQAu#izwB4d=`)Fu86l!dEcWNFG&FF+tV0A8UIaC&MsQeIKf0Ai`8 zrl!x_mK0DK0vNgSQXxyaxjKBt25>WqM*&)-9>__M=0uuNqLADR850FGE+qOI1ONjx z|G-g?%$fiJ`RC7{6F`g1>%4sn1{|ao;~J?B;Jm(G(J) zW{87wAbnu^S zt`6OA0Xzqwp;4aD9cB1WVHpFN@i9F;-KfB)4P17xlhH%Q3hAsrWL-#o4Q>hOrA1$A zgR>t2iUBPLkyG!lkG+H9u*x7eK$Yr`{4|O!5VbKfd}yx!W0Zr0{k;`Xpw+^96^{a~ z00PYh@59GGmgp$(7}q1yNubY&OnO6V$$$kRq@chCIt)~Y5DTo+&O9D61Olpa|L$VX z+U^7@Us0k>vN;@#*R3G)b>-Ys@zQ;ZMy2q3qFL%v@$q9xG>%=|+BsFBza3TK|LM^3 zQsINjE<;=%u6wg0Zb7;Vg4O2n9Ayo~&Y>GsBz&u4mhHdykpEViUz7W}A zq9DRef@YS};bx+B%v3`F7?Wx2mwUnLgon&Nf^R@2Jp|~ek0Dfr29G}=#S`H#5s(r1 zkNjbVMPMdBlpjD@he83o0YRwep(P??;s9Iw4vLG|(QqH+S1X@)cV|D*21{cQ%tnOz z23B-gX=&i9u{sc8XP}d9ZDS(>dXGea2H(DY`xHcU2$&c=Xz;3?x%y)8JYgboJJ_v& z-KCu7`p=;i`8>mp{z^b)-C00b_@_^})}AlsUy*TIaDe~G{Jy4Exh?gDK;)^P)k1OT z(+tg$)+OVG*_(GCNvs+}YwuljPF?!kJN<--($NLFoQcW8Hs{r$ywuhs)n8F-E}cbk zQg7Dp9IdH#xamxepVj2PntOJKx%-WJimx}-rU{c?7UqM#OFB(xAJ@>DJg3?pTfCa< z`P0%;3!5;2W|_J(Bw(BoY=hAF?qi1eL|nkk?W*zch?oOWo(TZ|5J)7%;trbB)Umd& zDM8dDsiPCO`5N5ju%-#2@7>wi=~-1()v}Ne6$=UE9)WK%-xV+?pzE~p8(Cgj0$$tW z=>>RHVM2`$6l_{-0gwzX+XtrI;`4huNCZ&z^jsmM zqr<~mFx3IW#y~ipL;n)ut_Hjz&=VU#Pw#fTo3`ij&$_>`FCw`My3cxH#VU@svm9iL zJQyHi{j0goYjey>(jKFtIfPwQoL^ho#qi7hg{n$X|IP)?L#s?oO-dH*n?yveXx5FC zynIxjr=M;UprS@GXr!b^G%69OJ8W){(v`GqgD}4kaQEu!>Ycs4mxcD2(=&sM^+UXN z%H&jt5eq(W4iGOR`1!y^i)C!QK*3_DvaG2ASsdgumw|=?PB-b<0&uJ&Cj=C}BJXCU z_wFGp7L?`)32ka*YWW47iEft=*TaW?Kv6k8Jte$x0~x_&09|~@-@I~FiT~N`=KF@N zi{I`&;B@SNLq@Ua(=dflUwtt58({3>aO*SQByai$4|;!{XS9>Hywp5LLTIufK^7J5GFsIl(Ij1fHDFUNR(^!qFOCv zh)Do+P+^-us1*hV&)7UKqd=R{1Y1?@%x`X-w<^oS5V(?&lTX2#g4u8Ht#!V)BKQih znYYPv>3ju76+-C*&KGj`U{`Je`xt{UPh3RX=GHl52E-R)}^Jkfh? z>{D9mBrehHsoE%3k{#PsF;JuXfy}VqPH9zARCsiJ*b0vo-JQdSm!Eh>#rt3GKk1cYnBAi+)hT;VB!)Rt zK4NJCj=i}!9j`jNQimB5?(=-v(p5_nvh~ru$6BtJl$Af}TN(vgRA2OejwF;;86PQ5?!*fiMvkWQUtPj$FMV4z$q&lQw z9EHwN!@zN5(ATrIy9;JH45YumzXP4?85jeJ9I=qZSnn<>X~9gy{~`c!k%^U7l+Xu2 zDzb3az$ODL9T|rQX4*?2WkdXvAfHC2JHSF?u(=b%3R_$*xT-IMbQ^T#ckkYXW4LCJ z3)E_eR2!z-fn$X}o&a>$$T10rJ~DOE#KdG03b8PONuz91)d>2G@9;X&JOKrXjN+P_ z@`9tSUroCWpa9pP@(=)6t{_WuQ_JL>oG`#}k%Pgj88%axjTi*3PK195Ji11(XV=cz za)NgJA6hlM5a~?XefAPMrjT9k|pkVkz;7@|C zL!&+}IP(Xjhc@p%wx2G<@yDg`G=1*=SW=Q{eas`!vsUlT@*oYn?v=^@HJ8sERyT0* zc8RF32NaNM)!kzjEn$oGT~h9Ciqjd#3JYvpo|8++%nTvu>T)__CcM;i6SL(TCP?v} z(2dW$T!;Ab1LvUr4wyG-fftzgRDlqs*LQRfK*ZJvXJan7^AQpU5@_6m0s4pSiW?o)|U;$_r73L9W;7x&@ z9=_7xvu_PkdLTfk-%m>`k9r870rGB*Y2V@QVGI;J9hkr|Lo9-ak|nV06CgZ*-Z-1X z`e+c4({2I<2r(uDwEzlrOhpR+O~S&{XL6SnYUvn2r5}Bc=CnK)>bLXis>_#Ne>v6c zhMgh1J9mQ=)K1#c=U^WvJg>6r5PGvVO0+h7&R;lJpPF%JnnZs)#YS3AvDyDGf3DSE zTN56OJ6g9n?pz+Q3f><)%H+CkP6|xAZCP^C@8QCkBWO=u%ImwRiKF0PV*>P&*^Zm`Il6b5-chKj*|;;!?KUNgcV zT`gQct~xxg$2WT#OZ!x$WUk^Z59I8*wmu7w4gi_JhYugS3WJo&I)s^+L?D?sJm{=L z@60m44V6ne_y|&A@#4|%sXI#)*{yl028V|AR)0?EmXcgdO9y{;)2K8#r~2Y;_W|~1 z!v=O1B68x;!BXDC8tg`S9>+|z^4zBFn|)$lbo3cW_yEZq!j*?Xx~E0&{!KFVi}vr^ zyzIqXJ+>D%FqlD2H4b;cU>A%6lE3CGBNTmqO0QlMVxnh!SoCb9sMx}<`N9c6-)b+N z0ZAF>d{R5yD*Dn{P+op;WJqsu67BN?cic)hT@(uH$Z)WPh_aPnm_2{=m4X6h)cD6= zu>6iU=kX28(Jk5mpn^|Y5NEmLT1fm4MX#tAg1-KKeI_(e|KNdQE(|A{1o;n4@%*HZ z^WS^ga*)#hmj2;=tKf6Dw^Q4Fl+ubFkMka*KE7&FAk*XYi`Pw{@gq(?HG0G8#hiVMCx*Wxff4GN6sxg`k=QPm{{s~ zL8lNW^se$$;PV4>AofyiHST;{A#dWOkBu;KQ!GDyjYgz{U`NP`S*yOfmaC*DSnG#zl{-WsJ zmWpdwv$l@A(1#DtZ@HhRW~YgBPt0(>7~#5Kut~=^Z%#V%?&oh8xHGJ7869Lrb1s9o zeU+o@2iQ<_vo&+msTrI5&Pv;uhIdG?ZUSB6)OCE7{OL30#z=FXJcqt#d8VuUPM6oH zMiR6&1I!}l{tWG?RoIf>ASO=DhVkgQ_yOpT%37Pp&C@H3Qj;8hDpX~(bzBg4_uSWe zX|nliCp)Ahal^W9k2%;$Lao{fjaKzR_P<(y<$-|@2IFg&(9tRiRbP{!C|JQrF6 z69s4gEHSEXxODaoiHT#^p+!w>;Y&8U7 zwdZ0|7gaf&7{n^Xyv2FVlOkt{H`#TU44-I?sLYk`+{3}e7pZR+e_&~FYkw!l?X-oN zot<{X;XK&c?o~oWcJ`n>^UkW$iy;?Vd7YeA>IxK02kflQLdV$O(41R9$?R3xFVKKV zOcI~=nN^Hsg?qy$osXVXzn0l?2q!Gepf&aD3vZ3O!;RuySDNjXPUPf26z8-Y%$&IM z-STyHYy zma4UZJFn%_6sj&*MmGd&HxqsI3@sUZj!l=A1|2uCxN~%$uNa-=xWHD>+xuX3FkfW$ zU6--0neOE)0SPkK#as^weRg+4D30o1zc$3PQc?>2q)5_H={BkN8t3%{>0(dCZC?}AQ++5uH9&-E6n;;nDRT*-)aY&>buTI zM^JSLP{&!)mbiLEu`cZDOUkZ`6r#2H?8Pst8Ed?$`E03T`HKRIA{nn;6RO{9eF!NE z`ebca9Zl8SH}?kC%6|q1Wblk4xta>GQQ_+WlGJ#a2|vG?>}GUe-@{z^uow6Ka=z-d z78jSC@?If+xiCA~IW+^~kcMeLyTqi-5OW@@Da%Fv&3EsRKf#I&u4-3Kt=u8G*BnP3 zqx3_88dWQIfjY#ztbhE8HauR}6DM0W{PVXE10mYKF);>uH9|n)LXU3y6}e)C<$Q(# z$JrVcHAk)ot^RTM@KnLU6p_J7){7E0(TS?&za#4{?XCVm#X8dy4mr0qEI)D)wx zh7>MsNPiUYux`h7Ozy2d!Yc<$ML;Vk=~^!ZD9WjsW^p*Q4Hm<_>MhY~ z+eR=6E{-W5l{uRXCJ6cC(_q;Z%s(61ESL=EDRti=0ock`bNr9QgqvYy1;*2>&Z@hM z{p3+3St!)d(4)b8Lmmgq5noJ?Gd#r{80+%8?t2!07Zg+f#67~pbQfl_p+u<_T0CqD zp}=R~STM0N@UBBYnc9mfDRpk69(q)UyesmTV(4eKCyxi)_qpM=k-+En2`wU~5qcZq z5%(5Gxi|DSk{L>cd1{Q6&lTtV6ofJ|V;p7(=cvQM{%Ntg{9^{jrdf*5=ls`;EvBlXkza z=xB~+wZue`fB6y^8tUUGA@?&QZ3;G|-IbYJtG^l6)b>1x1CdK*i^c&(I`7^p{z`uo zQk%#xu=5oYfu5wz_8)cMDuRFyN!O0|*Y9o(=%|NnbzHjS(^(iq1X0A~q80~s^7V<95-OQNUYwj8_a!mo+DI6!G?x@28tOTD#qHT+|=7=JVO;y|;En!iNb z3&WO#b1XMf|F9sL+>#=%EP3>6pIqB`u=@yE3Blux1PBqrWY-q=$eozTn2E`VqS6btZ2m=DxA2y^3dU&?_$gAn&#$L%&HTXIEpC8X>>KWu-jN zD-z0t6?dw5(lAFWJ+Mw}t*tSs66Oz_Y2pG#Vq(9VS6#C$OdNlp2lFCiBNk*^L| ztWOM^+4eVWcnw4H`c}B}9lJQe2)m7gJvbJALfKubO}4c zbbzU5;w(2D=CxYqYy|k{X}cVNf0*B4`bLH89tC*9y&l&>g{BtD9AHLY8$Dy^cip`V zQ}16vRMf&&`!zBPmxu;zn z%-{5>SGm}AE@yRUhhSlAtipu*byo+Vwu1oCfAWoLe}_Gzbcf2CF+5A7!VCIeh)0d; z-1o0`sqb8LR2wt_)ExE$T!FAz;3s@V7;H)^}VRSn!EQ8fIg^QZ1IaC z>eIJ+XpXtS|35m`{_qo*MWe_8{asM#jLyaR!UU_p^wk4C7M7TMr>5iwe2*CY?x`0) zyMu3Ya+*7N+o6ly)8&kf&;P8n_oE!o_LALxPd@Rgn}R~>X_X7<-+4BzdiuE23o7j@ z2OrD9%Frs0i#UM1&#yQJS)RL9Jbi0q6T}jhzV4G75H>VXaiI_PTe!rGf!AslrtZJy zYM2i8YB2FRg=zu;y2TNHe__!7??~wZt*@Yg$HuwTY_&=(j?F-9X@16Hy@ZFu;h@a= z9y`l`?E&h#UDhk(8e=&@Rl5U6GYyJ&PS<{u8U7KT#O8P3en8s19a)oq=u2R)2AjbN ze8nXDn_U6h?xcTTWR2CPs`r??wiQ#e?$(LHqhh*5E;?7&*sB`CN#eTlzH=cLDpSba zb6ArkypDAlJk;^P`1gqwa`D31Y4DCOJzbca%S(;R81fR6DqUG>$@}RGu1oLjYzAc5!I>Jx9U1};lS-dRv%0so(Q;c8c8nN_S z52)5gKHhH&E&}4dcG6+8p}|l`P3CmAL=)ML)*j2d_d!M>oZQCa21r-@*K_R{&7R{F zgBaGo$FjXeF<+ya`d^Q>o}y=SFwJ$48G|`=IXAdJbD}X$$fXY4$il+$f@fL&Md6^ab(wSYx zL`n;?ABsI)zX`3dRaej@=9ZX;LOFf1YX)m}ey;CPyP_o)2VFcfP+>oRDY`8C<5Hnb z?)9TW9LSg}T}VSuPcPlM%bXMP(&Z~5JtR3Ik>IyoDC+^xiuF^kS|~kL3;Z@ZYIYEDt7aPZbvioEt6$XBAy_b3 z7$t$Z$58ufgy$aVK>>tX6gofG1te#V|LSox-D1YH$)3Oxy{N9ze|0=Hy124r@aLyK zRwa${-PMNXDa3u@7$R@~hNIC9l|6Clp$3IH&;_8OzWz+FZ||2}6woZ@3h?*mL)DIF zKZM3k#J5klC=(-nd{9ZFJd2A-o@f?7b`_;B$uVss8D+Qleoqr?jnevv`TLVNl;GHR z_?R4)LzmEx_lPw8L(}9I6h<$2tT2)tJJvav&#rVg4PV3GcPRA`ellCF@%3vi5b>+< zE8VXfO5#aD+oyJB3ke?~)T7U?f5xI;f{`qwBOIhoju_{Nm z+C4OArdd=+2Os?WWZX`K*hi;)!gFcmD+=BDVoS#UBaR!1hGnOY78@ZWj$*#`D)w2e zEv=rqEmB&p0>N^!3CUU7ORD=^S(cf4ovUKh{i6xwO)eqzedatYei=&-4D79p+dr(}qCZixrh#3jc%?H9U$6i}dDY+}w zLK3DvJm4{D3Y|9{X+q1h+0q&u?rk>8zO2(c8#I%UeV!;}I%7hxQ2f61x@|npb8WY0 zN^sn|Yn3PMc3jsiUIQNW{NjY_uJ^3{Zx{LZiI5RRepinSy#ttZYqJ?F%X{)a(|@`K zHq_BT{4n`WjZ#7@MqPW%9k!ac2dnrvcF$3s?~A#4L{+X8l^tk)iLo(CPE8BiGW6RZ zprmB6%Hp!wqNF4jmDk3LP>e@M=~TI+BSQ3K_FJZQ=Fj4lB{cSknYAk3MV)#_W(+iR z)#1Cn-TN8cK{oIjW9H;Y_{A}c$35uTBo>7}bP^a3=nzn_BqY7d1p39kXGB*h$> zQE5}Swh%IIGKftdp0mO@4okG7L)ZSEA#ba(rp7J9M7WH8?iVosOCoIDN>qP(=DIZu zEvpO)_Ri1eDtEM(7;I=>>>9(P9)83yEpzLA9IszQga2gj&`xJ}ZzDm0u{Wo`9Aqqa z4!Lb@?eq;Sd=uAwO4+OK#IiXo?>-X1_keAuwrLofA%MW^JE+&KZ3tEeFnPRR1EiR^ zn7eTW-=SvGfoe??S#|sc14^&wxG(&qF}_huNEaeTddg2} zx(bb{o*AV?Z*W353tunzy1Tu->L(-D=9z8vyhSCC4O{ldsn%wNZ@s9{r%yLv>KTkx z(=l>_#srRgG!Tx>p-UvDt9a1hz_~NZ_&bLe{p3KTHqv~s%261(bW{EJ5e)%1!M1a$ zX>%ak!?!*oJv}KQ;c=2J;q7~Z)C!hrGcBkD-uRBZct-zt|HNW;fmHcuE`3!)MMbHu_wGkRCqb+& zsrO>)GFM>_^QzJ|&vUl2(({B@k{vOB8#+cTI#4+5VoDtzdhW8Kos-au7v9h#`Jx0ql*DCqp zaE#BfK8xQ`e`J`V#44b+2xd3C2Ad=_a9aHIsSrslB>(jEW8bwZ9GX_TGuzUJ$<_GhA6-m_}%G zF#_uHu9@3JwDBl7&0vO3GAw##S$Vktv84yq!Dh$mDM`bHS7v86hxW-T-%?+3zH%j- zZfU;%O0&YZYs=y=s=0aIa-^%T2!}~=6NTQ;S4#=a@aw@W!Zj$R*Ax0fia2Gz9)-~y zh?r^cRmVP}UN&2H+U2Dhxfl=KFz!HhUr5FB);emC9(TMP%Zz86*Wl@i1FQN2C{)r4 z@xC%P5>wEjdAHyZHd-lQakBIJv|Rr`jnR0LzhVkjZ0;93ueEjwY6%a#P@bK+0lbdm z1lOBF{qrK|#wD8TS2mSyY#%L-_eHiHByVCpiQm2g$uHq`%7Cm9hsPyp_`}6EwNZHH zHVf;5S~cV$zi`}5JnxH2pP8g5`)tu9dv&|)9SC1|mwh2Wz#)>AN&_A8e_AS1cMWkN z2qnE=^99?GK@297e|xm?&fB}5xu*(F4JfjG-WkJ%2!S5XImZn@S;iXFO%@g(?|MlQzD)_`(vD*8`v6fa!tgec(;1T%pS|aYB>Gow_f=-KY;ERlUZu9QymgDIzG?Ww z2nl>k)UmBNmE4x;J|s*{hs$k2MY0)ukjZRTEruQ087Bv&Gh<`pYz?$mUE7#YmZF3M zYBVsNi;r)(FDmiYOCzIpig#o%wla3!5STOfM^H+x@b zak`sGTb7?fblq=yFzET`oi*INqv%b?LOEf;nE@CE?k=Agy zqy5w+_XGvIqqfOO@tOz2uE^&WcEGk2=X)Bl;3VwI$WRtrG?e$n863z-KN0WwJ{(y* zFiSy-b-9$%me%f-8{YNnhF1LXy1wyIS&yIDV(;#~$;iqPhj*1!`@Bit1CO|rk`m|F z2NAAWQCvk?VQs)ShZzD&CbwiDdU;dG5*=UI_i)3AVw=pY=N0yX3MJf|+`Qs+mE-Qx zgPH5s#K&nrG)=UZ-BXCK@Ps5wz~%fBjiF>9ufmq4mHhI@;h%D+vcbXdwBS{rqkTT_ zBQ;pTH+5|yoLdZf&cSp4S4wyD-vBA`>A8%7XYXn%(}y#+-z+wKxq#t;Kf_YVO#^WXSSs*jjZ6>aFK2;6yFXxjCCBuf8Fp&UrnPS;Q zm+$g36$yCra&JtU5^2lpDk^X6)#ZgRu{yxc@ zSmF4u^ip&^fL^%9^Id?h@@2-<3lFr`jyBR@F&Lcn<%_yrh!-a`ivVLVS4Qypir*Cj z5Au%>YEYf^jbw0gk(uc#D~CvhF_a#_(};~X#6G)|n3;(ykB3)iW(0*iL-7CUg-pR0 zGMZ}*D@OL$%zA$xv3oSzjC^lE`GdQ6$(t49B*Uz-Blqp!*Keiy3P4Wxk^nN{YC0_S( z6PYN>lamOr|GJBy!5FtP-N(Pyo+}+#WpD1({1Iei0b4QMff!?)?Ldht!Kuq6A*2mx zsJm%tPS=hKpYhtvDUG=i?(I{r2l(4KGqbYJN|q@{d&q2Dhi^$uusPu$7I6onT6lzAI6C&h%<5Ut#lF#dLgk6ljqkk(=CkheApG`V}7i zk@QGJ7}9YoK4V*3?8>mX$6;2HHBVu&g}EM6wL*SDEqy1py0b%~UOo{JAE&0NM`zhZr|ASQ`2n1DU zDj&QVr<@_XWqLoOr?2Qf+cBm!H5z0#PJ}P^dTJoegdjCuTxceHt1%^od4oV&tpwB} zwP}`=tK${4@9`Z#`ttKe*e%QKl)a#z`Qa(mIi{z?dyDhIP~xFu6H3$(GL)WfFe$kh zxFC+cjofp|`GEZ-w&w{*Vz{#0e+Buf_hRlO6!tKzCeAAAWI8Fz4bS%#%V#M-!I|iI zl5Ty><>rIr)JmGMF+%G(3i>$lOR33Wt_tz!@W9%X6L&-wj$G=t7HW%-E-Q0(I$Y$e zrx9wJf*f=W2#+Eq>(3@-#)|nQ6F$$f>9!|8C|L>R1$V0sH?Ev$SzH}Opz+) zoSZaH&%{l_GLT7%{k&y?L69N2wK5~)p@@thdy?6**&Wu?%@qZQeV3Hf9}R6MKcAAl zcDaN3h}@Rg$1{H}5xIX9}oiAnOJs zA~tx1!1MYp|0To?vyzU51?OQA(^K6ix@Mrme0joqV7HE97;v!zBs=P(vXClADYQUv3!op0N}r7 zapA%PAiFMQDa;0c+)KCah}mH5uHeBcS6eQ_ep_B1DH&s8W&)8pi7=?37{tU*Ib6OE zx-oN^^aI-RiFe169msD2@;_YTv$ufy$kVx*)i%4OUNqcV+7UaVQZ z4MmVyZ|+t2LX9$f>bG8}r@P6F2|JgLOwN|3<9gC_sjgT;HtG?>jT%hOMz_aBd&IH> zF=cPpFi6gKamvdbng|cj4$nu(dEZXoU^~|J|CY%LSIEA*oBfqgmG&KfhqgAq*i-u2 z`H7O`+;9T7s_%zZ^Sc;dWR(Ugd73z-yI;L%ZXCqYRiFrideY{(8~*ODy}pHs+T0sj zr2$3x4L1;LA}Pn>B3VmIOTC-k#eY|8sr|Zdj7Z7muSOe{CWh?4Su)zVM3(uy4?}C{ z5v;+=@Re$J(n>QqdgNIJYq@QImMP{_VHJtT%q5e&v;OC z2jlP8sTfn;>E16pgB$jrUHD=uD_ui-i0!jehDgHw8w^9Mo|y=iUUQ=UeK&2?kfd#P zcHZD980OO(+y!lEp1~d;E-fD!{(gO!iT26JD~MF&P2^Kl+C1jRYiKF_-5UJ1C~&@ruI0ng#O<>3?wJW3jn?(}yzC<{g1c@TEeHM#RdBhE2E3zp*jJ ztOv4e@r}5#T$c@Z0k?fB*teXHmLEE-pGRjr{WiiUs;Y|Vv2lzExNWBkAxt=5b2n-e z`GoVWXEzf|Cl|utF@l*g0f&c|Az8cJ5m%F`B+$y-3i+OxtQj+i7%0xR`u^2}aLUOl z)a}C~ z_Ah?dg^aDCb_i;o1c*;f`k&~|R?p#43t+)KBwmN@2i-m0iGW+jUyDsl-_{qT2cPYq zxTA;daW#R$keI+@1vMUjnz7O4%BP<}=2QJ;pSbE zBe_iV5+X>O;W1N>r8$%Tk5HwhIc2(s=xSO9yhvwqOw47vt49KEQRei0eNcIZ^4(Of zrM7dTny3&-A=AH>uyFs~p-}PkwD6O}&fZSXya*yEfywo%r?U$Sa;Hvu|5a7}=Q;Ae zaJ_wvK;ZEB%1t3UG)BftWaQkC-)s-^ADHarRcuf6vU=lXyDhTrWW zX(&?BAW~T=Q7DB-_DD#Q%1)@rs%S_=AzRrydyf{P?EN+>D?2;;ems4~_r9+C{$2O) zIIh3$ztJkQ62tzGYHtJgta zH7`T5;(sP~(ldAm+h(UR9{sfQR#Fnh0Uzyu%yR2Sxjn#YDxyx`%b@FDgAd6t$x+9mzBh zgyu80XACDL9z8zXZIcK{Z8qckDgdcJ0D4_Wx*-C)Mj9hOePX4Y6uYu#zG<8;&!2z& z?X)=eK=-GH^`>v3b3u6#=)OdE@7}Q?>UIjk&H#B|V2eC_My|Di=iJeu4h;Qcca6Hs zwj(b|p_QGq%?QeqLZE$0elwbAt z-t7pHY`eI6H?1^8ZxPg=m62YlyRPe6I1j%O*D%Nlg%Gu@N4FdqWI-A_JW^{|{6B%V zwA8wz6o&#sfyxLqIupm2$Rf}XvJUk#ii219J|hhcHJ@>vYyo<^3ofFuacKADb@l_(lE+-4IVV{&ormS-ZtdY(q51iFu*PMVH@3&w$NH*c zB&`0~_KzfRR$i>E{~WeAE5l+r#j%;@bK>R*o^I+kxCrr6r*xkGls zNK#EXiTM7gQR5@a7-0lW+s%fD(R=PLJwG}!f(N^b*3yz7g;EL|lkNQK2wv9k}It!LK5fM-Nqf^4R|swyP*cz7j# z4`d_BC}2GO>)~V1iF~`gjKJ5y4>*MRPzj};rJ)8sK%<(@f1|N6MU3K7s)4*y6^n& z$#{Ecw5=<2Kz#r4UFH&Cre?!cdg#j)Q&I|1?L7DQ0~vQJDtWXFW_LdsTu4th?Kk?z zc2Btx|`~T+}SVC6zoZ$pi(P~deWU6T0cTh-v&|c{B^HO(5 z7pVpSBIG`(eu5=Su^4P`OhEh`!o#lxwEw4zbn5kyVvDqoMY11Cs!+>HBcF2ek}Na! zMzc1cUB<%($9%UlVq}gdD)bF(4gTL&wa|=^jPdr zDC=9`3@Fm(+Wq0!VQ5cvVc9zSM8#0x`$WJ7O2N#e;OoPtylCTgoRE`|{@`!*%spU^ znIsPrGb=EZ_OsQ^O|Agqgzo3q~Q zxdDN@3_Bm9e!G-%K_l%$jGAeNY;18vIf#ZFp0LYh9=nuhO>20d)S8R-pIzhl!Z#{i zHuTr)3;y}P++f5V{9}!5*_6U0-99GX_`==XHaTklsk5N(&$T9RIFR*)jAj1gpF5s1 zlaeJ)`UUlim#h9H{?4}8=E9qC`}V2gxm6sT(>xw$cWv0!F~2OsvWJ!L+cP`w$`HTp zLTRR}fR8cqR~OY+hkwVNo;@q$7#PTfPW53fp_P;k8>i?|75E|K{%3X%I(|PSd0H*= zT9o=)T*oJO$J5?Tcoy^_9DYCjTqD!iX@wKP#!Bl=e~q_6b2cj=>rfI@Y*V?%iP1x8CEW65Rfhk6qu8WodHj z{kyaq6g9@{p7QIBI7(AZR<=oqiS0p4+a>KUx6q-8nD>3|V0FwY*Ps*6TZOYvBdq#v z+aPkMEPXMRIiaN~v>S~fpS*pgD{( z^eIdY#zAv+&&YlZnML;p?+JYa0fwWux2~T0g}!R?k3}n^&x5NPOEkM}@GzNyYtOH` zonyU~v`oFd71hSh*}Eqzv(+X!C(U~rm>F#5eovpL4-~e4x`tUddL6Z-dEFhcK{e{r zt9trN5l2+RJvvn(y%8?Z;^xYiO9=Rux_d_=z!{ zR~PO6x`ZkE+3P~?7{9NGxd&&o=1h8g{EL^KpNoH-PQ25$goBflfKrG}en@|}#0so4 zjG^26K;+;%p!%{Tc(D1tsEPAXqj*P9)_wS;tm}!|7JScWxDI;W+qlrFr2#F zI_tdI;XhlqmIW-MynDw})M~qG_XeKVK50h5n|7b!!{prafE8jQLKv1O|5&^|MTeCF;cRb&?$Zsi|yuHkCPw$l>eYm#UzlJ<$ z19ME@T|2R}A%rR{H`g}zvo`cxk$EybJ@aHWt`R{_LGb|MIC96m0T52ty?%eTC^RC12xNko_eO2BithEr?*B8ZiSsdVDr!G< z=~7-|@~N}AKSrl$eJ>%d1UJ$Pbo7D1fDD^iI&(u-3=C)v&^>{`32UlN-D6M@{eYGM zBhO_DhG{bf%)7q6$5h)*@K?X~^*wqwFVt3+l_&)s)JQ`wO@E{rdsWdzSK>{kY~f`&WXb;$qPxq_@aq9Eelre;s$nAfglP z_M^d=3l|GuLFF6`90n=wZdD@e;{&>fB+0_qi2S0m;3!lTqxA*D_%x6(CsNbkv1kB4 zvhMYmN{H0#=HpY0JRSPRMz%YYx73|1X%NF-UY$uDYOA1+BPuvDuX&a*F)qg3Ajtgq`^U#66#LoXRbbW&j))-SbGK$NuwDS_ zCMfv8z&wBe0wj%{eg=R!8LuL!6v>- zL?rOp%kpkryayZzg!-JYUtvlg)E%-ML(m8!^jeri#NheL&6_ua*NS`=PO3+f;Qj+c zUtY57LNFG3rH}AlP)w``-|d@sKTAST>E1=Y8PevSt)<1q4){AJTYuMU+t+67fE4>X zvvvtGw+fsOF;x+^3_gg4%LQVlpblN3q@)CrYF#i7{6@9c%q+2CgmAhPcRvls;7Tax zzJ1|U-Usy+u`d!6&B9Vj(#~Z)f8q88wt5Qho7HFhZS^>{^;v_23@Ah5UhrrZM3|< z{oFW1-c;B2$f&3vkRAOqH`!*^QM?f`>348+JVLuFWZfTcIiMPxk--QBR$=+3OiQTX zj15p3K-nP)<^hNeJtd40AZP`zB8YC!T)w;u(iEBGnug{f zo;{||TtEp3R-jD`T$%;o5CLW5S10t9eFnP%uYMIP(0nrZMOZ5^B9^(HK|f$Ks0+vX z8#iO_{50k(Zx1v%VF(jLtSj;OUPhh(`NV$u2=MGd2Aa&Mzkbd5CaV-X7P-cs-k5|6 zFsLzkwqq`l7xIsott$YF1CIKcTetXRgG6ZY@s5s;-$6mL$lI`fr!!W37dRBbWA+gv z#9%7kt6a8tsE2|P+CEY4?Cuu0F#C4i+hY6FF&Lh6{G6d_#3RPVX_*e6`}jA-6j7|j zmN?l{><;b_9axzogJ-HLE8k;88LZ1L7#s}2EIOHUoty_JN1|z)$XIVJ&BFW)_vG>{ zTsEPzC6mygDuFQK=YjTt0b0zrQwrYcd?cJ>tZZz%Sy>(X{xE{-k{qLZC>m|n$5Y0D z6%iF?@J>xV;>E4)ieTVM*H<6Ncb|kJHlEUYFnVBBlS_1ocrKpTJ5ZN_qw58A9`dCw zjJ!)B#&P=W+12U4@*xBRR>LQta;H!rPW2f4BJB{T{evTnAYgy0c@?yZ!9VACkFc|6 zWMy5MnHbPy_h9W*s02IOJ5Y9#zaGDajuVja5I?_pALiG+RG*iaL0S9BlP3jO{^4pl zQ8Q{=j@3g*Eny&%28yX5gDnKBNaiHC8QdU$0?Dq}k_-X}jaY?{d?l(19JtQT(z$b< z3sq_&aY+LnCVN>P*VHJ(`PNdk4Gau)S>9d%Tjx^Bn@UlbD8lr!C>b9tMdXIjP!oP$ zbJZpaQN;ocC*dw|Wfta4adUNDKba3&N^pfZRLT1CVay!-c@o$*=?=-DgOGo`hGOxn zVhP1DTvZCiJ)8@oz6^4k4c6tLpdsQ|gwLfpqv+v%%R(sET2aGmKOB!?w|pV*pFrto$Bi^@NN_x6tK2*2}YKw=)86P^9Qwz3K@1 z6q?-YAP2-0GKGQ`OEAW}LL-7O7vRK^(vIaWl2I&}krY<(Kxe)1e%OqJ_anPF4@srF zyAezL$Hp$VaDf+wjePDB3I?LLZo38&JdpN;)Ko!2%n4k|#St#hwOB?0TTJxxkXX$F zb<6a2V*jyG96%VPLr5XUeqmf7S?BWQg6B7*qt{1CXco8V!%15gW1*_5NUf}y^omH2se_Psze(I(~5AGs^B79=;DK+i-8~0iMF>*lrbNWkM091LdVBZf?Y^&d$wYkE|!e zZ=l$TGh0;nof;$gcc}D{o%>IoHMZ&BDLfvQk?~sN}`eQgkJ)n8MclP{kzrb(cY% z+k7uEF%h#V;^4UhP0eyjMScBa2;O0-E8m=61vX634peSp5g_ru2sgnS+_U`scK}m7 zjVk1O)3wpG)E4Qu_aoxPMI9fUXfSj2@y~F3jAs2cknKVd`T+ShJka)1FtSR@b=fX{doB^A@OK$@ucG0pAtT zzXlo31FXL4T6TRwE<}9f+QF!}$m3~PzaHUY^PUcvPa>m;i0wX}B;nUVxcqx~7(p;I zRK&T5%{Id*bc~A87;Y9b2+N8xL4(JAOlu*uuh1QRX0Wh&Dq&OVU2}0{7>vhm?y9P; z235i`5NRRO3x-|GxYbE$d+BU#ZQoR~>X9f9{0``!(S_3_Y*^{@H4w}oR5D~W@FWOr z6j;|uwESkHtfh{Li7WWs3qZ9+?hH?CBRxIqt(`1zOJDs3H><0wH>4SF$A;R+R|d!P z9j~~Ma${p_zP%g#CSjT)PX^@S9}X#MY5cwAp75D8AB%rz1O?wc_0Uh;0fO|K&~(N| zW%2RxA;$x%?oNn=2senllF~=SgFJS#cOhT6>~D1%1x-yC@Qz)siB$M^znzd6Rarg7 z>h$=rxm$BQ9RdsBDUKk+DxO662Z2HP&JVG`79r_cF+Y4hwdY+xnc^4jDSiaxwS6C& zJQSgRa`Bwxt_{E$X@qlQb3#K|Zx|S;T32n|Jst*7-MA?Qh&~q#xpLo;#KlCe_W=nH zSL^fRQ<3WgkI@M2W=Y1S?P6nFaroNT;Ps1a1N=-Rq_0^koca9hLtoz}$-|qTzHqAq zb@K*hW><{xbbEB72cxDGt0g<#%~ z*8J^9vW3vyB#AlGi%3jCQBkqenh&Rs)f}r^ShjRA6MsxTOEDrMqUccUU!^LtuXar* zN|ShL@g=(*U!DG6p?sCTfB>UHoKhFcM>TE6hv-aNFI)Zn&KFsW0as1sho*(}pEhEt zLrVX^kR3{=svB`1AKHhRkfi_pZA=@U6V$Tm1}+&aDSe0Ru=5eS*J{lE^^#d{a!Zac zBwnJfkT8tFihqGkMX|-pWO|PFU?f6#FW_kFXNxO=V(a2EpVdOF%0=t7_?nK z9?)lLub2-fNuYwiu3`-?7q?^x;#u&^F&+Q6h8p_he}ql>N#*Qp$Q73(x3{7V>)-pZ z86z36;sKVA4E7^EaIadqT(O7t6BrX@xkzIdSGHL4`C|Ss_{~q?iL0wgztIc1f}#pc z0dlY`M-_vd4w8=iJbMman6UJsU$L-k?e3sMi@Q$Rvf3VDH;9y~ zf~R%|?ZeCiGKwS9L5NjCyiO}C(|45z(SflH4TA6M>b7dz46j(aY?v)Q0^LVExQ}|SH(VLRq(rIH{QDi zdpXo2k5!Lx>()mQLXrCW7HNXYB`;if-Eg!+SH=)(<$qY6DVS_IyI7wt4kgvhmJAE3)@qGgmQ8yLUH{bcC zq~rrKWpGO>K210QDlVd5yJX3d)TXw=!j;gH06OsMZV)0}!fgX0q!%wk+~hkRf~S`7 zC?caXsyQaYfSXx8RZ}CGooO|Cjp(+1mYUoaMKise;PCt&;6c(wp52gPwiiC%vDFaL ztkB(a0A)MVXTd9}xkIER6b%_&Ew05ABf?v95}Lc(z48 zxAM1M#fE`>E!RW2{;K&_owb`85CB(NsNyQcZBTn}Xlz_#T)aRv{-+naRIz3fkuOaA2AzV4Y76`XINbP>$!VwsQ9xAisM6HEA(gTq95LPw7 zIKS!>SP1L83Fj%W^WOaVX$_YR0?NFF`FljDyt#P?fny%5pvmAb&9NR|3kQwF-7JhB z4AoCb5Dah0!^igk00a64G40D^J8gkH{3F&GA#NdnoHNYb2%$-UF=z?VCIVCt-vb^! zFva7@Xr-kdkT0hK^douUQ3wc-pie&tjEC*%ZFcQd zE%3PEvH@#xUM+fS)*$`5J2k?F7t!E185tSMzRbSv?(emp0Ze%bwA5kPR=P;Hy?*&4>a3;mYRY`&n0Kg)E`Dr3G=!QhX>`ZthDtkrq2@ zKPy~A9RDsg6)P7dKdo1kcW3C5&G2W2cZrEVTost==_n^`r|I$NBp}K89kiKVwo*3kZnrU`Y&m$*;lTw*JZa<&XFlq%}JJ`z~h?)rEgG0*$;3D{g z?V~E!B+zLEBZr3im;~@1GXytpZf&lY^;lR>3^MUgvSAW|{H})OZE7=WZ8I;Ux1jD0 z!a79U7SAV?R8=2A+6JVaH^Dm(jPJ_)>{RU_5mP1Hn^4bqEoiH@f2 z2^A^gutyN9As8cIjLlP@?*nOr%m%4p!U}F=VsZv<3FU|g#Rfntmk|Zto#@~8Xx+9w zuew0eo(MAq@~vIaOhcfLCd~pj(fKEc5clx$ZGxJ^d$6`6T;UovL&SLnkO0PZ?jtz| z&FTXpFcJ1_s1+`OL+dmfJ_3dit(HZAwm??o478;kTbO`}+1c5}N1ULf2oA{w>76`) zAwIt5)eR00e+0V6jO=WJw`AO#8wKVi6w$v4s3Tn0snml8j^UuocYa7oE03nPk>pz<5`0$ z?lSDJO4krH$qBxbH#eaHU&4s|st~3;@kZqyN&!gn%&_inoa%z01w?E%QkCX3s6Sq5 zFMLio@`2bqL=o}_PUlB}aL>u-;&%kq%5b+uzzL`5=;gJQBq*SyM5wL%`}=!MNoEQO zXhA%G5|ErpTi$bU&0mICCdGm9$zlbO$^Myav)>33Qlboiwp2W|Pioq>PH=i8VFM%E zo`lEIKRL+GAn+=pLx>f8gvrVnE8QVvu^P)>R2?A)j>S7sTB69#7*E{gVQ>SPF|vgN zElOZZe&XVC1~@as&gn3yPR{b4cBFFLFb+S4hPYE&s8o#(kt0#s(TaXT$uf;|T6tx? zU^m|Ks0GT$7dmH9l8r?eRWeCKLj%=d zp^x>GF>{+E5+@U4x6%j|WL#_8ZyDtSSWN+xYluOy(8Qe9iCM^0Z8^XAPTFQ(ks zJys8-fV17|&+pxajc96|hU)q?(b?b2Fu{)GI6Nk%6nv^q6W~wQfzI!q_L!b|5E~l- zomS~eKwR06+sBMM;I0z*n}S97AEk&;MPEc7Vmd$+okk!;qeBGK-|)cf=pkH+?D)>91kgjIcMG`*708HzSwKFb1){9xT>X8tRl} z0iea4yVr{s1?$$W%P`czGdBWjpV$mi`ojncZhtRWf?;V95s|N-KZ|q7oH}*CVrpb^ z@;VY~&k@y2KuU-nwP|b4#wNQTA6CTMpcDcI*(;df5YqvN@)sa%uTSoZOj=i6U9Aq+ z(g=JG)AWb5^ZacmTkdG)Ann!# zsRh}I!K?$ihK8lc`|%M(Cs`pxLWR=})uVTS1XN25x1m}9IckoSIGC8PZEZpK0{r|+ zkr;zR_+r?f7)4&!q_I+M``9t-13`8$-Hk{+9Y37yn+8m@erAGddZ05EfRAS5^vsMJ zryEdg_sN?+Sgj=F@HZ3SM|~hUUHbLw)mX8etnqf_p<;E!sLW-{voR#2d5jt=ta$G*g}`uBrZ-}0|QPAH(CEeu2!< z1BxfH#0OM0d9<{&wlXlN?WdLM+oACH(YUgu>DvfA$7_g=JbUsal22ImhYeq0!<{zU zB4Es1^x?C%i=wvzre(0!2k5(iLw>ESbf3xLmO3sqzx~E}lCg$vMCL1Y>eLdbbE91J zGflv-PUc3_H~1c>N8K|sGwtvVCvh$?SoH&pl3<5s3NyZZSzcdA!gz9#f!B5Cv){jO z9upG!0GJif8S>tXVRK?)Vimxjf$yz0W=O4bB-F@#TMu1)@@*7AcjD#uOX1=^A`1x+ zvJ}HX+PzmP`+oh(l`FyTtdpu!;wptha$_d=)I%O3^E*R=24KEKa)ogI{)GTJWv|Eg z5F+k3wm_H(S#dLHc_rMG)l^jCUZp!vrKhDmLI_haG1AS7>;w8wf97X~oIdar$}1{9 z0MrJURd30sD^vBwY*sH)2nSuFU4_stz#eC&3F3a#xOI1t#v$uq6Qr4ADY{PK@8pHld&CIeAP9gEyH>Mn$sZE#*`2~s7 zuoU!78EURSBCM7w$lW=V59H&Fq@->|@F|t9s6A4B{!L!@`CVf;0lc9!#pyMlkUQg= z@U~<@bbkFBR{H&%Y^;vV7sVo%(7#wNCb?nbt4;LcE5eH3zGG~jCXHfLNtLU95h34vbdXMw!N3%SQJ;*1;1e%2rZNZbWzimZSha z+T1(%7fgq75FTAq*IL1w-yIMJM5tY|5{Jgi^v`G9d@W-w2IIZ8)hLu40joX=(&xak ztb!wG2^%NVw{=2eCoE@NOZJ_$E5JnU4>WgDG7S|6tofu;Z|`-u~pV7o6n>R_RTM8Zq7{}$)Mb4zTl z1c3GQ%*^qCDZiAKo`Yffb|+wZV!%)>2yes-xJwJ9Ob7wFw*6eH^+bOZstx+6z4;!# zE}J)MdG%J?10nmheY4=4R)!>6Dt3KXXeb9Da%xfAjvnn>oZWH14)1J~&VcwUj0BVjkUJufnnseTAAO)$wb1(;IO?X!zB##Eyy$37$ z*HokhsqfbF1CnGSRZ9DFXGQvyaEKnF5VoOZ_{z%u^(Gd#Fu(2}}fOqyd zd`YTa=~n91?+B-qEG$wKm6VM8nve0uh5)|ZvT>vPz?otXgbq+zyjmb zr%xdwke$@bfG44XMCowtI8=g!?*0zGm~L`N>v;JptQjg5Jul@%5@|9zRZy-XLT@(D zi<5s24#q!bwmyq0RWF8s!@T2gghDJ<_rbwG$mw5Nm>FC z^I@8qw|pdATQ0cGPWZTvsk@r&&F}vB&A5~?1dqJ2$!o7|CDKJpNI=mtpSXYxckA|T zRqRm}g#SCz2X3?t{7Mbp6|aYjhG9{QFH?}5@sFkN$b6x}Vms!(p7})NomQ(N6RS&Z z-QVK1SAo@jz{|8LMG7#+$nW39cXr;qzWd2?93K6ql&IEwL&E3%k0~I5t6P|#6x|7^ z6Fn0Z2tke@owEJ?epU3P+$`2F_4R51=4%krhZ&kqqpWbry-o*NigkCu9r~R+59zw3 znYP8_V@m4l1*)^?gvVYWHw(EQWUGq)4f!iq-sVmB#vEj?OH+I!wgR?Zn*18DiVH83 zuyqQ+A9tmbSdWoE;SnKbiW2GI8v3mMh!VO`Lo^JbQFHibj08lT;-dFh6{%- zygP}|yv%H*6-mGW4vw=ZL)D;2H^8jn%cJuE0t1l{mg+^s@9g4IgS12W?U^;SJC4a` zO+2h@Y*fbsR1y<=z@?cHj6nNHy=AmQ$fHN=cShqu>m#<#g6IZ{+hO&W?tL@K#TM6x zt(gAP?uG;|0_s)zK$U##cA;wTHw}kkiAoNRu-xfK>lA6?BnGrh{KXR&p2n}(shV&p4v8EsBhRk-@f>vke%Ncq=r@r;P2yQukZ1xB z7%*%qWX>P3b6UHFm=B<8@E@{B+}5sNuL^_=P=^H)&p6FYMPPGxj=9ZpM2>blFJBDtiSn7(wZ?;w~beWl3=|81@{qjW$;h`@&Ag~Lzu&^W` zGB*UVzF@dnO8FNPmJW+KP8Y*5P=lk+d~j|wXyMh%moGPM-t77Mb!18k|6{l7Sd$dg z=>tUVMM}L5uu!KFR;t~+`HpZ|YvtTkfIWdW`Ahmun>@NDKbUp@bfL(9FAEfo0W1Am zE{Xd$t*@E7vUHTA-vs7D;YJWjgU8MlFLP6@U^zc zIC`5ilZ{(YVIq}ICf+NKOh=6(v2!|S5(8&@A!>GO2*6PXpb8Qu?Wu^V;u3G}1b`cnuwT<{3-b{$rctQM3U<{a zYw+Yy_%N~ecNVG&O|745vn&k($VXlM;&Czg+HLV5Qq9oUoSj4OZfO1s1d^6=Xs7loqA7g zj5nm|LxHvKhr|W?>flZSO1usk9*9xVR!%cgKctnVOl&pc`Ynu%k+(Wa^n4fCxo396 z8$ZbM!bQsgMJ0V`9qsKQ?16X1P+TkLeI8;fdwXVAM4y_DW{CGe^|vSz#~?nv?Ut2r zA@ReH_9>Vp(2>c)fltr0Ed+MnzGT(8h1`hsbWcPlJ_{?{hv1XzMX>PT3E3`HVR^dX zlRE(sl;#i8zv}3?`njkm#-KJ@-7e_Wt5C%-X}y{Hr(h>x+qbWG@Jo?-v+LBI(jEEf zYipW&dPe(hbK9F-$`4et(r3pYjI@-LyPuziS6k7iPmyqlX)ITZgUF$Q*RO*(hI1B2 zI*w*YM}L1TYQ7AX3Tw~E%fAS;8Icm6{uQz!a1x1g4I%(wx6m5AxFS$=M?Lmt?r`Du z+e=J>GdSbxx#>-F0%$4nS2}D6yo5eHMAV9iDAw$1xq@0uv}zps2aP$g8Hf>ugoR+4 z&hqA{47(-vd*CrS_>iWHYb|fSg3hXosK`J)Djuc0NNh-)BrizwXxE5m>+O^EkAx4n zZmn{d4;h&}`~bP_9W2jI|FD`FNVkM^Ygky=m!cv`M0P4Tu+CW*3Jw*G)BM?dij`vZ zp-*H<2T@yep3^oK#mc2h~Uhm@@Oh+355=c9>7N3M5Gi{6@@PhdVHEhndj z*fg;E`0?Y^OV0zh-Z>T3UDhR-;Ncll99Gq0B}<1-XzsyRP@KO;DMh?On%_N!yN_0i zaAobee0h6VVaE=OQmHS|g9h`}?k6Hv;SGZp>iK@#DGnODM3;p6Rd=&HC~xRlLZLVu z-?`Tvkz_cG=@j!*3$1VU-JIi-IdTOWRUs0A)l2c-&r7fZC*7k^q`BXzV);jDg%<;U z?eKN+HX(6UHmNI(Ur-#VH0I>aNx+9d-8qYK@wZDqon@ssb@kT9SVx)Hxg9|M@`W)3 z52@qzs-A_W9=0BA#x%`U95--y>Tyf_RwErtzi_j$iMyQ`d9syDGZOD*I2%ZDE`-mm zP0$v#9r?l@4U_EtinR1u;{m3^QtoLKk*^S$|DziqXfB}?E|VEX4Lj6gjm4&S#<__? z;NshqoYOJ_J0ES)Q?1tQJ5j=JMEf8GJ}qB)q4UQPjZn{sV}BU@yPL~*O4b7M;JP3EVbAq3{mpH;j{ zW$1kIl;*+<0r(-6D_5?>S9Np>S()eGV^0ao_oa51EdB1Pgwnp|p>or_&;`TL z$L$apjS^_RySH963m{X-y}`_)!F^eXiZCi!GMW|;5Ks$jmD*eMVZa2I7U-CJnn}yW z8u83S9pg560WGcrdxV58;tjQEPc(_yRTXe|_E~mp{1NfEUGerAmLs@ zOu{o4s|JE>(~XwI(53rnOzaC8@qD*5Sg+_*H7(zmLPPIKO%!f+UHfzTF_mV{r1HuY zV@kTRg4=`L!XYnA*m0y35yLAdUpt>_+I9)Zm%NQl&iquleMxn-62LXG&K*5H;NY%*4zPgBB z7B4FjU;{i>#w`Qa4VxLvmJ70-@EMrFM%Mq}xJC&1G0G$4;$hyUs<3ayiubxj!t9QW zk0V@3Hfn3>@ATFt&L6aCt-09{K0Bl}vwI3rZVaLc5+@@#ew&atU1Bmvz5q>ti5f={ zqCMYsxG*h0Mmg%OY2K6sI%ibiKVP9aS3etTUV$KdtZ=(&F%~uIsc#HRN1}KDrrrq&3CO*2Wu_qD zrhpAYl6i>l?O+;57wJl*(2)|)nGD+Ua*}7E%HG5TAHkAFUVgG+P2tAS^O`&N>HZ zlZo%@6LgJ)07){ymT-1+OSiSp4M5wx43@+*Jv|+l0K>$kKiHg!Xe%W^QowZ=XJlW{ zUfb}H?z-oexRHA3Q$-^5j6tQTw=p?Fi<%oagpNRdn?E

CYlsGXK@k*A!w+B692l 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 R><0NhDRJ2|@nV-B{9og&XQ==H literal 0 HcmV?d00001 diff --git a/downstream/images/job-settings-full.png b/downstream/images/job-settings-full.png new file mode 100644 index 0000000000000000000000000000000000000000..ae00c4c174b9553dad12b24031bc36e4f6b6d64e GIT binary patch literal 102736 zcmd43cT`hd`z?wnA|RkBqI4BRK)?coB1J&yy(t|L=>#Ewgc3nTczr1%ML~Kmp(r&F z5J6FqUV?{e6Dl`TcRmIOp7P@3wby!{`OG<=9c^Tw$;!;l zOh-q@s;#AALPvL8i;nJ?*ooudm6PII_rQP0{M59~PJl#57cao>-iMh&AHxD2eVyrCyrEvs z5`Ip;&d%O`u29(8(H3R!Aqm=t)P0>DVQx@wK{GcmXF5ygM}jwH1$F$r1#e!zDJ^*8 zy27nn3gDGH`hsevX0k7i=g`qnA=(;u%%0k<;24`?cc>j3J^L3#c@^Khxpe8J?8oSj zrnOPhCtkYtW=WfgX+KXu+!JPEz5K>VyZD5thJ|s*_W)`S36Fv`;#>r9v80`l+k}pW z;f6JjxV43Yu;v?2o;*3ia+-$+?|%fGOI3b?~Ap{huc} zY)3f${C&#*MEsw>pB1S;JND;^1|Pl9pT7l{57!FPyf+p8eWV<9JsTUF&v<1qS=nLy zzkgY7C;lPJpKty5UpOWB?=Ks_qGS5=p(us_`6Q#GU%zH~iqri1?HkUI0tRcR<%$mSe{f_ z=GwmnRK`=K-5%b3eXhpy_s0k0O+mT9*RQuC^J1C{t!mtd3-ozNlh4_0R9z;TLw7Ouh~IH46jv$q zc7lv+@8_RM;tTY`OU}b(4+0j_14k!YpQA5!V4Fi5mB`xz!$roIvGq@KA=~!M@hf8u z1K<9>@YWlD^j}AP_IHG=R)3ZkwpJEF3Be#$zwb8-He_+%#R zU`Yf*88B4wC%ff;j&dI?vqO*a_%^MzP{$9pmz)L)^goeF#9(!5epameytMb&i0|Cb zIo3aGO;F*Kpmu(~Zp!HP(ts^7>(29)Hg=WjG;h?8<-ua7t~5xUra2R-t|+*NmH)`R=OY)FtW(o0RzRZe=o(!r|dFfE6TnuUAIsxD@kOjLE*U}JBpX+5cBU)V&2^^qls9ea1aExhTFpdIHVT-b9kG0}K9j2A*0p6G z_t8e#Y5`p`7@@{{U&qnGID47T&A~)(O!_IAQM*cqI~8m95r-SE(&AX8ntDIF^mw~u zhSqwlhZ4pb#?NZ%y}RDZaDRKFqnLaO@lN^mISF4k^dO&&b-qS4hh|~1eM>XXFgiF8 zW1p?YfRS2jCK39U!bq!-;K^{tGT2hTH~EAA@PmMv7zk?6mPy`c@|o_ffSn;rYs%q1 zZqw$;S58^q+3!xxiuK_k{=~J33Ca3NdZMDd@2n5&*n~gEw$^<}3@Y}owV*0gU6hE$ zD@;e~ZjN-W{uLZ5^6kO{s*63&`Wy4y&uLcq8#g_lX~bk%mfi1z6A50gxugPEV@e%2 zrCJXAIVtvG`*YE?eZ~#G&MDlwtIvxZcff_k{(a$AncG0YaEZBiN|@M<6dT`YjPr1n zlcsf@cRD5|goR78`n4qLdsoLt=S~|VP1cgqRwB2Idwqc3rMoQ^(vHj~u4J&0zK#bi z@NqpexxA5mcCpyDvDSZi@JCJOM=z{w-EI5Oog^HXngBeq4sJ^E01MKh*hDyZI$Ff@ z>tCD!i@g`QJo{_;WIf-p*tzlkYs8Z+`Bs-zlZ| zlEt%o)`!0~iN>YK`2B4gU=Yx`-E#TCdj*Sb7Zr9???>l-NZymVhTllnj50g>pFIkP&P%vnYT#tSSx48Z>5>E4mj&FEX{L=-s^kI8DL7q%!5oI{J)Aq(m=!LF(x+uagWGX1eOFv68l^5x*X#1@1?Ni*?Scqcs7mH5k;s(JE8^ z=1GVUtSGOQPC4%;4y2|z`2v!3swJC>7tS+ zs6pyy3b}>Q@EzX?2naEFY+VJ|+&>s%6<~`#dTndWo<+E%9u?}?PMtUIU=bb)=5h>f zzAiSX&aU*xW4P=|XN6!&v#E@qGHK-&hAwRW*Lx(0Pve7sf(bPu;<9^Sp3T&Ntq!tR z@JHK#Y>=&X<3VwfMbR3uBb1PS*a*4XAGQ}7r+=_3g$QgI3~CxBfisa%-7WW*(Q! zlElnyVi=7T`KCrsFj?NZ!?4X<`5~C_=H6qw;8htSr5KOQUeh|R9)u57pT=*?3e;ae)}f+ zaI=#Do%t4H%bMzQ_A0ag{CgKvi_Y)-U0t>PnLjz4HXt_@c#OHcRO67GN+Az{QCl+P zY0zI0mwybEJ@h7dt3JSz9tx)n<58OpO*b^9k?~jy_U2xHVg({Ot^8?o+3vX4LIdHB zeysGROp^;&RHwOqN!g;dT^&&-^1>QNn2c9nPkuSfd-NmWtIRz~ouDLMor)n4`YrKy zw(2}Ek|aXonoWEg^neGua%2^|vWx0Z;SNRQ&dBd>|B|rS%UHA3PujJd-TKDAwh;%huJzXS#MP3ALuRGQgFhz@ zGI#+v5zW273y=(|r6lwsl{7&u1KFfpkvISC=05eU4Tb8BLk*GjMQhTZfc(>VZ+M8J z+5JH?$1|)%VklxmG$xVzDLc`4W-+0EU**jpoA!0&<(9{KQ(r`1_ZLf?sj14Tws+6f zSp9xdKzR)1kADo(S)dp4@Nlc=KU?<9o!0mx7*5|B^<9CJyj;B6ZdOPKTEwUDTTCr3 z>|5ML-zYinxT~@C35jXn0Vqor+f2%mn5f2Bwd|HczD9Fafq_shtS^O4!R6dtae=$P zT^d`$SdZsd=v?zzC#_NEFKE~H96Sx$^=jOvrU5~z;m)4AbBF*+f;gAX4Y++Y$ z9Fs#-WT7z9;!{dk74!3C0rKtJI}^UMY7HOnM;{jc4xZq*R-9`QI~}X_Orz%b;5xC= zvCZcBEYk*-&iLqDifzDqyhYc^q273=GgsHM>vFl)428aNS(@wbOB zBhrcdM*{WbS2JJGttWIfi; z027kDKlBG8AAI`e{|9pQ#|iMBW)QwI?wc3tok@SWL@D813pMofus0U5{mF}X2dX!F zS4h>jjTOSHub6)i-Bz=+F=%S|`;|c0BC4W=a*#VvIz=eZPeTzH1wwjjc24WKAqV#w ziX=D~wAG3?wv9@PdkYN(tZUqp@GW!6)?*V!sRlAUAY9LIzd+0-S#p%kT@O2a3Q@_C zmDT9%EqibaqXb(tB2B-RvI(qgcmKZURz5vFJvQMJVd^L>YYSf-YxqP`1TZ%@yx54A zYcV@gU6=%6-KJ(I(WqH$V_*g557yIS?-HM{<*SrI z5I*6>=Qbh_>n?E!8b4D#a%!Kn*0Q?UDOD%yHCpe`>J+CmAHhZ(^NZuD*cCl=3oQxC z88mQzh6XrWQevR&!6zG@a|bFzD@NJys)t`~VqW+Fus!X5Eo8lwQ8HOTJUZYpf8Ff;6mVGoH&f*RLQ4AAc84v6)6;>!45&Qfq#Ha%r3})sF}1s$q_`fG(cOryD%1NG2KG++g6(MeJenMsx-uJ6zBiA}YebY03n5|8Y z|7gK}f}E?WwVbWF?egfOiA%=giV0XOae|2y+;g$iLacDEE8{owH-x==d;8a~e3m<{ z&{Jd$8W38ckk$g-kY9|Ssn>9bnU~D6?x(n?OGC%UhRbd7tn$h9=ME+&x2<&2^GC%K zL=5>!_=*;rz^e>0v~>IXqw`kei^8nu%*40M3RjT1@prSYU7u+rOWL~kC=ox1f498Y7)BcN>!|_NQy;_e zFP!}(vtaclq}g{$r&LS*7yltSS8Od(JftT>sSz@Fy7dU1zRJV)6KOY{{~`k@mkfd0 zVc5Q{)=hZF@IV3vgi_q0i;W9iX)Zjno|OQuG+5naUb)Jd;;vKFx8XCW{G+s@dD-L% z5|m-PYZGhqq5uq6fn;^7b@U7~<>ZB%?L%_L5@#id)ouf2u6+oe-u;<4m6dQtejhJ* z(Gh`KRe`K(O7OMPe%3Q#*f#YB*OCm43?+NX3BH8=^;M}HrEX+ zl}|XWaa%QFG0Wlah?~q0MSZ3rChY(Es#Zhwajp4n<%yw@J@+ne>rJf6?#wr(T}mJ# z*eUnu5so~bp-0+R*ZZ>W9JPEq2U1sHjqV@RRGczQ$8>2>OVL0{Cni7fp}UWrTkSbX zn?;kzP>_TqzrKsOJPm1P``71Hg^ZscTT%-@CBvI}p24udAbpwJ^-o60ik;^X%i=qu>aC z-u&O9H!kRPd%kay%sclV#^vU_UCa3$RJ_%Hh>!0McAmDs2t~%vQia@3o#Eo*T1UnG z6%(_A`g1Tk1Ev3*3f=#jK>2^h^89acH2=qkNPkyfU;hjfI`}Py2QB$$M9)kON9eRY zJ>L;< zhpT?B_53}(Bdk9lQu9khXAzpIhY!FHBLhHzP_Z_f-0ziP4ECOi_wQ%h96z@BDAwBP zDkEI+RwATOL4#}Qkeffr7fnPsuyRUkbL{-LT}ivETL<7$#oJxt7u*NMl?0&8KuP6J zqeCFltH;@RT^U%;Rf8g~o^qU(dt}JceihaBUIo!S_x(+qGG)&Rs~KtlRZR&*2n4%gCyb3>3?`*s{T17Ta+?NPXj_lWt4LQ2MD66y!Kq{-I$QGv zCBSOf3(h0$8jqCi676a6iD>+vriywY}7lb)ZX;GW{%AHj#h9^NTJ(osW(4bM%MR4u3q)xNP|IM#7 zid$JiqN$`7>Q-cdZN}}Om9kIWzIRxR!^0jzKP<_s=Hiy^y?nn< z%)ORKt2tJAc{lzY?by6-feZfj_tEegmg{-5%2&bkqVpd$KI+N9b-kuPS)5HzAmAE< zL*KmV4^G;?-E6jpt#niux2i5`l(GnU5+CD{-6W&(TUgB|upcJThS2OsO5JJTQ)V6iA@Ei&2 zCjd`JDa00PKAyt%LF^yGFS1ZT(AdEkT8Ouy-~uOpgVJHlCkBIU`=|Kn*tn_l%=`#( zl3Tq`OXjK>Nm$rmJJdj@Ru>Qoo}f}A=r0X^k8(ryZ|#||y5P<+nNWY>vn;Bq@ z#nqzEQFgoafXzYE7F$$e)Nw7409=B1SDrwZ@mpZY^KK2V(*XaGcP2$wlj7-F;npLD zZCMew(2kZxMi)EZ-zpTpI*=BaGX-$#?OCyBz3VhQS=Tj)bevjby^KyOU^GK-*rVb8 zmZ#pl3nnylpnq?Hb8ZMTpTHazRoX(~$4$Eu=DX4wA@{cCIv4uoy(XG*Ji)U>uwAr? zvf18QV9h#QGzbWI6XK}{wVn@%f&}ZPr&YT7*^rv; zG`NRYcA~b9*C*G$oLsCv{(625!VbP9tVliF!ZlsRCDJ?RxUa!;b?zM7-@(}9e3iF* z)ywUVoZKO`q>SAB0U+B-&TC0uXol!y_UOf_J-jJ)@3mC356&txVX(HpEiHMfs)OIJ zWd=$$Viw!Sny|x1sm~`Y^xe}6@2cUkg@Zm4R@FY8MKkK18NIuPf0>qXK6lI76)~1nr>X7Q+tJe&IWUtN9N8F zJSPj;?If&|SP5#HV5bD-LQ+Rn|G6bO%#Fp&S6|*kpc&$4hXd0A?vlJ4nOT0f<4L|w z(io-miw9pPrADhbv-)oZ0arViUM-+zS|OMn1P+a~ z3&e*MY)yl;Oo$YJhn!L`Dj}aSj?brAmEn0n>OwdsjVcJOyy7;2cxswz12|g zQUdwzGY@G8zfc=af$ptOdBgi|l!tx_TpRy^V%PJ$z@gAABtx`H z&7=t=p>eK_ZhN3sB^HjpdOPJre?QpJS4!q!G31;9oYxu~AM2!bV^{~rHkdoc8^ZstsR-X=q<;R&Wxq0iXIfzW=-t20 zGJOE+INZ`MNca>YmoKX24ZBUiZ|Cs6G-rtZA!`+>o5#DpwF?@@uQc{?Ik=sw-vy}j z&g5_)^ED8TGP2cgfaM1xgCNNA=x3tnDeC8$WaF*k4O)7iso|Rz5E_FI!iQi}$>!65 zn`=4*m3esED|Rq)Zh8=L0c%LbX5%feT4X-OfRlgoKqP%=+&^WH(F$URFLrE;EGK~_ z8#ps9&~DRGU`YibJ;COR7kih>;ZYw4P|Jk_sd3DUM}G^*g$-^Y8|=@$4*>Ex{xd~t z4Fv?8H)US=`!R_7tnDht8iM{p6#2J3Um|^a+{Il_<4Ia}A9TH{&6O(l;@8DdOZP?Ed-GOCA?cQD?gG|`Q02Wr)$K-4QBsa&}3pgIWz!2rxPs@1H$$06B%A>!+6 zuEsf2>QVOFliyyISl5*+%4){)E_FL85Xc@s0A$0#d-pd1NyYxCGg-oiM(ID92qoHP z8D=UI8bPS>4>SP$*IM61%Y3TG*he>hp{gLZf*GrsYPLrpk`hp5TS-E@N|c%`vtkp% z7;&jE6E$UN^W^R%K%q|nI;-`@je0SLYQDXqKSmAN?$h)RF`qr$@Zd&j z#$ZC#P4HjrTTngP%aDZ2+cx}7wh1T!7Ie2q2%utcG7B%c?0h;Zo23$m)91}QrvHKA zG%)o|xOR=yX}xO3`I8oY<`KR|2>XxsQ}Ku$Fs7p5>Go*v4=n;7 zN^T0Fu((3fb)2HE$yUP1$162)q<#Wo2I1L!%g7I}i z4a7{!Embv4Y5TlVad33vSm!Id3YtJu?s8y2uE?m9w(At9)G7f266dd#`Ken0zgVm9 zP6mNZ(D5`&{Nj|Po=LabU`!@2j0Y0- z?jqGSU9>)rTzu#Gaqke{+MuhP=av-D92Bh!%j2y(;tDdAf@|?y)bo0=lWH|U_eXgv z`5eIXT;JKB;PmD>$)_;LYF+JWoYNtb(+2j|+U_fwtj9M11mnOqU;zlQ?9F$0_N{c% z?9eaPUQ3FioUg{p$Eck?pdKfKuxI1?V0t9A+3=-bb9?LsPBZ-ND^t4&zFe^pra5~N zbBAS9$E3)m`=?tRY`1csxvhsZ0V2nH3@kr9>pqc)q4AweQcp9U7oWPvU{r?-NW&AK zkEoEh-{RRh55ZnlWw308Np7-Ct1sCUQ#X1a4! zd%>5-I38hG`nCI&SuAw>38Ta|iHdnmB1{ETJ)F_^FPrsLq>fEb+;X?Vy*^l&pUn{0AkG}v+x!04#^I27 z8&Rup+}~^aB{mL}-kK0SOyle?-G`m2gUbA3Nc<%^)tr=PgGhYOmzOL@8v|B13l4~> z>HVZ0hinYmXDed_{i4P52RemaDQ=0kV1gy=9CV@?jqOHI$$=wYrCW`WOT;tQDqw$T z*|eK@ilU>6mMcqS@n;Zk7ff{aM7h62Bjn^#+3pmZ!M7KuO5UVM*^lR&Jq2t%u71|2 zW)Wm${(;9)?Gx`%`%i&?#fF;52BjwTLh@j=KJrsqP8nR-Xf8S6Shfyi1)xI(U>b*_$^Lgt^Y(3H@f7#II;~e z_Oss@Ox1IAoHs!#6To@9_u3>36hyXows!I(X4XpnBH=BHPf6nr_qS{*t9y*x5W@|2 zZNMXDHf$se-gHwcReH1c>H;Q{TiZ)KbAAdz)!p;iG}WMaaFCxq^(bTKK3j~h0RFZB zp4OrAtAQ-NcgDtCMINt63I9nR+L(Ne7}-L_=2t(-E~bZ-MJ4Ovbr1c86s{!BU#fB{ z1jvw3QR`+E=kX|nLMd^wE3Sswagfcqn-?+><2#IN7>J;%vt0rO&Ugo&uAz^@^{OWtp$9N;BP3-mPOur$To zOvg$&UHptffchM>j{cP&=`Q(_Zll%3jgPP9zwai2VB)*fEhIm2<^bDTjfAm+ZCQam zu2U)$jcl3R(!7co0eC3{#^+A$3-SaoM;3Sx0-O7TG(}AlYsJTuv>sw_H(;V2qF3#k z2g_bNM3e8CENss95=Eq`AkFy}2Ua)xv-T=IkF5jYGT2l|Ql1ocH9wJwLIIh*u_YSm zWdz;fiZoR=X-xg`8j%sQmG!lKm6E)nS~kB>sxLJi{tLTIW(2EgDMAzlYHDC$%9T2GUd!l8N)!F|Mak z{82D<98lf3X4h5Vr-A^-fG*}JV6;}cFS=Id{Xu=n@$#t?_0QthKq7@9{QXM5T*eJb z-mm=3$|B-7|BF!JyCw39xqs(W)|b18AXwY#!lU7?L$HH!`qlHgL0@+!Pw9k9;G)Eh zPB*P4syzMjf{74(CfC{2F>aJ|-3=|4S)Ocb=8*O3=-f{X#RzF7(@4WEP>(P&oi+&m zA*}%F__1FrP8zJ$VIx=g3W}$|*A)iZ%K1wMi(Emxm$OQN?=ex1slcwdgpv@?d7iTp zpA`iS91K7IWQezDD5@zp7ewv|x3(0%l4Tg;u(oH8jHaj{J7jJubABmR1yb6La@9`u z_##2Og=2iT#7>&iNz3=c4cPNTA1owKs+m*Y^=+(!G}_2JtDu}{sZ{k$^&u?wEiL=J z+qVc$_nmn?`uG8`5GfuXVjG@7P*)=v2js8a5KVXCdz)&o;F_*`7(!X9TA}fE`kBhO z8e;ZNY0A|Eju6U;xeE0f{izBS+;dmHa}rjAf1MSbo;Q6tEA|vv461Q(Jd%Kj5U%YS zm{FKw8Mi2Y!1d$J2frYztB4kQMVc#(c-2bkhrGq}6eX~5;k`9-W1$W@$roYG1HKjc zeu>OhSuTuP>kDAlT+Q6WT5wqXS3K6B7kVpV7yumsR1c7;ME%M(BdZ=GRsB&1&k7$Wq4L;a^!Hn_nx`x z1wH8BOW|tN!qMZc*m8j9${h^w(l@MRIj2R>7f_9z@Nk|74D{~T%&V2Q9ZDlulnzTi z+iW4#uB$j)ik5im%2#5f9V5Mr)R(Eh4P-WmWJAKJ#gFXIvB}n~n#U_{aRSGn3B$3s zpSnyh1Hck9R&r5m^{AoJPGazVv$pry;X3HA1(Qk4OEeE*9c5=ewKm+oO`VkQ{^M#^ zwv}0leC}%Qt9vb{h6MvD>tkCJ z&t58+`@pY5DrFXeWq>%@kr10b8EM5ihOKsc+ej$Nx+GJ*qENVW-_)^zS>f!5r&BMv z#-4J1z{?G+;SVbyuQ}fli%;oD$0?k9&SLvTn{XSyXBPgxToKNsx{&DLW*fjMy9Cd5 zQmJ-yv{ze*Gg4?NUato0hG0{ca?9+@9lQZd89!2$t4J&nG=eg|vLgvqd1dfpm^e$K zce|>bI`~;nh`8A1nfZ3lxn&14+XlnPL(0WFC4zPj59v*91GjhmOh{qwZka3N=tk=v zF|7|bopnY?pJ%VB*UyMokrHOdJlx>uJLPMt%XtA2%%dESTGgjuVcZ*Umz_Tf(LTut5VM+0jp&aj>gLBT!dkvK&b-qlK z@vumlFsEMLfW*<*0=P{}Ce@sEWFELcWy(uzsu|IdwQXdJ!!DP}2o^~nRwN#Js9)Fl zmPd?oe1yCP(lmjUi8qDuK?^cyoeVq;fLRboAt@MU+zw~sQ>edpAv9I0%RZc*VXW!f zgimAS&mE=ay)=J}oP8{>yp2mx@O>p^0q#RF*?45{kqP>9EXte z+t2lgoNYIBeIH__2{<|5&iu%~hXnJQEho4P76TIUYLi-^FLV9R^Y8>$U&I=@=ib}O zozv=;We)(@=T#S`%y~F)xk9RV2YLM3jDQcW>6^+6hS6FtJU0_tKJRz;J+qc{32WK9 zo@3P5c9pS)Ak580xeD{rjIaYY%!#61`?;W9Kaxm*&1LxBs?Ih6hvo5o zF;QQ-Sw;GizD5&LAbLUdq0uymKLcWHJyqc5qbSJieRrrDYw@z&RUlM&c!mOgUUIFz z*^*Szo$vnHq9X%gw?U*%`o+f{l}Y9Arnzu;^!6wH%NE~dUU!V>3@+b2Iao25lG4<4 z@Y7yOfqE6uoNT$3d;I z{Z!Xx;o>dL`cS~Su!hqF{&Xyj10D_AS6c5r+aa6j;j2 zFRo2`E!xYI^kBj|PIU^jh>k459K^kREmoto*Z0)atxU z@HDBN>9w({5alucd~1UtFmF72@herPb13=!?V!ykGJhGIGcUF9hq{!ak4>5-osPZB z`vll=EOnb*dNL$yu7U4g5_uR?4V+YhPNs@XP93rSICqs3bn$Zep{5G=rkX(8z^R~r zbn|#IcZi19i!t9$iSp1hbgI*X^ZhiAXViSKfhNejx%-y{`0t;`DgUB7e{AJ+{};^< z|DVXm@=UZEHUQ|F!J%}|wrimi$}}&j7a%%#eBDVK9RjQKY0%vR1J;R^62a_EdzQ0II1PA zYoCVF(d`4KstnArMV{7a#ntM8G9X3`*LYZx02kdPny~gc{HQE+{I=rL^(-LC_WNZd z;DNeS12~gTylw`d_(p*iwY($j1z^s(GiTl|iU3MseDF<`+rSkPU_8;yvk!nsC-LB8 zJ6;zJ$h!4+{%^!BB};+Eiv}yQc)SoaE6hYFr?!AZ_B&hsRhdnL?=CQ@!A*r$V<6*| zfZ+cPHaz;`W8j_txP!+8hbEV-G2HyiAYI|X+Bh2B+`go69ZZ0@hNWlQnxKuwr~d*_HOzsPo>RJr&TXkbe|OZQqJeRi=7lfNdq1te zKOui%K@?5XEg1w4dw>!)=ED$n=qNV!!}T~j|4Ib=lH>RIi{+L2nKak7Rh_pNjo=?b zT4Ms%##i-|Lc}e~DuL1K{*MG<+w2G6N5`-oK-AkT(6R#FR~!{Enq52(Y0msQ=z+-= zTJ>JmRzFbioPbGuGg62^oIub73*qyBYsLO}D`HJEe1j-B9$(EAc#>p-3UPbGkG~>p z;^z$-L<*6B8Tik%>HTd70|MB~;MPkYXgw99H6AX2mRgVeAh#6crS}t97ac&%+&bXE zd~z`iyuD~gQ@LSMr%#^0{@LGSq{O_mNfd;LelB2*`K&#Mg|_(DNZ$k0tcm$xv1te3 z)tzV#UErJ_eQT(^#H?(VHq+vJv)dGIf;_=FzL!a3^5?`{i~FPNv`S*N+B?Hq7GKxI`Zdoy< zuef}863HoM_T9UMyz5lL2^eP_tu+PG4EjR|N7T%*p>Wl{G+EU9CICprSQmh8(G&Ei zND@)Z71Da_x0F?4qL{1Q2a6nm*8=8tbNfo+xKFW7!$qV1?Q0CcG6?t;Sg^~Dx9?f2 zpJA)ZIQw_6bsoG_{vxOZ-^+N74(ey#axt*vQ5QAWcqt0MY~5N0)@TD^(u)KZRQ+Uf z|NBL1&FYYWzK$EN1vvG0L7YTYKUU@p*vG&nbU~>bC)o+wk7nmxfEHJNB>_b~D+#8( zl4g1E!|4S20n>PWU5L3+-dPu`LYMx`6+%ts8Gjnq1=?g7>3_ zcl%Hty;C7x1aq&l0A{nI5ivmiMbq$@>p66!j^>H1<|^#M2{Qdro8-DY87%31IBhnF+eeZfo$+!EisA8a;HO|;9i1pnlnK7i6 zZk2U+Xs5d*{nTL~pfZZGAbaQ8&Ux>{R`67qLEnu++4qOs9NJ2SLRYH%bMf!G%@1tT z8&&pa&!ho#M4~vLGL}C~Wisx}w{(+Jxzamee1rbtReqmL&MgN?+N4U^>aL;il9rbZ zI21ds1V|?4WvGO&I;+e4v{phVDtpvH6K;R{8~ zvf|wq3^3(G5TluZ@S&^@tl5R`3=!<^Vf9Ff?!3anRXY`-`b0S^OO&MY`sbsyL0gX@ zJqJ8`TehPD3YwlE_$YkND)$!ynb+#zJHEy+>$7 za+nAua(riPtiiOR?HKK6HrTHKiEv#N=rZ6-R03%l+B;SV026rCg{YDf^moe>_V$U8 zMk=k+5Tq1HtpoYLaf3n}f6~Dh4kW{R#|reW6*$xD>mb}UQ1*Dfs2=M33sSpNuS^6vKnp(2&Y7G8}@-jZ@~9qvg90 zp}QCZq!hBw0dVWqlc^r%OxNt24;N+hI;)>}stRSuC`r-d2( z5{N@Q0Fb;&yVq&f^z;cvf~KL;tli$Dz%a!a$;P)_JM|Cuefq>0Y(SsT_?!%kY2GNB zbI7@Or``f-6%I7tU{l@-02abQWcq9lmV;JSywC zL-Z&H7(n_zgBcRIU*m4>05DZ}2Y>LjcmSbjO_@099}R^UZamb;0P0+?Jn}@4820&*t^<`kl)xf!-8QMjWjhhnHfAQeLl`g0_wWr~TZ)+u&H%KuI&i!=B9M-ihtH z+<6k<+5v6%u$>#oM(#_lOFeeWpEK2`Pfemx=CUtOgF z{PvGOvEQ(rUI{OHfz_ZJHR6V8mLv9 zK!1r^Q~FT%?FsG)*6vpE%2_x4vZc?t@yQ&yfULzahipvwxoeovEKy z0T#9ibg!tIDqqN%Gaq!Zxf`ua*T^2wu~tmzlp5T{nIiJ0-*^*jF0{lC@18 zy)dl|#kGQbd+xk)NIfQ{iB5ZQ^WdeqRbfIZT{OKqigAl*n#r6oTJ1K2dh2I6PzRk* z1)YL6kahe1AS=>7aG=??Wbn{Bta2HCDRb6~pD)<}MJLIBJxIUj9JB9>lv zdPGU{i*9XZJ<`Gh>U{tmGwE5mrF}Y@=ub5JboeZ8{*b5}<8TFn1SaKnD-hq9>bx}; zYH8LsyyB%|x@hJN^O03XjxS7s-Udj@Y_wi(OVnR8nD6C8fF@*tik zxeoc~zm7swt{=qqR_>+gRjfVbmTILguy0YNDB<7DTP=p5=4A7kGSK>}e^V*B-(+vV zwRuLs;u;9aK0vK!4YHW9t~^_Pt{|&LMW{HiR?Okd1rZZYVRgy zXt?pJkuA3pr^ej(t_O`iBZqD{4oeR?lT2vdI z($exRuVU(xxs|Pk6=cr=lwxq&hJb{@*%tZ7W%)T;*Lm?fH5K5o2$(sOTYJkyZNWswGmI9O=PZIb zbQ+Sl0X|OC?V-tsaCH+ztp4);02cvr#-z^MwvNrR+-8aOMlfKrY?q~xTY1Cj zoz9CAiF*B7cQZqk_<%wNOoS@@FIOHRCWhm%Pw(P;BXX!ZDU!Bh>L8K;D^f6zoX_Nw z@bh%4qeYX8APveFpkMgVvM$D3&0SOkHG0yRZ55Cn4fH9%l?``_+p+I5t><0L`NGZV zy~lyNcV*$AXrmY%xlFAdAI#8N*L-ObjjoSB_w%lRcNk}pacd&;8)jF9BHs>%Rj9V@ZOkAoE9}PO+g~a| zi__l#V0HV!s>Tb+OsT4Uy=D2kFPGe1u5RZB$eCQu-ik6@^%A|B^SPA1P(g*Ut}n@k zS+?j6VN&f0@>TT*r?;cyQ(?C*G9Oz!bC~W9F~xiZ!v8Q&!gYp+)smcMEXgCc-Fd|C z7s_f>j{()|iC53wwwh+W7vC70rH*hdddO}BG@eh7)|eP+dZjF8h!%$my&J7G3BKv> zCw`IUBVDb`n^Ok&n-IKsnkjyfRZK>$@E+w$-&5S;KerO_Z3n$9WBQK3afQA}<>P!- zw64cG7d_s)$#T66CzGL_f;gUt~qdzxEC;_K|-ve|XL7EYT|tW>4yXy{e27Z0NEvvMe1UA*E7EZl_S%QPgxE>Hq5PxD6~$phxx z`0O-uG+zls(fq`l{?8h4qXRbFO3CO)W=^yEtnF)}*~i109`Y8kTk8)Ss27zuxAbW(>=hQliSV!Ay57^)K=Gj|tU?KvoQvX;4FriENPX_>1IV_O3b0Jt@R*1;|RQ|g)l-cP6A|LrLT z#M#7Q_yDXV-)|z67~~W;7&+*F2gBGE*PX6&B;PEu*=ON#dR@eTm0J*?MW*_-7<38p zvSSU`s}>Bk7a^geh1G;4W}PD;oTH_W^<00dDQzuTW!z8IBG=j}oRC<@Y>K95&+Fo~ z+}gl`bj~Ilg9Xc_;`Kh+i$=vMHhe)+ea;H@9rP*;gcO~7wd;h=n;ZyzML<+bU3D!W zowVg5rxOb?cvyaqTDcbQL$%1fW5WNemTBpJPtD-7*^L2x*C0JJe5p6?s1*fH0A=Quc!;Ez%m=*N`cMYwVZl4oGEb3G`wik)c8(OZML#l-iGNT zVU32NotA^5f|txM%%XCe2(2=fW|hTs{h)mC1nh4eXpv}8llOn+F>?j&mLUxtRYr9% z=Ler&WgM-mp72mH&N9R+>`5%2P)QE*bNm4Y3=0TZ58Wz-{<{3@B99~=lkQkx6OLCC%W(Zx~}s)&g0mRecuo6BXix|O_mC6J=tM> zFj!(>u&FTd^n`t^AEKtkeU{Z#ee&45XuAo|kyzW}_~?h0tmnC6ig>2Q_?cRCAJ~yx zxOh-3pw>eCL!=l8yfM22uJ<{l3+h!nG!+(%?47c8Aexaiu_)K*)E7@?p|!8`>*n}| zUcKRn*;&>v8?Fla@zPT@~6BO9il)sd|w`TY0 zp*SZ+o)tG@FE>tQVR?{$1};;a@6`eJ_ZN!xqt<_yMt^T~;1=zB3_jC_DlH@=hjH}{f6cqVayRi8csP&ryB zq`6tM|8{43&es+WgSyoC4l+S=?)ADBDAZCEXhM+xpqyBHpZ(%#;e!l(WtXJunxx}CJ!ETCn~f4YRzZ}(HmT$$WW1CZ4%e>Sj7IzeZ0?eQq7`*)j9oIx_jFY zp?%~uRcW0Gx0*xI$}ySQApwT9YqD-{D18K4EHAj!{h*@T?40YPS=#~xf?*JsRq?5% zzyQ@;I#{oT%TBl54K8|t4=lbkUk(4mvS~i+DiY~;lt=pry?ZS0){D|o4c*tQ6>D>P zZ?^(Kz4!qo4bO^-7doXH2V`5JsqrEyYT*GO&PdWbBt|7p68b)i&Bji&q zfc*O056)nmgWnr=9(T8a<_p`b&7}Pj;u`*C;)J*k7xbA_q4*%5FOE+Q(*k_n$@JL5 ziX*w+{&Rt*)|)E9X^`{-Z>mDK3prdy2%`Y%oHj?r>IKUjdgU_!F~=Yv##ZE?Wu4x6 zX?^T{9Lm)r!$Vo4xHuPn(1^k4FGQVS1hB_iNEZ-cGL$$kIPCs3ZUp0)my}J>VOemJ zGI=?tCu`vL!H5I72j^5+lNyhMj3gSBlAxopgO`JPZYudmp&bHtF!Y?3=UWUaV=aeI zYiA?zw|ctxWEBc>ZQu{dfsTXuZhim@Il@j}2I8a&6r|o%erVR<%&d6B49%nLsm6#!}S`$X$5;_7zHkKR^3Bu z&uZjrYsSdl4OwMqgBez8SO@HN2(>M>U%T+0v|;TMVbcdO=j4N>mUgMI$B+zyKfP_G z5bsU>23^&d@W$gPKZMbmHH{(~pT>tqv?u#7aLKV&o!*&^GM@qE zii(W`iq#rmf>}H-lONp?>MU1&;xBS4^X>^I<;YkB-Br&%F@2Rkx;%I_GpiP)M#oGm z5Btz=x20!YU8TwUt`R5}GuqF!KiRM#&%hU}E3LsFnycyjM096e%f3Yy9iY2sTdN0< zBpw2dK>dK^4%P*aqdB!+%#mq`d*D8C9hqtf^&TPvE;aW9*J=dYKic2&H=1Xx>6u}K z-hS)t!^4f&Ot6w-*Id!}iI94RTE})v+q`v=M%O`T6w;iqFAm$v;AgGuv*bdpRn0z}Nnj){k#))Sd`kjamI*4w@-zXFE;m z8g#&N)N91<-8Pu@QKYajk>CdiFcY!$*&aWB{0o|PvrIbUd;L9xOkO{r-L_&kI@T*^b8v7}Aw+fTFC6$% zv_2a!SK3z+hYG#3f%^DY;-Xsu#V?f|WdfmKgKA9#+B*$ACoohVqsu)BYC1qVQv*&G zCzgYx^sa9>8kp{Gr%ET~lEHO{6LgOBwiO$v#(}1ArZ7O%4v)K5kbu&mUr0^sF76Xr z$=K8J`S>4aQ)E+Z_vACs{Zp9;%GgJ|t)pfib|;?)95f!hd2(69NtIDR5+-yk`v>O= z>b~MkAwHjEuuBOwVTYLgdj2y-e$Bv!n5dTkV1)rt%@y zLS>yHjJe_shE}Xt_Z!Ix4H{M)lF3=?RdeapbPe!b%!(u++_LDBC2jZe z&<||J9V_qJ%H`#rn{w6m>2qI!XoEuzsN(k&Dhgk#6V!9a_L`SwB>tswQpz$fIbM+x zgIaY+n&D$8UMar!53fu6x}v!GenVxt<37*;UrCTjNT%ZT#g9l~t*%qNZ?P;&Yxo;@FtDp^fB-rai zl937=^DFGyLw)KBzRcSGt&#ol-cG(1xNMfi*V&tuW6t1+N6a{|BcWt%J;bW~0Ur8Z z4JZ*`SFM^69(~4K>|Dg%PC#n4uW=0j5-5hqynNuw9952$p$+ro;PGelF7I0R=)t_0 zlXr^5hhB1U+}59|t6Ap3U{_OF$6au)p)H+jOHnrX0_hFqgJ|lzt^ZZ!JvZyTvpje1 zp0x=L*C&S-iCHHJIvBE_X5>djyI3GkvzLN=q}3BD$=zggjIJ*$@>#228&Pb@DnFM^ zA|mY4#C?QK&Um=K@0Nb45{_!WH!kmtIRx0_F0?r4>t>?~XNCQqe#Et9cgG%{VvEj* z_|xU4(~QfOBgpwm!t5!3wNI)lXZqI{Kt5h9jutxF`&7=n{e&HYarcP~>1!*MGpvjT zj)eHf(Jhl(dU`PearV|&39a7#3^tn^jw)T;WpP>!s!6&{ZUXBM+;O(EIxr!-##$In zzdDYuxvbxEmCo%rU#hRNlGgo_a_5GG4xYGU;tQ%kiY^O1S27yOaI5gS{p1flhr*j1AE6s)1WD^Gwb^kDq26nc8M1Ed z0)}Xz^B)PdtjKY4T9o&J;@;KP7xR*h=5I@fAn1wpFtldUt`b5vVf`@2Vo3-5xc zMeqr|@atl7rc`RYmn0Ll!VG4dHaqtl?={t5WCd zb9fl^$mk_ec6ahWF}D5x(!T^wT$D1GWBGIpRo+n1)SD&#<&M$o%<5yuj@30BVIO_U zVUpSnL#s5sHFEyCWMzTOR<%6ppb_?6Kgg4Z0HJo_C{KcGYb{RYI?8mvzofxJCoe20 zJ!=5BX0AA~*M~ouoE(g^`jlbvVUH8HI|IInx@f9o6MG3LM5{QvGSUD8Y)K)s^uNC( z{+!5#4-yR%bh)xbq{LUq#Q6O5MaZ`HqszvNAnwhhxF!RhYZ|YbV>7xF5K=O(Uf@$t zeMNOj4;`Y+mqgO#LmXUDyMkEuaLzVuPar&=3El}>dY#w{UzEm?OWXJ5&;nt;IFYf} zA@nj}HR{8L0?SM}NOD>RC~8^pySZ(~se>M`S1#lfLH|1j7c6+XSC^zES0lwd!4w;? z1|HZQ*Ylz2k>;YYH{S<62vPadtqp~?X<_QLSe%ie*W&%3*z&y zeA#dhwGiue*PAAB!Qy}c-7ygu z|9b6t@nM1|PH@;Dzs)43BlG1Pa_uK8>Hrs3X>v6+K+lofhXHr%Aw7$SiL39Z4($I9$XEN&q6DL2PCb&;&(s9r*jK>W1SnyU{614rO>UH~V<3j)s9W|W!sINO_ zDnr~{DV4uKMZJmLFc4>>fD(`GhR>e4a5)%`Yus zJuv?RpobWt@rBLlAQ|!_#7l6^;T(Th@~t7V@#DANH0Z#8(<$tKupQ>znBWPvm>T#E zKi2(hqfPeCI$%yRbn@rMZLl4OaK@a_Sb}6P%<}jZUVNZPw)Tx*0GHeMqmu51L>X4~ zJ7^vg@hDWA9-ikrS?I3}e+DWDgenZd5nxK|Q1*60X`BfDaWrU$L^?PAhO+}P#E|Tg z;BI%bBNjAf4j%(ubQoUQF)&x?hdL?440KoaNArc{0O;r*V$EUH@}bs?d-}1se!iK(%6^M{?MtPhXCv8QGq-C_SlsgxJ&P+M%Z-BH!N9~!FBQG&8RTC& zJu1R#d|*J{Z%9?XLcOaoW2V5LvCe<$yK|Qx#G#kP<39D5iJFx;Yh-b5tsM`LHqE0?HFw~Y1^Url|| zvs{E7kzbj>)VP{eI5{i?RMAs=pKT4F6JvYR8H?OhWN$V-x>zbKI(GjS@5AkbGy8pb zJ5⪼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 BW#aaMamZ}zLI`RM6VaXR| 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 W3t)6ndkTFg2Mo?#(5=*VjQA%u2y_Af literal 0 HcmV?d00001 diff --git a/downstream/images/system_settings_page.png b/downstream/images/system_settings_page.png new file mode 100644 index 0000000000000000000000000000000000000000..ed329b561f8ed8664d2fc265d4ccb120f2656e0f GIT binary patch literal 51200 zcmeEuWmuN$+U9GE0U`z|ilBfX5(ce;(jX;DiiFZC-6%>3f|P+Mf`mv(itF+Ymx8!+|PYq*IC!&e@0nm^9IHZ6bfatoUF7O zg|b$bLRpcuel5OY?DEJQ|5|N(Qchz%KHSzD`{8p2yHn@v)NM@d91X9TP%c^9SefwJ z8eKCnv9`TzV>i62L;^p=OMXb|nu(#EnT_>s4Kphfik6A-Zh<4ah^ zL_kgM`{-r# zUfRjTxczW$%b91Y-WgjIcrwab?yM>6P)PCD`_r=ZhF%@#?c2Lo-p=k_+&fg5qOpb} zWVkm<-1l+5ZSTX6L*Lq+9fmah{k;7C`QT)&`|z9c&*y%A5=ZvQ{>SH>orX7V{>SHI zEdN)(T~tW@A8(JdWK4hg=-Ft0X+^hd`o3e)#-`5$h7LELYl(j^YLmQ`c6PTa?LQx? zK84N8cTUMf|FWl#zIkHvh9cY0n^Knl`~Ypw^~OtV<03azD(15}=-8$I`Ed3sHSc*c zZKm+wU*2O~xw}zf&RgB*CawnrY*bWIGBh{euyf~5yZ-t$D^{%V3l6Tm)BaOoxjgqy zP|)cJZp{leHo;GyJ}sp7{bv<9H%Iu%Ds$6|*m3@A*UgU1gshiyB&31YGT|aL-=+b+7PpTe4RA#rD_suk3&CXi7JTHq76C;A~f4-Lt+g zNp#wI)~Pwx(?ji5nTDl4hM%H@g@XeAe#t)dX9J#l(xqnN-t%d8Bo*o_I~=iS;^|rG zF+0{X+Nfm^qmiU0tEgBu`MWv8qWK`RsKX|#+sv;=HX{qOwu({5`1cpM?U!5_Srx=0 z>cdyEF!pRvFz=^koAtL>wB*aTcko7<rckhYvHOm8>f$N{^0|549J>Bu+0k=9o8b*n2wg_?a_Xd^R!MC|O=& zlJcdldHh`R>hff6PG;u2nny=NqM|mryD$FdnsRo|7e}z{%g(J_*sF5Lt`y(wHTaHK z!HP&pORuK9X=~H@z0$+H@r7pThp_!u=claBoj+gX88`br@pG<-hzP6wvBPYCf5>;< zY?_+EpQK!nm15dJMMQpl5>!rF1^)4o+M`q{s^z_2HH8)TWnN)3iuECA} z-Mo3z_?1$3#hnA7B7q`91|9P`{oVBJcn^;Xy}22yT}u9*R_GGh(^3vkvubCWw1_!alZjbeRG^z^ca#~t&j(oM2 zX4fYCoO}fLcYM9?bIhugl#~mWmVw-wFLv+VeVog6X2ej)rh^%;m5`9|T=m)7rc|Bj zx2;oFR8&;waxEFK47YBq*~mS(eajZFpFfS`b)B4E)gOs8e2p8C*l602s8Z>*VpVuA zW0A|G+C2tF#+4MTO}L4u!ynl!%lWB6@>gDHrBl<<(Vf%Qjy>VMwk6;8QbMIm-{(Eq zR&6_!m6Z<(2}wT`FgfJ#=iIk^+x<05BfpfR$^&*jGp&g{Bq-<|6SL>`_5(h6#qReZ zd(SWI{Cm6lNo;;%eNVeq^emU3!D|zVnv=>5OnqJ798E4<8Xaaa=_}fArlP2LGbiV; zexcL#i{-ZsYa$On*DG+i*LLgHt(ePov9ij_6?vT=$(uMLTJJC&J(Hlw;J5x)^+Ru* zj_)`#_>ndGMJ{V7pPQRyE?$hyyb~YKam1!0(9dr@4l_psy>hg~oyfx$Z2bJR-fK6% z!%8>sYQ;)Z{b|kF80|jwFw=6R>+QK$SN2rb)QrweS`>OLiqtrCdd%}OGczBuY&jIy zT!@WO`tw7WVBoNO+mW1+kt^9aTuK76&(3F=w!FH!7r#ooYZtYsXo2GIM@Os}hdPP^ z3_NBzN(I(z*mm5_O$>{E=J}aDls8j@ZFRX;I;ke*x3^1OzI^$${lZ8o4ZWyCN>e6o z;3lRcn>Oy?k#%Is(Z2Kky=>}Yd|cd{($ZC~Q-4-;e5;F9OUm9Vm8z3hf%EH>xbg3z z*yB$lE;o3^u)=`(lMV&_j-~0dEW=Jz|n&4WSzAV~qf3M=TU!*#f z@-y$z-P|k0Ep!YmZAHVQ?beL?b5Xn^%ayk5i13?Nr5d((vvF;fYwet`dRbg7Q4z?n zin4z5=2MSF?9ar>(vo7So~T@&Ub1xi<;#~sZNkTnJvD1cpm^n2G_!GVa40?GP`Gzo znrvwtl9iOX>EU3lbp06j`Kg)t;gXQMcfFoJ=d|o7WWZ56bo8k2qeo1w*=FAJ)5G0M zi}TOVXYHdrHL47%%EVVnYic%A4w--9Bpb1S?f1#D#Ho9aN&a2;{5ah zy41Fo7EUWcx0x#xuV>Gmoqgo&>S{DM(O+eIC)#69?z{sI*Cr!*ULm1vNDy3;`?O&K5czraSUgZql##cOdbeQRv6y>^ZNml z#j^I`Og*jkhs}mZ2Wo|ahjTBvJ)X0AYnc9WQY}1`d4<!>I* zGc(8I)eP(7ChK7d6 zoJMv>3Yo=*2L}gh`6Lar<{aSR7$ehC|=-DPFk#XSThcszi<+J(`VHa@hRKo5!M#htTUx z`nWdZu3+DBIqGX9pWTe_9ly0<``z&H)$7)+i;{5Hmb$mP#c|s~%xIMPt6-P&z0*Aqu&f})c!q--BW;&wL zTKVl8vy-4*bDLFy+4z?YJ9r*g=T~o{KST-G$#?cibIN%-yuisjjEBjKXeOVHQHz(S zc-_6brTPK?D#}RDeFK!V?VlSPHFK>RUu=&&Y7?aVSj23w`%98K#fzFn|Ew3d$k(_W*uDqZ{ODcM=pvg20W)9{C(>|ej6AIsHs3!*C6Wm-_|*TR0Y zM7H|$hd{ko(_42A6;-RUZhK|OV2fv?_CRFp`;mBY2*5qYI#tKS`c8+{iYP^#hEiEwRnZ`D-o!(BDHf{Y*U@k+_dZ?Lqo%5WOJnEKQ2 zG_X+vPeWnxjT<+zTTgp`p#8g@&uudc-P^u+QZ?}=6=S%-DoT&?)@FaL4ldzPy+LlB zA7e9_eg=I$CB=LJ_j-7$X`Q08dO#AXOY9}9L zh92nNcpi;UCV1DmOk*nCo?Cr=m(l0e;dp8dg|4TjKD(8AZf>rxDV1r&^poEgsdHvS zJXq5m+*)ayD4!b|q;O)dAC;rKbm0=0yM#JMa}rG!!?lb`Qyc~+dA?+%vi`tv7h z$OskX%_FLh-9LV0YNlsp2~xUxK28W4o(fnJ9Ie5g%GB&E$Q}IMoPM>ZYCGi(;92PR zjK>o0jFj-q<+ZpGt2)ddJ$<^HavV)2dnojSe4_H>3zskZ9nea9Q&&f8Kk(&5XR$lK z?Jpp`t0yg%82?_mSe3Wz!JeUe_vVQm_dmJjP)v?Pz2V35?1t?>eS$PMTr^R+R4p+= zKh?S9kJ9nfb#wBjk1Cz4)KbF%ucmoc4Br3d6El4(u=C-(+@qAAm;F+!w;edU3HbR0 zkeO=oSzg^jCt966>s!&$taf&GpHUhXCK^kEx+DCi~e38uW-zDis$aY5bd4W z@!rz1vej7Q$|Be4E5jY)sgvymj+H;k0}L--3{9Oueb`W#Papl*xV*bEShdh;l;>l- zqi<r{V3VpZ9Q$`i29c?py#I7A%OV|1M!D(`yh zO_nlB#9p4kVWZ8jcjp0ja15Vp459m{b*56K4)Pbrv+Voh;&+q%?P`@lix+f`k}kud zGN0VF)^d$4*J?d>_K9IydYG&oztY2U*vpV<*l6;h=jn0(K!ua{dmOh2C#oq^_j}KG z32HFW)03t}@oH%~CoLnhic)otH(4<@jlopGcG@o|CnxickH0?^C_^y1AA#rrJ9yu{ zG%O7-P&}Kie`mOO{$ShHudS^sDPrQ{d)UrPWQH-%w$xkbFflO!n^N8Y@@0yp0aS|y z2ea8m#=P7mUbS@d1S5);w5;sBd-DhA^&&APyF5Bdk zU`o?XJ({bB#deL0h?=E$P9BmeHP6v;V~W^kpt_6BadCN4TXduQwyc9*R`;`ql|$?X zX7ikfSNr?D`S@|;qoX#TGE;t0Z{E9iZ>n7J{6zmM$}xvO^f$b{GdvbuD95oABZOr- zOtC**CI<|=-dukmc!~O;exaXD@$6d4ORSM)r9qClW>-zrzWy53ko(u_bJwn2%V|(7 zM!7K9np4%zzO1SFLSqGGVeWUj)8gEuYvcDne*yu0E~2dv;C1rk$qUxjL9bpNV-|Bd zbbs%@zc>7xlh6m+LOFTM1^M~PB{~Q3vaV<>BN&nVA9E}6+iokGVO z#y`sZ&*fRO6wmzF7)Z~*G9x3S|6akho(=bS&ab4*ER5Gi6fjY`0{Du(aO0#`KY8-R z@6MfDK|$0&G|>r9Q1MM(#pjv*`T^qDtewV?DQDX(Z*Jf|xm|;M`;Q+#K4)E0Vc)+$ zk!xJS_R&wDsNB?qMS@F#EfNZ>PFE(FWu^GAG}O)Z#)s**{YvO4a$RLJw3|W1?(%D@ zXmrB(g29lzGWB{xeSPZ>BzsnrxXvF2ANsG434^-gOb!&p@;avF>T&T5`&Pr8Ymv+! zs-E>p-#lG-dR^WPRy#@7cdq+oMeO=0GBPrL>pkZB_meZ+(b0i=wb^5S@F;r026UuT zJyj93+qbVVGBQ$(6p~A(78DdT@q5m6)S5!k&b}O@XqPtn^8+1WCTVGD55!%M?2=gM zJ^K{+mHF5e3c&IzO15>owuNX-TqoJ31doIC{uudQ>K7PzGdcOd>EK;Wp`E-bAambOXsR$yzj&uI_Gc3HQ0KGJm>P&g1*2 znU8q^RF#&ObF{C%kx&yG8+*uk%oxP23)TCT!=U!-9*^0co#cFJrRlx}rM*_f`|aDe zLrx4F4>21%^iEy`UJ{CiQT8nj^6Z8)$}-qFZ*0x9&WCUIM-S3s#33C?B+}WN@e9b zEZS+X-W|N!H%|rZi09IIb;U5{eAe0s?)b-d<5i+1&gEZ=AN$tUCaU!C!2|kpIy&9B zFnZx@?5Bg6sle&VDk~2-dT6}Rpb|8#{@j{|qBt@>UW&R~m!!Vm#QDmVLto4f?^Aga zc=P7!>L=n%*RNj((pAhF1|oRZ*2eVf*RSC^`QiPER>_HpzE*9yG1!d+?JX=UboKV$ zH*F(W4P;FFBS@Cd$y*z~qc)FBPTopS=c8O$TA1ZjPY6^?!#d6^%@1Fl9MBZH{Fy?z zU}AC$$W_;BBZX|Bi$+En*LvicCEVzJX;_=IZA?reOdkk=nD_nuZB+Y2yd~=rjh(%{ zp|Nq?w>!Yw-nTaHTsqKuZ_nTNpem^9RN&R0bCQn1LQ(Fk=(O8nJh-xSm4Yb8yPntg zA2e`1vbBBTWX7o5w$)xX3ZgTUS1KkeM`sL&_hzRWKOAykM9nX|@#)lv{a&WPb_SpG zC5e)^zxa-IP;D*DKgPOc3kB#2KzK#T;uI5Mc&Ogc9*E?E7DUP&fN+R43jvc?t{gvi zj$S^T^Lm2PqXaH>@XaVm&s}Jc^ zhsh`{5fR(TVYY0|raEvoYO-8181%6=qdRj- zdZ>+0ymBgUpX2fajnK+0CtMZ_$UKAeYEY;$$PnWK%yTpwsHm=^*igDY$4FfU?$!7G zt71w^hsXcf$0~5mSeh$5o4+jo^D*6pd5$HQ8E&PmY?2`cFACLXncGiss2V0b%|-;|1deTyz|t4!Y)gQDGnr|wt#9Y zDVuhQ(VORp@V$#!_Im5RuDkl7AOVypM}$aApFVvNAo78*E%>fn*uIxpSs#C&@&AX} zN$ythX?dZY!+lV9W?9DLmtV*&y1HW1S@*$_6? z!$sIko@+)*CFsVX!r#CpVZ?(g(U45L{}` z0)Xl;v+wE4mpReIHo^bc#(9Qt7#wbU!pS6nd<8aB=5enV_d=i-!&$zLk-|&#m#?3l!!D z{vNCNjyWL{2M_V9KUTxK$?#nEpd5#cpjzUwC}hvh!Eqv9jldMMCZ%Wz7Vd}*mp(SKkC=_pFhL9yMAI)4KiQzE?%v*Y_?zte_FaSkKAb&> zu1R#5oX6lB8+IPtq^{n;lh+L3`TgCkn6t?dCgQGB(pcxtQO+e=CZ+&1V75btwxCnL zi#-+4_5J&G7Ey<%P^YWXQx_K(i2()pUfAs6=a>0z>H1=+uidX|1_JoN8Oy-Bb6We= zK~!$w(mlVpuU)ey20|`j@21rcuH)~#ZEV~Q(EIMq^;MGQJdip6EHJXN1_L$rID_v8 z)%H5SZEt6ZmydYovze)W;yl1Z>1cOl9oz(Z28OpyO*?XPbI&)Oe|h1=wu8F#KoeVN z%PJ~NwIveW4XvZRo6__G08qMTM!Wl3GWPmVvuvP!i&v`y<^gr;eZCY`g>~jgT=Y;b z{M{RoGW4cK-a3Z?8@#UMy1w!O=*PtCxVAr1jCfs^ZMmCQt=;qno4jjyIQV<1?!!0|+jISW{K6#B1Rvw@O7 z67#^1^S~e07D+eR@87>uyr4~YgEZ9sz9R9U@Ku-zxT>tY{JZO`*5RhDpwJ6l-hyAI zl9DP7-bLf?a?QnKk*~iod1vwbkm#Sz5`*903S1`5{nooo4}k@}x@wd=z$D@Js{X8; zoE$6X!1DbD+s`0Hbr4aAF9k$=_TUSZM@Kf7`fM&ObRH)GAkO-)T9|D71_C~8>P zI)HV!Vr%Oi5<+XmDWc8rXToisK!_UUO()$xUd|MuUQ z6Y5w6fOvKlv!n+z)Tiq>sKhmaN?+(UyA>z6>{7J*+QQjP7#A-A@NxC5IFJR7!xbn+ zFxOtX&pX5ygXf&Y!369;IrEi|e+LAIZM_lh7C>lAGoWk{b3)*gq)Ot91G@5DEq(*#DV(t?zT?0$#9_nB5y9Y0lE%3b4{^M~&uMz1 zT{Y=3+PRig>gwt(ZEZ&HZcXrf&xU!HH8fN@wmoA0s<$$W}0L;kN*-HO*xmb6268nZX*HYIGcYuikPr+ zDA^UTp|RXVh@iXy{Tr=0+R0fWZ(Sef-*m{VpXE|pu9e}13r{B_r>CZTpln#TzmE8o z!^YNIx8GPfilCy8sO*`s()T3=hMa2xL6G!NI|SydiA6D}P!t zc$Qfw%-(;RJ)D=SSFj^q;l2-chy4A6n{jm}oNue=*46xW{`~aB2poay*H_B6(YMQPv(fBE6ptO=oOhKc&4nh45RQ;x= zrprw!3@cZyT0sFz@srur5($-r=QB z-QM;VjOwXc5-|=bgnN;`xPSkCdM2i4*efjsj_H}{)t|a;@`@4@FGa?j(9_k;{HEeC z=YEIuJGfWq%%|&OPx0FiXvC*CWWNpPQYTkQ&&U{i`VQkmYTJ8{ryHPrsK%UJLy)=Z zv(wt8YUcXgs2DQ8n^HlMZvwb?p{S3Hj$Q{FM61QM+^}ooNq(TNrgq3>;&RK^uWzfX zH$jJ27-t|voKr=PI{bi^a@6C;J$27ys=Bd}s^-edq*v_5UCp%ZRi@gsDLj-z;WjV_ zRLuat_o&n+5Y93oHI9ys(o)dWu*&PGnYU2XkQg|heK~|jJ6jg*i|5|Gdt=xsw6qK` zIw^N?%4lh4JC~RCui3aG91K_X_;Ige$BxNDt`rbk3)6>7?{&7HAA}qkieFw{UZw;m zr!3Au8LSkDA?)aLTOo$#JB`NP^zo@e-&o_diA6*M_q+#9C)1`=V#RLs>QD%S882Vn zy~nG=Z4XYSHZeKLAtt7a4b4F@F7u-ejf&!dT#gX=UG3_zFc>b@*Wi-N1rY!xZ4Wq z!OG+0ke8WVxUd_@DFSAMJoeHWFLD9OQOEXBjA6Q0O~K@fz~=Jvdyi#41>*{G;%;EL z`%vcAQ)U;ZJ9B>Ycb1fpw+H6D#w(ENs50B$y<}0onCE;+)zKpN2pR|*TYaX9LS1w7 zeO8Z|6KB(Oxlkc?C@3i8I}YpnROX{Etk{i{xScix@Hap^_1-?E$T%}^G(&kTz#6Z< zfdTm>wfH!^-OQ`qr?HB(v>`C4ZbKa!bHmcEJdQ#ckvi>&jUXMb_Tgx!+g`M```9fC zdDiU$Zj$wh9LeL!znDw#Vj)L|OYz$YNiyTw^FIRk>Qg}6BPn+gq4>i7c8NZC-Srdnh*Y8XDo@2lce!g|b2Y2uBV_!IzqaT}(`@ zz1ylT_7?E*@%~_Fzq}M<)OPuYjEBu-;hRZI$9XOh@hh}ber`Q24Ec77tO^51qH;OI%3tzj(EftN5^TqHkHg# zj}4nPZDV0!Nz%>Fgmw9TqQ9ZMzFy5)@3OuO3Tw!!b=2<>HQ-BB58CYY0}x) zuz9vqwr<-NZv7Z#C>+rBcHDT6Y=`dMmAi50cRK%;TE?MWqgt0|LUJ%lJcMKU+{dhz!CQ zxSD+MF7cmPwGwm`wOq^dJ!~zg^J~0xU)#xjJ>786akxYC-XaW(mB&H*6L^?}uf;uh z^hg0dN#vr>ty@%-hsUnQ%8D3VKD@k)J9T4}mB!Q);=2XEK zsH!5%hJ`dc!LBJHtfXermG{+!Qu9#5d$ zU9oEId#KeMM~)m(5@VR8iEPgLm6QIxua9$bpfQZ>H?TPYad;C)Ee4HXV8y1Vr|0Mm zZ2SbmN{9CX=oLVkRC3zHR`#S$i@LhHi#9gVL(aeS=1pw?HO8MmdE99rx7lf=>pIw|Jm6IJ zr|%C3_lquipp=!pdv{W9$HzzPA!uA;o=alwwMTKpuwlaNjNX5mPeOd^qLmeINJvPP zLz2PH{+vtXx2mfZozt8jU;ZJ_cOq1^8W3=2ggghbMt8fqx;C|i5e$(2)5(t)m-VMD zPsJJF|B`kG5)iV7O^0q$(c#A^u=)tv!k^X-6DUq40QB(TQ;0D|+DDp@SO~IUn>KH* zi;-G~^85n}XI7OCR7yDnH1pu$LxMSo+I;)=JD7MB3Zeqi`PX_bSXrf7CNd<77p$db z_JfUt<9`8n-DzQlf9+<*31$0XvOxK(bP!)ei9>WLcz~oQ|O~)S=ftZ#2iLAi_CCV1bp9iD{LM zbFs*z2{GCV?I0+W|pT-$N5-dhBSlz&Y z6}PG!qQ=O`cPS#c2L%Ob+p@)(B4dQ5GXl6G=zD2t-bTo(bsNZxw4I$$VPWCZ^z>kK zmc5*u>-X&0^H90#$?JBZ;rzMD-v@r%+uO$^CqMc=HPKJ7cLB)x)3eE=)197)=M&GH z8X2uZ%#~ELV{S8ta05wx@LfX#S>3NgtQ`_IDCfHnFC-8erQuAGi@k1<%i;E8;$mXB zPj`R-@R}>2CP*irO(mCN_mNQ3!xl}_C`}|Qx{XVXz0JzV+M4?4(LCM$jSZ->EHJK9 zZBu`_O-u=|r@YWex&bb3=lfX!ycu}Y(8h)afX>8uAh#)M96T`0P!YxCxj~5pRP76p zFMzdHJe)Xc6J6Okg_K^lP3JCX2rY%qf)f)H9Tt-PNJmo>r@hSU=-_=M%Mcm6L~nCC z!?btN4zK^}_3K!G;IBaqAh!L%qr2R%4Lks^xE>?rdl6wL;yNRKIRXfCNpuGaSS$^1 zCDm4_GNf`jU#`%v2|_4vGc=?!K>RH%EO$`iOq}aTYV0^V!@c_t2a z_QLU-MM=v$Bbyxux={ei(fhK*J^@nh;ow+<+h1-|vgnguJjdN0SB8q4fecpa;y`~t zD6W)@%sOyXM7T~O2SM^zJUY3G2l&IcD@7&oJxGX)yCRY4w!5IW*|83n8zt&U4Lwiw z-Ys8WqlN?}PSx1eAT28>==-HO6tuW8SUW?Y*Kabj$dCnGBs5J^Cf3sfh4XG!2&7S#vQ@k?rss(jQ}Y_ z1=^@2OxbRLZzL&ifdl%OWEp`46Bjzes_jT>nUceF*!ku2I7m2n+u`k0WddEk!@ETo zcX-<+hfWnpA?vBAPT1K^h&D#+fYglQx4Usqon}V%tldQK1ry2S!5MaJQ=Bbv#`G8TFsF$=T7)&QV4G3%QzsEza+>Y~4aOvbfNQ%)iF!&P&+}^Hdp$8#019VZ$X@o*Tv>uC- zT0)jBTS)d6QJ*acDkD=!xNsHU)m*E#wGfR>GGFIyW5}h3z1N&23*Z$JK(zu3D|3;+B{4f%EX|UA{oPO_q0tiFez~Ji7_4SBGod)+ay;8)o3kR zJaLX|qb0RG^p+9xAe9z3<`fQScmc=lZCqo@i{7V^*b}iIxQTZai^+!d8#hWJ<&1BJ z8b;wRR{#|8n^x09W{5%IX1E7p&y5j->)7^E(p$D~k1%UrT3W(o%b*_~vgr`Rb~!FQ z^`)ctT&Ki3oZrpJD;)3r^qAlJ+p$8I$qk*J%i^SK5EacV*U`bD0%VN{MB%8FB;^D@ z(_?wjk;Kq|pWi}26co$F&yYwv;s~eU+{)kM@rT?U$F-A=&Kr3S*sg3y)RxX=W*UFk z3ZfH(NYX1PLNNC?qC6wCXq+GYXJQ_c3~vCZKc}1*L@{8!&u35p#80+P$$0ynukMnY zkqjZ)F=*cnxZK}yy3T=QyJmly7j~K8#67+Vtoa5aIL$6GFVyNLmRCfnb>`mRZ5w~I zqVU&M$Om?nf|JwJTKg0g<>W$eg8jq7!f*^xFN0sbdc{e%#=Jt1MbI=5aSk~shjH*@ zu8saU6NCIhI=5`)fYP3np|w#$*1pk|Nebk^wn$ELb0)^C=5`HWJQdY4(jCc z)G)8IsZ}~Iz3l#9M$#mWP3?(Te(WE>mk@~coOJIkjP00{Ob)M;yL|aM=cr%FdGoP`r{_zssXqMfGN^Y;8PWUM(K+|<%vM*g1Z*|nj1KbApL57h)f3nYavB5 z@gF&I58USi*kG1@RAjysvU!4*-r?cfh@v87{zaCDhbIm_Kn<1gp|EX2Q_EoOc4j({%!#2*{Ai{N#``NOV_7pYSs;Pw%g$;249+V+M)u17aL0DG|?yRX% zvM7G~MXk1f1W|hhC}w4?t=eSU5LZZ-y}#zfkDeY5lt;2*xHMmcr|9GUxfh%3dQw{=)madyd)lZGk)!{_OQuIyzNIGdP7^V3_$k_R^}FB2)ul z{T)GmRM21c$H;k}V7=eHC%3Ou0V7z@N?*FoUW0CHDtvP-Y*?BrMKm_j_DBNwl1!9#j`e1q@Teoi6w(TZ( zD|7QH>2TJfc1dDIz*I%)1s$&Ec12DZ5_s3b?0A0WFnTB(G{Xh~aIIJHw}Ym)@7fgv z()IJzE`)4ubi)3}M_(sy<);miniEysN?Yd{g!z@B&XQmVKt-yh0b&u~<=Hc%Clw0P(yZ%BB>$BVsVlifyi|;Q!D+VLj{y0cG2W>ehd9R6 zZUHdGg2y24_69?aBq@MWUHw?}sEQE>TWqlJ-*4;3v+5ISi1t=T9wyneD_5^xFDerE zSQwQ_6(FHBNFb_kf)QAJhMsFyF#;Q}4DnD^3`v2RKf|yfFvUl^PC#)fn93JmY5;4z ztF7fzdI*U43?WgxNfIT6iW;UMqbx0*)ZgE4h^PTk4USm0P$-zP6NY;Oz)vY;py_}; z4e9WTgM-ig`#Yh@ZJ>|=7ZBrMR7{daN7<)8Y`zT%gzPE09Xot*weRp{RJaQ8|GW4w z)P*GW09Xbos|`?GNH7&k$ z6QB5(HymyFEg0}~dCe@g6sdkq}nl1y#LM2|E%p5@tCSy(Q z?qpCCNS!#LqcfvMJm+3g!uBb>!?uYKfS^mTF#pA}^6T$AFWa}5Ba^thJPVyhBQ|Gi#L&J)|Hk!Bk4c#>`a2o{T88W*>>;bx7St#sVi~UHXii;Q7U~!#! zdExCQPpT9{FffwNKr&ihkC9YDz~B7OqNZFK_`(H^_1rg-G~aINgC%)Jv#46<^~QdS9U!1t+ZQOX7yC!k(0e4y@fWXNjoN6`y_A9@O)av z+2qR#rzE#&p5l#vuBMO@|2*}JHg8h!y;g}Ca|=10`Gc$Xd_?qPf3JYRSN3}jPlA6( z27K#%GGACLe(962;IQ!YqUZAcUskIq?7_7(c!B`s$&O$v>d?6HRG-MdvH)<#rHCvE zJ{9L`RNagm_6cz##TzA{m#G*rUv0m*u%H370TjbmH#s*un*`lz4uV3x2_#dw0Dpf~ zfYk8)D!X!^7u30cNSU|grb^8Iq^o%-Cy$k z-O8zz7Da{!ECjw`!7UI0pc>$XLkY%q263^ag>e=8{`yl0w5lTn#F7ihExnmlLf61; z^wvRx;uPq!+{ccc1MUeKT9miM@4NIqb_88w(<^e(M9F|AETTX)K0UFjXmP3y#rrI}JVG-G;Ft=bFo^(3 zIWRn>4G5Fl>h>AvI1T8ws=4`J>jbh8ws30X0l$$DPTb^Rn-)}W%z7q6ecuoEnfwW2 z%S?9Qa4ur^~o`ot?YmO_nZE^ z|NkZaPZw%-=k1`NCSc=eJNh?!Nmnl~FBk7W0iXilI+YR`SEE)jj1|_Ojs)T_W`g`_lY_gnw+$Wp{#X-h|xjk2?0$<8`6MG zi!oezuvX=1ds2*!JW|4NRTEkO9nbLR7;noXk8lL*-P?nq0pGk9z51W=3r3Y8 zK3-RQLUM5;3@t1hvXR}Lo~uq@dKoDy>Fa7~5Y*E^4rmg#uvq`+iDm;&@d;bJF6X0~ zd%MltF+%dy@(6s&11xL{%b~Yz0fg{osB1T)!D=C2*1#LIjgSgXA@Hp4=B+Zh>O zpuCzxEIb>_h9E>$*#2NRu~F1@B0F~OOoY(Kg;;?INIdFxB1A?G?N0h<2;WIe%++Vr z?#hPBW)C`!*V6?2jSzLT#%n2{A2gw4O&|}Xb?{)nr@A^eS4A*uIwnf0x#yv5=Kvts z8SLDZD(X0Nj0e~#Iihb4)79Cq5hnZUq|gaM*nb;{>64lRk2TIUT@UIH>RC8mqiCwt zLPexd8mgiaU(rM;dq1(QkxNVfsO~3O;F{nl!G=EvUH z)~avgRKnP=R-Vl=NLZ zE8qn}qS_y!Nxx8hC?Fonw~K=d0UYFa>({ZmJw+@?J`@q0{RmnWN6p{I12=Ms7$`S3 zGV=M|t&N%`9`1*&S|{Xue|^E${8QZb0tPD??#T%(Y$)*8qYwCpR7J10<2AQ)f zf~VMDT#U9!PP6%!=OM4{`hUDszWCv-=L;G8v=t+@T|GVV2(IaPI`(}&K|smn%YAeT zcNf%s4lE>=kz&7~E;ezr{;2i0Gq`qf&^&gT^sYu!Y_=ls$KwZMK26zcx3XMZT zq3_Poj=Su@2g)cko=dZdu&LP})tHvsg02+J4;7HJfj6X4;9$if=Ja{s{)_~k6Z9Oz zQ9lOOQ8}M!tQx|0YTJ$-zh2h<@J)Cq?wX7D#_s6oX#c0B?)G=o3{3#P z@WU2o*Q{R63DAYNdg;a>o?7!7mG&9jzg7+z_9UDP`vmLZJqED z8nH)vsvnXPt`2Nzhqxqr9-pvW(di0$B@C7V0jmL^O;jC7?}JG~H8;OBJ%|+8m)KJq z$>jsDX`rO0F7|r#k80y!H4UWWw)a7TqiLtXP9qrl=g?3Zq&9QBNYd@Y*yRX)p8=Tr zIXs*WQTKc)o5_dJQ}{FL0I!+uLyCd?w{PE8!wm*EYCQ36E4re&VBBI0Cu#zmAyC3 z!W~p5XAMiQiAUoQKnulaY;;r=dBMX7T@=_8yU1ng>!ltn6#9TUoTaAM*z6=dcuHED z{1K?uA1Xq2kbR8d_%!Ua50#ZNShK8Fr9Vzl8c{R{@&^?LUY`pk7E96GKyp>&;bhX+ z5N7P{latPSsZAC9CCPi#a;IHB3CV-jxT8NcrXYj=`ToF-5cWI`cYCwwRyAVxpNO7 z0&LChd~I)`gp?$b+jRf}WSU+Fd^CrtUb&=ZB=ew{jfx~jch{Ovf%R5FqW+KW#f z@SM+lPyY;B$Ysd8x9^ZpM(Uq^k5!ad<<&59+lZkHa&0K2FhawOv%Y>Q@myYQubx@L z(XDNp)PmG z$d6;EyB0`FGup&SdT)HTEXSh#~rxj3_7+ ztH+R#($J{QvArWDJw3>QCh=61Jh=P^@bVZae;_f_waOw|c}P60$$i?8tTo7J1A^t` zu}$vi3RO?U3rb_s)!343OHtvHNlY^o6gLHrF0i$kZHdlJ5>`cX@LFc`XYDL8%Zf$-6;Dg zaqw^O%oJ3;=dg*?Hl+KKQ$*xKAX5>Kg;#KaQgCu{e3ZD6o(77&wD|Jk!px}4c+FAG z{A(se93WZ&xFWFPGwdNw9v(%~;Cy|3aVxSxGPhNZK1Geg1ddTt_ghw3BoN3G80t`b zg%AqZjEpsIgeI00i0M(^=&__@EW)l+DSFHZ;}P7Z_xNWnU()X%2rE4Y93o(l2oq$v zkjTigSXR})MEG8Rg;?D3(saq`PzK0ur9Jp{!B9o`i-G(VkUqa+MyLhjLE83+ubN-` zRc(fMU>bqNY>^d!P-5R=jeVwsbAN}w0#mkMWd-nx+4qiGG*uhdL^jeJRb!XlVQ(n$ z^ei|6HTVL2?`qGb@o4G1bkLA}aP`g>5=A1!7-02MBN9*iq1CvF)d)8PvX6iFW!=|D zjFV&<1eQ~KMr#@Hq^44Ocv6?yA7Z~e!ku`4m#D^hSXn?(;<_VMl!}bk52Ll8s$F|LpYUFdPw* z<-5!x1OLpJ{UOd^{A(ISf=t;TB3ovQwiC8TYOSF0`z>L-I!DIwupcI)K&1192pq9n zoF2CMFj?-6h_O|k3VUA3aA!%UtN_HBm-o`qLS+Rcp;Odk0&i4_n;J_-bhiRPYO6$YD6*XRCj(5x|mz6|}2w zvI1Z@{1x;KD3oD*1`^~>b?G)B$sV>>hT0Zx{O?()Wl0^>6qOQ)Zo*GvoSPpAQPs=t(9l0rR5&@~D|(QMd+v5B?sGqsJodB6PwXSETpa?gQhE zefkS53fTOip-y*zDedrx3#?+bwgI{+s-#6;t;9?*ekWVsrJsZFUxItlrIAj1v3fLq zGAD32eVy+KS9-W4gohJWW7S^bSu**t{!2w9fOvlg--Vto@$mZT@{-3mkmL^)P1GyA zfKh@$2V#bqLDp2;&>?8n?$|v$Hzz+`bo2*+k1_(`IUNT^QTUeopvHaHGH~aR17cK- zbyV2bYxrq%l1bLrl;!!EnRD}o3;dYV_&ksZ)#NuKaYXagW5QoK3(9{Orjq#dH(Ov! z#PCYh8b5hg=0bSowCN~}1o43HABQD;fy5J3N~s%G$6O`|R5q!hi+7z@G0!8d3@b8O zN+U_$$r)@Q5?yp(7_9`FvVD>68(y7b1pyfu-dF^8v_E2IB?Zt-;zRdHY1tk*JWeM9 zXWUdAyWK2r0Yl8tI~+#KqW2<8eDCMzvBPMPmOCo}rvCWkD}9*au-9|Lj6(jaSI;3v zP&Y3>{|BdT1v)1xHD*`xiWLK=Q40FKX(aBZr`yDq>dC3WD6zxSHvy23=@w(W#2vc} zs!s}Ta5hdTdl=UTk|8I<6%an%CmXez%AGKYLG~9Rb10F7>H{MWzT9l27~94s2h^Hb z^{%wk9#vvHBC?Gc2m|O~N<;%ekL^2ln2Hl&0O1?7|4v3nC$z*QYsn%!3dRgUsMmNk zBG>@%pEvO6NJkUA2G0(^YL7|Y0uypPAj5LV!GqHPy8$YSLB$XdF5X(~UO?^~y3|)*?07!VICe7xkDCfNqmE(NE92225qvc;G~8@mxJ6E$FBbj(Ci~r5n$jf9Rs*iH)zJE0g9uMTa6)F08$MkcA<}9s=zF+;{z#B-?-z>(zrh@v2J?WgRE)_gLC)rfp8s^Tfk;Dz&7SgZY-#~qR; zkD>t|P05_$`@YLzk@7?z&vqeN2tZx}k={i_T18Y6rd&9MiA;%7-hLJNQEj5$TwyL= zrk{U#m86GJ4zhQ_Xvo&lhri8Wlh4os0BKcg9cZJ5we~iKVp%y zZ5lecZ~~8UYQ#R&g#JLJeo|M!xb8je0P3_uY85-;4D4y@-ep;TjLs0|&xr9H``&<( zk`f$S4$xj8y?%5q=s2NEbHDitdR<&y6{hz&x%J22|MEifKtT_LH&u)$2%$EhM!^}8Rky0d5 z1o!#OILHx609OZ4romBE&g3EU9Ekxrg3(d!lHiq8Jr>PFOf3n_Y5*Fk2IxhcD_w0g ziXM7v9ZcE=-VO}MBm>HT;K*g_Yft6j*?x}^R6}?9AML#fSk8Of{(GC2amhR+QSPGl`#?`DM=+!GGtZzbG6ppIW#IVnI?Vymvfc`V3|j|DAUURAlGZSQF| z(ilZ+*;7cL`o+R;aO)z;1*M>yT*a-80`W)<9`122=CJ^3XkUxyaC!=Yb3*E0SkeP@ zYE=}MG!#@C!qWTYrA0lRe91|QKKGxZ?3f1rH(v@zkHdqOCB6O9T|>whlJtxiM@M$> zQx3I@zQ-_wQ_3${7nBuGfR6Cu8a(N^rIDb)%R2#7M3eN-#|7b8XN{}h)1D(W)Hwd;j!uIr z47{iBq>`b>IR*rw6L(0qs?OuQLJ*#dbMGrpLf?h|TcoTgKyV8xA(JPSb%s_EypFMe z7E&O|39-w5%@@u}g5UsbmyH>Cz%lP)rbA!Uxk&@}Z&F81-#F>*BKolVB<<(9 z>?fI0Ch@QaZhV5?T`fiV`*#r4NbW)s&IR&rP`oeh8_oK3f28;<`uCio>ra+oP4#fz zqo#V)uWmz!lBvR&PIz>TYF|@J>+Z~8T&uFi?D>hD`W`WD9MzZ~sUOA^yMD5){SR-t z{pQV^#o4|P5gkq6vvIT!Y036^O9AI@kcY8oInkz6aDb2lQkmT8`^L|%LpvP^GZq<0Ycs*k!W?V=dP#Ki$D3rc5T&a7SGw2tBw-Xc71{x zM6m(8r5`k8QbtAwqQhG_Up^*~baWc$;}G`Z{Jev$G|W1%FvWtaFL6qGQM{`b`Su~j zHUJ{h2W9L>SdZipHBa6;VP__q+B=a5xaEtYTz`bE?C_^5>Pa2S;e3NYgz`RpT3lA} za0w9A0#2FlmS>Z8iehW=$#HuMU&nnPc}=g{PsOiKFciHMpbHmo3$M-0y0&TE+Ntp6 z%{l+l0w5?A!=?q(?d|=DyWosFX;nN^bh~R`2!+%=#tb0~^VvmqjQmxBhRxP5b5H zS~Acl?`F0CY!QZ^y!TjTCj3QT3NQn*TurjMxe^&v)U;ny!wer=J`hkb)5HL5N?$Xm zxck^;yOw`=bn}2mN(U!-2elO1HSXygB;ILTg>Q9Pv7-OOVc!o;y}CTgz8RHdA7mPu z^xZ`gwo{V69Q`rK1i{RrDeF0e;s%-c_IVGS8wtoHw;K_3B7)5qv@@pcZ=ZVNcjgr*J7#RYMXzK$+JOEeKWsw_*$H4 zLALUQFhkYzzDMWgpH0pt)MID!bHjgkWcN$yBTY=Ux)wY*U2tUW1e9D)0kbC2@^rmd zQbMa=$SrDrhIT$O-}80{HL6i}q^OlB>GI(+DC6gYuUHuL%Go``L+CYrHXKW~{^NGL zzyH9;guO2d|K}t5Z>wMZ&&W|1boK8h4~*~|IQuXg>NwBC*#WPQ%U{7~i%9aE7dKTL zniy>8PR^0qqw^MPu+$9BzR!P?z6!;UWD{%8cc(9B?-AP6g{Zi^>2hGV!PJs_R^YRJ zvR1n9kVy@9k-c&!DJe3xw_@oSsy`c4LVH$7-VY;YXoR861v%Z&L67Y))0nbIh$(2z z)92tAqkyR_`bF>Mjn4qa{k)s$|GfA&h4$MIgwvE7@b58a)Do}zi7zIc93gS)00u3SY)h} zr&hOp!YV(7tgh?h~hp2--S2MQ4-B3DhS939hKP zn5sE$|52EL(rrl<7fe5{sJCIS+voB`V$Y;=vrRKFbmq`IUqs!fSve?-L#Xy_bSDVl zo0`z-R9c5H^8JB-O+SajvYTd$#Zt!x3*Mk)1kxs zDNL6*Ws`ikm1uj2^8NAgMglPC)DyCT!)WYe%K(`5;~~Swo3hty+3=?|5M?XM-kEX< zjsn|~QAY69oM}yITx58qHz%(Z_q&4Y6W+@#<5KM%3iEYdggednHT-Jue6~wnSrk0< zLQb2Dso;1=1po!^w&-{1T?Z$SZIK}Cnx(XUJ-xa+1+!*-$y*9Ct6|D>(XKr7wxHmc zP#UYTMoSYf=_xDNs^vPc`Mj9*Rbs3iy*$JaUy>VuH zBC0-suyOq^?M*s-NY=8H$CBSj-9Q#&3Axew=`tv~>+61=O2Cb9DkQ26`NtFz;}sZ; z&LIX*I|3tpay?av!@4h{MOj3WW=+>%NoC^WOVX0yQB!ppsZWG(=xc@uuhOINENWWp zKKw}i>4LU|^xON#5(oFPlpZTr00f-|G!d{-SPS8xXEfhMqI<3U!4OtY01Xx5+Dbaz zBlZ&nzp$smB=VvCsT}IBzPUa73c299lxNu ziXMk~fBW>hC##!mv5+MQ`*)qhP*aH0V_^i*AZ@g0XbmgB*H@@3 za*`9kQMN1ce$C>sxxMvjzjxT$m2q*?46A=Q<)`?MC7Z()X**S@^X1dr+KJ$X#C#1< z9~1|Pi#zP2;64GDLCfhuLSh6#L+CBj>x&h;x_~EkaqEx>__z@0P|8mGpH#w9`>@ec zqSt}e5U8exj$Bsp>9rkc-&07Zt~y7)>bqAizxE}mlPJBUIRy`JgF6pdn=)-9LiBb# zwv=ZyRflr??EPTrpk$V|umQVg==d&K>Ln0ClC=vtDU_2CIj=j!OTBZ&C9k&d8{|5w zqrq%Tc3;U$+DH#e-VMKH4|g&VM0FCXZ618$+rd<23%xdPp8rqb9690e31OVjgiJon zP1S}@rjsv|g7O0V2i#mv%Ww4+1HIA0ieiC2>%gxRX7d@1^2}v8g$sDjQ`8(Wh=WFt z9xY*)K?a9~QY_52Ed*}hLGH_VPqKRvPZ^*WVYh_Oq5RT(ZQe_oY=mF~r56b!I<=Pz zM3Nyph_b#UHy#0?TqeC%wsVlaXHu9+=d7ujK{QQ#b|3}Qt}G1^2!Ka(k}CSyBQ?5G zPav6CaPb;tl2kx>*Wd=t<#q_hvDPtFC|MzFAY0|g;QVmr?yYor2%&uqHKt~}755e}6U}cXk17Nx zW_u7*P_XK`TmLW<)QBAsVpw)p04o zUd+Yt>s0+Oc`MO3y2JcDTO+(bFqb?it5;~>1C{&D-<7*2OrRV5tat`J5RWVfvT~tF5PfAQotc;`h zcu#F}{$y)l&m$hyYx=?&Ir;XX5A^h!_d)aEc1X>G=+oNI?t4CL9z}>I#k!`h?gRM? zI*ksHs6EdRDq;6*PWPZ9L)^b>@~Sx`Kc<32%v$wI>G$9Ja~T$&Uvc$nDU^bVI&m&} zTXxR|Tq`L;Ape*y%>CpQ`)QtXI{)Gxse^UfV(=Dc0>YnDo?$817k7o(c}SrVc+j(%6fNV(L@3Kh3J+Qs{=B`sH2XEo68GpH>v+lExvS76??Fpf zmXH%X1;I&=)C2;y zb*nhR1ruM(sY$06OAY`-HvRfK7&3N*g~2m8ByQTZwVBa?quaK1X=tsy%2f!2oYfqi zOZvLLyIX&b9Of4e(*PscQb#9Waa!6v8@xUD%;LXDfgRVM&D!_Nu_uLd7C5?8L8{UQ6xr4(VgUfY(+5)dK~$lR2wYzkaO$(F7zJoVAQAWuAMemPc@ zQh&bSFDn3jHGkaM-)9VY%GGs0&w-PkFeu1{ssqlnqemD9gg%I6y=w-oBZVicRCmp<w_W!ncUx-IH5x@?fH?gWsL$yq`- zR(>lv$zmiyvLK>A>$D_3r2EJ%1J_j(^=A8$#rmB(2g`VZ3Rc_fTPLSI)4Oz?f~ft% zisH#gA5mghQ1_GJWDw@R(&kjeW4Tb&9yLMDcXaqC)|)J@O1ZPP1|Rup7cAvBxg-&e z3N8eFAg9dw5x_h{2S)t>p31nq#F6j1mTKcnD*WoMqK6%MsUV#4nIZ%MC}>;+C@Zm6 zj*>*vhk3lY2>`iyMrGFlpMFWgi0)$Pz+`Le^l&OX#j;V)dO!_(kpl)p_VKIF ziq8!Tc-kCt)Ri$A)RZwGMDv0A-PmB(@#DGSH=Yzl{TTECe#7SMtkHtuUHu-C@_2O3 zCdZE*oJ0iQpg{wTM(mJxu=!y{4M(7qjR73t;gR)Z^?GIOSpZF{xHs6|D5RCxBux1Fw=MV#Y2(wj8JI) z{r<>ve3jy~ONb1LsW6^#nw~DVMOcf8-_H68Lnr6~XNz{-ekxrwQp=HL*v$cp68R4k z;X;Z3^NIf8(qGlKHCBk}8MLU)c;h4cxiQD-NkLw-3%tm0RIxMm$40)JzjP{TkJVEPPRycbr)%ZL^loX|)euOYiCUdrX!T-A{uaExdJ!4R z;Xe<`-5qZ9Uv6&r5J0juB>n^DX|Z^qhQJV3(Q_q9AwXj!l*N!gR}nx3HJ7;&_Se@< z6)uN%-~N4~LB7fNDiCi1B#pjGR7Uc3LYS5)3xy&j4gHA_G=kp}YtHTIO4tijcdx1X zF47!PrWF7?71vak*0kx^F^YmG3e^I>x#7gKa7jG@ZNZceij0pfD5>@{%gLaw84F{s zMb@@Fh$>SAi$$+u&u3I)fB|mXzpb9btC{giNt2F_s3VJ(3^s!tQ@Z+``E$|hxXZwx zP8tqUN7Fn$RgT8>%`B0$j1MvxEv#!r(*jxxWH+$#AAuRHpmkBOWzqBn*1rR2C&Yvx z-|cm$TQZRjmkGFuS>q?aqS-~Z3(SKk%TY72rk1>(SX;p>^`vpt4Qqx9qGS;_c=8%J ztI*)S;6;b$uNCG$+x@#e%x?e3gNZCpU=2kn*?=3x?#To@hz9C82|oXVjB zB^ALne~l&JOaTD-_+Z<%jsuq-l~oOi5pjhF3hFb7rGyr8ALm43@}`92?ohI5RG^$$EG|2YM$rrUoz;a zxPNGnHIVLPqz)pGgv!(XeOO(E$u{b>B2MIIa`LrzTsIM+X8JX~oEj+KoR z>kEwwFO{E{7sfH^*jjU(lmHQHog)80#0XG(2@khP%$Fbqc1HQMCmdn^d}P|9yHyv! zy$E!YJU4u8`8xPCjmIt-t+y|vI1o)6xnvKlDP*T|`b?pyJ5})h?rv$_Os5!MpfO%J zYss$5ci!%Vo}~XPU+$EM{78;b8}_*GF5DRYXWFFBC<&f5)r&vM=M=&fpQ#LCeF|a$ z?5YRs@6IZDdBr8HqJiD4m`;lD(P-n^wrv|h+_RlSv)H(=%aRC)t!OHXFw?%;T4v2u z0!4^qjmTXXTX4i0?D!prB_&Lc{m1kpSShbNJxe2aQlYtAiMKsFOUEJp3XIk1bJS;A z-MWoHjw?E2QtwEq_G+rDnzyc&;)81b$eQ;Zg}dRKr&DU2q>n0c{x3P)@odLalXiRmHfoLYFU9CewXj4u)K4Ib5uUzFu#f1rnR zLq$&Tdobup#Fzk;K1uWOtW~Dj)4%!ebkek=N5aFSW>nzA1O3e*8`qucBMI39U)pGH zM3Dhb#q8@5dEzOEsmx+3can?3)_(kM={{5qaX&}OM-83Y?5vcNwLga@)PC$gfBJFk zzgy=`&RJ350`Gk6LM1NDk3_SR+0g2(pT^akrLjKF4ZZue=w(DcbO3DIDV}qrQ0M0G zsvgL)@*f7*a%sQU;`E{x(XOwdHGAzg-|AJLUOkpJ z5SjxfL(rt|R`V99;2%9it@2wv?lsTYY~@;R%7$Yd|876pIUeLss_SC0z6t0x)e2@o zCN7Hr$L5K@m$f-sUH?8KY#pCx4rcL6PG(;b+z}G!7D!= zNAfzKxIGvt9_Y+T`q<}#6No;=#k+%!v*Y72ltM1+xDfrT%_DWu8D?nWtwpOq}?Z=epcoaTdcYD z9F;RyeK+MpgnE|OiJ)AriGck4&RgX8M14(VJF~nAdQq?UVX!A{eG-WAPK{V=8YyuR zx_|JRvhY6#*m;J7CtH))b}han%Xz2rs@f*6)wy6S&?)7X4@KMnM0=7$FDrmn>SH3-1cL{<_S(z?^4$LPEK#KB#4Fc2~^j zalB5*_!co>@mStj4L;F(CvO|E#!fmSxmJ>bWtAVocG{pCmtuNJ{Fg1f(*K05AdVge z?`yl{K0gOO$y^-03#{oliax>m?1v$Ep(@IXzL%N#$K#c0d$nu7Ah-~F<$xTgEI;+* zfdFc;SFaY4c&uz3)KF-5nq^G%hfZ;|>U3F+V_3vuiF3#R&sGQTTO@)oE__~FIFLcNo-`$Gy&IzkjfOWbYJA|<5AWHV2w zn%UY4Z^yE@f9LEoJ;U!+iL^3sgh`b5wycSr@KkZR(hH>fS@cgTtdiD{N}blYxfP}9C5&5UheXa2Nf)eGcR}v9Jrgf?(J6C^4W4eu zz)=*U&nC%l4D9=tbag*%Vv`Psc>;P9d1wh4B>E`6qAwQ+KPCtvKdYiu(c7bN}c1a0mfu5Dxm z{{{e1yc?->+bWNbuh&fXE6f{SooN~|Va1LI$HP@O2kCEXwrBtB-g^)0zqtG{%U5|* zpQ)XG3%)s|?QZusf%=2@&DGzZWV_(DZD_0B>FcYie-u`)ykM7f@2i_(mnxU&Usq#F z4DB=BAFTLPe8R3hdHwplesp-s#1cuBADzXK`R;53F(&fbL8q&-K~OVziXSMipesyi<-8r8O8vUj@6x*w%7E3ZwH1^}MJmrvYU-PWLQ z-?PA%QA+*#^x25_%hLrbVxRcz+&R|G?dsR7GZMb7LM%8MkT*>wA--zWMCAUK2uv_( zodvP6Bw+GH%o)1-r|2V-`(tp8{nIb@_{BBA_b4Kh-`Zpx0zT3(d*OA^WzTV%o1&w2 zv9!r{ez~N~(4)#DzjQ%Eiq=q%tC!b%;wVxdB2fJ4c-{;h&?jT~^YzsVzx39|dyCUT z{>U#W!E!L}`+;O$(1*X32`rTGw_y2x#{pWr9605AFB^>M1t#{|%l`89ZRR%s3n{M_ zbrna$!ZrcL2veF}V^vS$NFwH$E z$-gnQN@p4sY@?6qrw-BnVo`RfYT<$fI_XcIJifSa3MJ*c!vQ@V8BTy;^9-pca5=MUYi2Y7@H4Jop*NB_Pti^ZV56m<5 zsdW4~LK&uq+? z-}rk7fXTD$8g&PTOa75a9pOW6Yh+=egc~SMM*it*pM28{t?|xFtg)V$)KK2uIlVrq^k{I08M9`2 zg7dWE$woLRDHw4+it>LVPfHA)h2`Cs(-;>=C`=YPla$M$n0ixj#di`?S zWL^$<>Je!3#uGH1kvPrb57_SE5i$GJGWCbezN>FDo@hh!jUe9jS^mMYL&uKY)zwE0 zKC*v*qo8rWfo^DvnJ7>72R+#4r<~l}22*9I4vR%;&~Vh~(WZrrIKPP(4v%LO3*O7C z0bw>g|MolAL41GB41^s`xWAhi$-#djh%7~6o|B=ZB*ci~2CWK2;4|y1+*F3Swc$XK z0Rm;coqK7e&D)tt4%v|gMA=4EK3Hga0f`0>dLlqa|04j)0J7XBrczUu1rQ8a8yNEl8EX}RDC=1gNrW0T&11xH3i+)PZY zM`=#Gvz7!3kLq=I^Ih=?li}DnA7Wkl9B3nCD8DQ-&_{5+Ai*Q){mQ{i4-MSH+r;ip zDxEvKpx&1)n)e*odH2DC+sWq>A3bXE?b|o8lcIkpVj$ar-mMP9*AE4%!A5!~mzvAv z&u8E|qfPPuVxciHUZ&14)~pSi1w%DMxiUIRv6+$)JNZ{!wa)e?t=%BjT(s#wzu?@O zV>%}{w`|No3v@Cqu*Q0x;4z%?$@9X6eysYyLBUjye}M^0NTdNb;xq7^YPW6*Br3N# zIvyeYE3|dVOgPHxWbhFX+?Wv~6zE{Q2x2qoq7j?r3(afd7Ay(%*^*Z;xuHVF1EJ>F z43HVNn;!a6D}w ziox9m4eH2AVZ>9WC?lt8Cbm(E&mc&qr8nWcW}%0X+XOrdSG|$8%30I_$}1r3>v1zt z&3K20tK)#v4joq_If>jc6}s4`mzdj3B!TNbWJo6pP%GPN!?q1-%6^rcI@Jrudio>U zGAcBgc;iU{S5JZShCZ#3IT>X}3ocG`a-9Ro(Wp_Q8=N^Drlb)?Fqt|*f#-Y$} zla6-*d%TU3_%V%D;vdG%|AEfAb`!VF^az~%#*?k*2|1;R(cGA^pg&w~>QKV~n?Dp{ zYmV9juYm>x_| zJ;HKL+TeD3zrM&@0Tm)X=Cq15(bLn*$@ukk#hr+$>BDXmbI$BOe7Lv$L+%?1Qd_7n zZ$H2BQ8hh(f~{;sq83V0K<7!<87ypsTdEow5w{;M6IZPox7^;OO(PUqU;m)Q-5nI9 zjk;V%v6Yo)R)BSzrJ@BHK`uyT-3>obf=1+#jnv)1={GCnFVdOq_hND!0oZrXK`0U} zL#`t-3At^}BF;U(N_E>L!b*FOzkkFTXvoGymoGTNMIFk{&epi}m~(hE#XC-TCukK7 z%@x=BZemvsMXwP`{ktRa27imj*(8+G4I z>}jjG&0&3;sMbIsn&Vkns(N}Bc-L-+ms8%$prpjOu{Ivsn28)?0W$@Nlucm81D6VK76CJp5qtV&Skemv==Ut2&6}oq5 z(W2X(RZEw)V8YRy1xr+Qd}RxMIid8h)Vy4DIUE7o2-B*?Q$M>k18l*Wa66mW2du@! zr7Q;XwJ`D18Z~X&f#os-$e5-gnZbh4&|&_|MZj~_}tycv^# z<%{RejXZ9BYzH3Dv15M0$4~Johrev3Fg`umeCB9B^HDaoJm!$~y=tzX%>gTS++DB} zR75Dbt9tb1UQ~2L9H)9Gr6ys#nOQ62Mg+*7d(9#kw zTlnYD$~aGlt_vMX6Vj~Sc(U6y6^#gr+NUmjiMnt#zc~9^9Ep{xp`k-~WTcNg7sV{d zE8|ApN%foLANJ^t8;Z|qr|RbppDUAZ-{!ADC5+oV-tp7@6W`veg>iU9MBBA`-8Q!% zp48nyk>cB;LAE0RgMThO^e9COy7#r7*ji>k?DF&bKmfK@WP_^x`%jWC8F|zsfPa{k zSFGLOnYU{4yn|8yE ztkCTqGIUp_Yhw&&cnDR39A8(jUd80JfdY%yF3iDs^yJA%$$T)nq9V-$$5U)z>j(C< z03;J{wmiL>%%eZ~X7v~fMx0N)d9w}^Me<+1`p%2bT)gOI9J1>cin@*L+E)o4j!mp} z0yHASsB_qd;?@dNcZY0wCMg$twra%b%7^n9;uP`yde*@Y2|lc7?@;giEG;9a?aGB^@W> z$KBJ&)zyIPUh>tbKe^)~8VkAFCVn4?`o?|x+QHIRJS#D^dAtq@#3L9g+kFqn&sYvp zSB5*ra>8^{oPpEg{9qd?5dbz$JB^SpI%$}l3puw!@&uY%w70O0@MFgkxlbG!>1Cdyht-+b<)_nHzHj&$qQQ;Zx5JUDgmlaW!3$2Tp08Y#qg9Xk`E!CTa!;*k%Y zZ5P=uZJCmkqNvSsIIF}?pW0H1+LOUy7soByFvTKAQ(gTiwZC$395`aLy`R_YkV+{b z=X4JfT>Bp*FqPv~p2*6T17yu9j@w<eg+u)_|SFeCfq989zSYmdt~q%)gbIdSYC@j8G## z>URt5fbt@|(?h~nF8M20H3G*+Dyr?{PR^KGo&{Ov5%98K-@dI$Gv?^pnHCnrv@Qj` zcX@s8{CS30*nXJ4Xwf1vsteCA9A+#aShXw`$hX_nQ~C%?T??!y&$(7Tr^4{%!Q-kq zKP=;Y3=G?hK0P_{?%hTdg}p1>Y^P0|1z^I3j%Kn6nBPuhA9WOz-`i-rp$zQ^zmP;h z7p^fy@=^wE^$vT^0GC&BtCYkaQ!FZ}VYC9wsPkp2iPd^exhu%WlDcTboWFEw47^9s zzIAG<44~rpmL;@m~9Lm3~zP@|E zrRo$`CmbLAerIxnU$036v76ufyma4e8Xb7PH#kgM5cNo^1E%fp%wFD0YXWB`IbP0( z562&`2mIL_9lbcHM^LJp(yk@gjonR44 z?elBsSWb?wjz_C>Tc5{bAGgReAQa*>i$}@`C=z|VQ*cE+iZE&*Lv&#_Hc$Xa9fv(` z68Q9PfB#Ky<@4iG$N$s<(<+Uy?!J6p<#BLs@cY0|Nu5-2bl7 znqrtgDZN5(=c?D)quRDi_O3am>ZhdmjBem&a&kkII&?K_@g=;0g-jjK1S}uMmT~#@ zZ4tdDO2&C=9c5CL(Ew&|PzmJu%G4w2;L*m%nF(LeA&P1ZMm zUWV2>StiU9bWl5XCWB-h_v#li@ujWxnVOYLmug+S9-+Nxoz8Y7^Vl~#K@cii++_n| z*U*j15ZrDwQmZrcObh$~Gy-kzmF{+J2Y2totJuD5jfU}V>C53KEp-CYHFKAc0JH@> z9m9x*Xvc(TmtG!ye{p_>f$`C|@n~Rmq?3^gUu_fBNVBenD$Ev8PDY7vh61V8AFK3^ zUm#x~Pm?hrlr_d26k?7$(BWl`4_GBd1&!6s$jz?A#xigwkMKwl+F`(-wr7J2h^d44~0U#cQ@Sx5JPG5MeT zQ?69CZ{PEl!vL@3#iP;JjD|-Y1*LnTq3MJPI|RP=x_0dv172I{1eoC`Z^lU*s2v>o zY?FJk%7yr9N%nGuW`Q!Carx93!kmrT$32{|D0sg!F~iF@Cq|= zZ#{i#LtCZUqDe0+24ZDHLeY`~qHSemWhnSnE_oNT=uDYiWG|Bh}>0f(vErY_t>-6c4g58Ed zs{Kz7JIH0`%#1Buv8FO56rXoVt;qmY0eA0EaQ6Qe(=*N1+NQ>SntM~71xl?Zf;mll zO<$B;FFNl4u>p$NgG+w)_&7@=wr#{H3dsU$pU%wgbpIW8J{* zQtrK6J94i;l43YsDx~nkM=7PixF3 zmYi8xGEERbY|DEJf_0We$H4uFcve^b;lHhHs6VFcqin{oT}{l*6Uk|Xt6;Z1p)~X2 zypf4We2<@x?sS*m$y|NR{7(U=_<8&$k0=jL)Pwj+>w?pS9b!)(@WgIOy1c9WcqGUa z9=;BSTffm7^f^Sv)sOlblc@2Z=NBBm^|rOTy#Ajbo3~3nH_NX7=SN3n!me8D``Qm~ zIngVzaVsw8Uq2_74m2|U*YEPrw#|E({OecwC+}V#6Y+olOd5Eon|zypenOjg|2O^c zH3hBJgMxx&&QBK%*rWX;4PU~CV~UC@^m?f(I`Yx*@HXRei^rf?4R{bNmKdLE`R^> zX#Z*p3>I$6iyx$?-M@cFMgnxdJ;c0xJfCWF7Q6orWMBGy`zF#}C-sGtV_a?5tMf~r z#(hjYf9~8;yfEIqe{VLEJZ}upvLJvI1h<$_&PTiT_=$slBkb-$UDJcFUpJ&1WGfJU z9{*EzsbONYt*veR`SqoY4&Zci+2+ClvICua!U_iⅆqV^Y6>Qa{F1s0icn<%|A!B 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 ghF2XxE0z|Wh$xKGpHfSRJH0_ZVFXJ((YQG zu~eUmIF&^;<6Hd9={I;D5bKEeL{2Yj8y0Ye-xSBO3UpzujzaMYQlEH1pkwyPkHpI3 zdwx%0i8v-RpiF@Gm-ww?=a~R@2+hn9Zp0_N^m7I*3Rra`!{ncZ&Azj+%NK{$0#*a- z*D#-0<0bXuy$WgAh14spXRzBb=r7HO!o8p^6$ltS5bWzQld7U#&OUFafhfeC&~#8$ zD;3>wV31GwK6PVqgHr-AqkbS1&kigiw~%5wxz&7qC4>Y2v6Q5~?#zI9b^kwz@5)R8ruxBOx4R4?UJ@y)%D$F@-^4r!E!skefwf;$;-6?B=v&=%_(rpUCR! z44{ih%@GlWSkXA~04^^zdA;Yzf7bs-L3HB=ixw_?3V(a^dHC|>@Yh!>KK`?OHK)4R4_JlrRWvgcP=%wWwoKz!O1T6@e|fbv zMYXX^5Hwvtfkc(I#E1t*Md_ z3Q^f~&ZpcD4U@fR6FX9YL?O#H6gq+&fBl$p=3 Removing an instance's membership from an instance group in the inventory file and re-running the setup playbook does not ensure that the instance is not added back to a group. To be sure that an instance is not added back to a group, remove it through the API and also remove it in your inventory file. You can also stop defining instance groups in the inventory file. You can manage instance group topology through the {ControllerName} UI. -For more information about managing instance groups in the UI, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-instance-groups[Managing Instance Groups] in the _{ControllerUG}_. +For more information about managing instance groups in the UI, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-instance-groups[Managing Instance Groups] in _{ControllerUG}_. [NOTE] ==== diff --git a/downstream/modules/platform/con-controller-host-metric-utilities.adoc b/downstream/modules/platform/con-controller-host-metric-utilities.adoc index 8581def9e4..12e50b5a62 100644 --- a/downstream/modules/platform/con-controller-host-metric-utilities.adoc +++ b/downstream/modules/platform/con-controller-host-metric-utilities.adoc @@ -6,5 +6,5 @@ You can also soft delete hosts in bulk through the API. ifdef::controller-GS,controller-AG[] -For more information, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-host-metric-utilities[Host metrics utilities] section of the _{ControllerUG}_. +For more information, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-host-metric-utilities[Host metrics utilities] section of _{ControllerUG}_. endif::controller-GS,controller-AG[] diff --git a/downstream/modules/platform/con-controller-infrastructure.adoc b/downstream/modules/platform/con-controller-infrastructure.adoc new file mode 100644 index 0000000000..af2238c419 --- /dev/null +++ b/downstream/modules/platform/con-controller-infrastructure.adoc @@ -0,0 +1,15 @@ +[id="con-controller-infrastructure"] + += Infrastructure menu + +The *Infrastucture* menu provides quick access to {ControllerName} resources such as: + +* xref:assembly-controller-topology-viewer[Topology View] +* xref:controller-inventories[Inventories] +* Hosts +* xref:controller-instance-groups[Instance Groups] +* xref:assembly-controller-instances[Instances] +* xref:assembly-controller-execution-environments[Execution Environments] +//Maybe separate +//* Credentials +//* Credential Types \ No newline at end of file diff --git a/downstream/modules/platform/con-controller-instance-groups.adoc b/downstream/modules/platform/con-controller-instance-groups.adoc index 0215512211..4b9b8f05fb 100644 --- a/downstream/modules/platform/con-controller-instance-groups.adoc +++ b/downstream/modules/platform/con-controller-instance-groups.adoc @@ -1,4 +1,4 @@ -[id="controller-instance-groups"] +[id="con-controller-instance-groups"] = Instance groups diff --git a/downstream/modules/platform/con-controller-keep-subscription-in-compliance.adoc b/downstream/modules/platform/con-controller-keep-subscription-in-compliance.adoc index 2e53bb851c..52190b0976 100644 --- a/downstream/modules/platform/con-controller-keep-subscription-in-compliance.adoc +++ b/downstream/modules/platform/con-controller-keep-subscription-in-compliance.adoc @@ -57,5 +57,5 @@ These are soft-deleted, meaning their records are not removed, but are not being endif::controller-UG,controller-AG[] ifdef::controller-GS,controller-AG[] -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-keep-subscription-in-compliance[Troubleshooting: Keeping your subscription in compliance] in the _{ControllerUG}_. +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-keep-subscription-in-compliance[Troubleshooting: Keeping your subscription in compliance] in _{ControllerUG}_. endif::controller-GS,controller-AG[] diff --git a/downstream/modules/platform/con-controller-overview-details.adoc b/downstream/modules/platform/con-controller-overview-details.adoc index 7d165bbfbe..01c12ae7d2 100644 --- a/downstream/modules/platform/con-controller-overview-details.adoc +++ b/downstream/modules/platform/con-controller-overview-details.adoc @@ -24,7 +24,7 @@ If you want to give any user or team permissions to use a job template, you can An auditor is useful for a service account that scrapes automation information from the REST API. .Additional resources -* For more information about user roles, see xref:con-controller-rbac[Role-Based Access Controls]. +* For more information about user roles, see TBD[Role-Based Access Controls]. = Cloud and autoscaling flexibility {ControllerNameStart} includes a powerful optional provisioning callback feature that enables nodes to request configuration on-demand. @@ -48,7 +48,7 @@ For more information, see xref:ref-projects-galaxy-support[Ansible Galaxy Suppor = Inventory support for OpenStack Dynamic inventory support is available for OpenStack. With this you can target any of the virtual machines or images running in your OpenStack cloud. -For more information, see the xref:ref-controller-credential-openstack[OpenStack credential type] section. +For more information, see TBD[OpenStack credential type]. = Remote command execution Use remote command execution to perform a simple tasks, such as adding a single user, updating a single security vulnerability, or restarting a failing service. diff --git a/downstream/modules/platform/con-controller-resources.adoc b/downstream/modules/platform/con-controller-resources.adoc index 9c99e79d93..dfdcd76284 100644 --- a/downstream/modules/platform/con-controller-resources.adoc +++ b/downstream/modules/platform/con-controller-resources.adoc @@ -5,7 +5,7 @@ The *Resources* menu provides access to the following components of {ControllerName}: * Templates -* xref:controller-credentials[Credentials] +* TBD[Credentials] * xref:controller-projects[Projects] * xref:controller-inventories[Inventories] * Hosts \ No newline at end of file diff --git a/downstream/modules/platform/con-controller-role-based-access-controls.adoc b/downstream/modules/platform/con-controller-role-based-access-controls.adoc index c4d713e8f8..2d56503f74 100644 --- a/downstream/modules/platform/con-controller-role-based-access-controls.adoc +++ b/downstream/modules/platform/con-controller-role-based-access-controls.adoc @@ -2,6 +2,7 @@ = Role-based access controls +//Not sure whether this is still true. To edit and delete a workflow job template, you must have the administrator role. To create a workflow job template, you must be an organization administrator or a system administrator. However, you can run a workflow job template that contains job templates that you do not have permissions for. @@ -11,6 +12,6 @@ You must have `execute` access to a job template to add it to a workflow job tem You can also perform other tasks, such as making a duplicate copy or re-launching a workflow, depending on which permissions are granted to a user. You must have permissions to all the resources used in a workflow, such as job templates, before relaunching or making a copy. -For more information, see xref:con-controller-rbac[Role-based access controls]. +For more information, see TBD[Role-based access controls]. -For more information on performing the tasks described in this section, see the link:http://docs.ansible.com/automation-controller/4.4/html/administration/index.html#ag-start[Administration Guide]. +For more information on performing the tasks described in this section, see xref:controller-workflow-job-templates[Workflow job templates]. diff --git a/downstream/modules/platform/con-controller-settings.adoc b/downstream/modules/platform/con-controller-settings.adoc index abe9eaa377..f2f7a983a8 100644 --- a/downstream/modules/platform/con-controller-settings.adoc +++ b/downstream/modules/platform/con-controller-settings.adoc @@ -2,15 +2,12 @@ = The Settings menu -Configure global and system-level settings using the *Settings* menu. -The *Settings* menu provides access to {ControllerName} configuration settings. +You can configure some {ControllerName} options using the *Settings* menu of the User Interface. -The *Settings* page enables administrators to configure the following: -* Authentication -* Jobs -* System-level attributes -* Customize the UI -* Product license information +The *Settings* page enables an administrator to configure the following: -//include::settings-menu.adoc[] \ No newline at end of file +* link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatfromVers}/html/automation_controller_administration_guide/assembly-ag-controller-config#proc-controller-configure-subscriptions[Subscriptions] TBD +* link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/assembly-ag-controller-config#controller-configure-system[System] TBD +* link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/assembly-ag-controller-config#controller-configure-jobs[Jobs]TBD +* link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/assembly-ag-controller-config#proc-controller-configure-analytics[{Analytics}] TBD diff --git a/downstream/modules/platform/con-controller-views.adoc b/downstream/modules/platform/con-controller-views.adoc index c13cdb4fc7..8c605b7abd 100644 --- a/downstream/modules/platform/con-controller-views.adoc +++ b/downstream/modules/platform/con-controller-views.adoc @@ -1,16 +1,15 @@ [id="con-controller-views"] = Views +//No longer required in 2.5 version The {ControllerName} UI provides several options for viewing information. * xref:proc-controller-viewing-dashboard[Dashboard view] -* xref:proc-controller-jobs-view[Jobs view] -//The following aren't included in the Views menu for the tech preview. +* xref:proc-controller-jobs-view[Jobs view] * xref:proc-controller-schedules-view[Schedules view] * xref:proc-controller-activity-stream[Activity Stream] * xref:proc-controller-workflow-approvals[Workflow Approvals] -//Host Metrics is included in the Analytics menu * xref:proc-controller-host-metrics[Host Metrics] include::proc-controller-viewing-dashboard.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/proc-controller-activity-stream.adoc b/downstream/modules/platform/proc-controller-activity-stream.adoc index e90f2b74f3..8222ea38e8 100644 --- a/downstream/modules/platform/proc-controller-activity-stream.adoc +++ b/downstream/modules/platform/proc-controller-activity-stream.adoc @@ -8,8 +8,10 @@ Most screens have an Activity Stream image:activitystream.png[activitystream,15, image:users-activity-stream.png[Activity Stream] An Activity Stream shows all changes for a particular object. + For each change, the Activity Stream shows the time of the event, the user that initiated the event, and the action. The information displayed varies depending on the type of event. + Click the btn:[Examine] image:examine.png[View Event Details,15,15] icon to display the event log for the change. image:activity-stream-event-log.png[event log] diff --git a/downstream/modules/platform/proc-controller-add-groups-hosts.adoc b/downstream/modules/platform/proc-controller-add-groups-hosts.adoc index e15636dbe3..50ab869589 100644 --- a/downstream/modules/platform/proc-controller-add-groups-hosts.adoc +++ b/downstream/modules/platform/proc-controller-add-groups-hosts.adoc @@ -4,7 +4,7 @@ Groups are only applicable to standard inventories and are not configurable directly through a Smart Inventory. You can associate an existing group through hosts that are used with standard inventories. -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-add-groups[Adding groups to inventories] in the _{ControllerUG}_. +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-add-groups[Adding groups to inventories] in _{ControllerUG}_. .Procedure //[ddacosta] Need to verify this is the correct flow. The original content identified menus that don't exist. diff --git a/downstream/modules/platform/proc-controller-adding-new-inventory.adoc b/downstream/modules/platform/proc-controller-adding-new-inventory.adoc index 1655ce0bf3..31bc330cea 100644 --- a/downstream/modules/platform/proc-controller-adding-new-inventory.adoc +++ b/downstream/modules/platform/proc-controller-adding-new-inventory.adoc @@ -53,7 +53,7 @@ You can paste a group name into the limit field to only include hosts in that gr For more information, see the *Source vars* setting. * Only applicable to standard inventories: *Options*: Check the *Prevent Instance Group Fallback* option to enable only the instance groups listed in the *Instance Groups* field to execute the job. If unchecked, all available instances in the execution pool are used based on the hierarchy described in -link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_administration_guide/index#controller-control-job-run[Control where a job runs] in the _{ControllerAG}_. +link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_administration_guide/index#controller-control-job-run[Control where a job runs] in _{ControllerAG}_. Click the image:question_circle.png[Help,15,15] icon for additional information. + //[NOTE] diff --git a/downstream/modules/platform/proc-controller-amazon-ec2.adoc b/downstream/modules/platform/proc-controller-amazon-ec2.adoc index bf6eb9ed40..e757712f10 100644 --- a/downstream/modules/platform/proc-controller-amazon-ec2.adoc +++ b/downstream/modules/platform/proc-controller-amazon-ec2.adoc @@ -13,7 +13,7 @@ Use the following procedure to configure an AWS EC2-sourced inventory. . The *Add new source* window expands with additional fields. Enter the following details: -* Optional: *Credential*: Choose from an existing AWS credential (for more information, see xref:controller-credentials[Credentials]). +* Optional: *Credential*: Choose from an existing AWS credential (for more information, see[Credentials]). + If {ControllerName} is running on an EC2 instance with an assigned IAM Role, the credential can be omitted, and the security credentials from the instance metadata are used instead. diff --git a/downstream/modules/platform/proc-controller-azure-resource-manager.adoc b/downstream/modules/platform/proc-controller-azure-resource-manager.adoc index 1d3db67ec8..88f8bd0510 100644 --- a/downstream/modules/platform/proc-controller-azure-resource-manager.adoc +++ b/downstream/modules/platform/proc-controller-azure-resource-manager.adoc @@ -12,7 +12,7 @@ Use the following procedure to configure an {Azure} Resource Manager-sourced inv . In the *Add new source* page, select *Microsoft Azure Resource Manager* from the *Source* list. . The *Add new source* window expands with the required *Credential* field. Choose from an existing Azure Credential. -For more information, see xref:controller-credentials[Credentials]. +For more information, see [Credentials]. . Optional: You can specify the verbosity, host filter, enabled variables or values, and update options as described in xref:proc-controller-add-source[Adding a source]. . Use the *Source Variables* field to override variables used by the `azure_rm` inventory plugin. diff --git a/downstream/modules/platform/proc-controller-cluster-deprovision-instances.adoc b/downstream/modules/platform/proc-controller-cluster-deprovision-instances.adoc index 18b6603bf4..6d6580acae 100644 --- a/downstream/modules/platform/proc-controller-cluster-deprovision-instances.adoc +++ b/downstream/modules/platform/proc-controller-cluster-deprovision-instances.adoc @@ -22,4 +22,4 @@ $ awx-manage deprovision_instance --hostname=hostB ---- Deprovisioning instance groups in {ControllerName} does not automatically deprovision or remove instance groups. -For more information, see the xref:controller-deprovision-instance-group[Deprovisioning instance groups] section. +For more information, see the link:https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.4/html/automation_controller_user_guide/controller-deprovision-instance-group[Deprovisioning instance groups] section in _{ControllerUG}_. diff --git a/downstream/modules/platform/proc-controller-configure-jobs.adoc b/downstream/modules/platform/proc-controller-configure-jobs.adoc index 88fe754693..c2116a3cda 100644 --- a/downstream/modules/platform/proc-controller-configure-jobs.adoc +++ b/downstream/modules/platform/proc-controller-configure-jobs.adoc @@ -73,7 +73,7 @@ Use a value of 0 to indicate that no timeout should be imposed. * *Maximum number of forks per job*: Saving a Job Template with more than this number of forks results in an error. + When set to 0, no limit is applied. -* Container Run Options*: Only available in operator-based installations. +* *Container Run Options*: Only available in operator-based installations. + List of options to pass to podman run example: `['--network', 'slirp4netns:enable_ipv6=true', '--log-level', 'debug']`. + @@ -82,7 +82,7 @@ You can set the following options: * *Run Project Updates With Higher Verbosity*: Select to add the CLI `-vvv` flag to playbook runs of `project_update.yml` used for project updates * *Enable Role Download*: Select to allow roles to be dynamically downloaded from a `requirements.yml` file for SCM projects. * *Enable Collection(s) Download*: Select to allow collections to be dynamically downloaded from a `requirements.yml` file for SCM projects. -*Follow symlinks*: Select to follow symbolic links when scanning for playbooks. +* *Follow symlinks*: Select to follow symbolic links when scanning for playbooks. + Be aware that setting this to `True` can lead to infinite recursion if a link points to a parent directory of itself. * *Expose host paths for Container Groups*: Select to expose paths through hostPath for the Pods created by a Container Group. diff --git a/downstream/modules/platform/proc-controller-configure-secret-lookups.adoc b/downstream/modules/platform/proc-controller-configure-secret-lookups.adoc index 3e3f215c65..d666ac3560 100644 --- a/downstream/modules/platform/proc-controller-configure-secret-lookups.adoc +++ b/downstream/modules/platform/proc-controller-configure-secret-lookups.adoc @@ -52,7 +52,7 @@ You return to the *Details* screen of your target credential. . Repeat these steps, starting with Step 3 to complete the remaining input fields for the target credential. By linking the information in this manner, {ControllerName} retrieves sensitive information, such as username, password, keys, certificates, and tokens from the third-party management systems and populates the remaining fields of the target credential form with that data. . If necessary, supply any information manually for those fields that do not use linking as a way of retrieving sensitive information. -For more information about each of the fields, see the appropriate xref:ref-controller-credential-types[Credential Types]. +For more information about each of the fields, see the appropriate [Credential Types]. . Click btn:[Save]. .Additional resources diff --git a/downstream/modules/platform/proc-controller-create-credential.adoc b/downstream/modules/platform/proc-controller-create-credential.adoc index 9e1f902dbc..7277930848 100644 --- a/downstream/modules/platform/proc-controller-create-credential.adoc +++ b/downstream/modules/platform/proc-controller-create-credential.adoc @@ -20,7 +20,7 @@ endif::controller-UG[] .Procedure . From the navigation panel, select {MenuAMCredentials}. ifdef::controller-GS[] -. To add a new credential, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-getting-started-create-credential[Creating a credential] in the _{ControllerUG}_. +. To add a new credential, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-getting-started-create-credential[Creating a credential] in _{ControllerUG}_. + [NOTE] ==== diff --git a/downstream/modules/platform/proc-controller-create-host.adoc b/downstream/modules/platform/proc-controller-create-host.adoc new file mode 100644 index 0000000000..597c0bb295 --- /dev/null +++ b/downstream/modules/platform/proc-controller-create-host.adoc @@ -0,0 +1,17 @@ +[id="proc-controller-create-host"] + += Creating a host + +To create a new host. + +.Procedure +. From the navigation panel, select {MenuInfrastructureHosts}. +. Click btn:[Create host]. +. On the *Create Host* page enter the following information: + +* *Name*: Enter a name for your host. +* (Optional) *Description*: Enter a description for your host. +* *Inventory*: Select the inventory from the list to contain your host. +* *Variables*: Enter the inventory file variables associated with your host. + +. Click btn:[Create host] to save your changes. \ No newline at end of file diff --git a/downstream/modules/platform/proc-controller-create-instance-group.adoc b/downstream/modules/platform/proc-controller-create-instance-group.adoc index 2238052418..e9923756fc 100644 --- a/downstream/modules/platform/proc-controller-create-instance-group.adoc +++ b/downstream/modules/platform/proc-controller-create-instance-group.adoc @@ -26,7 +26,7 @@ If you do not specify values, then the *Policy instance minimum* and *Policy ins [NOTE] ==== The default value of 0 for *Max concurrent jobs* and *Max forks* denotes no limit. -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/controller-instance-and-container-groups#controller-instance-group-capacity[Instance group capacity limits] in the _{ControllerAG}_. +For more information, see xref:controller-instance-group-capacity[Instance group capacity limits]. ==== . Click btn:[Create Instance Group], or, if you have edited an existing Instance Group click btn:[Save Instance Group] diff --git a/downstream/modules/platform/proc-controller-create-inventory.adoc b/downstream/modules/platform/proc-controller-create-inventory.adoc index 2db8b447ce..c7f2af0016 100644 --- a/downstream/modules/platform/proc-controller-create-inventory.adoc +++ b/downstream/modules/platform/proc-controller-create-inventory.adoc @@ -10,12 +10,12 @@ You can sort the inventory list by name and searched type, organization, descrip ** {ControllerNameStart} provides a demonstration inventory for you to use as you learn how the controller works. You can use it as it is or edit it later. You can create another inventory, if necessary. -. To add another inventory, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-adding-new-inventory[Add a new inventory] in the _{ControllerUG}_ for more information. +. To add another inventory, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-adding-new-inventory[Add a new inventory] in _{ControllerUG}_ for more information. . Click btn:[Demo Inventory] to view its details. image::controller-inventories-demo-details.png[Demo inventory] As with organizations, inventories also have associated users and teams that you can view through the *Access* tab. -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-inventories[Inventories] in the _{ControllerUG}_. +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-inventories[Inventories] in _{ControllerUG}_. A user with the role of *System Administrator* has been automatically populated for this. diff --git a/downstream/modules/platform/proc-controller-create-job-template.adoc b/downstream/modules/platform/proc-controller-create-job-template.adoc index c960e56225..67cf3fb6e0 100644 --- a/downstream/modules/platform/proc-controller-create-job-template.adoc +++ b/downstream/modules/platform/proc-controller-create-job-template.adoc @@ -5,13 +5,15 @@ .Procedure . From the navigation panel, select {MenuAETemplates}. -. On the *Templates* list view, select *Create job template* from the *Create template* list. +. On the *Templates* page, select *Create job template* from the *Create template* list. . Enter the appropriate details in the following fields: + [NOTE] ==== If a field has the *Prompt on launch* checkbox selected, launching the job prompts you for the value for that field when launching. + Most prompted values override any values set in the job template. + Exceptions are noted in the following table. ==== + @@ -34,7 +36,7 @@ A System Administrator must grant you or your team permissions to be able to use Inventory prompts show up as its own step in a later prompt window. | Project | Select the project to use with this job template from the projects available to the user that is logged in. | N/A -| SCM branch | This field is only present if you chose a project that allows branch override. +| Source control branch | This field is only present if you chose a project that allows branch override. Specify the overriding branch to use in your job run. If left blank, the specified SCM branch (or commit hash or tag) from the project is used. @@ -79,15 +81,6 @@ When a label is removed, it is no longer associated with that particular Job or - Jobs inherit labels from the Job Template at the time of launch. If you delete a label from a Job Template, it is also deleted from the Job. a| - If selected, even if a default value is supplied, you are prompted when launching to supply additional labels, if needed. - You cannot delete existing labels, selecting image:disassociate.png[Disassociate,10,10] only removes the newly added labels, not existing default labels. -| Variables a| - Pass extra command line variables to the playbook. -This is the "-e" or "-extra-vars" command line parameter for ansible-playbook that is documented in the Ansible documentation at link:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#defining-variables-at-runtime[Defining variables at runtime]. -- Provide key or value pairs by using either YAML or JSON. -These variables have a maximum value of precedence and overrides other variables specified elsewhere. -The following is an example value: -`git_branch: production -release_version: 1.5` | Yes. - -If you want to be able to specify `extra_vars` on a schedule, you must select *Prompt on launch* for Variables on the job template, or enable a survey on the job template. Those answered survey questions become `extra_vars`. | Forks | The number of parallel or simultaneous processes to use while executing the playbook. A value of zero uses the Ansible default setting, which is five parallel processes unless overridden in `/etc/ansible/ansible.cfg`. | Yes | Limit a| A host pattern to further constrain the list of hosts managed or affected by the playbook. You can separate many patterns by colons (:). @@ -133,9 +126,18 @@ If selected, you are providing the jobs preferred instance groups in order of pr For more information and examples see link:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_tags.html[Tags] in the Ansible documentation. | Yes | Skip Tags | Type and select the *Create* menu to specify certain tasks or parts of the playbook to skip. For more information and examples see link:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_tags.html[Tags] in the Ansible documentation. | Yes +| Extra Variables a| - Pass extra command line variables to the playbook. +This is the "-e" or "-extra-vars" command line parameter for ansible-playbook that is documented in the Ansible documentation at link:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#defining-variables-at-runtime[Defining variables at runtime]. +- Provide key or value pairs by using either YAML or JSON. +These variables have a maximum value of precedence and overrides other variables specified elsewhere. +The following is an example value: +`git_branch: production +release_version: 1.5` | Yes. + +If you want to be able to specify `extra_vars` on a schedule, you must select *Prompt on launch* for Variables on the job template, or enable a survey on the job template. Those answered survey questions become `extra_vars`. |=== + -. Specify the following options for launching this template, if necessary: +. You can set the following options for launching this template, if necessary: * *Privilege escalation*: If checked, you enable this playbook to run as an administrator. This is the equal of passing the `--become` option to the `ansible-playbook` command. * *Provisioning callback*: If checked, you enable a host to call back to {ControllerName} through the REST API and start a job from this job template. @@ -151,8 +153,10 @@ GitHub and GitLab are the supported SCM systems. ** *Webhook key*: Generated shared secret to be used by the webhook service to sign payloads sent to {ControllerName}. You must configure this in the settings on the webhook service in order for {ControllerName} to accept webhooks from this service. ** *Webhook credential*: Optionally, give a GitHub or GitLab personal access token (PAT) as a credential to use to send status updates back to the webhook service. ++ Before you can select it, the credential must exist. -See xref:ref-controller-credential-types[Credential Types] to create one. ++ +See TBD[Credential Types] to create one. ** For additional information about setting up webhooks, see xref:controller-work-with-webhooks[Working with Webhooks]. * *Concurrent jobs*: If checked, you are allowing jobs in the queue to run simultaneously if not dependent on one another. Check this box if you want to run job slices simultaneously. For more information, see xref:controller-capacity-determination[{ControllerNameStart} capacity determination and job impact]. * *Enable fact storage*: If checked, {ControllerName} stores gathered facts for all hosts in an inventory related to the job running. @@ -170,4 +174,4 @@ You must first save the template before launching, otherwise, btn:[Launch templa .Verification . From the navigation panel, select {MenuAETemplates}. -. Verify that the newly created template appears on the *Templates* list view. +. Verify that the newly created template appears on the *Templates* page. diff --git a/downstream/modules/platform/proc-controller-create-workflow-template.adoc b/downstream/modules/platform/proc-controller-create-workflow-template.adoc index e950e236e8..4221d71d2d 100644 --- a/downstream/modules/platform/proc-controller-create-workflow-template.adoc +++ b/downstream/modules/platform/proc-controller-create-workflow-template.adoc @@ -1,6 +1,6 @@ [id="controller-create-workflow-template"] -= Creating a workflow template += Creating a workflow job template To create a new workflow job template, complete the following steps: @@ -61,6 +61,10 @@ a| Yes If selected, even if a default value is supplied, you are prompted when launching to supply additional labels, if needed. - You cannot delete existing labels, selecting image:disassociate.png[Disassociate,10,10] only removes the newly added labels, not existing default labels. +| Job tags | Type and select the *Create* drop-down to specify which parts of the playbook should run. +For more information and examples see link:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_tags.html[Tags] in the Ansible documentation. | Yes +| Skip Tags | Type and select the *Create* drop-down to specify certain tasks or parts of the playbook to skip. +For more information and examples see link:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_tags.html[Tags] in the Ansible documentation. | Yes | Extra variables a| - Pass extra command line variables to the playbook. This is the "-e" or "-extra-vars" command line parameter for ansible-playbook that is documented in the Ansible documentation at link:https://docs.ansible.com/ansible/latest/reference_appendices/general_precedence.html[Controlling how Ansible behaves: precedence rules]. @@ -70,27 +74,24 @@ release_version: 1.5` | Yes If you want to be able to specify `extra_vars` on a schedule, you must select *Prompt on launch* for *Extra variables* on the workflow job template, or enable a survey on the job template. Those answered survey questions become `extra_vars`. For more information about extra variables, see xref:controller-extra-variables[Extra Variables]. -| Job tags | Type and select the *Create* drop-down to specify which parts of the playbook should run. -For more information and examples see link:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_tags.html[Tags] in the Ansible documentation. | Yes -| Skip Tags | Type and select the *Create* drop-down to specify certain tasks or parts of the playbook to skip. -For more information and examples see link:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_tags.html[Tags] in the Ansible documentation. | Yes |=== + . Specify the following *Options* for launching this template, if necessary: + * Check *Enable webhook* to turn on the ability to interface with a predefined SCM system web service that is used to launch a workflow job template. GitHub and GitLab are the supported SCM systems. ** If you enable webhooks, other fields display, prompting for additional information: *** *Webhook service*: Select which service to listen for webhooks from. -*** *Webhook credential*: Optionally, provide a GitHub or GitLab personal access token (PAT) as a credential to use to send status updates back to the webhook service. -For more information, see xref:ref-controller-credential-types[Credential Types] to create one. -+ -** When you click btn:[Create workflow job template], additional fields populate and the workflow visualizer automatically opens. *** *Webhook URL*: Automatically populated with the URL for the webhook service to POST requests to. +//*** *Webhook credential*: Optionally, provide a GitHub or GitLab personal access token (PAT) as a credential to use to send status updates back to the webhook service. +//For more information, see TBD[Credential Types] to create one. *** *Webhook key*: Generated shared secret to be used by the webhook service to sign payloads sent to {ControllerName}. You must configure this in the settings on the webhook service so that webhooks from this service are accepted in {ControllerName}. For additional information about setting up webhooks, see xref:controller-work-with-webhooks[Working with Webhooks]. + -Check *Enable concurrent jobs* to allow simultaneous runs of this workflow. +//** When you click btn:[Create workflow job template], the workflow visualizer automatically opens. +//*** *Webhook URL*: Automatically populated with the URL for the webhook service to POST requests to. +* Check *Enable concurrent jobs* to allow simultaneous runs of this workflow. For more information, see xref:controller-capacity-determination[{ControllerNameStart} capacity determination and job impact]. + . When you have completed configuring the workflow template, click btn:[Create workflow job template]. @@ -110,7 +111,7 @@ There you can complete the following tasks: + [NOTE] ==== -Save the template before launching, or btn:[Launch template] remains disabled. +Save the template before launching, or btn:[Launch template] remains disabled. The *Notifications* tab is only present after you save the template. ==== diff --git a/downstream/modules/platform/proc-controller-importing-subscriptions.adoc b/downstream/modules/platform/proc-controller-importing-subscriptions.adoc index fbf13c0e34..702f243a3c 100644 --- a/downstream/modules/platform/proc-controller-importing-subscriptions.adoc +++ b/downstream/modules/platform/proc-controller-importing-subscriptions.adoc @@ -37,7 +37,7 @@ You can log in over time and retrieve new subscriptions if you have renewed. . Click btn:[Next] to proceed to the *Tracking and Insights* page. + Tracking and insights collect data to help Red Hat improve the product and deliver a better user experience. -For more information about data collection, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_administration_guide/index#controller-usability-analytics-data-collection[Usability Analytics and Data Collection] of the _{ControllerAG}_. +//For more information about data collection, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_administration_guide/index#controller-usability-analytics-data-collection[Usability Analytics and Data Collection] of the _{ControllerAG}_. + This option is checked by default, but you can opt out of any of the following: @@ -45,7 +45,7 @@ This option is checked by default, but you can opt out of any of the following: * *Insights Analytics*. Provides a high level analysis of your automation with {ControllerName}. It helps you to identify trends and anomalous use of the controller. For opt-in of {Analytics} to be effective, your instance of {ControllerName} must be running on {RHEL}. -For more information, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_administration_guide/index#ref-controller-automation-analytics[{Analytics}] section. +For more information, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_administration_guide/index#ref-controller-automation-analytics[{Analytics}] section. TBD + [NOTE] ==== diff --git a/downstream/modules/platform/proc-controller-inv-source-aap.adoc b/downstream/modules/platform/proc-controller-inv-source-aap.adoc index 29570a1240..ec500d74fe 100644 --- a/downstream/modules/platform/proc-controller-inv-source-aap.adoc +++ b/downstream/modules/platform/proc-controller-inv-source-aap.adoc @@ -11,7 +11,7 @@ Use the following procedure to configure an {ControllerName}-sourced inventory. . In the *Add new source* page, select *{PlatformName}* from the *Source* list. . The *Add new source* window expands with the required *Credential* field. Choose from an existing {PlatformName} Credential. -For more information, see xref:controller-credentials[Credentials]. +For more information, see [Credentials]. . Optional: You can specify the verbosity, host filter, enabled variables or values, and update options as described in xref:proc-controller-add-source[Adding a source]. . Use the *Source Variables* field to override variables used by the `controller` inventory plugin. Enter variables by using either JSON or YAML syntax. diff --git a/downstream/modules/platform/proc-controller-inv-source-gce.adoc b/downstream/modules/platform/proc-controller-inv-source-gce.adoc index 0bdb877a69..7ada1c5547 100644 --- a/downstream/modules/platform/proc-controller-inv-source-gce.adoc +++ b/downstream/modules/platform/proc-controller-inv-source-gce.adoc @@ -11,7 +11,7 @@ Use the following procedure to configure a Google-sourced inventory: . In the *Add new source* page, select *Google Compute Engine* from the *Source* list. . The *Add new source* window expands with the required *Credential* field. Choose from an existing GCE Credential. -For more information, see xref:controller-credentials[Credentials]. +For more information, see [Credentials]. //+ //image:inventories-create-source-GCE-example.png[Inventories- create source - GCE example] diff --git a/downstream/modules/platform/proc-controller-inv-source-insights.adoc b/downstream/modules/platform/proc-controller-inv-source-insights.adoc index b765ced2fa..37275f0f93 100644 --- a/downstream/modules/platform/proc-controller-inv-source-insights.adoc +++ b/downstream/modules/platform/proc-controller-inv-source-insights.adoc @@ -11,7 +11,7 @@ Use the following procedure to configure a Red Hat Insights-sourced inventory. . In the *Add new source* page, select *Red Hat Insights* from the *Source* list. . The *Add new source* window expands with the required *Credential* field. Choose from an existing Red Hat Insights Credential. -For more information, see xref:controller-credentials[Credentials]. +For more information, see [Credentials]. . Optional: You can specify the verbosity, host filter, enabled variables or values, and update options as described in xref:proc-controller-add-source[Adding a source]. . Use the *Source Variables* field to override variables used by the `insights` inventory plugin. Enter variables by using either JSON or YAML syntax. diff --git a/downstream/modules/platform/proc-controller-inv-source-openstack.adoc b/downstream/modules/platform/proc-controller-inv-source-openstack.adoc index 5c3631a256..f6ba88ab0f 100644 --- a/downstream/modules/platform/proc-controller-inv-source-openstack.adoc +++ b/downstream/modules/platform/proc-controller-inv-source-openstack.adoc @@ -11,7 +11,7 @@ Use the following procedure to configure an OpenStack-sourced inventory. . In the *Add new source* page, select *OpenStack* from the *Source* list. . The *Add new Source* window expands with the required *Credential* field. Choose from an existing OpenStack Credential. -For more information, see xref:controller-credentials[Credentials]. +For more information, see [Credentials]. . Optional: You can specify the verbosity, host filter, enabled variables or values, and update options as described in xref:proc-controller-add-source[Adding a source]. . Use the *Source Variables* field to override variables used by the `openstack` inventory plugin. Enter variables by using either JSON or YAML syntax. diff --git a/downstream/modules/platform/proc-controller-inv-source-rh-virt.adoc b/downstream/modules/platform/proc-controller-inv-source-rh-virt.adoc index 64d52524c1..48809ac529 100644 --- a/downstream/modules/platform/proc-controller-inv-source-rh-virt.adoc +++ b/downstream/modules/platform/proc-controller-inv-source-rh-virt.adoc @@ -11,7 +11,7 @@ Use the following procedure to configure a Red Hat virtualization-sourced invent . In the *Add new source* page, select *Red Hat Virtualization* from the *Source* list. . The *Add new source* window expands with the required *Credential* field. Choose from an existing Red Hat Virtualization Credential. -For more information, see xref:controller-credentials[Credentials]. +For more information, see [Credentials]. . Optional: You can specify the verbosity, host filter, enabled variables or values, and update options as described in xref:proc-controller-add-source[Adding a source]. . Use the *Source Variables* field to override variables used by the `ovirt` inventory plugin. Enter variables by using either JSON or YAML syntax. diff --git a/downstream/modules/platform/proc-controller-inv-source-satellite.adoc b/downstream/modules/platform/proc-controller-inv-source-satellite.adoc index 80f15beb13..214927d84e 100644 --- a/downstream/modules/platform/proc-controller-inv-source-satellite.adoc +++ b/downstream/modules/platform/proc-controller-inv-source-satellite.adoc @@ -11,7 +11,7 @@ Use the following procedure to configure a Red Hat Satellite-sourced inventory. . In the *Add new source* page, select *Red Hat Satellite 6* from the *Source* list. . The *Add new source* window expands with the required *Credential* field. Choose from an existing Satellite Credential. -For more information, see xref:controller-credentials[Credentials]. +For more information, see [Credentials]. . Optional: You can specify the verbosity, host filter, enabled variables or values, and update options as described in xref:proc-controller-add-source[Adding a source]. . Use the *Source Variables* field to specify parameters used by the `foreman` inventory source. Enter variables by using either JSON or YAML syntax. diff --git a/downstream/modules/platform/proc-controller-inv-source-terraform.adoc b/downstream/modules/platform/proc-controller-inv-source-terraform.adoc index 547d423f15..8703377d8c 100644 --- a/downstream/modules/platform/proc-controller-inv-source-terraform.adoc +++ b/downstream/modules/platform/proc-controller-inv-source-terraform.adoc @@ -18,7 +18,7 @@ The plugin parses a terraform state file and add hosts for AWS EC2, GCE, and {Az . From the menu:Source[] menu, select *Terraform State*. * The *Add new source* window expands with the required *Credential* field. + -Choose from an existing Terraform backend configuration credential. For more information, see xref:ref-controller-credential-terraform[Terraform backend configuration]. +Choose from an existing Terraform backend configuration credential. For more information, see TBD[Terraform backend configuration]. . Enable the options to *Overwrite* and *Update on Launch*. . Use the *Source Variables* field to override variables used by the `terraform_state` inventory plugin. Enter variables by using either JSON or YAML syntax. diff --git a/downstream/modules/platform/proc-controller-inv-source-vm-vcenter.adoc b/downstream/modules/platform/proc-controller-inv-source-vm-vcenter.adoc index e78f29c5d7..9bbb5b7dac 100644 --- a/downstream/modules/platform/proc-controller-inv-source-vm-vcenter.adoc +++ b/downstream/modules/platform/proc-controller-inv-source-vm-vcenter.adoc @@ -11,7 +11,7 @@ Use the following procedure to configure a VMWare-sourced inventory. . In the *Add new source* page, select *VMware vCenter* from the *Source* list. . The *Add new source* window expands with the required *Credential* field. Choose from an existing VMware Credential. -For more information, see xref:controller-credentials[Credentials]. +For more information, see [Credentials]. . Optional: You can specify the verbosity, host filter, enabled variables or values, and update options as described in xref:proc-controller-add-source[Adding a source]. . Use the *Source Variables* field to override variables used by the `vmware_inventory` inventory plugin. diff --git a/downstream/modules/platform/proc-controller-management-notifications.adoc b/downstream/modules/platform/proc-controller-management-notifications.adoc index 77f5daf727..04116a582c 100644 --- a/downstream/modules/platform/proc-controller-management-notifications.adoc +++ b/downstream/modules/platform/proc-controller-management-notifications.adoc @@ -9,7 +9,7 @@ Use the following procedure to review or set notifications associated with a man //image:management-job-notifications.png[Notifications] -If none exist, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_user_guide/controller-notifications#controller-create-notification-template[Creating a notification template] in the _{ControllerUG}_. +If none exist, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_user_guide/controller-notifications#controller-create-notification-template[Creating a notification template] in _{ControllerUG}_. image:management-job-notifications-empty.png[No notifications set] diff --git a/downstream/modules/platform/proc-controller-obtaining-subscriptions.adoc b/downstream/modules/platform/proc-controller-obtaining-subscriptions.adoc index e7d3ac4f82..de661f0fc1 100644 --- a/downstream/modules/platform/proc-controller-obtaining-subscriptions.adoc +++ b/downstream/modules/platform/proc-controller-obtaining-subscriptions.adoc @@ -20,7 +20,7 @@ endif::controller-GS,controller-AG[] ** Enter your username and password on the license page. ** Obtain a subscriptions manifest from the link:https://access.redhat.com/management/subscription_allocations[Subscription Allocations] page on the Red Hat Customer Portal. ifdef::controller-GS,controller-AG[] -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-obtaining-subscriptions-manifest[Obtaining a subscriptions manifest] in the _{ControllerUG}_. +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-obtaining-subscriptions-manifest[Obtaining a subscriptions manifest] in _{ControllerUG}_. endif::controller-GS,controller-AG[] ifdef::controller-UG[] For more information, see xref:proc-controller-obtaining-subscriptions-manifest[Obtaining a subscriptions manifest]. diff --git a/downstream/modules/platform/proc-controller-pass-extra-variables-provisioning-callbacks.adoc b/downstream/modules/platform/proc-controller-pass-extra-variables-provisioning-callbacks.adoc index a67a91385b..a00e81a6a2 100644 --- a/downstream/modules/platform/proc-controller-pass-extra-variables-provisioning-callbacks.adoc +++ b/downstream/modules/platform/proc-controller-pass-extra-variables-provisioning-callbacks.adoc @@ -22,4 +22,4 @@ root@localhost:~$ curl -f -H 'Content-Type: application/json' -XPOST \ https:///api/v2/job_templates/7/callback ---- -For more information, see link:https://docs.ansible.com/automation-controller/4.4/html/administration/tipsandtricks.html#launch-jobs-curl[Launching Jobs with Curl] in the _{ControllerAG}_. \ No newline at end of file +For more information, see link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/controller-tips-and-tricks#ref-controller-launch-jobs-with-curl[Launching Jobs with Curl] in _{ControllerAG}_. \ No newline at end of file diff --git a/downstream/modules/platform/proc-controller-review-organizations.adoc b/downstream/modules/platform/proc-controller-review-organizations.adoc index 06c5f47376..77f0f51f1a 100644 --- a/downstream/modules/platform/proc-controller-review-organizations.adoc +++ b/downstream/modules/platform/proc-controller-review-organizations.adoc @@ -20,4 +20,4 @@ You can use the default organization as it is initially set up and edit it later Only Enterprise or Premium licenses can add new organizations. ==== -Enterprise and Premium license users who want to add a new organization should see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#assembly-controller-organizations[Organizations] section in the _{ControllerUG}_. +Enterprise and Premium license users who want to add a new organization should see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#assembly-controller-organizations[Organizations] section in _{ControllerUG}_. diff --git a/downstream/modules/platform/proc-controller-run-job-template.adoc b/downstream/modules/platform/proc-controller-run-job-template.adoc index e91e5173d8..1366086bef 100644 --- a/downstream/modules/platform/proc-controller-run-job-template.adoc +++ b/downstream/modules/platform/proc-controller-run-job-template.adoc @@ -14,7 +14,7 @@ image::controller-gs-job-templates-launch.png[Launch template] The initial job start generates a status page, which updates automatically by using {ControllerName}'s Live Event feature, until the job is complete. -For more information about the job results, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-jobs[Jobs in automation controller] in the _{ControllerUG}_. +For more information about the job results, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-jobs[Jobs in automation controller] in _{ControllerUG}_. .Additional resources diff --git a/downstream/modules/platform/proc-controller-set-up-github-webhook.adoc b/downstream/modules/platform/proc-controller-set-up-github-webhook.adoc index c98a1466b5..c854e14626 100644 --- a/downstream/modules/platform/proc-controller-set-up-github-webhook.adoc +++ b/downstream/modules/platform/proc-controller-set-up-github-webhook.adoc @@ -28,7 +28,7 @@ You cannot access this token again in GitHub. ==== + . Use the PAT to optionally create a GitHub credential: -.. Go to your instance, and xref:ref-controller-credential-gitHub-pat[Create a new credential for the GitHub PAT] using the generated token. +.. Go to your instance, and TBD[Create a new credential for the GitHub PAT] using the generated token. .. Make note of the name of this credential, as you use it in the job template that posts back to GitHub. + image::ug-webhooks-github-PAT-token.png[GitHub PAT token] diff --git a/downstream/modules/platform/proc-controller-set-up-gitlab-webhook.adoc b/downstream/modules/platform/proc-controller-set-up-gitlab-webhook.adoc index 036754e83f..ab5e2b9f09 100644 --- a/downstream/modules/platform/proc-controller-set-up-gitlab-webhook.adoc +++ b/downstream/modules/platform/proc-controller-set-up-gitlab-webhook.adoc @@ -24,7 +24,7 @@ You cannot access this token again in GitLab. ==== + . Use the PAT to optionally create a GitLab credential: -.. Go to your instance, and xref:ref-controller-credential-gitLab-pat[create a new credential for the GitLab PAT] using the generated token. +.. Go to your instance, and TBD[create a new credential for the GitLab PAT] using the generated token. .. Make note of the name of this credential, as you use it in the job template that posts back to GitLab. + image::ug-webhooks-create-credential-gitlab-PAT-token.png[GitLab PAT token] diff --git a/downstream/modules/platform/proc-controller-verify-container-group.adoc b/downstream/modules/platform/proc-controller-verify-container-group.adoc index 08333ac469..f176816bc9 100644 --- a/downstream/modules/platform/proc-controller-verify-container-group.adoc +++ b/downstream/modules/platform/proc-controller-verify-container-group.adoc @@ -7,7 +7,7 @@ To verify the deployment and termination of your container: .Procedure . Create a mock inventory and associate the container group to it by populating the name of the container group in the *Instance Group* field. -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-adding-new-inventory[Add a new inventory] in the _{ControllerUG}_. +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-adding-new-inventory[Add a new inventory] in _{ControllerUG}_. + image::ag-inventories-create-new-test-inventory.png[Create test inventory] + diff --git a/downstream/modules/platform/proc-controller-view-host.adoc b/downstream/modules/platform/proc-controller-view-host.adoc new file mode 100644 index 0000000000..bf913b9115 --- /dev/null +++ b/downstream/modules/platform/proc-controller-view-host.adoc @@ -0,0 +1,29 @@ +[id="proc-controller-view-host"] + += Viewing the host details + +To view the Host details for a job run. + +.Procedure + +. From the navigation panel, select {MenuInfrastructureHosts}. +The *Hosts* page displays the following information about the host or hosts affected by recent job runs. + +. Selecting a particular host displays the *Details* page for that host, with the following information: + +* The *Name* of the Host. +* The *Inventory* associated with that host. Selecting this inventory displays details of the inventory. +* When the Host was *Created* and who by. Selecting the creator displays TBD +* When the Host was *Last Modified*. Selecting the creator displays TBD +* *Variables* associated with the Host. You can display the variables in YAML or JSON format. + +. Click btn:[Edit host] to edit details of the host. + +* Select the *Facts* tab to display facts associated with the host. +* Select the *Groups* tab to display the Groups associated with the host. +** Click btn:[Associate groups] to associate a group with the host. +* Select the *Jobs* tab to display the Jobs which ran on the host. +** Click the image:arrow.png[Expand,15,15] icon to display details of the job. ++ +image::hosts_jobs_details.png[Details of job associated with a host] + diff --git a/downstream/modules/platform/proc-controller-view-jobs-associated-with-instance-group.adoc b/downstream/modules/platform/proc-controller-view-jobs-associated-with-instance-group.adoc index 50afb6677c..6c89a28a8d 100644 --- a/downstream/modules/platform/proc-controller-view-jobs-associated-with-instance-group.adoc +++ b/downstream/modules/platform/proc-controller-view-jobs-associated-with-instance-group.adoc @@ -17,4 +17,4 @@ Each job displays the following details: .Additional resources The instances are run in accordance with instance group policies. -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/controller-instance-and-container-groups#controller-instance-group-policies[Instance Group Policies] in the _{ControllerAG}_. +For more information, see xref:controller-instance-group-policies[Instance Group Policies]. diff --git a/downstream/modules/platform/proc-define-mesh-node-types.adoc b/downstream/modules/platform/proc-define-mesh-node-types.adoc index 2923f1692f..d0df21e3ff 100644 --- a/downstream/modules/platform/proc-define-mesh-node-types.adoc +++ b/downstream/modules/platform/proc-define-mesh-node-types.adoc @@ -1,8 +1,8 @@ [id="proc-define-mesh-node-types"] -ifdef::controller-AG[] +ifdef::controller-UG[] = Managing instances -endif::controller-AG[] +endif::controller-UG[] ifdef::operator-mesh[] = Defining {AutomationMesh} node types endif::operator-mesh[] @@ -70,9 +70,9 @@ image::instances_create_details.png[Create Instance details] ifdef::operator-mesh[] . To view a graphical representation of your updated topology, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/assembly-controller-topology-viewer[Topology viewer]. endif::operator-mesh[] -ifdef::controller-AG[] +ifdef::controller-UG[] . To view a graphical representation of your updated topology, see xref:assembly-controller-topology-viewer[Topology viewer]. -endif::controller-AG[] +endif::controller-UG[] + [NOTE] ==== @@ -170,6 +170,6 @@ ifdef::operator-mesh[] To remove an instance from the mesh, see xref:ref-removing-instances[Removing instances]. endif::operator-mesh[] -ifdef::controller-AG[] -To remove an instance from the mesh, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_automation_mesh_for_operator-based_installations/assembly-automation-mesh-operator-aap#ref-removing-instances[Removing instances]. -endif::controller-AG[] +ifdef::controller-UG[] +To remove an instance from the mesh, see xref:ref-removing-instances[Removing instances]. +endif::controller-UG[] diff --git a/downstream/modules/platform/proc-run-jobs-on-execution-nodes.adoc b/downstream/modules/platform/proc-run-jobs-on-execution-nodes.adoc index cdbc91779a..45227b5a55 100644 --- a/downstream/modules/platform/proc-run-jobs-on-execution-nodes.adoc +++ b/downstream/modules/platform/proc-run-jobs-on-execution-nodes.adoc @@ -6,7 +6,7 @@ You must specify where jobs are run, or they default to running in the control c To do this, set up a Job Template. -For more information on Job Templates, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_user_guide/controller-job-templates[Job Templates] in the _{ControllerUG}_. +For more information on Job Templates, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_user_guide/controller-job-templates[Job Templates] in _{ControllerUG}_. .Procedure diff --git a/downstream/modules/platform/ref-azure-key-vault-lookup.adoc b/downstream/modules/platform/ref-azure-key-vault-lookup.adoc index d361803a04..1c8ca8a773 100644 --- a/downstream/modules/platform/ref-azure-key-vault-lookup.adoc +++ b/downstream/modules/platform/ref-azure-key-vault-lookup.adoc @@ -5,9 +5,9 @@ When you select *{Azure} Key Vault* for *Credential Type*, give the following metadata to configure your lookup: * *Vault URL (DNS Name)* (required): give the URL used for communicating with {Azure}'s key management system -* *Client ID* (required): give the identifier as obtained by the {Azure} Active Directory -* *Client Secret* (required): give the secret as obtained by the {Azure} Active Directory -* *Tenant ID* (required): give the unique identifier that is associated with an {Azure} Active Directory instance within an Azure subscription +* *Client ID* (required): give the identifier as obtained by {MSEntraID} +* *Client Secret* (required): give the secret as obtained by {MSEntraID} +* *Tenant ID* (required): give the unique identifier that is associated with an {MSEntraID} instance within an Azure subscription * *Cloud Environment*: select the applicable cloud environment to apply //The following is an example of a configured {Azure} KMS credential. diff --git a/downstream/modules/platform/ref-controller-approval-nodes.adoc b/downstream/modules/platform/ref-controller-approval-nodes.adoc index 1de6f64a6a..afd87b3f61 100644 --- a/downstream/modules/platform/ref-controller-approval-nodes.adoc +++ b/downstream/modules/platform/ref-controller-approval-nodes.adoc @@ -2,7 +2,7 @@ = Approval nodes -Choosing an *Approval* node requires your intervention in order to advance the workflow. +Choosing an *Approval* node requires your intervention in order to advance a workflow. This functions as a means to pause the workflow in between playbooks so that you can give approval to continue on to the next playbook in the workflow. This gives the user a specified amount of time to intervene, but also enables you to continue as quickly as possible without having to wait on another trigger. diff --git a/downstream/modules/platform/ref-controller-capacity-planning-exercise.adoc b/downstream/modules/platform/ref-controller-capacity-planning-exercise.adoc index 7d1b5d5936..2694c2e5f0 100644 --- a/downstream/modules/platform/ref-controller-capacity-planning-exercise.adoc +++ b/downstream/modules/platform/ref-controller-capacity-planning-exercise.adoc @@ -37,5 +37,5 @@ For this example, for a workload on 300 managed hosts, executing 1000 tasks per .Additional Resources * For more information on workloads with high levels of API interaction, see link:https://www.ansible.com/blog/scaling-automation-controller-for-api-driven-workloads[Scaling Automation Controller for API Driven Workloads]. -* For more information on managing capacity with instances, see xref:assembly-controller-instances[Managing Capacity With Instances]. +* For more information on managing capacity with instances, see TBD[Managing Capacity With Instances]. * For more information on operator-based deployments, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_performance_considerations_for_operator_based_installations/index[Red Hat Ansible Automation Platform Performance Considerations for Operator Based Installations]. diff --git a/downstream/modules/platform/ref-controller-cleanup-expired-tokens.adoc b/downstream/modules/platform/ref-controller-cleanup-expired-tokens.adoc index f837af0f59..aa868b7edc 100644 --- a/downstream/modules/platform/ref-controller-cleanup-expired-tokens.adoc +++ b/downstream/modules/platform/ref-controller-cleanup-expired-tokens.adoc @@ -12,4 +12,4 @@ For more information, see xref:proc-controller-scheduling-deletion[Scheduling de You can also set or review notifications associated with this management job the same way as described in xref:proc-controller-management-notifications[setting notifications] for activity stream management jobs. -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_user_guide/controller-notifications[Notifications] in the _{ControllerUG}_. +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_user_guide/controller-notifications[Notifications] in _{ControllerUG}_. diff --git a/downstream/modules/platform/ref-controller-cleanup-old-data.adoc b/downstream/modules/platform/ref-controller-cleanup-old-data.adoc index 210eaee027..1119c4aa4e 100644 --- a/downstream/modules/platform/ref-controller-cleanup-old-data.adoc +++ b/downstream/modules/platform/ref-controller-cleanup-old-data.adoc @@ -17,4 +17,4 @@ This permanently deletes the job details and job output for jobs older than a sp awx-manage cleanup_activitystream [--help] ---- -This permanently deletes any link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_user_guide/assembly-controller-user-interface#proc-controller-activity-stream[Activity stream] data older than a specific number of days. \ No newline at end of file +This permanently deletes any [Activity stream] data older than a specific number of days. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-clear-sessions.adoc b/downstream/modules/platform/ref-controller-clear-sessions.adoc index 795aff35c0..30173d2221 100644 --- a/downstream/modules/platform/ref-controller-clear-sessions.adoc +++ b/downstream/modules/platform/ref-controller-clear-sessions.adoc @@ -6,4 +6,4 @@ Use this command to delete all sessions that have expired. For more information, see link:https://docs.djangoproject.com/en/4.2/topics/http/sessions/#clearing-the-session-store[Clearing the session store] in Django's Oauth Toolkit documentation. -For more information on OAuth2 token management in the UI, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_user_guide/assembly-controller-applications[Applications] section of the {ControllerUG}. +For more information on OAuth2 token management in the UI, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_user_guide/assembly-controller-applications[Applications] section of _{ControllerUG}_. diff --git a/downstream/modules/platform/ref-controller-credentials-getting-started.adoc b/downstream/modules/platform/ref-controller-credentials-getting-started.adoc index 67003e71c6..54c2c789e8 100644 --- a/downstream/modules/platform/ref-controller-credentials-getting-started.adoc +++ b/downstream/modules/platform/ref-controller-credentials-getting-started.adoc @@ -38,7 +38,7 @@ A credential with roles associated retains them if the credential is reassigned Click btn:[Add] to assign the *Demo Credential* to additional users. If no users exist, add them by selecting {MenuControllerUsers} from the navigation panel. -For more information, see xref:assembly-controller-users[Users]. +For more information, see [Users]. Select the *Job Templates* tab to display the job templates associated with this credential, and which jobs have run recently using this credential. diff --git a/downstream/modules/platform/ref-controller-existing-security.adoc b/downstream/modules/platform/ref-controller-existing-security.adoc index aed944b5e5..9c8c9ae578 100644 --- a/downstream/modules/platform/ref-controller-existing-security.adoc +++ b/downstream/modules/platform/ref-controller-existing-security.adoc @@ -7,4 +7,4 @@ Use {ControllerName}'s role-based access control (RBAC) to delegate the minimum Use teams in {ControllerName} to assign permissions to groups of users rather than to users individually. .Additional resources -For more information, see link:https://docs.ansible.com/automation-controller/4.4/html/userguide/security.html#rbac-ug[Role-Based Access Controls] in the _{ControllerUG}_. +For more information, see link:https://docs.ansible.com/automation-controller/4.4/html/userguide/security.html#rbac-ug[Role-Based Access Controls] in _{ControllerUG}_. diff --git a/downstream/modules/platform/ref-controller-export-old-scripts.adoc b/downstream/modules/platform/ref-controller-export-old-scripts.adoc index 978e18c9c1..13ed1c08fd 100644 --- a/downstream/modules/platform/ref-controller-export-old-scripts.adoc +++ b/downstream/modules/platform/ref-controller-export-old-scripts.adoc @@ -67,5 +67,5 @@ $ ansible-inventory -i ./my_scripts/_11__inventory_script_upperorder --list --ex In the preceding example, you can `cd` into `my_scripts` and then issue a `git init` command, add the scripts you want, push it to source control, and then create an SCM inventory source in the user interface. -For more information on syncing or using custom inventory scripts, see link:https://docs.ansible.com/automation-controller/4.4/html/administration/scm-inv-source.html#ag-inv-import[Inventory file importing] in the _{ControllerAG}_. +For more information on syncing or using custom inventory scripts, see link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/assembly-inventory-file-importing[Inventory file importing] in _{ControllerAG}_. diff --git a/downstream/modules/platform/ref-controller-extra-variables.adoc b/downstream/modules/platform/ref-controller-extra-variables.adoc index e9b8abee54..fa031d1648 100644 --- a/downstream/modules/platform/ref-controller-extra-variables.adoc +++ b/downstream/modules/platform/ref-controller-extra-variables.adoc @@ -25,7 +25,7 @@ It is possible that this variable, `debug = true`, can be overridden in a job te To ensure the variables that you pass are not overridden, ensure they are included by redefining them in the survey. You can define extra variables at the inventory, group, and host levels. -If you are specifying the `ALLOW_JINJA_IN_EXTRA_VARS` parameter, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_administration_guide/index#ref-controller-allow-jinja-in-extra-vars[The ALLOW_JINJA_IN_EXTRA_VARS variable] section of the _{ControllerAG}_ to configure it. +If you are specifying the `ALLOW_JINJA_IN_EXTRA_VARS` parameter, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_administration_guide/index#ref-controller-allow-jinja-in-extra-vars[The ALLOW_JINJA_IN_EXTRA_VARS variable] section of _{ControllerAG}_ to configure it. The job template extra variables dictionary is merged with the survey variables. diff --git a/downstream/modules/platform/ref-controller-host-details.adoc b/downstream/modules/platform/ref-controller-host-details.adoc index 1298a09e80..d9ee352097 100644 --- a/downstream/modules/platform/ref-controller-host-details.adoc +++ b/downstream/modules/platform/ref-controller-host-details.adoc @@ -1,11 +1,55 @@ [id="controller-host-details"] -= Host Details += Hosts -The *Host Details* window displays the following information about the host affected by the selected event and its associated play and task: +//Does this need to be a procedure or can it be left a ref. + +A system managed by {PlatformNameShort}, which may include a physical, virtual, cloud-based server, or other device. +Typically a host is an operating system instance. +Hosts are grouped in inventories and are sometimes referred to as a “nodes”. + +Ansible works against multiple managed nodes or “hosts” in your infrastructure at the same time, using a list or group of lists known as an inventory. + +Once your inventory is defined, you use patterns to select the hosts or groups you want Ansible to run against. + +== Viewing the host details + +To view the Host details for a job run. + +.Procedure + +From the navigation panel, select {MenuInfrastructureHosts}. +The *Hosts* page displays the following information about the host affected by the selected event and its associated play and task: * The *Host*. -* The *Status*. +* The *Description*. +* The *Inventory* associated with that host. + +Selecting a particular host displays the *Details* page for that host. + +== Creating a host + +To create a new host. +From the navigation panel, select {MenuInfrastructureHosts}. +Click btn:[Create host]. +On the *Create Host* page enter the following information: + +* *Name*: Enter a name for the host. +* (Optional) *Description*: Enter a description for the host. +* *Inventory*: Select the inventory to contain that host from the list. +* *Variables*: Enter the inventory file variables associated with the host. + +Click btn:[Create host] to save your changes. + + +.Procedure + +From the navigation panel, select {MenuInfrastructureHosts}. +The *Hosts* page displays the following information about the host affected by the selected event and its associated play and task: + + + + * The type of run in the *Play* field. * The type of *Task*. * If applicable, the Ansible Module task, and any arguments for that module. diff --git a/downstream/modules/platform/ref-controller-instance-group-capacity.adoc b/downstream/modules/platform/ref-controller-instance-group-capacity.adoc index d5cd78d11c..0402e46bc1 100644 --- a/downstream/modules/platform/ref-controller-instance-group-capacity.adoc +++ b/downstream/modules/platform/ref-controller-instance-group-capacity.adoc @@ -30,4 +30,4 @@ For container groups, using the `max_forks` value is useful given that all jobs The default `pod_spec` sets requests and not limits, so the pods can "burst" above their requested value without being throttled or reaped. By setting the `max_forks value`, you can help prevent a scenario where too many jobs with large forks values get scheduled concurrently and cause the OpenShift nodes to be oversubscribed with multiple pods using more resources than their requested value. -To set the maximum values for the concurrent jobs and forks in an instance group, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-create-instance-group[Creating an instance group] in the _{ControllerUG}_. +To set the maximum values for the concurrent jobs and forks in an instance group, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-create-instance-group[Creating an instance group] in _{ControllerUG}_. diff --git a/downstream/modules/platform/ref-controller-instance-group-policies.adoc b/downstream/modules/platform/ref-controller-instance-group-policies.adoc index fa11ad53d3..8ae62e03c2 100644 --- a/downstream/modules/platform/ref-controller-instance-group-policies.adoc +++ b/downstream/modules/platform/ref-controller-instance-group-policies.adoc @@ -20,4 +20,4 @@ image::ug-instance-groups_list_view.png[Instance Groups list view] .Additional resources -For more information, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-instance-groups[Managing Instance Groups] section of the _{ControllerUG}_. \ No newline at end of file +For more information, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-instance-groups[Managing Instance Groups] section of _{ControllerUG}_. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-isolation-functionality.adoc b/downstream/modules/platform/ref-controller-isolation-functionality.adoc index 7e0b554ab6..de84442a7b 100644 --- a/downstream/modules/platform/ref-controller-isolation-functionality.adoc +++ b/downstream/modules/platform/ref-controller-isolation-functionality.adoc @@ -30,4 +30,4 @@ If your playbooks need to use keys or settings defined in `AWX_ISOLATION_SHOW_PA The fields described here can be found on the *Jobs settings* page: -image:configure-tower-jobs-isolated-jobs-fields.png[image] \ No newline at end of file +image::job-settings-full.png[Jobs settings options] \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-logging-splunk.adoc b/downstream/modules/platform/ref-controller-logging-splunk.adoc index 373459953b..b35a3c5fcd 100644 --- a/downstream/modules/platform/ref-controller-logging-splunk.adoc +++ b/downstream/modules/platform/ref-controller-logging-splunk.adoc @@ -34,6 +34,6 @@ The Splunk HTTP Event Collector listens on port 8088 by default, so you must pro Typical values are shown in the following example: -image:logging-splunk-tower-example.png[Splunk logging example] +image:logging-splunk-controller-example.png[Splunk logging example] For more information on configuring the HTTP Event Collector, see the link:https://docs.splunk.com/Documentation/Splunk/latest/Data/UsetheHTTPEventCollector[Splunk documentation]. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-old-job-history.adoc b/downstream/modules/platform/ref-controller-old-job-history.adoc index 92ac387ae8..c7a3a57d65 100644 --- a/downstream/modules/platform/ref-controller-old-job-history.adoc +++ b/downstream/modules/platform/ref-controller-old-job-history.adoc @@ -19,4 +19,4 @@ jobs. For more information, see xref:proc-controller-scheduling-deletion[Scheduling deletion]. -You can also set or review notifications associated with this management job in the same way as described in xref:proc-controller-management-notifications[Notifications] for activity stream management jobs, or for more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_user_guide/controller-notifications[Notifications] in the _{ControllerUG}_. +You can also set or review notifications associated with this management job in the same way as described in xref:proc-controller-management-notifications[Notifications] for activity stream management jobs, or for more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_user_guide/controller-notifications[Notifications] in _{ControllerUG}_. diff --git a/downstream/modules/platform/ref-controller-prompted-vault-credentials.adoc b/downstream/modules/platform/ref-controller-prompted-vault-credentials.adoc index b98baea532..498f61ee0d 100644 --- a/downstream/modules/platform/ref-controller-prompted-vault-credentials.adoc +++ b/downstream/modules/platform/ref-controller-prompted-vault-credentials.adoc @@ -32,4 +32,4 @@ POST /api/v2/job_templates/N/launch/ Instead of uploading sensitive credential information into {ControllerName}, you can link credential fields to external systems and use them to run your playbooks. -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#assembly-controller-secret-management[Secret Management System] in the {ControllerUG}. +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#assembly-controller-secret-management[Secret Management System] in _{ControllerUG}_. diff --git a/downstream/titles/controller/controller-admin-guide/master.adoc b/downstream/titles/controller/controller-admin-guide/master.adoc index 0f72054fd9..667dec89f2 100644 --- a/downstream/titles/controller/controller-admin-guide/master.adoc +++ b/downstream/titles/controller/controller-admin-guide/master.adoc @@ -18,26 +18,30 @@ include::{Boilerplate}[] //include::platform/assembly-controller-licensing.adoc[leveloffset=+1] include::platform/assembly-ag-controller-start-stop-controller.adoc[leveloffset=+1] +//Uses Settings menu. Which may be separate documentation. +include::platform/assembly-ag-controller-config.adoc[leveloffset=+1] +include::platform/assembly-controller-improving-performance.adoc[leveloffset=+1] +include::platform/assembly-controller-management-jobs.adoc[leveloffset=+1] //Deprecated //include::platform/assembly-custom-inventory-scripts.adoc[leveloffset=+1] include::platform/assembly-inventory-file-importing.adoc[leveloffset=+1] //include::platform/assembly-multi-credential-assignment.adoc[leveloffset=+1] -include::platform/assembly-controller-management-jobs.adoc[leveloffset=+1] include::platform/assembly-ag-controller-clustering.adoc[leveloffset=+1] -include::platform/assembly-ag-instance-and-container-groups.adoc[leveloffset=+1] -include::platform/assembly-controller-instances.adoc[leveloffset=+1] -include::platform/assembly-controller-topology-viewer.adoc[leveloffset=+1] +//Removed to user Guide +//include::platform/assembly-controller-instances.adoc[leveloffset=+1] +//include::platform/assembly-ag-instance-and-container-groups.adoc[leveloffset=+1] +//Removed to User Guide +//include::platform/assembly-controller-topology-viewer.adoc[leveloffset=+1] include::platform/assembly-controller-log-files.adoc[leveloffset=+1] //Lizzi's work: Logging removed at 2.5-next include::platform/assembly-controller-logging-aggregation.adoc[leveloffset=+1] include::platform/assembly-controller-metrics.adoc[leveloffset=+1] -include::platform/assembly-controller-improving-performance.adoc[leveloffset=+1] +include::platform/assembly-controller-secret-management.adoc[leveloffset=+1] include::platform/assembly-ag-controller-secret-handling.adoc[leveloffset=+1] include::platform/assembly-ag-controller-security-best-practices.adoc[leveloffset=+1] include::platform/assembly-controller-awx-manage-utility.adoc[leveloffset=+1] -//Uses Settings menu. Which may be separate documentation. -include::platform/assembly-ag-controller-config.adoc[leveloffset=+1] -include::platform/assembly-controller-isolation-function-variables.adoc[leveloffset=+1] +//Duplicate of content in security and now moved to jobs +//include::platform/assembly-controller-isolation-function-variables.adoc[leveloffset=+1] //Donna's work //include::platform/assembly-controller-token-based-authentication.adoc[leveloffset=+1] //include::platform/assembly-controller-set-up-social-authentication.adoc[leveloffset=+1] diff --git a/downstream/titles/controller/controller-user-guide/docinfo.xml b/downstream/titles/controller/controller-user-guide/docinfo.xml index dc905f927f..c9b9167117 100644 --- a/downstream/titles/controller/controller-user-guide/docinfo.xml +++ b/downstream/titles/controller/controller-user-guide/docinfo.xml @@ -3,7 +3,7 @@ 2.5 User guide for automation controller - This guide describes the use of the Red Hat Ansible Automation Platform Controller (automation controller). + This guide shows you how to use automation controller to define, operate, scale and delegate automation. Red Hat Customer Content Services diff --git a/downstream/titles/controller/controller-user-guide/master.adoc b/downstream/titles/controller/controller-user-guide/master.adoc index 0c91598c02..d96217c349 100644 --- a/downstream/titles/controller/controller-user-guide/master.adoc +++ b/downstream/titles/controller/controller-user-guide/master.adoc @@ -14,7 +14,7 @@ include::attributes/attributes.adoc[] Thank you for your interest in {PlatformName} {ControllerName}. {ControllerNameStart} helps teams manage complex multitiered deployments by adding control, knowledge, and delegation to Ansible-powered environments. -The {ControllerNameStart} User Guide describes all of the functionality available in {ControllerName}. +Using {ControllerName} describes all of the functionality available in {ControllerName}. It assumes moderate familiarity with Ansible, including concepts such as playbooks, variables, and tags. For more information about these and other Ansible concepts, see the link:https://docs.ansible.com/[Ansible documentation]. @@ -24,33 +24,52 @@ include::platform/assembly-UG-overview.adoc[leveloffset=+1] include::platform/assembly-controller-licensing.adoc[leveloffset=+1] include::platform/assembly-controller-login.adoc[leveloffset=+1] include::platform/assembly-controller-managing-subscriptions.adoc[leveloffset=+1] +//Rewritten for 2.5 include::platform/assembly-controller-user-interface.adoc[leveloffset=+1] include::platform/assembly-controller-search.adoc[leveloffset=+1] -include::platform/assembly-controller-organizations.adoc[leveloffset=+1] -include::platform/assembly-controller-users.adoc[leveloffset=+1] -include::platform/assembly-controller-teams.adoc[leveloffset=+1] -include::platform/assembly-controller-credentials.adoc[leveloffset=+1] -//In the new UI, Credential types is part of Credentials. -include::platform/assembly-controller-custom-credentials.adoc[leveloffset=+1] -include::platform/assembly-controller-secret-management.adoc[leveloffset=+1] -include::platform/assembly-controller-applications.adoc[leveloffset=+1] -include::platform/assembly-controller-execution-environments.adoc[leveloffset=+1] -include::platform/assembly-controller-ee-setup-reference.adoc[leveloffset=+1] +//Jobs +include::platform/assembly-ug-controller-jobs.adoc[leveloffset=+1] +//Templates +include::platform/assembly-ug-controller-job-templates.adoc[leveloffset=+1] +include::platform/assembly-ug-controller-job-slicing.adoc[leveloffset=+1] +//This includes workflow approvals. +include::platform/assembly-ug-controller-workflow-job-templates.adoc[leveloffset=+1] +include::platform/assembly-ug-controller-workflows.adoc[leveloffset=+1] +//Schedules +include::platform/assembly-ug-controller-schedules.adoc[leveloffset=+1] +//Projects include::platform/assembly-controller-projects.adoc[leveloffset=+1] include::platform/assembly-controller-project-signing.adoc[leveloffset=+1] +//Infrastructure-Topology View +include::platform/assembly-controller-topology-viewer.adoc[leveloffset=+1] +//Infrastructure-Inventories include::platform/assembly-controller-inventories.adoc[leveloffset=+1] include::platform/assembly-controller-inventory-templates.adoc[leveloffset=+1] -include::platform/assembly-ug-controller-job-templates.adoc[leveloffset=+1] -include::platform/assembly-ug-controller-job-slicing.adoc[leveloffset=+1] -include::platform/assembly-ug-controller-workflows.adoc[leveloffset=+1] -include::platform/assembly-ug-controller-workflow-job-templates.adoc[leveloffset=+1] +//Adding short Hosts assembly +include::platform/assembly-controller-hosts.adoc[leveloffset=+1] +//Infrastructure-Instance Groups include::platform/assembly-ug-controller-instance-groups.adoc[leveloffset=+1] -include::platform/assembly-ug-controller-jobs.adoc[leveloffset=+1] +include::platform/assembly-ag-instance-and-container-groups.adoc[leveloffset=+1] +//Infrastructure-Instances +include::platform/assembly-controller-instances.adoc[leveloffset=+1] +//Infrastructure-Execution environments +include::platform/assembly-controller-execution-environments.adoc[leveloffset=+1] +include::platform/assembly-controller-ee-setup-reference.adoc[leveloffset=+1] +//Moved to Donna's Access management document +//include::platform/assembly-controller-organizations.adoc[leveloffset=+1] +//include::platform/assembly-controller-users.adoc[leveloffset=+1] +//include::platform/assembly-controller-teams.adoc[leveloffset=+1] +//Possibly in Donna's credentials document +//include::platform/assembly-controller-credentials.adoc[leveloffset=+1] +//include::platform/assembly-controller-custom-credentials.adoc[leveloffset=+1] +//Moved to admin guide +//include::platform/assembly-controller-secret-management.adoc[leveloffset=+1] +//include::platform/assembly-controller-applications.adoc[leveloffset=+1] include::platform/assembly-ug-controller-work-with-webhooks.adoc[leveloffset=+1] include::platform/assembly-ug-controller-notifications.adoc[leveloffset=+1] include::platform/assembly-ug-controller-attributes-custom-notifications.adoc[leveloffset=+1] -include::platform/assembly-ug-controller-schedules.adoc[leveloffset=+1] include::platform/assembly-ug-controller-setting-up-insights.adoc[leveloffset=+1] include::platform/assembly-controller-best-practices.adoc[leveloffset=+1] -include::platform/assembly-controller-security.adoc[leveloffset=+1] +//RBAC contents to Donna's document, Jobs info to Jobs. +//include::platform/assembly-controller-security.adoc[leveloffset=+1] include::platform/assembly-controller-glossary.adoc[leveloffset=+1] From 21c4fd7072b863c10fc038dfe508c12db4279561 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Mon, 8 Jul 2024 14:52:20 +0100 Subject: [PATCH 019/590] 2.5 Created Open Source licenses (#1529) (#1530) Create open-source license modules https://issues.redhat.com/browse/AAP-26401 --- downstream/aap-common/apache-2.0-license.adoc | 57 +++++ downstream/aap-common/gplv3-license-text.adoc | 231 ++++++++++++++++++ 2 files changed, 288 insertions(+) create mode 100644 downstream/aap-common/apache-2.0-license.adoc create mode 100644 downstream/aap-common/gplv3-license-text.adoc diff --git a/downstream/aap-common/apache-2.0-license.adoc b/downstream/aap-common/apache-2.0-license.adoc new file mode 100644 index 0000000000..47bfabf61d --- /dev/null +++ b/downstream/aap-common/apache-2.0-license.adoc @@ -0,0 +1,57 @@ +[id="apache-2.0-license"] + +[.text-center] +Apache License +[.text-center] +Version 2.0, January 2004 +[.text-center] +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +*1. Definitions.* + +*"License"* shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +*"Licensor"* shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +*"Legal Entity"* shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, *"control"* means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +*"You"* (or *"Your"*) shall mean an individual or Legal Entity exercising permissions granted by this License. + +*"Source"* form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +*"Object"* form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +*"Work"* shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +*"Derivative Works"* shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +*"Contribution"* shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, *"submitted"* means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as *"Not a Contribution."* + +*"Contributor"* shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +*2. Grant of Copyright License.* Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +*3. Grant of Patent License.* Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +*4. Redistribution.* You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +.. You must give any other recipients of the Work or Derivative Works a copy of this License; and +.. You must cause any modified files to carry prominent notices stating that You changed the files; and +.. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and +.. If the Work includes a *"NOTICE"* text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +*5. Submission of Contributions.* Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +*6. Trademarks.* This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +*7. Disclaimer of Warranty.* Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +*8. Limitation of Liability.* In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +*9. Accepting Warranty or Additional Liability.* While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/downstream/aap-common/gplv3-license-text.adoc b/downstream/aap-common/gplv3-license-text.adoc new file mode 100644 index 0000000000..948f538d7b --- /dev/null +++ b/downstream/aap-common/gplv3-license-text.adoc @@ -0,0 +1,231 @@ +[id="gplv3-license-text"] + +[.text-center] +GNU GENERAL PUBLIC LICENSE +[.text-center] +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc.<> + +Everyone is permitted to copy and distribute ve>rbatim copies of this license document, but changing it is not allowed. + +[discrete] +==== Preamble +The GNU General Public License is a free, copyleft license for software and other kinds of works. + +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and modification follow. + +[discrete] +==== TERMS AND CONDITIONS + +.0. Definitions. +“This License” refers to version 3 of the GNU General Public License. + +“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + +“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. + +To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. + +A “covered work” means either the unmodified Program or a work based on the Program. + +To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. + +To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. + +.1. Source Code. +The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. + +A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. + +The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. + +The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + +.2. Basic Permissions. +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +.3. Protecting Users' Legal Rights From Anti-Circumvention Law. +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. + +.4. Conveying Verbatim Copies. +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. + +.5. Conveying Modified Source Versions. +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: + +* a) The work must carry prominent notices stating that you modified it, and giving a relevant date. +* b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. +* c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. +* d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. + +.6. Conveying Non-Source Forms. +You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: + +* a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. +* b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. +* c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. +* d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. +* e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. + +A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. + +“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. + +.7. Additional Terms. +“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: + +* a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or +* b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or +* c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or +* d) Limiting the use for publicity purposes of names of licensors or authors of the material; or +* e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or +* f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. + +All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. + +.8. Termination. +You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. + +.9. Acceptance Not Required for Having Copies. +You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. + +.10. Automatic Licensing of Downstream Recipients. +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. + +An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. + +.11. Patents. +A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. + +A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. + +In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. + +A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. + +.12. No Surrender of Others' Freedom. +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. + +.13. Use with the GNU Affero General Public License. +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. + +.14. Revised Versions of this License. +The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. + +.15. Disclaimer of Warranty. +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +.16. Limitation of Liability. +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +.17. Interpretation of Sections 15 and 16. +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS +[discrete] +==== How to Apply These Terms to Your New Programs +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. +---- + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +---- +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: +---- + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. +---- +The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. + +You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <>. + +The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <>. + From ca8e9a7316677f8033847a9bf19c5976756a5806 Mon Sep 17 00:00:00 2001 From: Robert Grange <95885266+rogrange@users.noreply.github.com> Date: Mon, 8 Jul 2024 15:45:34 -0400 Subject: [PATCH 020/590] Adds new EDA 2.5 w/controller 2.4 adoc. Updates main assembly file. (#1538) (#1542) * Adds new EDA 2.5 w/controller 2.4 adoc. Updates main assembly file. Adding new file and content for installing EDA 2.5 with controller 2.4. Updated the assembly-platform-install-scenario.adoc to reflect the new file. Resolves: AAP-23518 * Update con-eda-2-5-with-controller-2-4.adoc * Update con-eda-2-5-with-controller-2-4.adoc --- .../assembly-platform-install-scenario.adoc | 1 + .../con-eda-2-5-with-controller-2-4.adoc | 61 +++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 downstream/modules/platform/con-eda-2-5-with-controller-2-4.adoc diff --git a/downstream/assemblies/platform/assembly-platform-install-scenario.adoc b/downstream/assemblies/platform/assembly-platform-install-scenario.adoc index effbe210bf..0729864dcb 100644 --- a/downstream/assemblies/platform/assembly-platform-install-scenario.adoc +++ b/downstream/assemblies/platform/assembly-platform-install-scenario.adoc @@ -33,6 +33,7 @@ There are several supported installation scenarios for {PlatformName}. To instal include::platform/proc-editing-inventory-file.adoc[leveloffset=+1] include::platform/con-install-scenario-examples.adoc[leveloffset=+1] include::platform/con-install-scenario-recommendations.adoc[leveloffset=+2] +include::platform/con-eda-2-5-with-controller-2-4.adoc[leveloffset=+3] //[ifowler] Removed for AAP-18700 Install Guide Scenario Consolidation //include::platform/ref-platform-non-inst-database-inventory.adoc[leveloffset=+3] include::platform/ref-single-controller-ext-installer-managed-db.adoc[leveloffset=+3] diff --git a/downstream/modules/platform/con-eda-2-5-with-controller-2-4.adoc b/downstream/modules/platform/con-eda-2-5-with-controller-2-4.adoc new file mode 100644 index 0000000000..f70df85dcb --- /dev/null +++ b/downstream/modules/platform/con-eda-2-5-with-controller-2-4.adoc @@ -0,0 +1,61 @@ +:_newdoc-version: 2.18.3 +:_template-generated: 2024-07-05 + +:_mod-docs-content-type: CONCEPT + +[id="eda-2-5-with-controller-2-4_{context}"] += {EDAName} 2.5 with controller 2.4 + +Use the following example to populate the inventory file to deploy a new single instance of {EDAName} 2.5 with controller 2.4. For {EDAName}, the requirements for a connection to controller are the `automation_controller_main_url` pointing to the 2.4 controller URL. + + +---- +[automationedacontroller] +eda.example.org + +[automationgateway] +eda.example.org + +[database] +data.example.com + +[all:vars] + +automationedacontroller_admin_password='' + +automationedacontroller_pg_host='data.example.com' +automationedacontroller_pg_port=5432 + +automationedacontroller_pg_database='automationedacontroller' +automationedacontroller_pg_username='automationedacontroller' +automationedacontroller_pg_password='' +automationedacontroller_pg_sslmode='prefer' + + +automation_controller_main_url='automationcontroller.example.org ' +#automationedacontroller_controller_verify_ssl=true <1> + +registry_url='registry.redhat.io' +registry_username='' +registry_password='' + +automationgateway_admin_password='' + +automationgateway_pg_host='data.example.com' +automationgateway_pg_port=5432 + +automationgateway_pg_database='automationgateway' +automationgateway_pg_username='automationgateway' +automationgateway_pg_password='' +automationgateway_pg_sslmode='prefer' +---- + +<1> This variable will set whether or not TLS will be verified. It is set to true by default, but if not needed be set to false. + +[NOTE] +==== +* Keep `controller` out of the inventory file. Ensure that `[automationcontroller]` is an empty group. +* Only add an {EDAName} 2.5 server. Do not add an {EDAName} 2.4 server since there is no upgrade option available. +==== + + From a1cf50403aa7dee36bd70b371087ad15d2253f96 Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Tue, 9 Jul 2024 08:45:33 +0100 Subject: [PATCH 021/590] AAP-24489 Add VS Code remote icon to images dir (#1541) (#1545) --- downstream/images/vscode-remote-icon.png | Bin 0 -> 307 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 downstream/images/vscode-remote-icon.png diff --git a/downstream/images/vscode-remote-icon.png b/downstream/images/vscode-remote-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..473846b34a8863a56bb8e120b24011b75a00ed4d GIT binary patch literal 307 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K$e=6bp~hFAzD zCoC{7V7X;JHO5-DK}w%tqktvb0h8`aF`tVT@b1dkR>S^j>xCl)MWT&H;f)cjp02zT zYGpe*%l4@S817P3T_UxJ{Yn9IhiHQYn?qX+Q_`a3gHkJg*!h@G(PO`~`r?rdMUf4Q zUN`LE?ADPNGZaw_Q^@BQ_`bM9=p Date: Tue, 9 Jul 2024 13:28:28 +0100 Subject: [PATCH 022/590] Corrected table number (#1547) (#1548) Correct table number https://issues.redhat.com/browse/AAP-26749 --- downstream/modules/platform/ref-system-requirements.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/downstream/modules/platform/ref-system-requirements.adoc b/downstream/modules/platform/ref-system-requirements.adoc index 17c051fb60..474fef0049 100644 --- a/downstream/modules/platform/ref-system-requirements.adoc +++ b/downstream/modules/platform/ref-system-requirements.adoc @@ -31,7 +31,7 @@ h| CPUs | 4 | The following are necessary for you to work with project updates and collections: -* Ensure that the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_planning_guide/ref-network-ports-protocols_planning[network ports and protocols] listed in _Table 5.9. Automation Hub_ are available for successful connection and download of collections from {HubName} or {Galaxy} server. +* Ensure that the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_planning_guide/ref-network-ports-protocols_planning[network ports and protocols] listed in _Table 5.3. Automation Hub_ are available for successful connection and download of collections from {HubName} or {Galaxy} server. * Disable SSL inspection either when using self-signed certificates or for the Red Hat domains. [NOTE] From 1ef5deb66cfa3b1884b4fca48ef641fd26d96720 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Tue, 9 Jul 2024 17:56:16 -0600 Subject: [PATCH 023/590] AAP-26282 - Create snippet that describes the platform gateway (#1543) (#1550) * AAP-26282 - Create snippet that describes the platform gateway * AAP-26282 included a placeholder to link to the new overview content --- downstream/snippets/snip-gateway-component-description.adoc | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 downstream/snippets/snip-gateway-component-description.adoc diff --git a/downstream/snippets/snip-gateway-component-description.adoc b/downstream/snippets/snip-gateway-component-description.adoc new file mode 100644 index 0000000000..9af9201e93 --- /dev/null +++ b/downstream/snippets/snip-gateway-component-description.adoc @@ -0,0 +1,2 @@ +Platform gateway is the service that handles authentication and authorization for the {PlatformNameShort}. It provides a single entry into the {PlatformNameShort} and serves the platform user interface so you can authenticate and access all of the {PlatformNameShort} services from a single location. +//(add link once content is created) For more information about the services available in the {PlatformNameShort}, refer to [new overview content]. From 1894dfd396343a44e1d28c80bebfb9c9f8151344 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Wed, 10 Jul 2024 09:08:52 +0100 Subject: [PATCH 024/590] Deploy guide 2.5 updates (#1493) (#1554) * Deploy guide 2.5 updates * updates to config chapter and new title for deploy guide * reverting titles * correcting include title --- .../platform/assembly-configure-aap-operator.adoc | 6 +++--- .../platform/proc-operator-deploy-central-config.adoc | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/downstream/assemblies/platform/assembly-configure-aap-operator.adoc b/downstream/assemblies/platform/assembly-configure-aap-operator.adoc index e843928e5a..430ea60d6c 100644 --- a/downstream/assemblies/platform/assembly-configure-aap-operator.adoc +++ b/downstream/assemblies/platform/assembly-configure-aap-operator.adoc @@ -4,7 +4,7 @@ ifdef::context[:parent-context: {context}] :context: configure-aap-operator -= Configuring the {OperatorPlatform} on {OCP} += Configuring the Red Hat {OperatorPlatform} on {OCP} The platform gateway for {PlaformNameShort} enables you to manage the following {PlatformNameShort} components to form a single user interface: @@ -13,7 +13,7 @@ The platform gateway for {PlaformNameShort} enables you to manage the following * {EDAName} * {LightspeedShortName} (This feature is disabled by default, you must opt in to use it.) -Before you can deploy the platform gateway you need to have {OperatorPlatform} installed in a namespace. +Before you can deploy the platform gateway you must have {OperatorPlatform} installed in a namespace. If you have not installed {OperatorPlatform} see <>. If you have the {OperatorPlatform} and some or all of the {PlatformNameShort} components installed see <> for how to proceed. @@ -21,7 +21,7 @@ If you have the {OperatorPlatform} and some or all of the {PlatformNameShort} co include::platform/proc-operator-link-components.adoc[leveloffset=+1] include::platform/proc-operator-access-aap.adoc[leveloffset=+1] include::platform/proc-operator-deploy-central-config.adoc[leveloffset=+1] -include::platform/proc-operator-aap-troubleshooting.adoc[leveloffset=+1] +include::platform/proc-operator-aap-faq.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] \ No newline at end of file diff --git a/downstream/modules/platform/proc-operator-deploy-central-config.adoc b/downstream/modules/platform/proc-operator-deploy-central-config.adoc index 57566a1e80..5569c4f58a 100644 --- a/downstream/modules/platform/proc-operator-deploy-central-config.adoc +++ b/downstream/modules/platform/proc-operator-deploy-central-config.adoc @@ -46,7 +46,7 @@ apiVersion: aap.ansible.com/v1alpha1 lightspeed: disabled: true ---- -.. For new components, if you do not specify a name, a default name generates. +.. For new components, if you do not specify a name, a default name is generated. . Click btn:[Create]. . To access your new instance, see <>. From 3096231e9b01e04c15d14c52ee7432d4aad7edc0 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Wed, 10 Jul 2024 09:35:48 +0100 Subject: [PATCH 025/590] Update VM install guide to incorporate gateway (#1553) (#1555) Update VM install product docs to incorporate Gateway https://issues.redhat.com/browse/AAP-17771 --- ...assembly-appendix-inventory-file-vars.adoc | 1 + .../assembly-disconnected-installation.adoc | 3 +- .../assembly-platform-install-overview.adoc | 13 +- .../assembly-platform-install-scenario.adoc | 44 +++--- .../assembly-system-requirements.adoc | 1 + downstream/attributes/attributes.adoc | 2 +- .../con-install-scenario-recommendations.adoc | 5 +- .../platform/proc-running-setup-script.adoc | 2 +- ...-upgrading-between-minor-aap-releases.adoc | 2 +- .../proc-verify-aap-installation.adoc | 21 +++ .../ref-gateway-controller-ext-db.adoc | 62 +++++++++ ...ref-gateway-controller-hub-eda-ext-db.adoc | 129 ++++++++++++++++++ .../ref-gateway-controller-hub-ext-db.adoc | 87 ++++++++++++ .../ref-gateway-system-requirements.adoc | 14 ++ .../platform/ref-gateway-variables.adoc | 52 +++++++ .../modules/platform/ref-hub-variables.adoc | 2 + .../platform/ref-postgresql-requirements.adoc | 2 +- .../platform/ref-system-requirements.adoc | 9 +- 18 files changed, 415 insertions(+), 36 deletions(-) create mode 100644 downstream/modules/platform/proc-verify-aap-installation.adoc create mode 100644 downstream/modules/platform/ref-gateway-controller-ext-db.adoc create mode 100644 downstream/modules/platform/ref-gateway-controller-hub-eda-ext-db.adoc create mode 100644 downstream/modules/platform/ref-gateway-controller-hub-ext-db.adoc create mode 100644 downstream/modules/platform/ref-gateway-system-requirements.adoc create mode 100644 downstream/modules/platform/ref-gateway-variables.adoc diff --git a/downstream/assemblies/platform/assembly-appendix-inventory-file-vars.adoc b/downstream/assemblies/platform/assembly-appendix-inventory-file-vars.adoc index 70b64619a1..86d91e424e 100644 --- a/downstream/assemblies/platform/assembly-appendix-inventory-file-vars.adoc +++ b/downstream/assemblies/platform/assembly-appendix-inventory-file-vars.adoc @@ -13,3 +13,4 @@ include::platform/ref-hub-variables.adoc[leveloffset=+1] include::platform/ref-controller-variables.adoc[leveloffset=+1] include::platform/ref-ansible-inventory-variables.adoc[leveloffset=+1] include::platform/ref-eda-controller-variables.adoc[leveloffset=+1] +include::platform/ref-gateway-variables.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-disconnected-installation.adoc b/downstream/assemblies/platform/assembly-disconnected-installation.adoc index a823e7d6d1..7d35241693 100644 --- a/downstream/assemblies/platform/assembly-disconnected-installation.adoc +++ b/downstream/assemblies/platform/assembly-disconnected-installation.adoc @@ -50,7 +50,8 @@ include::platform/proc-building-the-custom-execution-environment.adoc[leveloffse include::platform/proc-uploading-the-custom-execution-environment-to-the-private-hub.adoc[leveloffset=+2] -include::platform/proc-upgrading-between-minor-aap-releases.adoc[leveloffset=+1] +// Removing references to upgrades for 2.5-ea - AAP-17771 +// include::platform/proc-upgrading-between-minor-aap-releases.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/platform/assembly-platform-install-overview.adoc b/downstream/assemblies/platform/assembly-platform-install-overview.adoc index e928ba7551..b06ba3f361 100644 --- a/downstream/assemblies/platform/assembly-platform-install-overview.adoc +++ b/downstream/assemblies/platform/assembly-platform-install-overview.adoc @@ -9,19 +9,22 @@ ifdef::context[:parent-context: {context}] [role="_abstract"] -The {PlatformName} installation program offers you flexibility, allowing you to install {PlatformNameShort} by using a number of supported installation scenarios. Starting with {PlatformNameShort} {PlatformVers}, the installation scenarios include the optional deployment of {EDAcontroller}, which introduces the automated resolution of IT requests. +The {PlatformName} installation program offers you flexibility, allowing you to install {PlatformNameShort} by using several supported installation scenarios. Regardless of the installation scenario you choose, installing {PlatformNameShort} involves the following steps: xref:proc-editing-installer-inventory-file_platform-install-scenario[Editing the {PlatformName} installer inventory file]:: The {PlatformNameShort} installer inventory file allows you to specify your installation scenario and describe host deployments to Ansible. The examples provided in this document show the parameter specifications needed to install that scenario for your deployment. -xref:proc-running-setup-script_platform-install-scenario[Running the {PlatformName} installer setup script]:: The setup script installs your private automation hub by using the required parameters defined in the inventory file. +xref:proc-running-setup-script_platform-install-scenario[Running the {PlatformName} installer setup script]:: The setup script installs {PlatformNameShort} by using the required parameters defined in the inventory file. -xref:proc-verify-controller-installation_platform-install-scenario[Verifying {ControllerName} installation]:: After installing {PlatformNameShort}, you can verify that the installation has been successful by logging in to the {ControllerName}. +xref:proc-verify-aap-installation_platform-install-scenario[Verifying your {PlatformNameShort} installation]:: After installing {PlatformNameShort}, you can verify that the installation has been successful by logging in to the platform UI and seeing the relevant functionality. -xref:proc-verify-hub-installation_platform-install-scenario[Verifying {HubName} installation]:: After installing {PlatformNameShort}, you can verify that the installation has been successful by logging in to the {HubName}. +// Removing to consolidate AAP installation verification - you verify by logging into the gateway rather than logging into each component's UI - AAP-17771 +// xref:proc-verify-controller-installation_platform-install-scenario[Verifying {ControllerName} installation]:: After installing {PlatformNameShort}, you can verify that the installation has been successful by logging in to the {ControllerName}. -xref:proc-verify-eda-controller-installation_platform-install-scenario[Verifying {EDAcontroller} installation]:: After installing {PlatformNameShort}, you can verify that the installation has been successful by logging in to the {EDAcontroller}. +// xref:proc-verify-hub-installation_platform-install-scenario[Verifying {HubName} installation]:: After installing {PlatformNameShort}, you can verify that the installation has been successful by logging in to the {HubName}. + +// xref:proc-verify-eda-controller-installation_platform-install-scenario[Verifying {EDAcontroller} installation]:: After installing {PlatformNameShort}, you can verify that the installation has been successful by logging in to the {EDAcontroller}. //xref:assembly-platform-whats-next_platform-install-scenario[Post-installation steps]:: After successful installation, you can begin using the features of {PlatformNameShort}. diff --git a/downstream/assemblies/platform/assembly-platform-install-scenario.adoc b/downstream/assemblies/platform/assembly-platform-install-scenario.adoc index 0729864dcb..f3718603fb 100644 --- a/downstream/assemblies/platform/assembly-platform-install-scenario.adoc +++ b/downstream/assemblies/platform/assembly-platform-install-scenario.adoc @@ -10,25 +10,29 @@ ifdef::context[:parent-context: {context}] :context: platform-install-scenario [role="_abstract"] -{PlatformNameShort} is a modular platform. You can deploy {ControllerName} with other automation platform components, such as {HubName} and {EDAcontroller}. For more information about the components provided with {PlatformNameShort}, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_planning_guide/planning-installation#ref-platform-components[{PlatformName} components] in the {PlatformName} Planning Guide. +{PlatformNameShort} is a modular platform. You can deploy {ControllerName} with other components such as {HubName}, {EDAcontroller} and platform gateway. For more information about the components provided with {PlatformNameShort}, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_planning_guide/planning-installation#ref-platform-components[{PlatformName} components] in the {PlatformName} Planning Guide. There are several supported installation scenarios for {PlatformName}. To install {PlatformName}, you must edit the inventory file parameters to specify your installation scenario. You can use one of the following as a basis for your own inventory file: +// New install scenarios including platform gateway AAP-17771 +* xref:ref-gateway-controller-ext-db[Single platform gateway and {ControllerName} with an external (installer managed) database] +* xref:ref-gateway-controller-hub-ext-db[Single platform gateway, {ControllerName}, and {HubName} with an external (installer managed) database] +* xref:ref-gateway-controller-hub-eda-ext-db[Single platform gateway, {ControllerName}, {HubName}, and {EDAcontroller} node with an external (installer managed) database] + +// Removed for install scenario consolidation AAP-17771 +// * xref:ref-single-controller-ext-installer-managed-db[Single {ControllerName} with external (installer managed) database] +// * xref:ref-single-controller-hub-ext-database-inventory[Single {ControllerName} and single {HubName} with external (installer managed) database] +// * xref:ref-single-controller-hub-eda-with-managed-db[Single {ControllerName}, single {HubName}, and single event-driven ansible controller node with external (installer managed ) database] + //[ifowler] Removed for AAP-18700 Install Guide Scenario Consolidation -//* xref:ref-standlone-platform-inventory_platform-install-scenario[Standalone automation controller with external (installer managed) database] -* xref:ref-single-controller-ext-installer-managed-db[Single {ControllerName} with external (installer managed) database] -//[ifowler] Removed for AAP-18700 Install Guide Scenario Consolidation +//* xref:ref-standlone-platform-inventory_platform-install-scenario[Standalone automation controller with external (installer managed) database] //* xref:ref-single-controller-ext-customer-managed-db_platform-install-scenario[Single {ControllerName} with external (customer provided) database] //* xref:ref-standlone-platform-ext-database-inventory_platform-install-scenario[{PlatformNameShort} with an external (installer managed) database] //* xref:ref-example-platform-ext-database-customer-provided_platform-install-scenario[{PlatformNameShort} with an external (customer provided) database] //* xref:ref-single-eda-controller-with-internal-db_platform-install-scenario[Single {EDAcontroller} node with internal database] //* xref:ref-standlone-hub-inventory_platform-install-scenario[Standalone {HubName} with internal database] -* xref:ref-single-controller-hub-ext-database-inventory[Single {ControllerName} and single {HubName} with external (installer managed) database] -//[ifowler] Removed for AAP-18700 Install Guide Scenario Consolidation //* xref:ref-standalone-hub-ext-database-customer-provided_platform-install-scenario[Single {HubName} with external (customer provided) database] // xref:ref-ldap-config-on-pah_platform-install-scenario[LDAP configuration on {PrivateHubName}] -* xref:ref-single-controller-hub-eda-with-managed-db[Single {ControllerName}, single {HubName}, and single event-driven ansible controller node with external (installer managed ) database] - include::platform/proc-editing-inventory-file.adoc[leveloffset=+1] include::platform/con-install-scenario-examples.adoc[leveloffset=+1] @@ -36,16 +40,17 @@ include::platform/con-install-scenario-recommendations.adoc[leveloffset=+2] include::platform/con-eda-2-5-with-controller-2-4.adoc[leveloffset=+3] //[ifowler] Removed for AAP-18700 Install Guide Scenario Consolidation //include::platform/ref-platform-non-inst-database-inventory.adoc[leveloffset=+3] -include::platform/ref-single-controller-ext-installer-managed-db.adoc[leveloffset=+3] -//[ifowler] Removed for AAP-18700 Install Guide Scenario Consolidation //include::platform/ref-single-controller-ext-customer-managed-db.adoc[leveloffset=+3] //include::platform/ref-example-platform-ext-database-inventory.adoc[leveloffset=+3] //include::platform/ref-example-platform-ext-database-customer-provided.adoc[leveloffset=+3] //include::platform/ref-single-eda-controller-with-internal-db.adoc[leveloffset=+3] //include::platform/ref-standalone-hub-inventory.adoc[leveloffset=+3] -include::platform/ref-standalone-controller-hub-ext-database-inventory.adoc[leveloffset=+3] +// include::platform/ref-standalone-controller-hub-ext-database-inventory.adoc[leveloffset=+3] //[rjgrange] Removed for AAP-22613 Removing all references to SSO and LDAP installation //include::platform/ref-connect-hub-to-rhsso.adoc[leveloffset=+4] + +include::platform/ref-gateway-controller-ext-db.adoc[leveloffset=+3] +include::platform/ref-gateway-controller-hub-ext-db.adoc[leveloffset=+3] include::platform/con-ha-hub-installation.adoc[leveloffset=+4] include::platform/proc-install-ha-hub-selinux.adoc[leveloffset=+4] include::platform/proc-configure-pulpcore-service.adoc[leveloffset=+4] @@ -54,16 +59,21 @@ include::hub/hub/proc-configure-content-signing-on-pah.adoc[leveloffset=+3] //[rjgrange] Removed for AAP-22613 Removing all references to SSO and LDAP installation //include::platform/ref-ldap-config-on-pah.adoc[leveloffset=+3] //include::platform/ref-ldap-referrals.adoc[leveloffset=+3] -include::platform/ref-single-controller-hub-eda-with-managed-db.adoc[leveloffset=+3] +// include::platform/ref-single-controller-hub-eda-with-managed-db.adoc[leveloffset=+3] //[ifowler] Removed for AAP-18700 Install Guide Scenario Consolidation //include::platform/ref-standalone-hub-ext-database-customer-provided.adoc[leveloffset=+3] // dcdacosta - removed this assembly because the modules are included above. include::assembly-installing-high-availability-hub.adoc[leveloffset=+3] +include::platform/ref-gateway-controller-hub-eda-ext-db.adoc[leveloffset=+3] include::platform/proc-running-setup-script.adoc[leveloffset=+1] -include::platform/proc-verify-controller-installation.adoc[leveloffset=+1] -include::platform/ref-controller-configs.adoc[leveloffset=+2] -include::platform/proc-verify-hub-installation.adoc[leveloffset=+1] -include::platform/ref-hub-configs.adoc[leveloffset=+2] -include::platform/proc-verify-eda-controller-installation.adoc[leveloffset=+1] +include::platform/proc-verify-aap-installation.adoc[leveloffset=+1] + +// Removing to consolidate AAP installation verification - you verify by logging into the gateway rather than logging into each component's UI - AAP-17771 +// include::platform/proc-verify-controller-installation.adoc[leveloffset=+1] +// include::platform/ref-controller-configs.adoc[leveloffset=+2] +// include::platform/proc-verify-hub-installation.adoc[leveloffset=+1] +// include::platform/ref-hub-configs.adoc[leveloffset=+2] +// include::platform/proc-verify-eda-controller-installation.adoc[leveloffset=+1] + //[ifowler] Removed for AAP-18700 Install Guide Scenario Consolidation moved to Operations Guide //include::assembly-platform-whats-next.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-system-requirements.adoc b/downstream/assemblies/platform/assembly-system-requirements.adoc index ee275df358..e45eeeaefd 100644 --- a/downstream/assemblies/platform/assembly-system-requirements.adoc +++ b/downstream/assemblies/platform/assembly-system-requirements.adoc @@ -14,6 +14,7 @@ Use this information when planning your {PlatformName} installations and designi * You have configured an NTP client on all nodes. For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_upgrade_and_migration_guide/migrate-isolated-execution-nodes#automation_controller_configuration_requirements[Configuring NTP server using Chrony]. include::platform/ref-system-requirements.adoc[leveloffset=+1] +include::platform/ref-gateway-system-requirements.adoc[leveloffset=+1] include::platform/ref-controller-system-requirements.adoc[leveloffset=+1] include::platform/ref-automation-hub-requirements.adoc[leveloffset=+1] include::platform/ref-ha-hub-reqs.adoc[leveloffset=+2] diff --git a/downstream/attributes/attributes.adoc b/downstream/attributes/attributes.adoc index 3ec101a13f..d1adbeceac 100644 --- a/downstream/attributes/attributes.adoc +++ b/downstream/attributes/attributes.adoc @@ -10,7 +10,7 @@ //The Ansible-core version required to install AAP :CoreInstVers: 2.15 //The Ansible-core version used by the AAP control plane and EEs -:CoreUseVers: 2.15 +:CoreUseVers: 2.16 :PlatformDownloadUrl: https://access.redhat.com/downloads/content/480/ver=2.5/rhel---9/2.4/x86_64/product-software :BaseURL: https://docs.redhat.com/en/documentation :VMBase: VM-based installation diff --git a/downstream/modules/platform/con-install-scenario-recommendations.adoc b/downstream/modules/platform/con-install-scenario-recommendations.adoc index 578daf6b11..465d631079 100644 --- a/downstream/modules/platform/con-install-scenario-recommendations.adoc +++ b/downstream/modules/platform/con-install-scenario-recommendations.adoc @@ -5,11 +5,10 @@ [role="_abstract"] Before selecting your installation method for {PlatformNameShort}, review the following recommendations. Familiarity with these recommendations will streamline the installation process. -* For {PlatformName} or {HubName}: Add an {HubName} host in the `[automationhub]` group. // Removed for AAP-20847 and until such time as a decision is made regarding database support. //* Internal databases `[database]` are not supported. See the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/containerized_ansible_automation_platform_installation_guide/index[Containerized {PlatformName} Installation Guide] for further information on using the containerized installer for environments requiring a monolithc deployment. -* Do not install {ControllerName} and {HubName} on the same node for versions of {PlatformNameShort} in a production or customer environment. -This can cause contention issues and heavy resource use. +* Do not install more than one component, for example {ControllerName} and {HubName}, on the same node for versions of {PlatformNameShort} in a production or customer environment. +This can cause connection issues and heavy resource use. * Provide a reachable IP address or fully qualified domain name (FQDN) for the `[automationhub]` and `[automationcontroller]` hosts to ensure users can sync and install content from {HubName} from a different node. + The FQDN must not contain either the `-` or the `_` symbols, as it will not be processed correctly. diff --git a/downstream/modules/platform/proc-running-setup-script.adoc b/downstream/modules/platform/proc-running-setup-script.adoc index c43a9e4a53..22f813c9cf 100644 --- a/downstream/modules/platform/proc-running-setup-script.adoc +++ b/downstream/modules/platform/proc-running-setup-script.adoc @@ -3,7 +3,7 @@ = Running the {PlatformName} installer setup script [role="_abstract"] -After you update the inventory file with required parameters for installing your {PrivateHubName}, run the installer setup script. +After you update the inventory file with required parameters, run the installer setup script. .Procedure diff --git a/downstream/modules/platform/proc-upgrading-between-minor-aap-releases.adoc b/downstream/modules/platform/proc-upgrading-between-minor-aap-releases.adoc index 4abc957029..e25d701841 100644 --- a/downstream/modules/platform/proc-upgrading-between-minor-aap-releases.adoc +++ b/downstream/modules/platform/proc-upgrading-between-minor-aap-releases.adoc @@ -9,7 +9,7 @@ [role="_abstract"] -To upgrade between minor releases of {PlatformNameShort} 2, use this general workflow. +To upgrade between minor releases of {PlatformNameShort} 2 on your {VMBase}, use this general workflow. .Procedure diff --git a/downstream/modules/platform/proc-verify-aap-installation.adoc b/downstream/modules/platform/proc-verify-aap-installation.adoc new file mode 100644 index 0000000000..c441591525 --- /dev/null +++ b/downstream/modules/platform/proc-verify-aap-installation.adoc @@ -0,0 +1,21 @@ +[id="proc-verify-aap-installation_{context}"] + += Verifying installation of {PlatformNameShort} + +[role="_abstract"] +Verify that you installed {PlatformNameShort} successfully by logging in with the admin credentials you inserted in the inventory file. + +.Procedure +. Go to the IP address specified for the platform gateway node in the inventory file. +. Log in with the user ID `admin` and the password credentials you set in the inventory file. +. Depending on the components you configured as part of your installation, you will see the following in the platform UI: +.. For {ControllerName}, you will see *Automation Execution*. +.. For {EDAName}, you will see *Automation Decisions*. +.. For {HubName}, you will see *Automation Content*. + +[IMPORTANT] +==== +If the installation fails and you are a customer who has purchased a valid license for {PlatformName}, contact Ansible through the link:https://access.redhat.com/[Red Hat Customer portal]. +==== + +Upon a successful login, your installation of {PlatformName} is complete. diff --git a/downstream/modules/platform/ref-gateway-controller-ext-db.adoc b/downstream/modules/platform/ref-gateway-controller-ext-db.adoc new file mode 100644 index 0000000000..8d8128a7a8 --- /dev/null +++ b/downstream/modules/platform/ref-gateway-controller-ext-db.adoc @@ -0,0 +1,62 @@ + +[id="ref-gateway-controller-ext-db"] + += Single platform gateway and {ControllerName} with an external (installer managed) database + + +[role="_abstract"] +Use this example to populate the inventory file to deploy single instances of platform gateway and {ControllerName} with an external (installer managed) database. + +----- +[automationcontroller] +controller.example.com + +[automationgateway] +gateway.example.com + +[database] +data.example.com + +[all:vars] +admin_password='' +pg_host='data.example.com' +pg_port=5432 +pg_database='awx' +pg_username='awx' +pg_password='' +pg_sslmode='prefer' # set to 'verify-full' for client-side enforced SSL + +registry_url='registry.redhat.io' +registry_username='' +registry_password='' + +# Automation Gateway configuration +automationgateway_admin_password='' + +automationgateway_pg_host='' +automationgateway_pg_port=5432 + +automationgateway_pg_database='automationgateway' +automationgateway_pg_username='automationgateway' +automationgateway_pg_password='' +automationgateway_pg_sslmode='prefer' + +# The main automation gateway URL that clients will connect to (e.g. https://). +# If not specified, the first node in the [automationgateway] group will be used when needed. +# automationgateway_main_url = '' + +# Certificate and key to install in Automation Gateway +# automationgateway_ssl_cert=/path/to/automationgateway.cert +# automationgateway_ssl_key=/path/to/automationgateway.key + +# SSL-related variables +# If set, this will install a custom CA certificate to the system trust store. +# custom_ca_cert=/path/to/ca.crt +# Certificate and key to install in nginx for the web UI and API +# web_server_ssl_cert=/path/to/tower.cert +# web_server_ssl_key=/path/to/tower.key +# Server-side SSL settings for PostgreSQL (when we are installing it). +# postgres_use_ssl=False +# postgres_ssl_cert=/path/to/pgsql.crt +# postgres_ssl_key=/path/to/pgsql.key +----- diff --git a/downstream/modules/platform/ref-gateway-controller-hub-eda-ext-db.adoc b/downstream/modules/platform/ref-gateway-controller-hub-eda-ext-db.adoc new file mode 100644 index 0000000000..8e52cd7000 --- /dev/null +++ b/downstream/modules/platform/ref-gateway-controller-hub-eda-ext-db.adoc @@ -0,0 +1,129 @@ +[id="ref-gateway-controller-hub-eda-ext-db"] + += Single platform gateway, {ControllerName}, {HubName}, and {EDAcontroller} with an external (installer managed) database + +[role="_abstract"] +Use this example to populate the inventory file to deploy single instances of platform gateway, {ControllerName}, {HubName}, and {EDAcontroller} with an external (installer managed) database. + +[IMPORTANT] +==== +* This scenario requires a minimum of {ControllerName} 2.4 for successful deployment of {EDAcontroller}. + +* {EDAController} must be installed on a separate server and cannot be installed on the same host as {HubName} and {ControllerName}. + +* When you activate an {EDAName} rulebook under standard conditions, it uses approximately 250 MB of memory. However, the actual memory consumption can vary significantly based on the complexity of your rules and the volume and size of the events processed. In scenarios where a large number of events are anticipated or the rulebook complexity is high, conduct a preliminary assessment of resource usage in a staging environment. This ensures that your maximum number of activations is based on the capacity of your resources. In the following example, the default `automationedacontroller_max_running_activations` setting is 12, but you can adjust according to your capacity. + +==== + +----- +[automationcontroller] +controller.example.com + +[automationhub] +automationhub.example.com + +[automationedacontroller] +automationedacontroller.example.com + +[automationgateway] +gateway.example.com + +[database] +data.example.com + +[all:vars] +admin_password='' +pg_host='data.example.com' +pg_port='5432' +pg_database='awx' +pg_username='awx' +pg_password='' +pg_sslmode='prefer' # set to 'verify-full' for client-side enforced SSL + +registry_url='registry.redhat.io' +registry_username='' +registry_password='' + +# {HubNameStart} configuration + +automationhub_admin_password= + +automationhub_pg_host='data.example.com' +automationhub_pg_port=5432 + +automationhub_pg_database='automationhub' +automationhub_pg_username='automationhub' +automationhub_pg_password= +automationhub_pg_sslmode='prefer' + +# Automation {EDAController} configuration + +automationedacontroller_admin_password='' + +automationedacontroller_pg_host='data.example.com' +automationedacontroller_pg_port=5432 + +automationedacontroller_pg_database='automationedacontroller' +automationedacontroller_pg_username='automationedacontroller' +automationedacontroller_pg_password='' + +# Keystore file to install in SSO node +# sso_custom_keystore_file='/path/to/sso.jks' + +# This install will deploy SSO with sso_use_https=True +# Keystore password is required for https enabled SSO +sso_keystore_password='' + +# This install will deploy a TLS enabled Automation Hub. +# If for some reason this is not the behavior wanted one can +# disable TLS enabled deployment. +# +# automationhub_disable_https = False +# The default install will generate self-signed certificates for the Automation +# Hub service. If you are providing valid certificate via automationhub_ssl_cert +# and automationhub_ssl_key, one should toggle that value to True. +# +# automationhub_ssl_validate_certs = False +# SSL-related variables +# If set, this will install a custom CA certificate to the system trust store. +# custom_ca_cert=/path/to/ca.crt +# Certificate and key to install in Automation Hub node +# automationhub_ssl_cert=/path/to/automationhub.cert +# automationhub_ssl_key=/path/to/automationhub.key + +# Automation Gateway configuration +automationgateway_admin_password='' + +automationgateway_pg_host='' +automationgateway_pg_port=5432 + +automationgateway_pg_database='automationgateway' +automationgateway_pg_username='automationgateway' +automationgateway_pg_password='' +automationgateway_pg_sslmode='prefer' + +# The main automation gateway URL that clients will connect to (e.g. https://). +# If not specified, the first node in the [automationgateway] group will be used when needed. +# automationgateway_main_url = '' + +# Certificate and key to install in Automation Gateway +# automationgateway_ssl_cert=/path/to/automationgateway.cert +# automationgateway_ssl_key=/path/to/automationgateway.key + +# Certificate and key to install in nginx for the web UI and API +# web_server_ssl_cert=/path/to/tower.cert +# web_server_ssl_key=/path/to/tower.key +# Server-side SSL settings for PostgreSQL (when we are installing it). +# postgres_use_ssl=False +# postgres_ssl_cert=/path/to/pgsql.crt +# postgres_ssl_key=/path/to/pgsql.key + +# Boolean flag used to verify Automation Controller's +# web certificates when making calls from Automation {EDAcontroller}. +# automationedacontroller_controller_verify_ssl = true +# +# Certificate and key to install in Automation {EDAcontroller} node +# automationedacontroller_ssl_cert=/path/to/automationeda.crt +# automationedacontroller_ssl_key=/path/to/automationeda.key + +----- diff --git a/downstream/modules/platform/ref-gateway-controller-hub-ext-db.adoc b/downstream/modules/platform/ref-gateway-controller-hub-ext-db.adoc new file mode 100644 index 0000000000..3051941d5c --- /dev/null +++ b/downstream/modules/platform/ref-gateway-controller-hub-ext-db.adoc @@ -0,0 +1,87 @@ +[id="ref-gateway-controller-hub-ext-db"] + += Single platform gateway, {ControllerName}, and {HubName} with an external (installer managed) database + +[role="_abstract"] +Use this example to populate the inventory file to deploy single instances of platform gateway, {ControllerName}, and {HubName} with an external (installer managed) database. + +----- +[automationcontroller] +controller.example.com + +[automationhub] +automationhub.example.com + +[automationgateway] +gateway.example.com + +[database] +data.example.com + +[all:vars] +admin_password='' +pg_host='data.example.com' +pg_port='5432' +pg_database='awx' +pg_username='awx' +pg_password='' +pg_sslmode='prefer' # set to 'verify-full' for client-side enforced SSL + +registry_url='registry.redhat.io' +registry_username='' +registry_password='' + +automationhub_admin_password= + +automationhub_pg_host='data.example.com' +automationhub_pg_port=5432 + +automationhub_pg_database='automationhub' +automationhub_pg_username='automationhub' +automationhub_pg_password= +automationhub_pg_sslmode='prefer' + +# The default install will deploy a TLS enabled Automation Hub. +# If for some reason this is not the behavior wanted one can +# disable TLS enabled deployment. +# +# automationhub_disable_https = False +# The default install will generate self-signed certificates for the Automation +# Hub service. If you are providing valid certificate via automationhub_ssl_cert +# and automationhub_ssl_key, one should toggle that value to True. +# +# automationhub_ssl_validate_certs = False +# SSL-related variables +# If set, this will install a custom CA certificate to the system trust store. +# custom_ca_cert=/path/to/ca.crt +# Certificate and key to install in Automation Hub node +# automationhub_ssl_cert=/path/to/automationhub.cert +# automationhub_ssl_key=/path/to/automationhub.key + +# Automation Gateway configuration +automationgateway_admin_password='' + +automationgateway_pg_host='' +automationgateway_pg_port=5432 + +automationgateway_pg_database='automationgateway' +automationgateway_pg_username='automationgateway' +automationgateway_pg_password='' +automationgateway_pg_sslmode='prefer' + +# The main automation gateway URL that clients will connect to (e.g. https://). +# If not specified, the first node in the [automationgateway] group will be used when needed. +# automationgateway_main_url = '' + +# Certificate and key to install in Automation Gateway +# automationgateway_ssl_cert=/path/to/automationgateway.cert +# automationgateway_ssl_key=/path/to/automationgateway.key + +# Certificate and key to install in nginx for the web UI and API +# web_server_ssl_cert=/path/to/tower.cert +# web_server_ssl_key=/path/to/tower.key +# Server-side SSL settings for PostgreSQL (when we are installing it). +# postgres_use_ssl=False +# postgres_ssl_cert=/path/to/pgsql.crt +# postgres_ssl_key=/path/to/pgsql.key +----- diff --git a/downstream/modules/platform/ref-gateway-system-requirements.adoc b/downstream/modules/platform/ref-gateway-system-requirements.adoc new file mode 100644 index 0000000000..10c8a2ce6e --- /dev/null +++ b/downstream/modules/platform/ref-gateway-system-requirements.adoc @@ -0,0 +1,14 @@ +[id="ref-gateway-system-requirements"] + += Platform gateway system requirements + +The platform gateway is the service that handles authentication and authorization for {PlatformNameShort}. It provides a single entry into the platform and serves the platform's user interface. + +Platform gateway has the following system requirements: + +[cols="a,a",options="header"] +|=== +h| Requirement | Minimum required +| *RAM* | 16 GB +| *CPUs* | 4 +|=== \ No newline at end of file diff --git a/downstream/modules/platform/ref-gateway-variables.adoc b/downstream/modules/platform/ref-gateway-variables.adoc new file mode 100644 index 0000000000..ccaf33eb62 --- /dev/null +++ b/downstream/modules/platform/ref-gateway-variables.adoc @@ -0,0 +1,52 @@ + +[id="ref-gateway-variables"] += Platform gateway variables + +[cols="50%,50%",options="header"] +|==== +| *Variable* | *Description* +| *`automationgateway_admin_password`* | The admin password used by the platform gateway instance. + +Passwords must be enclosed in quotes when they are provided in plain text in the inventory file. + +| *`automationgateway_pg_host`* | The hostname of the Postgres database used by platform gateway, which can be an externally managed database. + +| *`automationgateway_pg_port`* | The port number of the Postgres database used by platform gateway. + +Default = `5432`. + +| *`automationgateway_pg_database`* | The Postgres database used by platform gateway. + +Default = `automationgateway`. + +| *`automationgateway_pg_username`* | The username for your platform gateway Postgres database. + +Default = `automationgateway`. + +| *`automationgateway_pg_password`* | The password for the Postgres database used by platform gateway. + +Use of special characters for `automationgateway_pg_password` is limited. The `!`, `#`, `0` and `@` characters are supported. Use of other special characters can cause the setup to fail. + +| *`automationgateway_pg_sslmode`* | Choose one of the two available modes: `prefer` and `verify-full`. + +Set to `verify-full` for client-side enforced SSL. + +Default = `prefer`. + +| *`automationgateway_main_url`* | The main platform gateway URL that clients will connect to (e.g. `https://`). + +If not specified, the first node in the `[automationgateway]` group will be used when needed. + +| *`automationgateway_ssl_cert`* | Optional + +`/path/to/automationgateway.cert` + +Same as `automationhub_ssl_cert` but for platform gateway UI and API. + +| *`automationgateway_ssl_key`* | Optional + +`/path/to/automationgateway.key` + +Same as `automationhub_server_ssl_key` but for platform gateway UI and API. + +|==== diff --git a/downstream/modules/platform/ref-hub-variables.adoc b/downstream/modules/platform/ref-hub-variables.adoc index d57ef54e6b..f4786c1268 100644 --- a/downstream/modules/platform/ref-hub-variables.adoc +++ b/downstream/modules/platform/ref-hub-variables.adoc @@ -201,3 +201,5 @@ Default = `TLSv1.2`. The path is on the Ansible management node. It is used to encrypt certain fields in the database, such as credentials. If not specified, a new key will be generated. + +|==== \ No newline at end of file diff --git a/downstream/modules/platform/ref-postgresql-requirements.adoc b/downstream/modules/platform/ref-postgresql-requirements.adoc index d199308bbc..1fb32880db 100644 --- a/downstream/modules/platform/ref-postgresql-requirements.adoc +++ b/downstream/modules/platform/ref-postgresql-requirements.adoc @@ -2,7 +2,7 @@ = PostgreSQL requirements -{PlatformName} uses PostgreSQL 13. PostgreSQL user passwords are hashed with SCRAM-SHA-256 secure hashing algorithm before storing in the database. +{PlatformName} uses PostgreSQL 15. PostgreSQL user passwords are hashed with SCRAM-SHA-256 secure hashing algorithm before storing in the database. To determine if your {ControllerName} instance has access to the database, you can do so with the command, `awx-manage check_db` command. diff --git a/downstream/modules/platform/ref-system-requirements.adoc b/downstream/modules/platform/ref-system-requirements.adoc index 474fef0049..7a3dd6b227 100644 --- a/downstream/modules/platform/ref-system-requirements.adoc +++ b/downstream/modules/platform/ref-system-requirements.adoc @@ -14,9 +14,9 @@ Your system must meet the following minimum system requirements to install and r h| Subscription | Valid {PlatformName} | -h| OS | {RHEL} 8.8 or later 64-bit (x86, ppc64le, s390x, aarch64) |{PlatformName} is also supported on OpenShift, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/deploying_the_red_hat_ansible_automation_platform_operator_on_openshift_container_platform/index[Deploying the Red Hat Ansible Automation Platform operator on OpenShift Container Platform] for more information. +h| OS | {RHEL} 8.8 or later 64-bit (x86, ppc64le, s390x, aarch64) |{PlatformName} is also supported on OpenShift, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/deploying_the_red_hat_ansible_automation_platform_operator_on_openshift_container_platform/index[Deploying the {PlatformName} operator on {OCPShort}] for more information. -h| Ansible-core | Ansible-core version {CoreInstVers} or later | {PlatformNameShort} includes execution environments that contain ansible-core {CoreUseVers}. +h| Ansible-core | Ansible-core version {CoreInstVers} or later | {PlatformNameShort} uses the system-wide ansible-core package to install the platform, but uses ansible-core {CoreUseVers} for both its control plane and built-in execution environments. h| Python | 3.11 or later | @@ -24,9 +24,6 @@ h| Browser | A currently supported version of Mozilla FireFox or Google Chrome | h| Database | PostgreSQL version 15 | -h| RAM | 16 GB minimum | - -h| CPUs | 4 | |=== The following are necessary for you to work with project updates and collections: @@ -53,5 +50,5 @@ See link:https://docs.ansible.com/ansible/latest/installation_guide/intro_instal [NOTE] ==== You must install Ansible using a package manager such as `dnf`, and the latest stable version of the package manager must be installed for {PlatformName} to work properly. -Ansible version 2.14 is required for versions {PlatformVers} and later. +Ansible-core version {CoreInstVers} is required for versions {PlatformVers} and later. ==== From 4551233f56734bcd650578034add17e52afb2436 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Wed, 10 Jul 2024 13:31:18 +0100 Subject: [PATCH 026/590] 2.5 Added open source licence to Playbooks doc (#1546) (#1557) * Added open source licence to Playbooks doc https://issues.redhat.com/browse/AAP-26693 --- downstream/aap-common/apache-2.0-license.adoc | 2 +- downstream/aap-common/gplv3-license-text.adoc | 4 ++-- .../assemblies/playbooks/assembly-open-source-license.adoc | 5 +++++ downstream/modules/playbooks/ref-playbook-execution.adoc | 2 +- .../titles/playbooks/playbooks-getting-started/docinfo.xml | 3 ++- .../titles/playbooks/playbooks-getting-started/master.adoc | 3 ++- 6 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 downstream/assemblies/playbooks/assembly-open-source-license.adoc diff --git a/downstream/aap-common/apache-2.0-license.adoc b/downstream/aap-common/apache-2.0-license.adoc index 47bfabf61d..e40eeb1791 100644 --- a/downstream/aap-common/apache-2.0-license.adoc +++ b/downstream/aap-common/apache-2.0-license.adoc @@ -1,7 +1,7 @@ [id="apache-2.0-license"] [.text-center] -Apache License +*Apache License* [.text-center] Version 2.0, January 2004 [.text-center] diff --git a/downstream/aap-common/gplv3-license-text.adoc b/downstream/aap-common/gplv3-license-text.adoc index 948f538d7b..8ee4be0676 100644 --- a/downstream/aap-common/gplv3-license-text.adoc +++ b/downstream/aap-common/gplv3-license-text.adoc @@ -1,13 +1,13 @@ [id="gplv3-license-text"] [.text-center] -GNU GENERAL PUBLIC LICENSE +*GNU GENERAL PUBLIC LICENSE* [.text-center] Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc.<> -Everyone is permitted to copy and distribute ve>rbatim copies of this license document, but changing it is not allowed. +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [discrete] ==== Preamble diff --git a/downstream/assemblies/playbooks/assembly-open-source-license.adoc b/downstream/assemblies/playbooks/assembly-open-source-license.adoc new file mode 100644 index 0000000000..ae4033b19c --- /dev/null +++ b/downstream/assemblies/playbooks/assembly-open-source-license.adoc @@ -0,0 +1,5 @@ +[id="assembly-open-source-license"] + += Open source license + +include::../aap-common/gplv3-license-text.adoc[leveloffset=+1] \ No newline at end of file diff --git a/downstream/modules/playbooks/ref-playbook-execution.adoc b/downstream/modules/playbooks/ref-playbook-execution.adoc index 703cbb8392..c4466aaac8 100644 --- a/downstream/modules/playbooks/ref-playbook-execution.adoc +++ b/downstream/modules/playbooks/ref-playbook-execution.adoc @@ -11,7 +11,7 @@ At a minimum, each play defines two things: * the managed nodes to target, using a pattern * at least one task to execute -[Note] +[NOTE] ==== In Ansible 2.10 and later, use the fully-qualified collection name in your playbooks to ensure the correct module is selected, because multiple collections can contain modules with the same name (for example, `user`). ==== diff --git a/downstream/titles/playbooks/playbooks-getting-started/docinfo.xml b/downstream/titles/playbooks/playbooks-getting-started/docinfo.xml index 842d915a8b..27b980b6e4 100644 --- a/downstream/titles/playbooks/playbooks-getting-started/docinfo.xml +++ b/downstream/titles/playbooks/playbooks-getting-started/docinfo.xml @@ -3,7 +3,8 @@ 2.5 Getting started with ansible playbooks - Learn how to set up an ansible playbook. + This guide shows how to create and use playbooks to address your automation requirements. + This document includes content from the upstream docs.ansible.com documentation, which is covered by the GNU GENERAL PUBLIC LICENSE v3.0. Red Hat Customer Content Services diff --git a/downstream/titles/playbooks/playbooks-getting-started/master.adoc b/downstream/titles/playbooks/playbooks-getting-started/master.adoc index c68f663c17..54cd6f5344 100644 --- a/downstream/titles/playbooks/playbooks-getting-started/master.adoc +++ b/downstream/titles/playbooks/playbooks-getting-started/master.adoc @@ -16,10 +16,11 @@ This guide provides an introduction to the use of Ansible Playbooks.. include::{Boilerplate}[] -//include::playbooks/assembly-playbook-gs.adoc[leveloffset=+1] include::playbooks/assembly-intro-to-playbooks.adoc[leveloffset=+1] include::playbooks/assembly-networking-playbook.adoc[leveloffset=+1] include::playbooks/assembly-playbook-practical-example.adoc[leveloffset=+1] +include::playbooks/assembly-open-source-license.adoc[leveloffset=+1] + From e17052825f280b573bd4665f489cd5c733abca10 Mon Sep 17 00:00:00 2001 From: EMcWhinn <122449381+EMcWhinn@users.noreply.github.com> Date: Wed, 10 Jul 2024 15:15:09 +0100 Subject: [PATCH 027/590] Add new inventory source docs for OpenShift Virtualization (#1559) (#1560) https://issues.redhat.com/browse/AAP-26688 Affects `titles/controller-user-guide` --- .../assembly-controller-inventories.adoc | 1 + ...controller-inv-source-open-shift-virt.adoc | 34 +++++++++++++++++++ .../ref-controller-inventory-plugins.adoc | 1 + 3 files changed, 36 insertions(+) create mode 100644 downstream/modules/platform/proc-controller-inv-source-open-shift-virt.adoc diff --git a/downstream/assemblies/platform/assembly-controller-inventories.adoc b/downstream/assemblies/platform/assembly-controller-inventories.adoc index 45a87c0446..ffdbfb1f34 100644 --- a/downstream/assemblies/platform/assembly-controller-inventories.adoc +++ b/downstream/assemblies/platform/assembly-controller-inventories.adoc @@ -106,6 +106,7 @@ include::platform/proc-controller-inv-source-rh-virt.adoc[leveloffset=+4] include::platform/proc-controller-inv-source-aap.adoc[leveloffset=+4] //The following Terraform module is for 2.5 only: include::platform/proc-controller-inv-source-terraform.adoc[leveloffset=+4] +include::platform/proc-controller-inv-source-open-shift-virt.adoc[leveloffset=+4] include::platform/ref-controller-export-old-scripts.adoc[leveloffset=+3] diff --git a/downstream/modules/platform/proc-controller-inv-source-open-shift-virt.adoc b/downstream/modules/platform/proc-controller-inv-source-open-shift-virt.adoc new file mode 100644 index 0000000000..38c927cc92 --- /dev/null +++ b/downstream/modules/platform/proc-controller-inv-source-open-shift-virt.adoc @@ -0,0 +1,34 @@ +[id="proc-controller-inv-source-open-shift-virt"] + += OpenShift Virtualization + +This inventory source uses a cluster that is able to deploy Red Hat OpenShift Container Platform Virtualization. +To configure a Red Hat OpenShift Container Platform Virtualization, you need a virtual machine deployed in a specific namespace and an OpenShift or Kubernetes API Bearer Token credential. + +.Procedure + +. From the navigational panel, select {MenuInfrastructureInventories}. +. Select the inventory that you want to add a source to. +. In the *Sources* tab, click btn:[Add source]. +. From the menu:Source[] menu, select *OpenShift Virtualization*. +* The *Add new source* window expands with the required *Credential* field. ++ +Choose from an existing Kubernetes API Bearer Token credential. +For more information, see the TBD[OpenShift or Kubernetes API Bearer Token credential type] section. +In this example, the `cmv2.engineering.redhat.com` credential is used. +. You can optionally specify the *Verbosity*, *Host Filter*, *Enabled Variable/Value*, and *Update options* as described in the xref:proc-controller-add-source[Adding a source] steps. +. Use the *Source Variables* field to override variables used by the `kubernetes` inventory plugin. +Enter variables by using either JSON or YAML syntax. +Use the radio button to toggle between the two. +For more information about these variables, see the link:https://kubevirt.io/kubevirt.core/main/plugins/kubevirt.html#parameters[kubevirt.core.kubevirt inventory source] documentation. ++ +In the following example, the connections variable is used to specify access to a particular namespace in a cluster: ++ +---- +--- +connections: +- namespaces: + - hao-test +---- ++ +. Click btn:[Save] and then click btn:[Sync] to sync the inventory. diff --git a/downstream/modules/platform/ref-controller-inventory-plugins.adoc b/downstream/modules/platform/ref-controller-inventory-plugins.adoc index a4dd59ad2a..143e750d8a 100644 --- a/downstream/modules/platform/ref-controller-inventory-plugins.adoc +++ b/downstream/modules/platform/ref-controller-inventory-plugins.adoc @@ -15,6 +15,7 @@ In {Controllername} v4.4, you can provide the inventory plugin configuration dir * xref:proc-controller-inv-source-rh-virt[Red Hat Virtualization] * xref:proc-controller-inv-source-aap[{PlatformName}] * xref:proc-controller-inv-source-terraform[Terraform State] +* xref:proc-controller-inv-source-open-shift-virt[OpenShift Virtualization] Newly created configurations for inventory sources contain the default plugin configuration values. If you want your newly created inventory sources to match the output of a legacy source, you must apply a specific set of configuration values for that source. From 1e8ad9cc462e245f6f5ffc8894248cc84fc06777 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Thu, 11 Jul 2024 09:38:34 +0100 Subject: [PATCH 028/590] Pre-release updates for async release notes (#1562) (#1563) Update the async release notes for the 2.5-ea release: - Archive 2.4 async related files - Update directory structure for async release note files - Comment out asynchronous releases section for EA until an async release is released - Scrub release versions Applies to asynchronous release notes section only. Pre-release fixes for async release notes https://issues.redhat.com/browse/AAP-26849 --- .../release-notes/async}/installer-24-11.adoc | 0 .../release-notes/async}/installer-24-12.adoc | 0 .../release-notes/async}/installer-24-13.adoc | 0 .../release-notes/async}/installer-24-14.adoc | 0 .../release-notes/async}/installer-24-21.adoc | 0 .../release-notes/async}/installer-24-22.adoc | 0 .../release-notes/async}/installer-24-23.adoc | 0 .../release-notes/async}/installer-24-24.adoc | 0 .../release-notes/async}/installer-24-6.adoc | 0 .../release-notes/async}/installer-24-61.adoc | 0 .../release-notes/async}/installer-24-62.adoc | 0 .../release-notes/async}/installer-24-7.adoc | 0 .../release-notes/async}/rpm-24-2.adoc | 0 .../release-notes/async}/rpm-24-3.adoc | 0 .../release-notes/async}/rpm-24-4.adoc | 0 .../release-notes/async}/rpm-24-5.adoc | 0 .../release-notes/async}/rpm-24-6.adoc | 0 .../release-notes/async}/rpm-24-7.adoc | 0 .../{topics => async}/async-updates.adoc | 12 ++++- .../installer-version-table.adoc | 16 +++---- .../async/rpm-version-table.adoc | 18 +++++++ downstream/titles/release-notes/master.adoc | 48 +------------------ .../titles/release-notes/topics/eda-24.adoc | 10 ++-- .../topics/rpm-version-table.adoc | 18 ------- 24 files changed, 44 insertions(+), 78 deletions(-) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/installer-24-11.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/installer-24-12.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/installer-24-13.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/installer-24-14.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/installer-24-21.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/installer-24-22.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/installer-24-23.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/installer-24-24.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/installer-24-6.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/installer-24-61.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/installer-24-62.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/installer-24-7.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/rpm-24-2.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/rpm-24-3.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/rpm-24-4.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/rpm-24-5.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/rpm-24-6.adoc (100%) rename downstream/{titles/release-notes/topics => archive/archived-titles/release-notes/async}/rpm-24-7.adoc (100%) rename downstream/titles/release-notes/{topics => async}/async-updates.adoc (81%) rename downstream/titles/release-notes/{topics => async}/installer-version-table.adoc (59%) create mode 100644 downstream/titles/release-notes/async/rpm-version-table.adoc delete mode 100644 downstream/titles/release-notes/topics/rpm-version-table.adoc diff --git a/downstream/titles/release-notes/topics/installer-24-11.adoc b/downstream/archive/archived-titles/release-notes/async/installer-24-11.adoc similarity index 100% rename from downstream/titles/release-notes/topics/installer-24-11.adoc rename to downstream/archive/archived-titles/release-notes/async/installer-24-11.adoc diff --git a/downstream/titles/release-notes/topics/installer-24-12.adoc b/downstream/archive/archived-titles/release-notes/async/installer-24-12.adoc similarity index 100% rename from downstream/titles/release-notes/topics/installer-24-12.adoc rename to downstream/archive/archived-titles/release-notes/async/installer-24-12.adoc diff --git a/downstream/titles/release-notes/topics/installer-24-13.adoc b/downstream/archive/archived-titles/release-notes/async/installer-24-13.adoc similarity index 100% rename from downstream/titles/release-notes/topics/installer-24-13.adoc rename to downstream/archive/archived-titles/release-notes/async/installer-24-13.adoc diff --git a/downstream/titles/release-notes/topics/installer-24-14.adoc b/downstream/archive/archived-titles/release-notes/async/installer-24-14.adoc similarity index 100% rename from downstream/titles/release-notes/topics/installer-24-14.adoc rename to downstream/archive/archived-titles/release-notes/async/installer-24-14.adoc diff --git a/downstream/titles/release-notes/topics/installer-24-21.adoc b/downstream/archive/archived-titles/release-notes/async/installer-24-21.adoc similarity index 100% rename from downstream/titles/release-notes/topics/installer-24-21.adoc rename to downstream/archive/archived-titles/release-notes/async/installer-24-21.adoc diff --git a/downstream/titles/release-notes/topics/installer-24-22.adoc b/downstream/archive/archived-titles/release-notes/async/installer-24-22.adoc similarity index 100% rename from downstream/titles/release-notes/topics/installer-24-22.adoc rename to downstream/archive/archived-titles/release-notes/async/installer-24-22.adoc diff --git a/downstream/titles/release-notes/topics/installer-24-23.adoc b/downstream/archive/archived-titles/release-notes/async/installer-24-23.adoc similarity index 100% rename from downstream/titles/release-notes/topics/installer-24-23.adoc rename to downstream/archive/archived-titles/release-notes/async/installer-24-23.adoc diff --git a/downstream/titles/release-notes/topics/installer-24-24.adoc b/downstream/archive/archived-titles/release-notes/async/installer-24-24.adoc similarity index 100% rename from downstream/titles/release-notes/topics/installer-24-24.adoc rename to downstream/archive/archived-titles/release-notes/async/installer-24-24.adoc diff --git a/downstream/titles/release-notes/topics/installer-24-6.adoc b/downstream/archive/archived-titles/release-notes/async/installer-24-6.adoc similarity index 100% rename from downstream/titles/release-notes/topics/installer-24-6.adoc rename to downstream/archive/archived-titles/release-notes/async/installer-24-6.adoc diff --git a/downstream/titles/release-notes/topics/installer-24-61.adoc b/downstream/archive/archived-titles/release-notes/async/installer-24-61.adoc similarity index 100% rename from downstream/titles/release-notes/topics/installer-24-61.adoc rename to downstream/archive/archived-titles/release-notes/async/installer-24-61.adoc diff --git a/downstream/titles/release-notes/topics/installer-24-62.adoc b/downstream/archive/archived-titles/release-notes/async/installer-24-62.adoc similarity index 100% rename from downstream/titles/release-notes/topics/installer-24-62.adoc rename to downstream/archive/archived-titles/release-notes/async/installer-24-62.adoc diff --git a/downstream/titles/release-notes/topics/installer-24-7.adoc b/downstream/archive/archived-titles/release-notes/async/installer-24-7.adoc similarity index 100% rename from downstream/titles/release-notes/topics/installer-24-7.adoc rename to downstream/archive/archived-titles/release-notes/async/installer-24-7.adoc diff --git a/downstream/titles/release-notes/topics/rpm-24-2.adoc b/downstream/archive/archived-titles/release-notes/async/rpm-24-2.adoc similarity index 100% rename from downstream/titles/release-notes/topics/rpm-24-2.adoc rename to downstream/archive/archived-titles/release-notes/async/rpm-24-2.adoc diff --git a/downstream/titles/release-notes/topics/rpm-24-3.adoc b/downstream/archive/archived-titles/release-notes/async/rpm-24-3.adoc similarity index 100% rename from downstream/titles/release-notes/topics/rpm-24-3.adoc rename to downstream/archive/archived-titles/release-notes/async/rpm-24-3.adoc diff --git a/downstream/titles/release-notes/topics/rpm-24-4.adoc b/downstream/archive/archived-titles/release-notes/async/rpm-24-4.adoc similarity index 100% rename from downstream/titles/release-notes/topics/rpm-24-4.adoc rename to downstream/archive/archived-titles/release-notes/async/rpm-24-4.adoc diff --git a/downstream/titles/release-notes/topics/rpm-24-5.adoc b/downstream/archive/archived-titles/release-notes/async/rpm-24-5.adoc similarity index 100% rename from downstream/titles/release-notes/topics/rpm-24-5.adoc rename to downstream/archive/archived-titles/release-notes/async/rpm-24-5.adoc diff --git a/downstream/titles/release-notes/topics/rpm-24-6.adoc b/downstream/archive/archived-titles/release-notes/async/rpm-24-6.adoc similarity index 100% rename from downstream/titles/release-notes/topics/rpm-24-6.adoc rename to downstream/archive/archived-titles/release-notes/async/rpm-24-6.adoc diff --git a/downstream/titles/release-notes/topics/rpm-24-7.adoc b/downstream/archive/archived-titles/release-notes/async/rpm-24-7.adoc similarity index 100% rename from downstream/titles/release-notes/topics/rpm-24-7.adoc rename to downstream/archive/archived-titles/release-notes/async/rpm-24-7.adoc diff --git a/downstream/titles/release-notes/topics/async-updates.adoc b/downstream/titles/release-notes/async/async-updates.adoc similarity index 81% rename from downstream/titles/release-notes/topics/async-updates.adoc rename to downstream/titles/release-notes/async/async-updates.adoc index 85b6a76cb0..4667559a5c 100644 --- a/downstream/titles/release-notes/topics/async-updates.adoc +++ b/downstream/titles/release-notes/async/async-updates.adoc @@ -10,9 +10,19 @@ As a Red Hat Customer Portal user, you can enable errata notifications in the ac Red Hat Customer Portal user accounts must have systems registered and consuming {PlatformNameShort} entitlements for {PlatformNameShort} errata notification emails to generate. ==== -The Asynchronous updates section of the release notes will be updated over time to give notes on enhancements and bug fixes for asynchronous errata releases of {PlatformNameShort} 2.4. +The Asynchronous updates section of the release notes will be updated over time to give notes on enhancements and bug fixes for asynchronous errata releases of {PlatformNameShort} {PlatformVers}. [role="_additional-resources"] .Additional resources * For more information about asynchronous errata support in {PlatformNameShort}, see link:https://access.redhat.com/support/policy/updates/ansible-automation-platform[{PlatformName} Life Cycle]. * For information about Common Vulnerabilities and Exposures (CVEs), see link:https://www.redhat.com/en/topics/security/what-is-cve[What is a CVE?] and link:https://access.redhat.com/security/security-updates/cve[Red Hat CVE Database]. + +== RPM releases + +//Component version table for RPM releases +include::../async/rpm-version-table.adoc[leveloffset=+3] + +== Installer releases + +//Component version table for installer releases +include::../async/installer-version-table.adoc[leveloffset=+3] \ No newline at end of file diff --git a/downstream/titles/release-notes/topics/installer-version-table.adoc b/downstream/titles/release-notes/async/installer-version-table.adoc similarity index 59% rename from downstream/titles/release-notes/topics/installer-version-table.adoc rename to downstream/titles/release-notes/async/installer-version-table.adoc index bcd4040b3b..188a0f38ca 100644 --- a/downstream/titles/release-notes/topics/installer-version-table.adoc +++ b/downstream/titles/release-notes/async/installer-version-table.adoc @@ -6,12 +6,12 @@ |=== | Installation bundle | Component versions -| xref:installer-24-7[2.4-7] + -June 12, 2024 | -* `ansible-automation-platform-setup` 2.4-7 -* `ansible-core` 2.15.11 -* {ControllerNameStart} 4.5.7 -* {HubNameStart} 4.9.2 -* {EDAName} 1.0.7 +| Advisory link + +Month Date, 2024 | +* `ansible-automation-platform-setup` +* `ansible-core` +* {ControllerNameStart} +* {HubNameStart} +* {EDAName} -|=== \ No newline at end of file +|=== diff --git a/downstream/titles/release-notes/async/rpm-version-table.adoc b/downstream/titles/release-notes/async/rpm-version-table.adoc new file mode 100644 index 0000000000..8702f0840c --- /dev/null +++ b/downstream/titles/release-notes/async/rpm-version-table.adoc @@ -0,0 +1,18 @@ +// This table contains the component/package versions per RPM release + +.Component versions per errata advisory +//cols="a,a" formats the columns as AsciiDoc allowing for AsciiDoc syntax +[cols="2a,3a", options="header"] +|=== +| Errata advisory | Component versions + +| Advisory link + +Month Date, 2024 | +* `ansible-automation-platform-installer` +* `ansible-automation-platform-setup` +* `ansible-core` +* {ControllerNameStart} +* {HubNameStart} +* {EDAName} + +|=== diff --git a/downstream/titles/release-notes/master.adoc b/downstream/titles/release-notes/master.adoc index 37b4808da4..231e6b7663 100644 --- a/downstream/titles/release-notes/master.adoc +++ b/downstream/titles/release-notes/master.adoc @@ -21,49 +21,5 @@ include::topics/operator-240.adoc[leveloffset=+1] include::topics/docs-24.adoc[leveloffset=+1] -// == Asynchronous updates -include::topics/async-updates.adoc[leveloffset=+1] - -=== RPM releases - -include::topics/rpm-version-table.adoc[leveloffset=+3] - -include::topics/rpm-24-7.adoc[leveloffset=+3] - -include::topics/rpm-24-6.adoc[leveloffset=+3] - -include::topics/rpm-24-5.adoc[leveloffset=+3] - -include::topics/rpm-24-4.adoc[leveloffset=+3] - -include::topics/rpm-24-3.adoc[leveloffset=+3] - -include::topics/rpm-24-2.adoc[leveloffset=+3] - -=== Installer releases - -include::topics/installer-version-table.adoc[leveloffset=+3] - -include::topics/installer-24-7.adoc[leveloffset=+3] - -include::topics/installer-24-62.adoc[leveloffset=+3] - -include::topics/installer-24-61.adoc[leveloffset=+3] - -include::topics/installer-24-6.adoc[leveloffset=+3] - -include::topics/installer-24-24.adoc[leveloffset=+3] - -include::topics/installer-24-23.adoc[leveloffset=+3] - -include::topics/installer-24-22.adoc[leveloffset=+3] - -include::topics/installer-24-21.adoc[leveloffset=+3] - -include::topics/installer-24-14.adoc[leveloffset=+3] - -include::topics/installer-24-13.adoc[leveloffset=+3] - -include::topics/installer-24-12.adoc[leveloffset=+3] - -include::topics/installer-24-11.adoc[leveloffset=+3] +// Asynchronous release notes - commented out until 2.5 has asynchronous release note updates +// include::async/async-updates.adoc[leveloffset=+1] diff --git a/downstream/titles/release-notes/topics/eda-24.adoc b/downstream/titles/release-notes/topics/eda-24.adoc index ad5bb44673..6131f32ac2 100644 --- a/downstream/titles/release-notes/topics/eda-24.adoc +++ b/downstream/titles/release-notes/topics/eda-24.adoc @@ -47,12 +47,12 @@ * When users access the detail screen of a rule audit, the related rulebook activation link is broken. -* Long running activations with loads of events can cause an out of disk space issue. Resolved in xref:rpm-24-6[installer release 2.4-6]. +* Long running activations with loads of events can cause an out of disk space issue. Resolved in RPM release 2.4-6. -* Certain characters, such as hyphen (-), forward slash (/), and period (.), are not supported in the event keys. Resolved in xref:rpm-24-3[installer release 2.4-3]. +* Certain characters, such as hyphen (-), forward slash (/), and period (.), are not supported in the event keys. Resolved in RPM release 2.4-3. -* When there are more activations than available workers, disabling the activations incorrectly shows them in running state. Resolved in xref:rpm-24-3[installer release 2.4-3]. +* When there are more activations than available workers, disabling the activations incorrectly shows them in running state. Resolved in RPM release 2.4-3. -* {EDAName} activation pods are running out of memory on RHEL 9. Resolved in xref:rpm-24-3[installer release 2.4-3]. +* {EDAName} activation pods are running out of memory on RHEL 9. Resolved in RPM release 2.4-3. -* When all workers are busy with activation processes, other asynchronous tasks are not executed, such as importing projects. Resolved in xref:rpm-24-3[installer release 2.4-3]. \ No newline at end of file +* When all workers are busy with activation processes, other asynchronous tasks are not executed, such as importing projects. Resolved in RPM release 2.4-3. \ No newline at end of file diff --git a/downstream/titles/release-notes/topics/rpm-version-table.adoc b/downstream/titles/release-notes/topics/rpm-version-table.adoc deleted file mode 100644 index d07ee09e7d..0000000000 --- a/downstream/titles/release-notes/topics/rpm-version-table.adoc +++ /dev/null @@ -1,18 +0,0 @@ -// This table contains the component/package versions per each errata advisory - -.Component versions per errata advisory -//cols="a,a" formats the columns as AsciiDoc allowing for AsciiDoc syntax -[cols="2a,3a", options="header"] -|=== -| Errata advisory | Component versions - -| xref:rpm-24-7[RHSA-2024:3781] + -June 10, 2024 | -* `ansible-automation-platform-installer` 2.4-7 -* `ansible-automation-platform-setup` 2.4-7 -* `ansible-core` 2.15.11 -* {ControllerNameStart} 4.5.7 -* {HubNameStart} 4.9.2 -* {EDAName} 1.0.7 - -|=== \ No newline at end of file From e0d45b618230022dbbc41b393e8b39bff7bf4344 Mon Sep 17 00:00:00 2001 From: Elizabeth Murtough <114593312+emurtoug@users.noreply.github.com> Date: Thu, 11 Jul 2024 11:12:49 -0400 Subject: [PATCH 029/590] AAP-26400 added open source license to creating and using ees (#1566) (#1567) * AAP-26400 added open source license to creating and using ees * AAP-26400 updated following peer review --- .../assemblies/builder/assembly-open-source-license.adoc | 5 +++++ downstream/titles/builder/docinfo.xml | 1 + downstream/titles/builder/master.adoc | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 downstream/assemblies/builder/assembly-open-source-license.adoc diff --git a/downstream/assemblies/builder/assembly-open-source-license.adoc b/downstream/assemblies/builder/assembly-open-source-license.adoc new file mode 100644 index 0000000000..98bc726217 --- /dev/null +++ b/downstream/assemblies/builder/assembly-open-source-license.adoc @@ -0,0 +1,5 @@ +[id="assembly-open-source-license"] + += Open source license + +include::../aap-common/apache-2.0-license.adoc[leveloffset=+1] \ No newline at end of file diff --git a/downstream/titles/builder/docinfo.xml b/downstream/titles/builder/docinfo.xml index 0965104049..78b219b4db 100644 --- a/downstream/titles/builder/docinfo.xml +++ b/downstream/titles/builder/docinfo.xml @@ -4,6 +4,7 @@ Create and use execution environments with Ansible Builder This guide shows how to create consistent and reproducible automation execution environments for your Red Hat Ansible Automation Platform. +This document includes content from the upstream docs.ansible.com documentation, which is covered by the Apache 2.0 license. Red Hat Customer Content Services diff --git a/downstream/titles/builder/master.adoc b/downstream/titles/builder/master.adoc index f0dd2e9766..9be04e9411 100644 --- a/downstream/titles/builder/master.adoc +++ b/downstream/titles/builder/master.adoc @@ -21,6 +21,6 @@ include::builder/assembly-publishing-exec-env.adoc[leveloffset=+1] include::hub/assembly-populate-container-registry.adoc[leveloffset=+1] include::hub/assembly-setup-container-repository.adoc[leveloffset=+1] include::hub/assembly-pull-image.adoc[leveloffset=+1] - +include::builder/assembly-open-source-license.adoc[levloffset=+1] [appendix] -include::builder/builder/con-ee-precedence.adoc[leveloffset=+1] +include::builder/builder/con-ee-precedence.adoc[leveloffset=+1] \ No newline at end of file From 3b6e77384b09d7595aa7dbccc8bf8b91d60bb061 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Mon, 15 Jul 2024 18:15:01 -0600 Subject: [PATCH 030/590] AAP-18761 convert/create modules for the gateway dashboard (#1552) (#1574) * AAP-18761 convert/create modules for the gateway dashboard * AAP-18761 - implemented peer review corrections --- .../modules/platform/con-gw-dash-components.adoc | 15 +++++++++++++++ .../modules/platform/con-gw-dash-features.adoc | 9 +++++++++ 2 files changed, 24 insertions(+) create mode 100644 downstream/modules/platform/con-gw-dash-components.adoc create mode 100644 downstream/modules/platform/con-gw-dash-features.adoc diff --git a/downstream/modules/platform/con-gw-dash-components.adoc b/downstream/modules/platform/con-gw-dash-components.adoc new file mode 100644 index 0000000000..61de396183 --- /dev/null +++ b/downstream/modules/platform/con-gw-dash-components.adoc @@ -0,0 +1,15 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-dash-components_{context}"] + += {PlatformNameShort} dashboard components + +Quick starts:: You can learn about Ansible automation functions with guided tutorials called quick starts. In the dashboard, you can access quick starts by selecting a quick start card. From the panel displayed, click btn:[Start] and complete the onscreen instructions. You can also filter quick starts by keyword and status. +Resource status:: Indicates the status of your hosts, projects and inventories. The status indicator links to your configured hosts, projects and inventories where you can search, filter, add and modify these resources. +Job Activity:: You can view a summary of your current job status, filter the job status within a period of time or by job type, or click *Go to Jobs* to view a complete list of jobs that are currently available. +Jobs:: You can view recent jobs that have run, or click *View all Jobs* to view a complete list of jobs that are currently available, or create a new job. +Projects: You can view recently updated projects or click *View all Projects* to view a complete list of the projects that are currently available, or create a new project. +Inventories:: You can view recently updated inventories or click *View all Inventories* to view a complete list of available inventories, or create a new inventory. +Rulebook Activations:: You can view the list of recent rulebook activations and their status, display the complete list of rulebook activations that are currently available, or create a new rulebook activation. +Rule Audit:: You view recently fired rule audits, view rule audit records, and view rule audit data based on corresponding rulebook activation runs. +Decision Environments:: You can view recently updated decision environments, or click *View all Decision Environments* to view a complete list of available inventories, or create a new decision environment. diff --git a/downstream/modules/platform/con-gw-dash-features.adoc b/downstream/modules/platform/con-gw-dash-features.adoc new file mode 100644 index 0000000000..734f9520c2 --- /dev/null +++ b/downstream/modules/platform/con-gw-dash-features.adoc @@ -0,0 +1,9 @@ +:_mod-docs-content-type: CONCEPT + +[id="con-gw-dash-features_{context}"] + += {PlatformNameShort} dashboard features + +The {PlatformNameShort} dashboard provides the following features: + +Manage view:: You can enable, disable, and sort dashboard components so only the features you need are visible on the dashboard. From 672100aa56b9026cd7874968cd05e0ac748e8af1 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Mon, 15 Jul 2024 18:17:01 -0600 Subject: [PATCH 031/590] AAP-21014 - convert/create module for gateway activity stream (#1551) (#1573) --- .../modules/platform/con-gw-activity-stream.adoc | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 downstream/modules/platform/con-gw-activity-stream.adoc diff --git a/downstream/modules/platform/con-gw-activity-stream.adoc b/downstream/modules/platform/con-gw-activity-stream.adoc new file mode 100644 index 0000000000..b3ee507c1d --- /dev/null +++ b/downstream/modules/platform/con-gw-activity-stream.adoc @@ -0,0 +1,12 @@ +:_mod-docs-content-type: CONCEPT + +[id="con-gw-activity-stream_{context}"] + += Activity stream +The platform gateway includes an activity stream that captures changes to gateway resources, such as the creation or modification of organizations, users, and service clusters, among others. For each change, the activity stream collects information about the time of the change, the user that initiated the change, the action performed, and the actual changes made to the object, when possible. The information gathered varies depending on the type of change. + +You can access the details captured by the activity stream from the API: + +----- +/api/gateway/v1/activitystream/ +----- From 84be9ad9bbdf14d802c08ce4cfe5fabdd781c8ad Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Mon, 15 Jul 2024 18:31:18 -0600 Subject: [PATCH 032/590] 2.5titles - Update the 2.5 titles to follow style guidelines and clean up doc subtitles (#1575) (#1576) --- downstream/archive/archived-titles/dev-guide/docinfo.xml | 2 +- downstream/titles/aap-containerized-install/docinfo.xml | 4 ++-- downstream/titles/aap-containerized-install/master.adoc | 2 +- downstream/titles/aap-hardening/docinfo.xml | 4 ++-- downstream/titles/aap-hardening/master.adoc | 2 +- downstream/titles/aap-installation-guide/docinfo.xml | 4 ++-- downstream/titles/aap-installation-guide/master.adoc | 2 +- downstream/titles/aap-operator-backup/docinfo.xml | 2 +- downstream/titles/aap-operator-backup/master.adoc | 2 +- downstream/titles/analytics/job-explorer/docinfo.xml | 2 +- downstream/titles/analytics/job-explorer/master.adoc | 2 +- downstream/titles/automation-mesh/docinfo.xml | 2 +- downstream/titles/automation-mesh/master.adoc | 2 +- downstream/titles/builder/docinfo.xml | 2 +- downstream/titles/builder/master.adoc | 4 ++-- downstream/titles/central-auth/docinfo.xml | 4 ++-- downstream/titles/central-auth/master.adoc | 2 +- .../titles/controller/controller-admin-guide/docinfo.xml | 4 ++-- .../titles/controller/controller-admin-guide/master.adoc | 4 ++-- .../titles/controller/controller-api-overview/docinfo.xml | 2 +- .../titles/controller/controller-api-overview/master.adoc | 2 +- .../titles/controller/controller-user-guide/docinfo.xml | 6 +++--- .../titles/controller/controller-user-guide/master.adoc | 2 +- downstream/titles/develop-automation-content/docinfo.xml | 2 +- downstream/titles/eda/eda-getting-started-guide/docinfo.xml | 4 ++-- downstream/titles/eda/eda-getting-started-guide/master.adoc | 2 +- downstream/titles/eda/eda-user-guide/docinfo.xml | 4 ++-- downstream/titles/eda/eda-user-guide/master.adoc | 4 ++-- downstream/titles/getting-started/docinfo.xml | 4 ++-- downstream/titles/getting-started/master.adoc | 4 ++-- downstream/titles/navigator-guide/docinfo.xml | 2 +- downstream/titles/navigator-guide/master.adoc | 2 +- downstream/titles/operator-mesh/docinfo.xml | 2 +- downstream/titles/operator-mesh/master.adoc | 2 +- .../titles/playbooks/playbooks-getting-started/docinfo.xml | 4 ++-- .../titles/playbooks/playbooks-getting-started/master.adoc | 6 +----- downstream/titles/playbooks/playbooks-reference/docinfo.xml | 6 +++--- downstream/titles/playbooks/playbooks-reference/master.adoc | 4 ++-- downstream/titles/release-notes/docinfo.xml | 2 +- downstream/titles/release-notes/master.adoc | 2 +- downstream/titles/security-guide/docinfo.xml | 2 +- downstream/titles/security-guide/master.adoc | 2 +- downstream/titles/upgrade/docinfo.xml | 2 +- downstream/titles/upgrade/master.adoc | 2 +- 44 files changed, 62 insertions(+), 66 deletions(-) diff --git a/downstream/archive/archived-titles/dev-guide/docinfo.xml b/downstream/archive/archived-titles/dev-guide/docinfo.xml index d001122158..d5bf3f27ad 100644 --- a/downstream/archive/archived-titles/dev-guide/docinfo.xml +++ b/downstream/archive/archived-titles/dev-guide/docinfo.xml @@ -1,7 +1,7 @@ Red Hat Ansible Automation Platform creator guide Red Hat Ansible Automation Platform 2.5 -Learn to create automation content with Ansible +Create automation content with Ansible This guide helps developers learn how to use Ansible to create content for automation. diff --git a/downstream/titles/aap-containerized-install/docinfo.xml b/downstream/titles/aap-containerized-install/docinfo.xml index ab57fb16a7..35f7c9b157 100644 --- a/downstream/titles/aap-containerized-install/docinfo.xml +++ b/downstream/titles/aap-containerized-install/docinfo.xml @@ -1,7 +1,7 @@ -Containerized Installation +Containerized installation Red Hat Ansible Automation Platform 2.5 -Containerized Ansible Automation Platform Installation Guide +Install the containerized version of Ansible Automation Platform Containerized Ansible Automation Platform Installation Guide diff --git a/downstream/titles/aap-containerized-install/master.adoc b/downstream/titles/aap-containerized-install/master.adoc index 90758dd96c..0829f6b02e 100644 --- a/downstream/titles/aap-containerized-install/master.adoc +++ b/downstream/titles/aap-containerized-install/master.adoc @@ -6,7 +6,7 @@ include::attributes/attributes.adoc[] // Book Title -= Containerized Installation += Containerized installation include::{Boilerplate}[] diff --git a/downstream/titles/aap-hardening/docinfo.xml b/downstream/titles/aap-hardening/docinfo.xml index b2b24cb560..a5430ad33c 100644 --- a/downstream/titles/aap-hardening/docinfo.xml +++ b/downstream/titles/aap-hardening/docinfo.xml @@ -1,7 +1,7 @@ -Hardening and Compliance +Hardening and compliance Red Hat Ansible Automation Platform 2.5 -Install, configure, and maintain Ansible Automation Platform running on Red Hat Enterprise Linux in a secure manner. +Install, configure, and maintain Ansible Automation Platform running on Red Hat Enterprise Linux in a secure manner This guide provides recommended practices for various processes needed to install, configure, and maintain {PlatformNameShort} on Red Hat Enterprise Linux in a secure manner. diff --git a/downstream/titles/aap-hardening/master.adoc b/downstream/titles/aap-hardening/master.adoc index 764ce72567..584183ec49 100644 --- a/downstream/titles/aap-hardening/master.adoc +++ b/downstream/titles/aap-hardening/master.adoc @@ -8,7 +8,7 @@ include::attributes/attributes.adoc[] // Book Title -= Hardening and Compliance += Hardening and compliance This guide provides recommended practices for various processes needed to install, configure, and maintain {PlatformNameShort} on Red Hat Enterprise Linux in a secure manner. diff --git a/downstream/titles/aap-installation-guide/docinfo.xml b/downstream/titles/aap-installation-guide/docinfo.xml index 266504a005..0a8cc84a5e 100644 --- a/downstream/titles/aap-installation-guide/docinfo.xml +++ b/downstream/titles/aap-installation-guide/docinfo.xml @@ -1,7 +1,7 @@ -Installing on Virtual Machines +Installing on virtual machines Red Hat Ansible Automation Platform 2.5 -Install Ansible Automation Platform +Install Ansible Automation Platform on virtual machines This guide shows you how to install Red Hat Ansible Automation Platform based on supported installation scenarios. diff --git a/downstream/titles/aap-installation-guide/master.adoc b/downstream/titles/aap-installation-guide/master.adoc index 58d47fcb41..66bf557e4c 100644 --- a/downstream/titles/aap-installation-guide/master.adoc +++ b/downstream/titles/aap-installation-guide/master.adoc @@ -7,7 +7,7 @@ include::attributes/attributes.adoc[] // Book Title -= Installing on Virtual Machines += Installing on virtual machines Thank you for your interest in {PlatformName}. {PlatformNameShort} is a commercial offering that helps teams manage complex multi-tier deployments by adding control, knowledge, and delegation to Ansible-powered environments. diff --git a/downstream/titles/aap-operator-backup/docinfo.xml b/downstream/titles/aap-operator-backup/docinfo.xml index 8cce7c5b02..8b76b1f66a 100644 --- a/downstream/titles/aap-operator-backup/docinfo.xml +++ b/downstream/titles/aap-operator-backup/docinfo.xml @@ -1,4 +1,4 @@ -Backup and Recovery for Operator Environments +Backup and recovery for operator environments Red Hat Ansible Automation Platform 2.5 diff --git a/downstream/titles/aap-operator-backup/master.adoc b/downstream/titles/aap-operator-backup/master.adoc index c5c14da8f5..b259c2d0ad 100644 --- a/downstream/titles/aap-operator-backup/master.adoc +++ b/downstream/titles/aap-operator-backup/master.adoc @@ -8,7 +8,7 @@ include::attributes/attributes.adoc[] // Book Title -= Backup and Recovery for Operator Environments += Backup and recovery for operator environments Thank you for your interest in {PlatformName}. {PlatformNameShort} is a commercial offering that helps teams manage complex multi-tier deployments by adding control, knowledge, and delegation to Ansible-powered environments. diff --git a/downstream/titles/analytics/job-explorer/docinfo.xml b/downstream/titles/analytics/job-explorer/docinfo.xml index 66b312d59f..ea054d4f0d 100644 --- a/downstream/titles/analytics/job-explorer/docinfo.xml +++ b/downstream/titles/analytics/job-explorer/docinfo.xml @@ -1,4 +1,4 @@ -Using Automation Analytics +Using automation analytics Red Hat Ansible Automation Platform 2.5 Review jobs and templates in greater detail by applying filters and sorting by attributes diff --git a/downstream/titles/analytics/job-explorer/master.adoc b/downstream/titles/analytics/job-explorer/master.adoc index 923ecd05a3..dfa94cb64b 100644 --- a/downstream/titles/analytics/job-explorer/master.adoc +++ b/downstream/titles/analytics/job-explorer/master.adoc @@ -7,7 +7,7 @@ include::attributes/attributes.adoc[] :analytics_automation_savings: [[analytics_automation_savings]] -= Using Automation Analytics += Using automation analytics include::{Boilerplate}[] diff --git a/downstream/titles/automation-mesh/docinfo.xml b/downstream/titles/automation-mesh/docinfo.xml index 785a5e615b..21d82d8834 100644 --- a/downstream/titles/automation-mesh/docinfo.xml +++ b/downstream/titles/automation-mesh/docinfo.xml @@ -1,4 +1,4 @@ -Automation Mesh for VM environments +Automation mesh for VM environments Red Hat Ansible Automation Platform 2.5 Automate at scale in a cloud-native way diff --git a/downstream/titles/automation-mesh/master.adoc b/downstream/titles/automation-mesh/master.adoc index c984e520d2..b037bc6122 100644 --- a/downstream/titles/automation-mesh/master.adoc +++ b/downstream/titles/automation-mesh/master.adoc @@ -9,7 +9,7 @@ include::attributes/attributes.adoc[] // Book Title -= Automation Mesh for VM environments += Automation mesh for VM environments Thank you for your interest in {PlatformName}. {PlatformNameShort} is a commercial offering that helps teams manage complex multi-tier deployments by adding control, knowledge, and delegation to Ansible-powered environments. diff --git a/downstream/titles/builder/docinfo.xml b/downstream/titles/builder/docinfo.xml index 78b219b4db..55235fd4a1 100644 --- a/downstream/titles/builder/docinfo.xml +++ b/downstream/titles/builder/docinfo.xml @@ -1,7 +1,7 @@ Creating and using execution environments Red Hat Ansible Automation Platform 2.5 - Create and use execution environments with Ansible Builder + Create and use execution environment containers This guide shows how to create consistent and reproducible automation execution environments for your Red Hat Ansible Automation Platform. This document includes content from the upstream docs.ansible.com documentation, which is covered by the Apache 2.0 license. diff --git a/downstream/titles/builder/master.adoc b/downstream/titles/builder/master.adoc index 9be04e9411..c0ddbe552a 100644 --- a/downstream/titles/builder/master.adoc +++ b/downstream/titles/builder/master.adoc @@ -9,7 +9,7 @@ include::attributes/attributes.adoc[] // Book Title = Creating and using execution environments -Use {Builder} to create consistent and reproducible {ExecEnvName} for your {PlatformName} needs. +Use {ExecEnvshort} builder to create consistent and reproducible containers for your {PlatformName} needs. include::{Boilerplate}[] @@ -23,4 +23,4 @@ include::hub/assembly-setup-container-repository.adoc[leveloffset=+1] include::hub/assembly-pull-image.adoc[leveloffset=+1] include::builder/assembly-open-source-license.adoc[levloffset=+1] [appendix] -include::builder/builder/con-ee-precedence.adoc[leveloffset=+1] \ No newline at end of file +include::builder/builder/con-ee-precedence.adoc[leveloffset=+1] diff --git a/downstream/titles/central-auth/docinfo.xml b/downstream/titles/central-auth/docinfo.xml index acd3a6df35..a4bdbbce14 100644 --- a/downstream/titles/central-auth/docinfo.xml +++ b/downstream/titles/central-auth/docinfo.xml @@ -1,7 +1,7 @@ -Access Management and Authentication +Access management and authentication Red Hat Ansible Automation Platform 2.5 -Enable central authentication functions for your Ansible Automation Platform +Enable authentication functions and role based access controls for Ansible Automation Platform This guide provides platform administrators with the information and procedures required to enable and configure central authentication on Ansible Automation Platform. diff --git a/downstream/titles/central-auth/master.adoc b/downstream/titles/central-auth/master.adoc index 5d5e425865..1b931a0936 100644 --- a/downstream/titles/central-auth/master.adoc +++ b/downstream/titles/central-auth/master.adoc @@ -7,7 +7,7 @@ include::attributes/attributes.adoc[] // Book Title -= Access Management and Authentication += Access management and authentication {AAPCentralAuth} is a third-party identity provider (idP) solution, allowing for a simplified single sign-on solution that can be used across the {PlatformNameShort}. Platform administrators can utilize {CentralAuth} to test connectivity and authentication, as well as onboard new users and manage user permissions by configuring and assigning them to groups. Along with OpenID Connect-based and LDAP support, {CentralAuth} also provides a supported REST API which can be used to bootstrap customer usage. diff --git a/downstream/titles/controller/controller-admin-guide/docinfo.xml b/downstream/titles/controller/controller-admin-guide/docinfo.xml index 07ddf4bf91..5cc1bb1f9f 100644 --- a/downstream/titles/controller/controller-admin-guide/docinfo.xml +++ b/downstream/titles/controller/controller-admin-guide/docinfo.xml @@ -1,7 +1,7 @@ -Configuring Automation Execution +Configuring automation execution Red Hat Ansible Automation Platform 2.5 -Administrator guide for automation controller +Learn how to manage, monitor, and use automation controller Learn how to manage automation controller through custom scripts, management jobs, and more. diff --git a/downstream/titles/controller/controller-admin-guide/master.adoc b/downstream/titles/controller/controller-admin-guide/master.adoc index 667dec89f2..b9a16b2b76 100644 --- a/downstream/titles/controller/controller-admin-guide/master.adoc +++ b/downstream/titles/controller/controller-admin-guide/master.adoc @@ -9,9 +9,9 @@ include::attributes/attributes.adoc[] // Book Title -= Configuring Automation Execution += Configuring automation execution -The {ControllerName} Administration Guide describes the administration of {ControllerName} through custom scripts, management jobs, and more. +This guide describes the administration of {ControllerName} through custom scripts, management jobs, and more. Written for DevOps engineers and administrators, the {ControllerName} Administration Guide assumes a basic understanding of the systems requiring management with {ControllerName}s easy-to-use graphical interface. include::{Boilerplate}[] diff --git a/downstream/titles/controller/controller-api-overview/docinfo.xml b/downstream/titles/controller/controller-api-overview/docinfo.xml index a592868e21..7047335f62 100644 --- a/downstream/titles/controller/controller-api-overview/docinfo.xml +++ b/downstream/titles/controller/controller-api-overview/docinfo.xml @@ -1,4 +1,4 @@ -Automation Execution API Overview +Automation execution API overview Red Hat Ansible Automation Platform 2.5 Developer overview for the {ControllerName} API diff --git a/downstream/titles/controller/controller-api-overview/master.adoc b/downstream/titles/controller/controller-api-overview/master.adoc index 0ed9fd7414..d7c16b455d 100644 --- a/downstream/titles/controller/controller-api-overview/master.adoc +++ b/downstream/titles/controller/controller-api-overview/master.adoc @@ -8,7 +8,7 @@ include::attributes/attributes.adoc[] // Book Title -= Automation Execution API Overview += Automation execution API overview Thank you for your interest in {PlatformName}. {PlatformNameShort} helps teams manage complex multitiered deployments by adding control, knowledge, and delegation to Ansible-powered environments. diff --git a/downstream/titles/controller/controller-user-guide/docinfo.xml b/downstream/titles/controller/controller-user-guide/docinfo.xml index c9b9167117..03ebe0e483 100644 --- a/downstream/titles/controller/controller-user-guide/docinfo.xml +++ b/downstream/titles/controller/controller-user-guide/docinfo.xml @@ -1,9 +1,9 @@ -Using Automation Execution +Using automation execution Red Hat Ansible Automation Platform 2.5 -User guide for automation controller +Use automation execution deploy, define, operate, scale and delegate automation - This guide shows you how to use automation controller to define, operate, scale and delegate automation. + This guide shows you how to use automation controller to define, operate, scale and delegate automation across your enterprise. Red Hat Customer Content Services diff --git a/downstream/titles/controller/controller-user-guide/master.adoc b/downstream/titles/controller/controller-user-guide/master.adoc index d96217c349..21f7fcbfc7 100644 --- a/downstream/titles/controller/controller-user-guide/master.adoc +++ b/downstream/titles/controller/controller-user-guide/master.adoc @@ -9,7 +9,7 @@ include::attributes/attributes.adoc[] // Book Title -= Using Automation Execution += Using automation execution Thank you for your interest in {PlatformName} {ControllerName}. {ControllerNameStart} helps teams manage complex multitiered deployments by adding control, knowledge, and delegation to Ansible-powered environments. diff --git a/downstream/titles/develop-automation-content/docinfo.xml b/downstream/titles/develop-automation-content/docinfo.xml index c0f770e5b3..1473821ead 100644 --- a/downstream/titles/develop-automation-content/docinfo.xml +++ b/downstream/titles/develop-automation-content/docinfo.xml @@ -1,7 +1,7 @@ Developing automation content Red Hat Ansible Automation Platform 2.5 -Install Ansible Automation Platform +Develop Ansible automation content to run automation jobs This guide describes how to develop Ansible automation content and how to use it to run automation jobs from Red Hat Ansible Automation Platforms. diff --git a/downstream/titles/eda/eda-getting-started-guide/docinfo.xml b/downstream/titles/eda/eda-getting-started-guide/docinfo.xml index de5a62f77c..ddcac75870 100644 --- a/downstream/titles/eda/eda-getting-started-guide/docinfo.xml +++ b/downstream/titles/eda/eda-getting-started-guide/docinfo.xml @@ -1,7 +1,7 @@ -Getting started with Event-Driven Ansible guide +Getting started with Event-Driven Ansible Red Hat Ansible Automation Platform 2.5 -Learn about the benefits and how to get started using Event-Driven Ansible. +Learn about the benefits and how to get started using Event-Driven Ansible Event-Driven Ansible is a new way to enhance and expand automation by improving IT speed and agility while enabling consistency and resilience. This feature is designed for simplicity and flexibility. diff --git a/downstream/titles/eda/eda-getting-started-guide/master.adoc b/downstream/titles/eda/eda-getting-started-guide/master.adoc index d70e26df28..6f96c67f34 100644 --- a/downstream/titles/eda/eda-getting-started-guide/master.adoc +++ b/downstream/titles/eda/eda-getting-started-guide/master.adoc @@ -9,7 +9,7 @@ include::attributes/attributes.adoc[] // Book Title -= Getting started with Event-Driven Ansible guide += Getting started with Event-Driven Ansible Thank you for your interest in {EDAname}. {EDAname} is a new way to enhance and expand automation. It helps teams automate decision-making and improve IT speed and agility. diff --git a/downstream/titles/eda/eda-user-guide/docinfo.xml b/downstream/titles/eda/eda-user-guide/docinfo.xml index 5675e6b32f..4a544938ec 100644 --- a/downstream/titles/eda/eda-user-guide/docinfo.xml +++ b/downstream/titles/eda/eda-user-guide/docinfo.xml @@ -1,7 +1,7 @@ -Using Automation Decisions +Using automation decisions Red Hat Ansible Automation Platform 2.5 -Learn to configure and use {EDAcontroller} to enhance and expand automation +Configure and use {EDAcontroller} to enhance and expand automation Learn how to configure your {EDAcontroller} to set up credentials, new projects, decision environments, tokens to authenticate to Ansible Automation Platform Controller, and rulebook activation. diff --git a/downstream/titles/eda/eda-user-guide/master.adoc b/downstream/titles/eda/eda-user-guide/master.adoc index 5e6b206255..4dad15ff30 100644 --- a/downstream/titles/eda/eda-user-guide/master.adoc +++ b/downstream/titles/eda/eda-user-guide/master.adoc @@ -6,9 +6,9 @@ include::attributes/attributes.adoc[] // Book Title -= Using Automation Decisions += Using automation decisions -{EDAcontroller} is a new way to enhance and expand automation by improving IT speed and agility while enabling consistency and resilience. +{EDAcontroller} is a new way to enhance and expand automation by improving IT speed and agility while enabling consistency and resilience. Developed by Red Hat, this feature is designed for simplicity and flexibility. include::{Boilerplate}[] diff --git a/downstream/titles/getting-started/docinfo.xml b/downstream/titles/getting-started/docinfo.xml index 246da36e34..9c4753f28a 100644 --- a/downstream/titles/getting-started/docinfo.xml +++ b/downstream/titles/getting-started/docinfo.xml @@ -1,7 +1,7 @@ -Getting Started with Ansible Automation Platform +Getting started with Ansible Automation Platform Red Hat Ansible Automation Platform 2.5 -Getting Started with Ansible Automation Platform +Get started with Ansible Automation Platform This guide shows how to get started with Ansible Automation Platform diff --git a/downstream/titles/getting-started/master.adoc b/downstream/titles/getting-started/master.adoc index 6504bee55d..8d41cc8a0c 100644 --- a/downstream/titles/getting-started/master.adoc +++ b/downstream/titles/getting-started/master.adoc @@ -10,8 +10,8 @@ include::attributes/attributes.adoc[] // Book Title -= Getting Started with Ansible Automation Platform += Getting started with Ansible Automation Platform -Getting Started with Ansible Automation Platform +Getting started with Ansible Automation Platform include::{Boilerplate}[] diff --git a/downstream/titles/navigator-guide/docinfo.xml b/downstream/titles/navigator-guide/docinfo.xml index c8df6821df..869a540481 100644 --- a/downstream/titles/navigator-guide/docinfo.xml +++ b/downstream/titles/navigator-guide/docinfo.xml @@ -1,4 +1,4 @@ -Using Content Creator +Using content creator Red Hat Ansible Automation Platform 2.5 Develop content that is compatible with Ansible Automation Platform diff --git a/downstream/titles/navigator-guide/master.adoc b/downstream/titles/navigator-guide/master.adoc index d52c20d430..5adaaa1622 100644 --- a/downstream/titles/navigator-guide/master.adoc +++ b/downstream/titles/navigator-guide/master.adoc @@ -7,7 +7,7 @@ include::attributes/attributes.adoc[] // Book Title -= Using Content Creator += Using content creator include::{Boilerplate}[] diff --git a/downstream/titles/operator-mesh/docinfo.xml b/downstream/titles/operator-mesh/docinfo.xml index b397ea5945..d7f34fed3b 100644 --- a/downstream/titles/operator-mesh/docinfo.xml +++ b/downstream/titles/operator-mesh/docinfo.xml @@ -1,4 +1,4 @@ -Automation Mesh for Managed Cloud or Operator Environments +Automation mesh for managed cloud or operator environments Red Hat Ansible Automation Platform 2.5 Automate at scale in a cloud-native way diff --git a/downstream/titles/operator-mesh/master.adoc b/downstream/titles/operator-mesh/master.adoc index 319ce852f0..28c57b522c 100644 --- a/downstream/titles/operator-mesh/master.adoc +++ b/downstream/titles/operator-mesh/master.adoc @@ -9,7 +9,7 @@ include::attributes/attributes.adoc[] // Book Title -= Automation Mesh for Managed Cloud or Operator Environments += Automation mesh for managed cloud or operator environments Thank you for your interest in {PlatformName}. {PlatformNameShort} is a commercial offering that helps teams manage complex multi-tier deployments by adding control, knowledge, and delegation to Ansible-powered environments. diff --git a/downstream/titles/playbooks/playbooks-getting-started/docinfo.xml b/downstream/titles/playbooks/playbooks-getting-started/docinfo.xml index 27b980b6e4..5dc012241f 100644 --- a/downstream/titles/playbooks/playbooks-getting-started/docinfo.xml +++ b/downstream/titles/playbooks/playbooks-getting-started/docinfo.xml @@ -1,7 +1,7 @@ -Getting started with Playbooks +Getting started with playbooks Red Hat Ansible Automation Platform 2.5 -Getting started with ansible playbooks +Get started with Ansible Playbooks This guide shows how to create and use playbooks to address your automation requirements. This document includes content from the upstream docs.ansible.com documentation, which is covered by the GNU GENERAL PUBLIC LICENSE v3.0. diff --git a/downstream/titles/playbooks/playbooks-getting-started/master.adoc b/downstream/titles/playbooks/playbooks-getting-started/master.adoc index 54cd6f5344..8a71e75144 100644 --- a/downstream/titles/playbooks/playbooks-getting-started/master.adoc +++ b/downstream/titles/playbooks/playbooks-getting-started/master.adoc @@ -8,7 +8,7 @@ include::attributes/attributes.adoc[] // Book Title -= Getting started with Playbooks += Getting started with playbooks Thank you for your interest in {PlatformName}. {PlatformNameShort} is a commercial offering that helps teams manage complex multi-tier deployments by adding control, knowledge, and delegation to Ansible-powered environments. @@ -20,7 +20,3 @@ include::playbooks/assembly-intro-to-playbooks.adoc[leveloffset=+1] include::playbooks/assembly-networking-playbook.adoc[leveloffset=+1] include::playbooks/assembly-playbook-practical-example.adoc[leveloffset=+1] include::playbooks/assembly-open-source-license.adoc[leveloffset=+1] - - - - diff --git a/downstream/titles/playbooks/playbooks-reference/docinfo.xml b/downstream/titles/playbooks/playbooks-reference/docinfo.xml index 34e0e320f9..58966318a4 100644 --- a/downstream/titles/playbooks/playbooks-reference/docinfo.xml +++ b/downstream/titles/playbooks/playbooks-reference/docinfo.xml @@ -1,11 +1,11 @@ -Reference Guide to Ansible Playbooks +Reference guide to Ansible Playbooks Red Hat Ansible Automation Platform 2.5 -Reference Guide to Ansible Playbooks +Learn about the different approaches for creating playbooks This guide provides a reference for the differing approaches to the creating of Ansible playbooks. Red Hat Customer Content Services - \ No newline at end of file + diff --git a/downstream/titles/playbooks/playbooks-reference/master.adoc b/downstream/titles/playbooks/playbooks-reference/master.adoc index 40f9d25164..1b6b563cdc 100644 --- a/downstream/titles/playbooks/playbooks-reference/master.adoc +++ b/downstream/titles/playbooks/playbooks-reference/master.adoc @@ -8,7 +8,7 @@ include::attributes/attributes.adoc[] // Book Title -= Reference Guide for Ansible Playbooks += Reference guide for Ansible Playbooks Thank you for your interest in {PlatformName}. {PlatformNameShort} is a commercial offering that helps teams manage complex multi-tier deployments by adding control, knowledge, and delegation to Ansible-powered environments. @@ -16,4 +16,4 @@ This guide provides a reference for the differing approaches to the creating of include::{Boilerplate}[] -include::playbooks/assembly-reference-test.adoc[leveloffset=+1] \ No newline at end of file +include::playbooks/assembly-reference-test.adoc[leveloffset=+1] diff --git a/downstream/titles/release-notes/docinfo.xml b/downstream/titles/release-notes/docinfo.xml index ff2daec8bf..bd6ede26cf 100644 --- a/downstream/titles/release-notes/docinfo.xml +++ b/downstream/titles/release-notes/docinfo.xml @@ -1,4 +1,4 @@ -Release Notes +Release notes Red Hat Ansible Automation Platform 2.5 New features, enhancements, and bug fix information diff --git a/downstream/titles/release-notes/master.adoc b/downstream/titles/release-notes/master.adoc index 231e6b7663..62461f8bf2 100644 --- a/downstream/titles/release-notes/master.adoc +++ b/downstream/titles/release-notes/master.adoc @@ -2,7 +2,7 @@ // For each release, make a copy of assembly-rn-template.adoc, rename and save as instructed in the template and add an include statement to this file. include::attributes/attributes.adoc[] -= Release Notes += Release notes include::{Boilerplate}[] diff --git a/downstream/titles/security-guide/docinfo.xml b/downstream/titles/security-guide/docinfo.xml index 0c60681dd9..fb847664c8 100644 --- a/downstream/titles/security-guide/docinfo.xml +++ b/downstream/titles/security-guide/docinfo.xml @@ -1,4 +1,4 @@ -Implementing Security Automation +Implementing security automation Red Hat Ansible Automation Platform 2.5 Identify and manage security events using Ansible diff --git a/downstream/titles/security-guide/master.adoc b/downstream/titles/security-guide/master.adoc index 546f76e8f0..2c0bf13757 100644 --- a/downstream/titles/security-guide/master.adoc +++ b/downstream/titles/security-guide/master.adoc @@ -7,7 +7,7 @@ include::attributes/attributes.adoc[] // Book Title -= Implementing Security Automation += Implementing security automation include::{Boilerplate}[] diff --git a/downstream/titles/upgrade/docinfo.xml b/downstream/titles/upgrade/docinfo.xml index 01d64bfa69..b0b8a241bc 100644 --- a/downstream/titles/upgrade/docinfo.xml +++ b/downstream/titles/upgrade/docinfo.xml @@ -1,4 +1,4 @@ -Red Hat Ansible Automation Platform upgrade and migration guide +Upgrade and migration Red Hat Ansible Automation Platform 2.5 Upgrade and migrate legacy deployments of Ansible Automation Platform diff --git a/downstream/titles/upgrade/master.adoc b/downstream/titles/upgrade/master.adoc index 99be853bab..5664d9c71e 100644 --- a/downstream/titles/upgrade/master.adoc +++ b/downstream/titles/upgrade/master.adoc @@ -6,7 +6,7 @@ include::attributes/attributes.adoc[] // Book Title -= Red Hat Ansible Automation Platform upgrade and migration guide += Upgrade and migration include::{Boilerplate}[] From 0e272eceb91ad8b85824a609b1aeab92bf8200a3 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Tue, 16 Jul 2024 01:28:56 -0600 Subject: [PATCH 033/590] pbtitle - Fix issues breaking 2.5 doc builds (#1577) (#1578) --- ...ng.png => logging-splunk-controller-example.png} | Bin .../playbooks/playbooks-reference/master.adoc | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename downstream/images/{logging-splunk-controller-example.png.png => logging-splunk-controller-example.png} (100%) diff --git a/downstream/images/logging-splunk-controller-example.png.png b/downstream/images/logging-splunk-controller-example.png similarity index 100% rename from downstream/images/logging-splunk-controller-example.png.png rename to downstream/images/logging-splunk-controller-example.png diff --git a/downstream/titles/playbooks/playbooks-reference/master.adoc b/downstream/titles/playbooks/playbooks-reference/master.adoc index 1b6b563cdc..251e74881b 100644 --- a/downstream/titles/playbooks/playbooks-reference/master.adoc +++ b/downstream/titles/playbooks/playbooks-reference/master.adoc @@ -8,7 +8,7 @@ include::attributes/attributes.adoc[] // Book Title -= Reference guide for Ansible Playbooks += Reference guide to Ansible Playbooks Thank you for your interest in {PlatformName}. {PlatformNameShort} is a commercial offering that helps teams manage complex multi-tier deployments by adding control, knowledge, and delegation to Ansible-powered environments. From c6b937341ed6a4464edad56cc83e522e3d965c11 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Tue, 16 Jul 2024 09:55:58 +0100 Subject: [PATCH 034/590] Added note about removal of container images (#1580) (#1581) Need to explain container images will be removed when upgrading AAP https://issues.redhat.com/browse/AAP-25760 --- downstream/modules/platform/con-aap-upgrade-planning.adoc | 4 ++++ .../platform/proc-running-setup-script-for-updates.adoc | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/downstream/modules/platform/con-aap-upgrade-planning.adoc b/downstream/modules/platform/con-aap-upgrade-planning.adoc index 73b7ca8a25..44ab81a87c 100644 --- a/downstream/modules/platform/con-aap-upgrade-planning.adoc +++ b/downstream/modules/platform/con-aap-upgrade-planning.adoc @@ -24,6 +24,10 @@ Before you begin the upgrade process, review the following considerations to pla == {HubNameStart} * When upgrading to {PlatformNameShort} {PlatformVers}, you can either add an existing {HubName} API token or generate a new one and invalidate any existing tokens. +* Existing container images are removed when upgrading {PlatformNameShort}. +This is because, when upgrading {PlatformNameShort} with `setup.sh` script, podman `system reset -f` is executed. +This removes all container images on your {PlatformNameShort} nodes then pushes the new {ExecEnvShort} image that is bundled with installer. +See xref:proc-running-setup-script-for-updates[Running the {PlatformName} installer setup script]. [role="_additional-resources"] .Additional resources diff --git a/downstream/modules/platform/proc-running-setup-script-for-updates.adoc b/downstream/modules/platform/proc-running-setup-script-for-updates.adoc index 255ef177c6..faeaee6ada 100644 --- a/downstream/modules/platform/proc-running-setup-script-for-updates.adoc +++ b/downstream/modules/platform/proc-running-setup-script-for-updates.adoc @@ -1,4 +1,4 @@ -// [id="proc-running-setup-script-for-updates_{context}"] +[id="proc-running-setup-script-for-updates"] = Running the {PlatformName} installer setup script From 2771f33a449ab6e8e11a6399b4d56195a1656d91 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Tue, 16 Jul 2024 10:42:28 +0100 Subject: [PATCH 035/590] Backport 1582 to 2.5 (#1586) * AAP-22069 adding backup and restore via yaml chapters (#1514) * AAP-22069 backup and restore via yaml chapters * updating restore name and dates for back up and restore to be consistent * AAP-22069 adding backup and restore via yaml chapters (#1582) * AAP-22069 backup and restore via yaml chapters * updating restore name and dates for back up and restore to be consistent * PR suggestions --- .../platform/assembly-aap-backup.adoc | 2 + .../platform/assembly-aap-recovery.adoc | 2 + .../platform/proc-aap-controller-restore.adoc | 4 +- .../proc-aap-controller-yaml-backup.adoc | 36 ++++++++++++ .../proc-aap-controller-yaml-restore.adoc | 58 +++++++++++++++++++ 5 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 downstream/modules/platform/proc-aap-controller-yaml-backup.adoc create mode 100644 downstream/modules/platform/proc-aap-controller-yaml-restore.adoc diff --git a/downstream/assemblies/platform/assembly-aap-backup.adoc b/downstream/assemblies/platform/assembly-aap-backup.adoc index b84390d5f2..5399ba5791 100644 --- a/downstream/assemblies/platform/assembly-aap-backup.adoc +++ b/downstream/assemblies/platform/assembly-aap-backup.adoc @@ -20,6 +20,8 @@ Take a backup regularly in case you want to restore the platform to a previous s include::platform/proc-aap-controller-backup.adoc[leveloffset=+1] +include::platform/proc-aap-controller-yaml-backup.adoc[leveloffset=+1] + include::platform/proc-aap-hub-backup.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] diff --git a/downstream/assemblies/platform/assembly-aap-recovery.adoc b/downstream/assemblies/platform/assembly-aap-recovery.adoc index 704b685bc9..444ce412d1 100644 --- a/downstream/assemblies/platform/assembly-aap-recovery.adoc +++ b/downstream/assemblies/platform/assembly-aap-recovery.adoc @@ -14,6 +14,8 @@ If you lose information on your system or experience issues with an upgrade, you include::platform/proc-aap-controller-restore.adoc[leveloffset=+1] +include::platform/proc-aap-controller-yaml-restore.adoc[leveloffset=+1] + include::platform/proc-aap-hub-restore.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] diff --git a/downstream/modules/platform/proc-aap-controller-restore.adoc b/downstream/modules/platform/proc-aap-controller-restore.adoc index 00e428b1ef..365348af0f 100644 --- a/downstream/modules/platform/proc-aap-controller-restore.adoc +++ b/downstream/modules/platform/proc-aap-controller-restore.adoc @@ -7,7 +7,9 @@ Use this procedure to restore a previous controller deployment from an Automatio [NOTE] ==== -The name specified for the new AutomationController custom resource must not match an existing deployment or the recovery process will fail. If the name specified does match an existing deployment, see xref:aap-troubleshoot-backup-recover[Troubleshooting] for steps to resolve the issue. +The name specified for the new AutomationController custom resource must not match an existing deployment. + +If the backup custom resource being restored is a backup of a currently running AutomationController custom resource the recovery process will fail. See xref:aap-troubleshoot-backup-recover[Troubleshooting] for steps to resolve the issue. ==== .Prerequisites diff --git a/downstream/modules/platform/proc-aap-controller-yaml-backup.adoc b/downstream/modules/platform/proc-aap-controller-yaml-backup.adoc new file mode 100644 index 0000000000..97d0932c2c --- /dev/null +++ b/downstream/modules/platform/proc-aap-controller-yaml-backup.adoc @@ -0,0 +1,36 @@ +[id="aap-controller-yaml-backup"] + += Using YAML to back up the {ControllerNameStart} deployment + +See the following procedure for how to back up a deployment of the {ControllerName} using YAML. + +.Prerequisites + + +* You must be authenticated with an OpenShift cluster. + +* The {OperatorPlatform} has been installed to the cluster. +* The {ControllerName} is deployed to using the {OperatorPlatform}. + +.Procedure + +. Create a file named "backup-awx.yml" with the following contents: ++ +---- +--- +apiVersion: automationcontroller.ansible.com/v1beta1 +kind: AWXBackup +metadata: + name: awxbackup-2024-07-15 + namespace: my-namespace +spec: + deployment_name: controller +---- ++ + +NOTE: The "deployment_name" above is the name of the {ControllerName} deployment you intend to backup from. +The namespace above is the one containing the {ControllerName} deployment you intend to back up. + +. Use the `oc apply` command to create the backup object in your cluster: + +`$ oc apply -f backup-awx.yml` diff --git a/downstream/modules/platform/proc-aap-controller-yaml-restore.adoc b/downstream/modules/platform/proc-aap-controller-yaml-restore.adoc new file mode 100644 index 0000000000..32792b55bc --- /dev/null +++ b/downstream/modules/platform/proc-aap-controller-yaml-restore.adoc @@ -0,0 +1,58 @@ +[id="aap-controller-yaml-restore"] + += Using YAML to recover the {ControllerNameStart} deployment +See the following procedure for how to restore a deployment of the {ControllerName} using YAML. + +.Prerequisite +The external database must be a PostgreSQL database that is the version supported by the current release of {PlatformNameShort}. + +[NOTE] +==== +{PlatformNameShort} {PlatformVers} supports PostgreSQL 13. +==== + +.Procedure + +The external postgres instance credentials and connection information must be stored in a secret, which is then set on the {ControllerName} spec. + +. Create a `external-postgres-configuration-secret` YAML file, following the template below: ++ +---- +apiVersion: v1 +kind: Secret +metadata: + name: external-restore-postgres-configuration + namespace: <1> +stringData: + host: "" <2> + port: "" <3> + database: "" + username: "" + password: "" <4> + sslmode: "prefer" <5> + type: "unmanaged" +type: Opaque +---- +<1> Namespace to create the secret in. This should be the same namespace you wish to deploy to. +<2> The resolvable hostname for your database node. +<3> External port defaults to `5432`. +<4> Value for variable `password` should not contain single or double quotes (', ") or backslashes (\) to avoid any issues during deployment, backup or restoration. +<5> The variable `sslmode` is valid for `external` databases only. The allowed values are: `*prefer*`, `*disable*`, `*allow*`, `*require*`, `*verify-ca*`, and `*verify-full*`. +. Apply `external-postgres-configuration-secret.yml` to your cluster using the `oc create` command. ++ +---- +$ oc create -f external-postgres-configuration-secret.yml +---- +. When creating your `AutomationControllerRestore` custom resource object, specify the secret on your spec, following the example below: ++ +---- +kind: AutomationControllerRestore +apiVersion: automationcontroller.ansible.com/v1beta1 +metadata: + namespace: my-namespace + name: awxrestore-2024-07-15 +spec: + deployment_name: restored_controller + backup_name: awxbackup-2024-07-15 + postgres_configuration_secret: 'external-restore-postgres-configuration' +---- \ No newline at end of file From e10b520664298b3c023afaa833366126779703b2 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:03:34 +0100 Subject: [PATCH 036/590] creating PostgresVers attribute (#1587) (#1588) --- downstream/attributes/attributes.adoc | 1 + .../modules/platform/proc-aap-controller-yaml-restore.adoc | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/downstream/attributes/attributes.adoc b/downstream/attributes/attributes.adoc index d1adbeceac..c6561b0f77 100644 --- a/downstream/attributes/attributes.adoc +++ b/downstream/attributes/attributes.adoc @@ -7,6 +7,7 @@ :CentralAuthStart: Central authentication :CentralAuth: central authentication :PlatformVers: 2.5 +:PostgresVers: PostgreSQL 15 //The Ansible-core version required to install AAP :CoreInstVers: 2.15 //The Ansible-core version used by the AAP control plane and EEs diff --git a/downstream/modules/platform/proc-aap-controller-yaml-restore.adoc b/downstream/modules/platform/proc-aap-controller-yaml-restore.adoc index 32792b55bc..7e9c511ec7 100644 --- a/downstream/modules/platform/proc-aap-controller-yaml-restore.adoc +++ b/downstream/modules/platform/proc-aap-controller-yaml-restore.adoc @@ -8,7 +8,7 @@ The external database must be a PostgreSQL database that is the version supporte [NOTE] ==== -{PlatformNameShort} {PlatformVers} supports PostgreSQL 13. +{PlatformNameShort} {PlatformVers} supports {PostgresVers}. ==== .Procedure From 7f8e2546b90b70114852869a9e2707e0f7ed0086 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Tue, 16 Jul 2024 12:31:39 -0600 Subject: [PATCH 037/590] AAP-27282 - Updated attribute for credentials (#1590) (#1591) --- downstream/attributes/attributes.adoc | 3 +-- downstream/modules/eda/proc-eda-set-up-credential.adoc | 2 +- .../modules/hub/proc-configure-automation-hub-server-gui.adoc | 2 +- downstream/modules/hub/proc-create-credential.adoc | 2 +- .../platform/proc-controller-add-users-job-templates.adoc | 2 +- .../modules/platform/proc-controller-adding-gpg-key.adoc | 2 +- .../modules/platform/proc-controller-create-credential.adoc | 2 +- .../platform/proc-controller-create-insights-credential.adoc | 2 +- .../modules/platform/proc-controller-edit-credential.adoc | 2 +- .../platform/ref-controller-credentials-getting-started.adoc | 2 +- 10 files changed, 10 insertions(+), 11 deletions(-) diff --git a/downstream/attributes/attributes.adoc b/downstream/attributes/attributes.adoc index c6561b0f77..ca5f03ab53 100644 --- a/downstream/attributes/attributes.adoc +++ b/downstream/attributes/attributes.adoc @@ -212,8 +212,7 @@ :MenuADWebhooks: menu:{MenuAD}[Webhooks] :MenuADCredentials: menu:{MenuAD}[Infrastructure > Credentials] :MenuADCredentialType: menu:{MenuAD}[Infrastructure > Credential Types] -:MenuAECredentials: menu:{MenuTopAE}[Infrastructure > Credentials] -:MenuAECredentialType: menu:{MenuTopAE}[Infrastructure > Credential Types] + // Automation Content (aka automation hub menu selections) // In 2.5EA the Automation Content selection will open a hub ui instance in a new tab/browser so the menu definitions will not change until 2.5-next diff --git a/downstream/modules/eda/proc-eda-set-up-credential.adoc b/downstream/modules/eda/proc-eda-set-up-credential.adoc index 7cdb5d0a93..4b5c1d4839 100644 --- a/downstream/modules/eda/proc-eda-set-up-credential.adoc +++ b/downstream/modules/eda/proc-eda-set-up-credential.adoc @@ -15,7 +15,7 @@ You can use any SCM provider that supports `basic auth`. // ddacosta: I'm not sure whether there will be an EDA specific dashboard in the gateway. Step 1 might need to change to something like "Log in to AAP". // Also, Credentials will be centrally defined at the platform level for 2.5. Steps here should be verified/rewritten as appropriate and possibly relocated to Authentication docs . Log in to the {EDAcontroller} Dashboard. -. From the navigation panel, select {MenuAMCredentials}. +. From the navigation panel, select {MenuADCredentials}. . Click btn:[Create credential]. . Insert the following: + diff --git a/downstream/modules/hub/proc-configure-automation-hub-server-gui.adoc b/downstream/modules/hub/proc-configure-automation-hub-server-gui.adoc index 954c85cdb8..2ce8d51859 100644 --- a/downstream/modules/hub/proc-configure-automation-hub-server-gui.adoc +++ b/downstream/modules/hub/proc-configure-automation-hub-server-gui.adoc @@ -16,7 +16,7 @@ Creating a new token revokes any previous tokens generated for {HubName}. Update . Navigate to your {ControllerName}. . Create a new credential. -.. Navigate to {MenuAMCredentials}. +.. Navigate to {MenuAECredentials}. .. Click btn:[Add]. .. Enter the name for your new credential in the *Name* field. .. Optional: Enter a description and enter or select the name of the organization with which the credential is associated. diff --git a/downstream/modules/hub/proc-create-credential.adoc b/downstream/modules/hub/proc-create-credential.adoc index 53aa31498b..021294ba76 100644 --- a/downstream/modules/hub/proc-create-credential.adoc +++ b/downstream/modules/hub/proc-create-credential.adoc @@ -11,7 +11,7 @@ To store {ExecEnvShort} images, add the credentials of only your selected contai .Procedure // For 2.5 this will be Log in to Ansible Automation Platform. From the navigation panel select Access Management > Credentials. Select the Automation Execution tab . Navigate to {ControllerName}. -. From the navigation panel, select {MenuAMCredentials}. +. From the navigation panel, select {MenuAECredentials}. . Click btn:[Add] to create a new credential. . Enter an authorization *Name*, *Description*, and *Organization*. . Select the *Credential Type*. diff --git a/downstream/modules/platform/proc-controller-add-users-job-templates.adoc b/downstream/modules/platform/proc-controller-add-users-job-templates.adoc index 2315685b6d..f7fba8bf9a 100644 --- a/downstream/modules/platform/proc-controller-add-users-job-templates.adoc +++ b/downstream/modules/platform/proc-controller-add-users-job-templates.adoc @@ -4,7 +4,7 @@ .Procedure -. From the navigation panel, select {MenuAMCredentials}. +. From the navigation panel, select {MenuAECredentials}. . Select the credential that you want to assign to additional users. . Click the *Access* tab. You can see users and teams associated with this credential and their roles. diff --git a/downstream/modules/platform/proc-controller-adding-gpg-key.adoc b/downstream/modules/platform/proc-controller-adding-gpg-key.adoc index b221a0cd47..ca09d29c2d 100644 --- a/downstream/modules/platform/proc-controller-adding-gpg-key.adoc +++ b/downstream/modules/platform/proc-controller-adding-gpg-key.adoc @@ -11,7 +11,7 @@ $ gpg --export --armour > my_public_key.asc ---- [arabic] -. From the navigation panel, select {MenuAMCredentials}. +. From the navigation panel, select {MenuAECredentials}. . Click btn:[Create credential]. . Give a meaningful name for the new credential, for example, "Infrastructure team public GPG key". . In the *Credential type* field, select *GPG Public Key*. diff --git a/downstream/modules/platform/proc-controller-create-credential.adoc b/downstream/modules/platform/proc-controller-create-credential.adoc index 7277930848..5d1c5502bb 100644 --- a/downstream/modules/platform/proc-controller-create-credential.adoc +++ b/downstream/modules/platform/proc-controller-create-credential.adoc @@ -18,7 +18,7 @@ Add more credentials as needed. endif::controller-UG[] .Procedure -. From the navigation panel, select {MenuAMCredentials}. +. From the navigation panel, select {MenuAECredentials}. ifdef::controller-GS[] . To add a new credential, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-getting-started-create-credential[Creating a credential] in _{ControllerUG}_. + diff --git a/downstream/modules/platform/proc-controller-create-insights-credential.adoc b/downstream/modules/platform/proc-controller-create-insights-credential.adoc index 2e6a769418..626daae5ea 100644 --- a/downstream/modules/platform/proc-controller-create-insights-credential.adoc +++ b/downstream/modules/platform/proc-controller-create-insights-credential.adoc @@ -6,7 +6,7 @@ Use the following procedure to create a new credential for use with Red Hat Insi .Procedure -. From the navigation panel, select {MenuAMCredentials}. +. From the navigation panel, select {MenuAECredentials}. . Click btn:[Create credential]. . Enter the appropriate details in the following fields: diff --git a/downstream/modules/platform/proc-controller-edit-credential.adoc b/downstream/modules/platform/proc-controller-edit-credential.adoc index 78e6695908..9309dd2d4d 100644 --- a/downstream/modules/platform/proc-controller-edit-credential.adoc +++ b/downstream/modules/platform/proc-controller-edit-credential.adoc @@ -8,5 +8,5 @@ As part of the initial setup, you can leave the default *Demo Credential* as it . Edit the credential by using one of these methods: ** Go to the credential Details page and click btn:[Edit]. -** From the navigation panel, select {MenuAMCredentials}. Click btn:[Edit] next to the credential name and edit the appropriate details. +** From the navigation panel, select {MenuAECredentials}. Click btn:[Edit] next to the credential name and edit the appropriate details. . Save your changes. diff --git a/downstream/modules/platform/ref-controller-credentials-getting-started.adoc b/downstream/modules/platform/ref-controller-credentials-getting-started.adoc index 54c2c789e8..72edf44288 100644 --- a/downstream/modules/platform/ref-controller-credentials-getting-started.adoc +++ b/downstream/modules/platform/ref-controller-credentials-getting-started.adoc @@ -2,7 +2,7 @@ = Getting started with credentials //[ddacosta] This should really be rewritten as a procedure because it includes steps. -From the navigation panel, select {MenuAMCredentials} to access the *Credentials* page. +From the navigation panel, select {MenuAECredentials} to access the *Credentials* page. image:credentials-demo-edit-details.png[Credentials] From ac31eae9959ce584d3f871146b31fbcea55afc57 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Tue, 16 Jul 2024 15:18:52 -0600 Subject: [PATCH 038/590] AAP-19920 Convert/create modules for gateway roles (#1572) (#1592) * AAP-19920 Creating new modules for Roles * AAP-19920 - corrections based on peer review * AAP-19920 Added missing title for Roles concept module --- downstream/modules/platform/con-gw-roles.adoc | 7 +++++ .../platform/proc-gw-create-roles.adoc | 28 +++++++++++++++++++ .../platform/proc-gw-delete-roles.adoc | 19 +++++++++++++ .../modules/platform/proc-gw-edit-roles.adoc | 19 +++++++++++++ .../modules/platform/proc-gw-roles.adoc | 27 ++++++++++++++++++ 5 files changed, 100 insertions(+) create mode 100644 downstream/modules/platform/con-gw-roles.adoc create mode 100644 downstream/modules/platform/proc-gw-create-roles.adoc create mode 100644 downstream/modules/platform/proc-gw-delete-roles.adoc create mode 100644 downstream/modules/platform/proc-gw-edit-roles.adoc create mode 100644 downstream/modules/platform/proc-gw-roles.adoc diff --git a/downstream/modules/platform/con-gw-roles.adoc b/downstream/modules/platform/con-gw-roles.adoc new file mode 100644 index 0000000000..9a1b5c913d --- /dev/null +++ b/downstream/modules/platform/con-gw-roles.adoc @@ -0,0 +1,7 @@ +:_mod-docs-content-type: CONCEPT + +[id="con-gw-roles_{context}"] + += Roles + +Roles are units of organization in the {PlatformName}. When you assign a role to a team or user, you are granting access to use, read, or write credentials. Because of the file structure associated with a role, roles become redistributable units that enable you to share behavior among resources, or with other users. All access that is granted to use, read, or write credentials is handled through roles, and roles are defined for a resource. diff --git a/downstream/modules/platform/proc-gw-create-roles.adoc b/downstream/modules/platform/proc-gw-create-roles.adoc new file mode 100644 index 0000000000..a707a65d3f --- /dev/null +++ b/downstream/modules/platform/proc-gw-create-roles.adoc @@ -0,0 +1,28 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-create-roles_{context}"] + += Creating a role + +ifdef::auto-exec[] +{ControllerNameStart} provides a set of predefined roles with permissions sufficient for standard automation execution tasks. It is also possible to configure custom roles, and assign one or more permission filters to them. Permission filters define the actions allowed for a specific resource type. +endif::auto-exec[] + +ifdef::auto-dec[] +{EDAName} provides a set of predefined roles with permissions sufficient for standard automation decision tasks. It is also possible to configure custom roles, and assign one or more permission filters to them. Permission filters define the actions allowed for a specific resource type. +endif::auto-dec[] + +.Procedure + +. From the navigation panel, select {MenuAMRoles}. +ifdef::auto-exec[] +. Select the *Automation Execution* tab. +endif::auto-exec[] +ifdef::auto-dec[] +. Select the *Automation Decisions* tab. +endif::auto-dec[] +. Click btn:[Create role]. +. Provide a *Name* and optionally include a *Description* for the role. +. Select a *Content type*. +. Select the *Permissions* you want assigned to this role. +. Click btn:[Create role] to create your new role. diff --git a/downstream/modules/platform/proc-gw-delete-roles.adoc b/downstream/modules/platform/proc-gw-delete-roles.adoc new file mode 100644 index 0000000000..6f93179489 --- /dev/null +++ b/downstream/modules/platform/proc-gw-delete-roles.adoc @@ -0,0 +1,19 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-delete-roles_{context}"] + += Deleting a role + +Built in roles can not be deleted, however, you can delete custom roles from the *Roles* list view. + +.Procedure + +. From the navigation panel, select {MenuAMRoles}. +ifdef::auto-exec[] +. Select the *Automation Execution* tab. +endif::auto-exec[] +ifdef::auto-dec[] +. Select the *Automation Decisions* tab. +endif::auto-dec[] +. Click the *More Actions* icon *{MoreActionsIcon}* next to the role you want and select *Delete role*. +. To delete roles in bulk, select the roles you want to delete from the *Roles* list view, click the *More Actions* icon *{MoreActionsIcon}*, and select *Delete selected roles*. diff --git a/downstream/modules/platform/proc-gw-edit-roles.adoc b/downstream/modules/platform/proc-gw-edit-roles.adoc new file mode 100644 index 0000000000..143af0b8d9 --- /dev/null +++ b/downstream/modules/platform/proc-gw-edit-roles.adoc @@ -0,0 +1,19 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-edit-roles_{context}"] + += Editing a role + +Built in roles can not be changed, however, you can modify custom roles from the *Roles* list view. + +.Procedure + +. From the navigation panel, select {MenuAMRoles}. +ifdef::auto-exec[] +. Select the *Automation Execution* tab. +endif::auto-exec[] +ifdef::auto-dec[] +. Select the *Automation Decisions* tab. +endif::auto-dec[] +. Click the *Edit role* icon image:leftpencil.png[Edit,15,15] next to the role you want and modify the role settings as needed. +. Click btn:[Save role] to save your changes. diff --git a/downstream/modules/platform/proc-gw-roles.adoc b/downstream/modules/platform/proc-gw-roles.adoc new file mode 100644 index 0000000000..4b132d051e --- /dev/null +++ b/downstream/modules/platform/proc-gw-roles.adoc @@ -0,0 +1,27 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-roles_{context}"] + +ifdef::auto-exec[] += Automation execution roles + +You can display the set of roles assigned for automation execution resources by using *Access Management*. From here, you can also sort or search the roles list, and create, edit, or delete automation execution roles. +endif::auto-exec[] + +ifdef::auto-dec[] += Automation decision roles + +You can display the set of roles assigned for automation decision resources by using *Access Management*. From here, you can also sort or search the roles list, and create, edit, or delete automation decision roles. +endif::auto-dec[] + +.Procedure + +. From the navigation panel, select {MenuAMRoles}. +ifdef::auto-exec[] +. Select the *Automation Execution* tab. +endif::auto-exec[] +ifdef::auto-dec[] +. Select the *Automation Decisions* tab. +endif::auto-dec[] +. From the table header, you can sort the list of roles by using the arrows for *Role*, *Description*, *Created* and *Editable* or by making sort selections in the *Sort* list. +. You can filter the list of roles by selecting *Name* or *Editable* from the filter list and clicking the arrow. From 180e82a9c4265d2fe225496840984ca926641408 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:46:00 +0100 Subject: [PATCH 039/590] Preparing the AAP Operator guides for EA (#1556) (#1595) * Preparing the AAP Operator guides for EA * PR suggestions * typo fix --------- Co-authored-by: Ian Fowler <77341519+ianf77@users.noreply.github.com> --- .../platform/assembly-aap-backup.adoc | 3 +- .../platform/assembly-aap-recovery.adoc | 3 +- .../assembly-configure-aap-operator.adoc | 2 +- ...sembly-installing-controller-operator.adoc | 26 +++++++++------- .../assembly-installing-hub-operator.adoc | 4 +-- .../platform/con-ocp-supported-install.adoc | 31 ++++++++++++++++--- .../con-resource-operator-overview.adoc | 2 +- .../platform/proc-access-hub-operator-ui.adoc | 4 +-- .../proc-add-controller-access-token.adoc | 20 +++++------- .../platform/proc-cli-get-controller-pwd.adoc | 28 ++++++++--------- ...figuring-controller-image-pull-policy.adoc | 7 ++++- ...-configuring-controller-ldap-security.adoc | 8 ++++- ...-configuring-controller-route-options.adoc | 4 +++ .../proc-controller-ingress-options.adoc | 6 +++- .../proc-enable-hstore-extension.adoc | 2 +- .../platform/proc-hub-ingress-options.adoc | 4 +++ .../platform/proc-hub-route-options.adoc | 4 +++ .../proc-install-cli-aap-operator.adoc | 2 +- .../platform/proc-operator-access-aap.adoc | 4 +-- .../proc-operator-external-db-controller.adoc | 2 +- .../proc-operator-external-db-hub.adoc | 2 +- ...vision-ocp-storage-with-readwritemany.adoc | 4 ++- .../aap-operator-installation/master.adoc | 12 ++++--- 23 files changed, 116 insertions(+), 68 deletions(-) diff --git a/downstream/assemblies/platform/assembly-aap-backup.adoc b/downstream/assemblies/platform/assembly-aap-backup.adoc index 5399ba5791..986974760e 100644 --- a/downstream/assemblies/platform/assembly-aap-backup.adoc +++ b/downstream/assemblies/platform/assembly-aap-backup.adoc @@ -15,8 +15,7 @@ We recommend taking backups before upgrading the {OperatorPlatform}. Take a backup regularly in case you want to restore the platform to a previous state. -//part of 2.5 release, (AAP-22178) uncomment when publishing [gmurray] -//include::platform/proc-aap-platform-gateway-backup.adoc[leveloffset=+1] +include::platform/proc-aap-platform-gateway-backup.adoc[leveloffset=+1] include::platform/proc-aap-controller-backup.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-aap-recovery.adoc b/downstream/assemblies/platform/assembly-aap-recovery.adoc index 444ce412d1..9592a596d0 100644 --- a/downstream/assemblies/platform/assembly-aap-recovery.adoc +++ b/downstream/assemblies/platform/assembly-aap-recovery.adoc @@ -9,8 +9,7 @@ ifdef::context[:parent-context: {context}] [role="_abstract"] If you lose information on your system or experience issues with an upgrade, you can use the backup resources of your deployment instances. Use the following procedures to recover your {PlatformNameShort} deployment files. -//part of 2.5 release, (AAP-22178) uncomment when publishing [gmurray] -//include::platform/proc-aap-platform-gateway-restore.adoc[leveloffset=+1] +include::platform/proc-aap-platform-gateway-restore.adoc[leveloffset=+1] include::platform/proc-aap-controller-restore.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-configure-aap-operator.adoc b/downstream/assemblies/platform/assembly-configure-aap-operator.adoc index 430ea60d6c..69b0e99fc4 100644 --- a/downstream/assemblies/platform/assembly-configure-aap-operator.adoc +++ b/downstream/assemblies/platform/assembly-configure-aap-operator.adoc @@ -6,7 +6,7 @@ ifdef::context[:parent-context: {context}] = Configuring the Red Hat {OperatorPlatform} on {OCP} -The platform gateway for {PlaformNameShort} enables you to manage the following {PlatformNameShort} components to form a single user interface: +The platform gateway for {PlatformNameShort} enables you to manage the following {PlatformNameShort} components to form a single user interface: * {ControllerNameStart} * {HubNameStart} diff --git a/downstream/assemblies/platform/assembly-installing-controller-operator.adoc b/downstream/assemblies/platform/assembly-installing-controller-operator.adoc index 9bff54c4c2..f777a6658d 100644 --- a/downstream/assemblies/platform/assembly-installing-controller-operator.adoc +++ b/downstream/assemblies/platform/assembly-installing-controller-operator.adoc @@ -8,14 +8,13 @@ ifdef::context[:parent-context: {context}] [id="installing-controller-operator"] -= Installing and configuring {ControllerName} on {OCP} web console - += Configuring {ControllerName} on {OCP} web console :context: installing-contr-operator [role="_abstract"] -You can use these instructions to install the {ControllerName} operator on {OCP}, specify custom resources, and deploy {PlatformNameShort} with an external database. +You can use these instructions to configure the {ControllerName} operator on {OCP}, specify custom resources, and deploy {PlatformNameShort} with an external database. {ControllerNameStart} configuration can be done through the {ControllerName} extra_settings or directly in the user interface after deployment. However, it is important to note that configurations made in extra_settings take precedence over settings made in the user interface. @@ -30,23 +29,26 @@ When an instance of {ControllerName} is removed, the associated PVCs are not aut == Prerequisites * You have installed the {PlatformName} catalog in Operator Hub. -* For Controller, a default StorageClass must be configured on the cluster for the operator to dynamically create needed PVCs. This is not necessary if an external PostgreSQL database is configured. +* For {ControllerName}, a default StorageClass must be configured on the cluster for the operator to dynamically create needed PVCs. This is not necessary if an external PostgreSQL database is configured. * For Hub a StorageClass that supports ReadWriteMany must be available on the cluster to dynamically created the PVC needed for the content, redis and api pods. If it is not the default StorageClass on the cluster, you can specify it when creating your AutomationHub object. -== Installing the {ControllerName} operator -Use this procedure to install the {ControllerName} operator. +//Not relevant for 2.5 EA, commenting out section [gmurray] +//== Installing the {ControllerName} operator +//Use this procedure to install the {ControllerName} operator. -.Procedure +//.Procedure -. Navigate to menu:Operators[Installed Operators], then click on the *Ansible Automation Platform* operator. -. Locate the *Automation controller* tab, then click btn:[Create instance]. +//. Navigate to menu:Operators[Installed Operators], then click on the *Ansible Automation Platform* operator. +//. Locate the *Automation controller* tab, then click btn:[Create instance]. -You can proceed with configuring the instance using either the Form View or YAML view. +//You can proceed with configuring the instance using either the Form View or YAML view. -include::platform/proc-creating-controller-form-view.adoc[leveloffset=+2] +//include::platform/proc-creating-controller-form-view.adoc[leveloffset=+2] include::platform/proc-configuring-controller-image-pull-policy.adoc[leveloffset=+2] -include::platform/proc-configuring-controller-ldap-security.adoc[leveloffset=+2] + +// removing this section until we add the new guide for gateway specific +//include::platform/proc-configuring-controller-ldap-security.adoc[leveloffset=+2] include::platform/proc-configuring-controller-route-options.adoc[leveloffset=+2] include::platform/proc-controller-ingress-options.adoc[leveloffset=+2] include::platform/proc-operator-external-db-controller.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-installing-hub-operator.adoc b/downstream/assemblies/platform/assembly-installing-hub-operator.adoc index dbc6a7648e..654d36cb0f 100644 --- a/downstream/assemblies/platform/assembly-installing-hub-operator.adoc +++ b/downstream/assemblies/platform/assembly-installing-hub-operator.adoc @@ -8,12 +8,12 @@ ifdef::context[:parent-context: {context}] [id="installing-hub-operator"] -= Installing and configuring {HubName} on {OCP} web console += Configuring {HubName} on {OCP} web console :context: installing-hub-operator [role="_abstract"] -You can use these instructions to install the {HubName} operator on {OCP}, specify custom resources, and deploy {PlatformNameShort} with an external database. +You can use these instructions to configure the {HubName} operator on {OCP}, specify custom resources, and deploy {PlatformNameShort} with an external database. {HubNameStart} configuration can be done through the {HubName} pulp_settings or directly in the user interface after deployment. However, it is important to note that configurations made in pulp_settings take precedence over settings made in the user interface. Hub settings should always be set as lowercase on the Hub custom resource specification. diff --git a/downstream/modules/platform/con-ocp-supported-install.adoc b/downstream/modules/platform/con-ocp-supported-install.adoc index 53c4b4d571..d50cdb597a 100644 --- a/downstream/modules/platform/con-ocp-supported-install.adoc +++ b/downstream/modules/platform/con-ocp-supported-install.adoc @@ -7,9 +7,30 @@ You can use the OperatorHub on the {OCP} web console to install {OperatorPlatfor Alternatively, you can install {OperatorPlatform} from the {OCPShort} command-line interface (CLI), `oc`. -Follow one of the workflows below to install the {OperatorPlatform} and use it to install the components of {PlatformNameShort} that you require. +After you have installed {OperatorPlatform} you must create an *AnsibleAutomationPlatform* custom resource (CR). This allows you to manage {PlatformNameShort} components from a single unified interface known as the platform gateway. As of version 2.5, you must create an {PlatformNameShort} CR, even if you have an existing {ControllerName}, {HubName}, or {EDAName}, components. -* {ControllerNameStart} custom resources first, then {HubName} custom resources; -* {HubNameStart} custom resources first, then {ControllerName} custom resources; -* {ControllerNameStart} custom resources; -* {HubNameStart} custom resources. +If existing components have already been deployed, you must specify these components on the {PlatformNameShort} CR. You must create the custom resource in the same namespace as the existing components. + +[cols=2*a,options="header"] +|=== +| *Supported scenarios* | *Supported scenarios with existing components* +| +* {PlatformNameShort} CR for blank slate install with {ControllerName}, {HubName}, and {EDAName} enabled + +* {PlatformNameShort} CR with just {ControllerName} enabled + +* {PlatformNameShort} CR with just {ControllerName}, {HubName} enabled + +* {PlatformNameShort} CR with just {ControllerName}, {EDAName} enabled + | + * {PlatformNameShort} CR created in the same namespace as an existing {ControllerName} CR with the {ControllerName} name specified on the {PlatformNameShort} CR spec + +* Same with {ControllerName} and {HubName} + +* Same with {ControllerName}, {HubName}, and {EDAName} + +* Same with {ControllerName} and {EDAName} +|=== + +// Commenting out as upgrade is not included in EA [gmurray] +// NOTE: The stand-alone EDA user interface will not work upon upgrade. After you configure {PlatformNameShort}, other stand-alone user interfaces will not work. diff --git a/downstream/modules/platform/con-resource-operator-overview.adoc b/downstream/modules/platform/con-resource-operator-overview.adoc index f3c0312fe6..3e1b243e11 100644 --- a/downstream/modules/platform/con-resource-operator-overview.adoc +++ b/downstream/modules/platform/con-resource-operator-overview.adoc @@ -1,7 +1,7 @@ [id="con-controller-resource-operator_{context}"] = {OperatorResourceShort} overview -{OperatorResourceShort} is a custom resource (CR) that you can deploy after you have created your {ControllerName} deployment. +{OperatorResourceShort} is a custom resource (CR) that you can deploy after you have created your platform gateway deployment. With {OperatorResourceShort} you can define projects, job templates, and inventories through the use of YAML files. These YAML files are then used by {ControllerName} to create these resources. You can create the YAML through the *Form view* that prompts you for keys and values for your YAML code. diff --git a/downstream/modules/platform/proc-access-hub-operator-ui.adoc b/downstream/modules/platform/proc-access-hub-operator-ui.adoc index 351fb0fd6a..a239b92bc8 100644 --- a/downstream/modules/platform/proc-access-hub-operator-ui.adoc +++ b/downstream/modules/platform/proc-access-hub-operator-ui.adoc @@ -1,8 +1,8 @@ [id="proc-access-hub-operator-ui_{context}"] -= Accessing the {HubName} user interface += Finding the {HubName} route -You can access the {HubName} interface once all pods have successfully launched. +You can access the {HubName} through the platform gateway or through the following procedure. .Procedure . Navigate to menu:Networking[Routes]. diff --git a/downstream/modules/platform/proc-add-controller-access-token.adoc b/downstream/modules/platform/proc-add-controller-access-token.adoc index 6c11a89fc3..4eba6a0094 100644 --- a/downstream/modules/platform/proc-add-controller-access-token.adoc +++ b/downstream/modules/platform/proc-add-controller-access-token.adoc @@ -1,24 +1,20 @@ [id="proc-add-controller-access-token_{context}"] -= Connecting {OperatorResourceShort} to {ControllerName} += Connecting {OperatorResourceShort} to platform gateway -To connect {OperatorResourceShort} with {ControllerName} you need to create a k8s secret with the connection information for your {ControllerName} instance. +To connect {OperatorResourceShort} with platform gateway you need to create a k8s secret with the connection information for your {ControllerName} instance. + +NOTE: You can only create OAuth 2 Tokens for your own user through the API or UI, which means you can only configure or view tokens from your own user profile. .Procedure -To create an OAuth2 token for your user in the {ControllerName} UI: +To create an OAuth2 token for your user in the platform gateway UI: -. In the navigation panel, select menu:Access[Users]. +. In the navigation panel, select menu:Access Management[Users]. . Select the username you want to create a token for. -. Click on btn:[Tokens], then click btn:[Add]. +. Select menu:Tokens[Automation Execution] +. Click btn:[Create Token]. . You can leave *Applications* empty. Add a description and select *Read* or *Write* for the *Scope*. -Alternatively, you can create a OAuth2 token at the command-line by using the `create_oauth2_token` manage command: - ----- -$ controller-manage create_oauth2_token --user example_user -New OAuth2 token for example_user: j89ia8OO79te6IAZ97L7E8bMgXCON2 ----- - [NOTE] ==== Make sure you provide a valid user when creating tokens. diff --git a/downstream/modules/platform/proc-cli-get-controller-pwd.adoc b/downstream/modules/platform/proc-cli-get-controller-pwd.adoc index 5426d2a5a2..abc9a451a6 100644 --- a/downstream/modules/platform/proc-cli-get-controller-pwd.adoc +++ b/downstream/modules/platform/proc-cli-get-controller-pwd.adoc @@ -4,24 +4,24 @@ [id="proc-cli-get-controller-pwd{context}"] -= Fetching {ControllerNameStart} login details from the {OCPShort} CLI += Fetching platform gateway login details from the {OCPShort} CLI -To login to the {ControllerNameStart}, you need the web address and the password. +To login to the platform gateway, you need the web address and the password. -== Fetching the {ControllerName} web address +== Fetching the platform gateway web address A {OCP} route exposes a service at a host name, so that external clients can reach it by name. -When you created the {ControllerName} instance, a route was created for it. -The route inherits the name that you assigned to the {ControllerName} object in the YAML file. +When you created the platform gateway instance, a route was created for it. +The route inherits the name that you assigned to the platform gateway object in the YAML file. Use the following command to fetch the routes: [subs="+quotes"] ----- -oc get routes -n ____ +oc get routes -n ____ ----- -In the following example, the `_example_` {ControllerName} is running in the `_ansible-automation-platform_` namespace. +In the following example, the `_example_` platform gateway is running in the `_ansible-automation-platform_` namespace. ----- $ oc get routes -n ansible-automation-platform @@ -30,26 +30,26 @@ NAME HOST/PORT PATH SERVICES example example-ansible-automation-platform.apps-crc.testing example-service http edge/Redirect None ----- -The address for the {ControllerName} instance is `example-ansible-automation-platform.apps-crc.testing`. +The address for the platform gateway instance is `example-ansible-automation-platform.apps-crc.testing`. -== Fetching the {ControllerName} password +== Fetching the platform gateway password -The YAML block for the {ControllerName} instance in [filename]`sub.yaml` assigns values to the _name_ and _admin_user_ keys. -Use these values in the following command to fetch the password for the {ControllerName} instance. +The YAML block for the platform gateway instance in [filename]`sub.yaml` assigns values to the _name_ and _admin_user_ keys. +Use these values in the following command to fetch the password for the platform gateway instance. ----- -oc get secret/--password -o yaml +oc get secret/--password -o yaml ----- The default value for _admin_user_ is `_admin_`. Modify the command if you changed the admin username in [filename]`sub.yaml`. -The following example retrieves the password for an {ControllerName} object called `_example_`: +The following example retrieves the password for a platform gateway object called `_example_`: ----- oc get secret/example-admin-password -o yaml ----- -The password for the {ControllerName} instance is listed in the `metadata` field in the output: +The password for the platform gateway instance is listed in the `metadata` field in the output: ----- $ oc get secret/example-admin-password -o yaml diff --git a/downstream/modules/platform/proc-configuring-controller-image-pull-policy.adoc b/downstream/modules/platform/proc-configuring-controller-image-pull-policy.adoc index 0fea68049b..a1fb10b224 100644 --- a/downstream/modules/platform/proc-configuring-controller-image-pull-policy.adoc +++ b/downstream/modules/platform/proc-configuring-controller-image-pull-policy.adoc @@ -5,7 +5,12 @@ Use this procedure to configure the image pull policy on your {ControllerName}. .Procedure -. Under *Image Pull Policy*, click on the radio button to select +. Go to menu:Operators[Installed Operators]. +. Locate the *Automation Controller* tab. +. For new instances, click btn:[Create AutomationController]. +.. For existing instances, you can edit the YAML view by clicking {MoreActionsIcon} and then btn:[Edit AutomationController]. +. Click btn:[advanced Configuration]. +Under *Image Pull Policy*, click on the radio button to select * *Always* * *Never* * *IfNotPresent* diff --git a/downstream/modules/platform/proc-configuring-controller-ldap-security.adoc b/downstream/modules/platform/proc-configuring-controller-ldap-security.adoc index 94bdcdaf0e..8c5cbe8e31 100644 --- a/downstream/modules/platform/proc-configuring-controller-ldap-security.adoc +++ b/downstream/modules/platform/proc-configuring-controller-ldap-security.adoc @@ -1,7 +1,13 @@ [id="proc_configuring-controller-ldap-security_{context}"] = Configuring your controller LDAP security -Use this procedure to configure LDAP security for your {ControllerName}. + +You can configure your LDAP security for {ControllerName} through any of the following options: + +* The automation controller user interface. +//Need to add a link to Donna's Auth doc when finished. +* The platform gateway user interface. See Authentication doc for additional steps. +* The following procedure steps. .Procedure . If you do not have a `ldap_cacert_secret`, you can create one with the following command: diff --git a/downstream/modules/platform/proc-configuring-controller-route-options.adoc b/downstream/modules/platform/proc-configuring-controller-route-options.adoc index 260c3f95b7..dcb33174aa 100644 --- a/downstream/modules/platform/proc-configuring-controller-route-options.adoc +++ b/downstream/modules/platform/proc-configuring-controller-route-options.adoc @@ -5,6 +5,10 @@ The {PlatformName} operator installation form allows you to further configure your {ControllerName} operator route options under *Advanced configuration*. .Procedure +. Go to menu:Operators[Installed Operators]. +. Locate the *Automation Controller* tab. +. For new instances, click btn:[Create AutomationController]. +.. For existing instances, you can edit the YAML view by clicking {MoreActionsIcon} and then btn:[Edit AutomationController]. . Click btn:[Advanced configuration]. . Under *Ingress type*, click the drop-down menu and select *Route*. . Under *Route DNS host*, enter a common host name that the route answers to. diff --git a/downstream/modules/platform/proc-controller-ingress-options.adoc b/downstream/modules/platform/proc-controller-ingress-options.adoc index ba83b5b6f8..d95e0f3f0f 100644 --- a/downstream/modules/platform/proc-controller-ingress-options.adoc +++ b/downstream/modules/platform/proc-controller-ingress-options.adoc @@ -6,7 +6,11 @@ The {PlatformName} operator installation form allows you to further configure yo .Procedure -. Click btn:[Advanced Configuration]. +. Go to menu:Operators[Installed Operators]. +. Locate the *Automation Controller* tab. +. For new instances, click btn:[Create AutomationController]. +.. For existing instances, you can edit the YAML view by clicking {MoreActionsIcon} and then btn:[Edit AutomationController]. +. Click btn:[Advanced configuration]. . Under *Ingress type*, click the drop-down menu and select *Ingress*. . Under *Ingress annotations*, enter any annotations to add to the ingress. . Under *Ingress TLS secret*, click the drop-down menu and select a secret from the list. diff --git a/downstream/modules/platform/proc-enable-hstore-extension.adoc b/downstream/modules/platform/proc-enable-hstore-extension.adoc index e5552cf33a..475cb63761 100644 --- a/downstream/modules/platform/proc-enable-hstore-extension.adoc +++ b/downstream/modules/platform/proc-enable-hstore-extension.adoc @@ -2,7 +2,7 @@ = Enabling the hstore extension for the {HubName} PostgreSQL database -From {PlatformNameShort} {PlatformVers}, the database migration script uses `hstore` fields to store information, therefore the `hstore` extension to the {HubName} PostgreSQL database must be enabled. +Added in {PlatformNameShort} {PlatformVers}, the database migration script uses `hstore` fields to store information, therefore the `hstore` extension to the {HubName} PostgreSQL database must be enabled. This process is automatic when using the {PlatformNameShort} installer and a managed PostgreSQL server. diff --git a/downstream/modules/platform/proc-hub-ingress-options.adoc b/downstream/modules/platform/proc-hub-ingress-options.adoc index 2c6d95cb32..1fefedb4ec 100644 --- a/downstream/modules/platform/proc-hub-ingress-options.adoc +++ b/downstream/modules/platform/proc-hub-ingress-options.adoc @@ -6,6 +6,10 @@ The {PlatformName} operator installation form allows you to further configure yo .Procedure +. Go to menu:Operators[Installed Operators]. +. Locate the *Automation Hub* tab. +. For new instances, click btn:[Create AutomationHub]. +.. For existing instances, you can edit the YAML view by clicking {MoreActionsIcon} and then btn:[Edit AutomationHub]. . Click btn:[Advanced Configuration]. . Under *Ingress type*, click the drop-down menu and select *Ingress*. . Under *Ingress annotations*, enter any annotations to add to the ingress. diff --git a/downstream/modules/platform/proc-hub-route-options.adoc b/downstream/modules/platform/proc-hub-route-options.adoc index d1d8220bbb..0cd5cfac5a 100644 --- a/downstream/modules/platform/proc-hub-route-options.adoc +++ b/downstream/modules/platform/proc-hub-route-options.adoc @@ -6,6 +6,10 @@ The {PlatformName} operator installation form allows you to further configure yo .Procedure +. Go to menu:Operators[Installed Operators]. +. Locate the *Automation Hub* tab. +. For new instances, click btn:[Create AutomationHub]. +.. For existing instances, you can edit the YAML view by clicking {MoreActionsIcon} and then btn:[Edit AutomationHub]. . Click btn:[Advanced configuration]. . Under *Ingress type*, click the drop-down menu and select *Route*. . Under *Route DNS host*, enter a common host name that the route answers to. diff --git a/downstream/modules/platform/proc-install-cli-aap-operator.adoc b/downstream/modules/platform/proc-install-cli-aap-operator.adoc index 6b6272d03e..02da7b36b7 100644 --- a/downstream/modules/platform/proc-install-cli-aap-operator.adoc +++ b/downstream/modules/platform/proc-install-cli-aap-operator.adoc @@ -43,7 +43,7 @@ metadata: name: ansible-automation-platform namespace: ansible-automation-platform spec: - channel: 'stable-2.4' + channel: 'stable-2.5' installPlanApproval: Automatic name: ansible-automation-platform-operator source: redhat-operators diff --git a/downstream/modules/platform/proc-operator-access-aap.adoc b/downstream/modules/platform/proc-operator-access-aap.adoc index 3ff066bb8c..de5e5833ad 100644 --- a/downstream/modules/platform/proc-operator-access-aap.adoc +++ b/downstream/modules/platform/proc-operator-access-aap.adoc @@ -20,8 +20,8 @@ To access your *AnsibleAutomationPlatform* instance: .. Click btn:[Subscription manifest] or btn:[Username/password]. .. Upload your manifest or enter your username and password. .. Select your subscription from the *Subscription* list. -.. Click btn:[Next]. -+ This redirects you to the *Analytics* page. +.. Click btn:[Next]. + +This redirects you to the *Analytics* page. . Click btn:[Next]. . Select the *I agree to the terms of the license agreement* checkbox. . Click btn:[Next]. diff --git a/downstream/modules/platform/proc-operator-external-db-controller.adoc b/downstream/modules/platform/proc-operator-external-db-controller.adoc index ed32371ed8..0bfee14bd6 100644 --- a/downstream/modules/platform/proc-operator-external-db-controller.adoc +++ b/downstream/modules/platform/proc-operator-external-db-controller.adoc @@ -22,7 +22,7 @@ The external database must be a PostgreSQL database that is the version supporte [NOTE] ==== -{PlatformNameShort} {PlatformVers} supports PostgreSQL 13. +{PlatformNameShort} {PlatformVers} supports {PostgresVers}. ==== .Procedure diff --git a/downstream/modules/platform/proc-operator-external-db-hub.adoc b/downstream/modules/platform/proc-operator-external-db-hub.adoc index 3a6ade5028..45d3b3442a 100644 --- a/downstream/modules/platform/proc-operator-external-db-hub.adoc +++ b/downstream/modules/platform/proc-operator-external-db-hub.adoc @@ -22,7 +22,7 @@ The external database must be a PostgreSQL database that is the version supporte [NOTE] ==== -{PlatformNameShort} {PlatformVers} supports PostgreSQL 13. +{PlatformNameShort} {PlatformVers} supports {PostgresVers}. ==== .Procedure diff --git a/downstream/modules/platform/proc-provision-ocp-storage-with-readwritemany.adoc b/downstream/modules/platform/proc-provision-ocp-storage-with-readwritemany.adoc index 9d5440177b..e3a1e409ff 100644 --- a/downstream/modules/platform/proc-provision-ocp-storage-with-readwritemany.adoc +++ b/downstream/modules/platform/proc-provision-ocp-storage-with-readwritemany.adoc @@ -7,6 +7,8 @@ To ensure successful installation of {OperatorPlatform}, you must provision your .Procedure -. Click link:{BaseURL}/openshift_container_platform/4.10/html-single/storage/index#persistent-storage-nfs-provisioning_persistent-storage-nfs[Provisioning] to update the access mode. +. Go to menu:Storage[PersistentVolume]. +. Click btn: Create PersistentVolume. . In the first step, update the `accessModes` from the default `ReadWriteOnce` to `ReadWriteMany`. +.. See link:{BaseURL}/openshift_container_platform/4.10/html-single/storage/index#persistent-storage-nfs-provisioning_persistent-storage-nfs[Provisioning] to update the access mode. for a detailed overview. . Complete the additional steps in this section to create the persistent volume claim (PVC). diff --git a/downstream/titles/aap-operator-installation/master.adoc b/downstream/titles/aap-operator-installation/master.adoc index 0140ec12a3..1f8f75ea37 100644 --- a/downstream/titles/aap-operator-installation/master.adoc +++ b/downstream/titles/aap-operator-installation/master.adoc @@ -21,7 +21,8 @@ include::platform/assembly-operator-install-planning.adoc[leveloffset=+1] include::platform/assembly-install-aap-operator.adoc[leveloffset=+1] -// Part of the 2.5 release commenting out until live +include::platform/assembly-installing-aap-operator-cli.adoc[leveloffset=+1] + include::platform/assembly-configure-aap-operator.adoc[leveloffset=+1] include::platform/assembly-installing-controller-operator.adoc[leveloffset=+1] @@ -32,15 +33,16 @@ include::platform/assembly-installing-hub-operator.adoc[leveloffset=+1] // include::platform/assembly-installing-controller-operator-local-db.adoc[leveloffset=+1] -include::platform/assembly-installing-aap-operator-cli.adoc[leveloffset=+1] -include::platform/assembly-deploy-eda-controller-on-aap-operator.adoc[leveloffset=+1] +// [gmurray] Commenting out this module as covered in assembly-configure-aap-operator.adoc +// include::platform/assembly-deploy-eda-controller-on-aap-operator.adoc[leveloffset=+1] include::platform/assembly-using-rhsso-operator-with-automation-hub.adoc[leveloffset=+1] -include::platform/assembly-aap-migration.adoc[leveloffset=+1] +// [gmurray] Commenting out this module as migration is not supported for 2.5 EA. +// include::platform/assembly-aap-migration.adoc[leveloffset=+1] -// [gmurray] Commenting out this module as part of AAP-22627. Upgrade is not supported in the initial 2.5 release. +// [gmurray] Commenting out this module as upgrade is not supported for 2.5 EA. // include::platform/assembly-operator-upgrade.adoc[leveloffset=+1] include::platform/assembly-operator-add-execution-nodes.adoc[leveloffset=+1] From 067655bf5c252ca7117ef3385c9a0132af0b38f5 Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Wed, 17 Jul 2024 19:01:36 +0100 Subject: [PATCH 040/590] AAP-25260 Add Ansible plug-ins for developer hub titles (#1599) (#1602) --- .../aap-common | 0 .../attributes | 0 .../devtools | 0 .../docinfo.xml | 6 +++--- .../images | 0 .../master.adoc | 7 +++---- .../titles/aap-plugin-rhdh-using/aap-common | 1 + .../titles/aap-plugin-rhdh-using/attributes | 1 + .../titles/aap-plugin-rhdh-using/devtools | 1 + .../titles/aap-plugin-rhdh-using/docinfo.xml | 11 +++++++++++ .../titles/aap-plugin-rhdh-using/images | 1 + .../titles/aap-plugin-rhdh-using/master.adoc | 19 +++++++++++++++++++ 12 files changed, 40 insertions(+), 7 deletions(-) rename downstream/titles/{aap-plugin-rhdh => aap-plugin-rhdh-install}/aap-common (100%) rename downstream/titles/{aap-plugin-rhdh => aap-plugin-rhdh-install}/attributes (100%) rename downstream/titles/{aap-plugin-rhdh => aap-plugin-rhdh-install}/devtools (100%) rename downstream/titles/{aap-plugin-rhdh => aap-plugin-rhdh-install}/docinfo.xml (55%) rename downstream/titles/{aap-plugin-rhdh => aap-plugin-rhdh-install}/images (100%) rename downstream/titles/{aap-plugin-rhdh => aap-plugin-rhdh-install}/master.adoc (81%) create mode 120000 downstream/titles/aap-plugin-rhdh-using/aap-common create mode 120000 downstream/titles/aap-plugin-rhdh-using/attributes create mode 120000 downstream/titles/aap-plugin-rhdh-using/devtools create mode 100644 downstream/titles/aap-plugin-rhdh-using/docinfo.xml create mode 120000 downstream/titles/aap-plugin-rhdh-using/images create mode 100644 downstream/titles/aap-plugin-rhdh-using/master.adoc diff --git a/downstream/titles/aap-plugin-rhdh/aap-common b/downstream/titles/aap-plugin-rhdh-install/aap-common similarity index 100% rename from downstream/titles/aap-plugin-rhdh/aap-common rename to downstream/titles/aap-plugin-rhdh-install/aap-common diff --git a/downstream/titles/aap-plugin-rhdh/attributes b/downstream/titles/aap-plugin-rhdh-install/attributes similarity index 100% rename from downstream/titles/aap-plugin-rhdh/attributes rename to downstream/titles/aap-plugin-rhdh-install/attributes diff --git a/downstream/titles/aap-plugin-rhdh/devtools b/downstream/titles/aap-plugin-rhdh-install/devtools similarity index 100% rename from downstream/titles/aap-plugin-rhdh/devtools rename to downstream/titles/aap-plugin-rhdh-install/devtools diff --git a/downstream/titles/aap-plugin-rhdh/docinfo.xml b/downstream/titles/aap-plugin-rhdh-install/docinfo.xml similarity index 55% rename from downstream/titles/aap-plugin-rhdh/docinfo.xml rename to downstream/titles/aap-plugin-rhdh-install/docinfo.xml index f3f147268e..8aaaf32011 100644 --- a/downstream/titles/aap-plugin-rhdh/docinfo.xml +++ b/downstream/titles/aap-plugin-rhdh-install/docinfo.xml @@ -1,9 +1,9 @@ -Ansible plug-ins for Red Hat Developer Hub +Installing Ansible plug-ins for Red Hat Developer Hub Red Hat Ansible Automation Platform 2.5 -Install and use Ansible plug-ins for Red Hat Developer Hub +Install Ansible plug-ins for Red Hat Developer Hub - This guide describes how to install and use Ansible plug-ins for Red Hat Developer Hub. + This guide describes how to install Ansible plug-ins for Red Hat Developer Hub. Red Hat Customer Content Services diff --git a/downstream/titles/aap-plugin-rhdh/images b/downstream/titles/aap-plugin-rhdh-install/images similarity index 100% rename from downstream/titles/aap-plugin-rhdh/images rename to downstream/titles/aap-plugin-rhdh-install/images diff --git a/downstream/titles/aap-plugin-rhdh/master.adoc b/downstream/titles/aap-plugin-rhdh-install/master.adoc similarity index 81% rename from downstream/titles/aap-plugin-rhdh/master.adoc rename to downstream/titles/aap-plugin-rhdh-install/master.adoc index 6e4a7cc2c6..3d6d7c4897 100644 --- a/downstream/titles/aap-plugin-rhdh/master.adoc +++ b/downstream/titles/aap-plugin-rhdh-install/master.adoc @@ -2,16 +2,16 @@ :numbered: :toclevels: 4 :experimental: -:context: aap-plugin-rhdh +:context: aap-plugin-rhdh-installing include::attributes/attributes.adoc[] // Book Title -= Ansible plug-ins for Red Hat Developer Hub += Installing Ansible plug-ins for Red Hat Developer Hub Thank you for your interest in {PlatformName}. {PlatformNameShort} is a commercial offering that helps teams manage complex multi-tier deployments by adding control, knowledge, and delegation to Ansible-powered environments. -This guide describes how to install and use {AAPRHDH}. +This guide describes how to install {AAPRHDH}. This document has been updated to include information for the latest release of {PlatformNameShort}. include::{Boilerplate}[] @@ -21,4 +21,3 @@ include::devtools/assembly-rhdh-planning.adoc[leveloffset=+1] include::devtools/assembly-rhdh-install.adoc[leveloffset=+1] include::devtools/assembly-rhdh-upgrading-uninstalling.adoc[leveloffset=+1] include::devtools/assembly-rhdh-configure.adoc[leveloffset=+1] -include::devtools/assembly-rhdh-using.adoc[leveloffset=+1] diff --git a/downstream/titles/aap-plugin-rhdh-using/aap-common b/downstream/titles/aap-plugin-rhdh-using/aap-common new file mode 120000 index 0000000000..472eeb4dac --- /dev/null +++ b/downstream/titles/aap-plugin-rhdh-using/aap-common @@ -0,0 +1 @@ +../../aap-common \ No newline at end of file diff --git a/downstream/titles/aap-plugin-rhdh-using/attributes b/downstream/titles/aap-plugin-rhdh-using/attributes new file mode 120000 index 0000000000..a5caaa73a5 --- /dev/null +++ b/downstream/titles/aap-plugin-rhdh-using/attributes @@ -0,0 +1 @@ +../../attributes \ No newline at end of file diff --git a/downstream/titles/aap-plugin-rhdh-using/devtools b/downstream/titles/aap-plugin-rhdh-using/devtools new file mode 120000 index 0000000000..dc79f7e1fa --- /dev/null +++ b/downstream/titles/aap-plugin-rhdh-using/devtools @@ -0,0 +1 @@ +../../assemblies/devtools \ No newline at end of file diff --git a/downstream/titles/aap-plugin-rhdh-using/docinfo.xml b/downstream/titles/aap-plugin-rhdh-using/docinfo.xml new file mode 100644 index 0000000000..7dfc5fee98 --- /dev/null +++ b/downstream/titles/aap-plugin-rhdh-using/docinfo.xml @@ -0,0 +1,11 @@ +Using Ansible plug-ins for Red Hat Developer Hub +Red Hat Ansible Automation Platform +2.5 +Use Ansible plug-ins for Red Hat Developer Hub + + This guide describes how to use Ansible plug-ins for Red Hat Developer Hub. + + + Red Hat Customer Content Services + + diff --git a/downstream/titles/aap-plugin-rhdh-using/images b/downstream/titles/aap-plugin-rhdh-using/images new file mode 120000 index 0000000000..5fa6987088 --- /dev/null +++ b/downstream/titles/aap-plugin-rhdh-using/images @@ -0,0 +1 @@ +../../images \ No newline at end of file diff --git a/downstream/titles/aap-plugin-rhdh-using/master.adoc b/downstream/titles/aap-plugin-rhdh-using/master.adoc new file mode 100644 index 0000000000..44015abb26 --- /dev/null +++ b/downstream/titles/aap-plugin-rhdh-using/master.adoc @@ -0,0 +1,19 @@ +:imagesdir: images +:numbered: +:toclevels: 4 +:experimental: +:context: aap-plugin-rhdh-using + +include::attributes/attributes.adoc[] + +// Book Title += Using Ansible plug-ins for Red Hat Developer Hub + +Thank you for your interest in {PlatformName}. {PlatformNameShort} is a commercial offering that helps teams manage complex multi-tier deployments by adding control, knowledge, and delegation to Ansible-powered environments. + +This guide describes how to use {AAPRHDH}. +This document has been updated to include information for the latest release of {PlatformNameShort}. + +include::{Boilerplate}[] + +include::devtools/assembly-rhdh-using.adoc[leveloffset=+1] From 5f4be45d191f9f4e461de8bcff8a626f3145f63a Mon Sep 17 00:00:00 2001 From: EMcWhinn <122449381+EMcWhinn@users.noreply.github.com> Date: Thu, 18 Jul 2024 11:36:57 +0100 Subject: [PATCH 041/590] Corrections to Configuring automation execution (#1598) (#1605) * Corrections to Configuring automation execution Edits to UI based on latest test environment https://issues.redhat.com/browse/AAP-27309 Affects `titles/controller-admin-guide` * Second commit --- .../assembly-ag-controller-config.adoc | 2 +- .../assembly-inventory-file-importing.adoc | 2 +- .../proc-controller-configure-analytics.adoc | 8 ++-- .../proc-controller-configure-jobs.adoc | 12 +++--- ...oc-controller-configure-subscriptions.adoc | 11 ++---- .../proc-controller-configure-system.adoc | 37 ++++++++++--------- ...controller-capacity-planning-exercise.adoc | 12 +++--- .../ref-controller-capacity-planning.adoc | 2 +- .../ref-controller-cluster-management.adoc | 2 +- ...ontroller-performance-troubleshooting.adoc | 6 +-- .../controller-admin-guide/master.adoc | 2 +- 11 files changed, 47 insertions(+), 49 deletions(-) diff --git a/downstream/assemblies/platform/assembly-ag-controller-config.adoc b/downstream/assemblies/platform/assembly-ag-controller-config.adoc index 28036b3727..4b3f11e427 100644 --- a/downstream/assemblies/platform/assembly-ag-controller-config.adoc +++ b/downstream/assemblies/platform/assembly-ag-controller-config.adoc @@ -2,7 +2,7 @@ = {ControllerNameStart} configuration -You can configure some {ControllerName} options using the *Settings* menu of the User Interface. +You can configure some {ControllerName} options by using the *Settings* menu of the User Interface. *Save* applies the changes you make, but it does not exit the edit dialog. diff --git a/downstream/assemblies/platform/assembly-inventory-file-importing.adoc b/downstream/assemblies/platform/assembly-inventory-file-importing.adoc index d4cc4dc48e..2836e9ad10 100644 --- a/downstream/assemblies/platform/assembly-inventory-file-importing.adoc +++ b/downstream/assemblies/platform/assembly-inventory-file-importing.adoc @@ -2,7 +2,7 @@ = Inventory File Importing -With {ControllerNameStart} you can select an inventory file from source control, rather than creating one from scratch. +With {ControllerName} you can select an inventory file from source control, rather than creating one from scratch. //This function is the same as for custom inventory scripts, except that the contents are obtained from source control instead of editing their contents in a browser. The files are non-editable, and as inventories are updated at the source, the inventories within the projects are also updated accordingly, including the `group_vars` and `host_vars` files or directory associated with them. SCM types can consume both inventory files and scripts. diff --git a/downstream/modules/platform/proc-controller-configure-analytics.adoc b/downstream/modules/platform/proc-controller-configure-analytics.adoc index 2d56287ae5..a3bf61feea 100644 --- a/downstream/modules/platform/proc-controller-configure-analytics.adoc +++ b/downstream/modules/platform/proc-controller-configure-analytics.adoc @@ -1,19 +1,19 @@ [id="proc-controller-configure-analytics"] -= Configure {Analytics} += Configuring {Analytics} -Configure {Analytics} on the *Subcriptions* page and the *System settings page* of the Settings menu. +Configure {Analytics} on the *Subscription* page and the *System Settings* page of the *Settings* menu. .Procedure . From the navigation panel, select {MenuSetSubscription}. -The Subscription page is displayed. +The *Subscription* page is displayed. . If you have not already set up a subscription, do so now, and ensure that on the next page you have selected *{Analytics}* to use analytics data to enhance future releases of {PlatformNameShort} and to provide the Red Hat insights service to subscribers. + image::automation_analytics.png[Automation analytics page] . From the navigation panel, select {MenuSetSystem}. . Click btn:[Edit]. -. On the *System settings* page, select *Gather data for {Analytics}*. +. On the *System Settings* page, select *Gather data for {Analytics}*. . You can also configure the following options: * *Red Hat Customer Name*: This username is used to send data to {Analytics}. diff --git a/downstream/modules/platform/proc-controller-configure-jobs.adoc b/downstream/modules/platform/proc-controller-configure-jobs.adoc index c2116a3cda..76a9eab393 100644 --- a/downstream/modules/platform/proc-controller-configure-jobs.adoc +++ b/downstream/modules/platform/proc-controller-configure-jobs.adoc @@ -13,8 +13,7 @@ image::job-settings-full.png[Jobs settings options] + . You can configure the following options: -* *Ansible Modules Allowed For Ad Hoc Jobs*: List of modules allowed to be used by ad-hoc jobs. -* *Job execution path*: Only available in operator-based installations. +* *Ansible Modules Allowed For Ad Hoc Jobs*: List of modules allowed to be used by ad hoc jobs. + The directory in which the service creates new temporary directories for job execution and isolation (such as credential files). * *When can extra variables contain Jinja templates?*: Ansible allows variable substitution through the Jinja2 templating language for `--extra-vars`. @@ -38,16 +37,16 @@ If not 0, send a message every specified number of seconds to keep the connectio + * *Environment Variables for Galaxy Commands*: Additional environment variables set for invocations of ansible-galaxy within project updates. Useful if you must use a proxy server for ansible-galaxy but not git. -* *Sandard Output Maximum Display Size*: Maximum Size of Standard Output in bytes to display before requiring the output be downloaded. -* *Job Event Standard Output Maximum Display Size*: Maximum Size of Standard Output in bytes to display for a single job or ad hoc command event. stdout will end with `…` when truncated. +* *Standard Output Maximum Display Size*: Maximum Size of Standard Output in bytes to display before requiring the output be downloaded. +* *Job Event Standard Output Maximum Display Size*: Maximum Size of Standard Output in bytes to display for a single job or ad hoc command event. stdout ends with `…` when truncated. * *Job Event Maximum Websocket Messages Per Second*: The maximum number of messages to update the UI live job output with per second. + A value of 0 means no limit. * *Maximum Scheduled Jobs*: Maximum number of the same job template that can be waiting to run when launching from a schedule before no more are created. +* *Ansible Callback Plugins*: List of paths to search for extra callback plugins to be used when running jobs. * *Default Job Timeout*: If no output is detected from ansible in this number of seconds the execution will be terminated. + Use a value of 0 to indicate that no idle timeout should be imposed. -* *Ansible Callback Plugins*: List of paths to search for extra callback plugins to be used when running jobs. + Enter one path per line. * *Default Job Idle Timeout*: If no output is detected from ansible in this number of seconds the execution will be terminated. @@ -73,9 +72,10 @@ Use a value of 0 to indicate that no timeout should be imposed. * *Maximum number of forks per job*: Saving a Job Template with more than this number of forks results in an error. + When set to 0, no limit is applied. +* *Job execution path*: Only available in operator-based installations. * *Container Run Options*: Only available in operator-based installations. + -List of options to pass to podman run example: `['--network', 'slirp4netns:enable_ipv6=true', '--log-level', 'debug']`. +List of options to pass to Podman run example: `['--network', 'slirp4netns:enable_ipv6=true', '--log-level', 'debug']`. + You can set the following options: + diff --git a/downstream/modules/platform/proc-controller-configure-subscriptions.adoc b/downstream/modules/platform/proc-controller-configure-subscriptions.adoc index cd89e3de05..9159931031 100644 --- a/downstream/modules/platform/proc-controller-configure-subscriptions.adoc +++ b/downstream/modules/platform/proc-controller-configure-subscriptions.adoc @@ -2,7 +2,7 @@ = Configuring subscriptions -You can use the *Subscriptions* menu to view the details of your subscription, such as compliance, host-related statistics, or expiry, or you can apply a new subscription. +You can use the *Subscription* menu to view the details of your subscription, such as compliance, host-related statistics, or expiry, or you can apply a new subscription. .Procedure . From the navigation panel, select {MenuSetSubscription}. @@ -10,16 +10,13 @@ The *Subscription* page is displayed. + image::settings_subscription_page.png[Initial subscriptions page] . Click btn:[Edit subscription]. -. The *Welcome* page is displayed. +. You can either enter your Red Hat Username and Password, or attach a current Subscription Manifest in the *Welcome* page. + image::subscriptions_first-page.png[Suscriptions page for password or manifest] + -You can either enter your Red Hat Username and Password, or attach a current Subscription Manifest. . Click btn:[Next]. -. The *{Analytics}* page is displayed. +The *{Analytics}* page is displayed. + image::automation_analytics.png[Automation analytics page] -. Select the checkbox to use analytics data to enhance future releases of {PlatformNameShort} and to provide the Red Hat insights service to subscribers. +. Select the checkbox to use analytics data to enhance future releases of {PlatformNameShort} and to give the Red Hat insights service to subscribers. . Click btn:[Next] and agree to the terms of the license agreement. - - diff --git a/downstream/modules/platform/proc-controller-configure-system.adoc b/downstream/modules/platform/proc-controller-configure-system.adoc index fb9b3a1b70..d18c761a27 100644 --- a/downstream/modules/platform/proc-controller-configure-system.adoc +++ b/downstream/modules/platform/proc-controller-configure-system.adoc @@ -7,50 +7,51 @@ You can use the *System* menu to define automation controller system settings. .Procedure . From the navigation panel, select {MenuSetSystem}. -. The *System settings* page is displayed. +The *System Settings* page is displayed. + image::system-settings-page.png[System settings page - unedited] . Click btn:[Edit]. + -image::system-settings-full.png[System settings - configurable fields] - +//image::system-settings-full.png[System settings - configurable fields] . You can configure the following options: + -* *Base URL of the service*: This setting is used by services like notifications to render a valid url to the service. -* *Remote Host Headers*: HTTP headers and meta keys to search to determine remote host name or IP. -Add additional items to this list, such as `HTTP_X_FORWARDED_FOR`, if behind a reverse proxy. -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_operations_guide/assembly-configuring-proxy-support[Configuring proxy support for {PlatformName}]. +* *Base URL of the service*: This setting is used by services such as notifications to render a valid URL to the service. * *Proxy IP allowed list*: If the service is behind a reverse proxy or load balancer, use this setting to configure the proxy IP addresses from which the service should trust custom `REMOTE_HOST_HEADERS` header values. + If this setting is an empty list (the default), the headers specified by `REMOTE_HOST_HEADERS` are trusted unconditionally. * *CSRF Trusted Origins List*: If the service is behind a reverse proxy or load balancer, use this setting to configure the `schema://addresses` from which the service should trust Origin header values. -* *Red Hat Customer Name*: This username is used to send data to Automation Analytics. -* *Red Hat Customer Password*: This password is used to send data to Automation Analytics. -* *Red Hat or Satellite Username*: This username is used to send data to Automation Analytics. +* *Red Hat customer username*: This username is used to send data to Automation Analytics. +* *Red Hat customer password*: This password is used to send data to Automation Analytics. +* *Red Hat or Satellite username*: This username is used to send data to Automation Analytics. * *Red Hat or Satellite password*: This password is used to send data to Automation Analytics. * *Global default {ExecEnvShort}*: The {ExecEnvShort} to be used when one has not been configured for a job template. * *Custom virtual environment paths*: Paths where {ControllerName} looks for custom virtual environments. + Enter one path per line. + -* *Last gather date for {Analytics}*: Set the date and time. +* *Last gather date for Automation Analytics.*: Set the date and time. +* *Last gathered entries from the data collection service of {Analytics}*: - * *{Analytics} Gather Interval*: Interval (in seconds) between data gathering. + If *Gather data for {Analytics}* is set to false, this value is ignored. + -* *Last gathered entries from the data collection service of {Analytics}*: - * *Last cleanup date for HostMetrics*: Set the date and time. * *Last computing date of HostMetricSummaryMonthly*: Set the date and time. +* *Remote Host Headers*: HTTP headers and meta keys to search to decide remote hostname or IP. +Add additional items to this list, such as `HTTP_X_FORWARDED_FOR`, if behind a reverse proxy. +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_operations_guide/assembly-configuring-proxy-support[Configuring proxy support for {PlatformName}]. +* *Automation Analytics upload URL*: This value has been set manually in a settings file. +This setting is used to configure the upload URL for data collection for Automation Analytics. +* *Defines subscription usage model and shows Host Metrics*: + You can select the following options: + -* *Enable activity stream*: Set to enable capturing activity for the activity stream. -* *Enable activity stream for inventory sync*: Set to enable capturing activity for the activity stream when running inventory sync. -* *All users visible to organization admins*: Set to control whether any organization administrator can view all users and teams, even those not associated with their organization. +* *Enable Activity Stream*: Set to enable capturing activity for the activity stream. +* *Enable Activity Stream for Inventory Sync*: Set to enable capturing activity for the activity stream when running inventory sync. +* *All Users Visible to Organization Admins*: Set to control whether any organization administrator can view all users and teams, even those not associated with their organization. * *Organization Admins Can Manage Users and Teams*: Set to control whether any organization administrator has the privileges to create and manage users and teams. + -You may want to disable this ability if you are using an LDAP or SAML integration. -* *Gather Data for Automation Analytics*: Set to enable the service to gather data on automation and send it to {Analytics}. +You might want to disable this ability if you are using an LDAP or SAML integration. +* *Gather data for Automation Analytics*: Set to enable the service to gather data on automation and send it to {Analytics}. . Click btn:[Save] - diff --git a/downstream/modules/platform/ref-controller-capacity-planning-exercise.adoc b/downstream/modules/platform/ref-controller-capacity-planning-exercise.adoc index 2694c2e5f0..3a94836b8d 100644 --- a/downstream/modules/platform/ref-controller-capacity-planning-exercise.adoc +++ b/downstream/modules/platform/ref-controller-capacity-planning-exercise.adoc @@ -20,7 +20,7 @@ include::ref-controller-example-workload-reqs.adoc[leveloffset=+1] |=== | Node | API capacity | Default execution capacity | Default control capacity | Mean event processing rate at 100% capacity usage | Mean events processing rate at 50% capacity usage | Mean event processing rate at 40% capacity usage -| 4 CPU at 2.5Ghz, 16 GB RAM control node, a maximum of 3000 IOPs disk | approximately 10 requests per second | n/a | 137 jobs | 1100 per second | 1400 per second | 1630 per second +| 4 CPU at 2.5Ghz, 16 GB RAM control node, a maximum of 3000 IOPs disk | about 10 requests per second | n/a | 137 jobs | 1100 per second | 1400 per second | 1630 per second | 4 CPU at 2.5Ghz, 16 GB RAM execution node, a maximum of 3000 IOPs disk | n/a | 137 | n/a | n/a | n/a | n/a | 4 CPU at 2.5Ghz, 16 GB RAM database node, a maximum of 3000 IOPs disk | n/a | n/a | n/a | n/a | n/a | n/a |=== @@ -29,13 +29,13 @@ Because controlling jobs competes with job event processing on the control node, For this example, for a workload on 300 managed hosts, executing 1000 tasks per hour per host, 10 concurrent jobs with forks set to 5 on playbooks, and an average event size 1 Mb, use the following procedure: -* Deploy 1 execution node, 1 control node, 1 database node of 4 CPU at 2.5Ghz, 16 GB RAM, and disks that have approximately 3000 IOPs. +* Deploy 1 execution node, 1 control node, 1 database node of 4 CPU at 2.5Ghz, 16 GB RAM, and disks that have about 3000 IOPs. * Keep the default fork setting of 5 on job templates. -* Use the capacity adjustment feature in the instance view of the UI on the control node to reduce the capacity down to 16, the lowest value, to reserve more of the control node's capacity for processing events. +* Use the capacity change feature in the instance view of the UI on the control node to reduce the capacity down to 16, the lowest value, to reserve more of the control node's capacity for processing events. .Additional Resources -* For more information on workloads with high levels of API interaction, see link:https://www.ansible.com/blog/scaling-automation-controller-for-api-driven-workloads[Scaling Automation Controller for API Driven Workloads]. -* For more information on managing capacity with instances, see TBD[Managing Capacity With Instances]. -* For more information on operator-based deployments, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_performance_considerations_for_operator_based_installations/index[Red Hat Ansible Automation Platform Performance Considerations for Operator Based Installations]. +* For more information about workloads with high levels of API interaction, see link:https://www.ansible.com/blog/scaling-automation-controller-for-api-driven-workloads[Scaling Automation Controller for API Driven Workloads]. +* For more information about managing capacity with instances, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/using_automation_execution/index#assembly-controller-instances[Managing capacity with Instances]. +* For more information about operator-based deployments, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_performance_considerations_for_operator_based_installations/index[Red Hat Ansible Automation Platform Performance Considerations for Operator Based Installations]. diff --git a/downstream/modules/platform/ref-controller-capacity-planning.adoc b/downstream/modules/platform/ref-controller-capacity-planning.adoc index c61e89b661..cf6c9b32cd 100644 --- a/downstream/modules/platform/ref-controller-capacity-planning.adoc +++ b/downstream/modules/platform/ref-controller-capacity-planning.adoc @@ -1,6 +1,6 @@ [id="ref-controller-capacity-planning"] -= Capacity Planning for deploying {ControllerName} += Capacity planning for deploying {ControllerName} Capacity planning for {ControllerName} is planning the scale and characteristics of your deployment so that it has the capacity to run the planned workload. Capacity planning includes the following phases: diff --git a/downstream/modules/platform/ref-controller-cluster-management.adoc b/downstream/modules/platform/ref-controller-cluster-management.adoc index 8c2684d71e..d3549bd9a9 100644 --- a/downstream/modules/platform/ref-controller-cluster-management.adoc +++ b/downstream/modules/platform/ref-controller-cluster-management.adoc @@ -2,7 +2,7 @@ = Cluster management -For more information on the `awx-manage provision_instance` and `awx-manage deprovision_instance` commands, see xref:controller-clustering[Clustering]. +For more information about the `awx-manage provision_instance` and `awx-manage deprovision_instance` commands, see xref:controller-clustering[Clustering]. [NOTE] ==== diff --git a/downstream/modules/platform/ref-controller-performance-troubleshooting.adoc b/downstream/modules/platform/ref-controller-performance-troubleshooting.adoc index 6b4ce0b3f8..051f128a76 100644 --- a/downstream/modules/platform/ref-controller-performance-troubleshooting.adoc +++ b/downstream/modules/platform/ref-controller-performance-troubleshooting.adoc @@ -12,13 +12,13 @@ * Job output streams from the execution node where the ansible-playbook is actually run to the associated control node. Then the callback receiver serializes this data and writes it to the database. Relevant settings to observe and tune can be found in xref:ref-controller-settings-job-events[Settings for managing job event processing] and xref:ref-controller-database-settings[PostgreSQL database configuration and maintenance for {ControllerName}]. * In general, to resolve this symptom it is important to observe the CPU and memory use of the control nodes. If CPU or memory use is very high, you can either horizontally scale the control plane by deploying more virtual machines to be control nodes that naturally spreads out work more, or to modify the number of jobs a control node will manage at a time. For more information, see xref:ref-controller-settings-control-execution-nodes[Capacity settings for control and execution nodes] for more information. -*What can I do to increase the number of jobs that {ControllerName} can run concurrently?* +*What can you do to increase the number of jobs that {ControllerName} can run concurrently?* * Factors that cause jobs to remain in “pending” state are: ** *Waiting for “dependencies” to finish*: this includes project updates and inventory updates when “update on launch” behavior is enabled. ** *The “allow_simultaneous” setting of the job template*: if multiple jobs of the same job template are in “pending” status, check the “allow_simultaneous” setting of the job template (“Concurrent Jobs” checkbox in the UI). If this is not enabled, only one job from a job template can run at a time. ** *The “forks” value of your job template*: the default value is 5. The amount of capacity required to run the job is roughly the forks value (some small overhead is accounted for). If the forks value is set to a very large number, this will limit what nodes will be able to run it. -** *Lack of either control or execution capacity*: see “awx_instance_remaining_capacity” metric from the application metrics available on /api/v2/metrics. See xref:ref-controller-metrics-monitoring[Metrics for monitoring {ControllerName} application] for more information about how to monitor metrics. See xref:ref-controller-capacity-planning[Capacity planning for deploying {ControllerName}] for information on how to plan your deployment to handle the number of jobs you are interested in. +** *Lack of either control or execution capacity*: see “awx_instance_remaining_capacity” metric from the application metrics available on /api/v2/metrics. See xref:ref-controller-metrics-monitoring[Metrics for monitoring {ControllerName} application] for more information about how to check metrics. See xref:ref-controller-capacity-planning[Capacity planning for deploying {ControllerName}] for information about how to plan your deployment to handle the number of jobs you are interested in. *Jobs run more slowly on {ControllerName} than on a local machine.* @@ -31,5 +31,5 @@ Internal cluster routing can impact network performance. For more information, s *Database storage does not stop growing.* -* {ControllerNameStart} has a management job titled “Cleanup Job Details”. By default, it is set to keep 120 days of data and to run once a week. To reduce the amount of data in the database, you can shorten the retention time. For more information, see xref:proc-controller-remove-old-activity-stream[Removing Old Activity Stream Data]. +* {ControllerNameStart} has a management job titled “Cleanup Job Details”. By default, it is set to keep 120 days of data and to run once a week. To reduce the amount of data in the database, you can shorten the retention time. For more information, see xref:proc-controller-remove-old-activity-stream[Removing old activity stream data]. * Running the cleanup job deletes the data in the database. However, the database must at some point perform its vacuuming operation which reclaims storage. See xref:ref-controller-database-settings[PostgreSQL database configuration and maintenance for {ControllerName}] for more information about database vacuuming. diff --git a/downstream/titles/controller/controller-admin-guide/master.adoc b/downstream/titles/controller/controller-admin-guide/master.adoc index b9a16b2b76..5960c629f3 100644 --- a/downstream/titles/controller/controller-admin-guide/master.adoc +++ b/downstream/titles/controller/controller-admin-guide/master.adoc @@ -12,7 +12,7 @@ include::attributes/attributes.adoc[] = Configuring automation execution This guide describes the administration of {ControllerName} through custom scripts, management jobs, and more. -Written for DevOps engineers and administrators, the {ControllerName} Administration Guide assumes a basic understanding of the systems requiring management with {ControllerName}s easy-to-use graphical interface. +Written for DevOps engineers and administrators, the Configuring automation execution guide assumes a basic understanding of the systems requiring management with {ControllerName}s easy-to-use graphical interface. include::{Boilerplate}[] From a10628b8fc4f18b4b8237a076aa60d04a626c162 Mon Sep 17 00:00:00 2001 From: EMcWhinn <122449381+EMcWhinn@users.noreply.github.com> Date: Thu, 18 Jul 2024 14:55:04 +0100 Subject: [PATCH 042/590] Added note to API guide for filtering exact matches (#1606) (#1607) Addresses API behavior change from previous release regarding default exact matches. https://issues.redhat.com/browse/AAP-27347 Affects `titles/controller-api-overview` --- .../ref-controller-api-field-lookups.adoc | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/downstream/modules/platform/ref-controller-api-field-lookups.adoc b/downstream/modules/platform/ref-controller-api-field-lookups.adoc index 7b6f7d9f8e..be00f05328 100644 --- a/downstream/modules/platform/ref-controller-api-field-lookups.adoc +++ b/downstream/modules/platform/ref-controller-api-field-lookups.adoc @@ -11,7 +11,7 @@ You can use field lookups for more advanced queries, by appending the lookup to The following field lookups are supported: -* exact: Exact match (default lookup if not specified). +* exact: Exact match (default lookup if not specified, see the following note for more information). * iexact: Case-insensitive version of exact. * contains: Field contains value. * icontains: Case-insensitive version of contains. @@ -37,3 +37,21 @@ You can specify lists (for the `in` lookup) as a comma-separated list of values. Filtering based on the requesting user's level of access by query string parameter: * `role_level`: Level of role to filter on, such as `admin_role` + +[NOTE] +==== +Earlier releases of {PlatformNameShort} returned queries with *_exact* results by default. +As a workaround, set the `limit` to `?limit_exact` for the default filter. +For example, `/api/v2/jobs/?limit_exact=example.domain.com` results in: + +---- +{ + "count": 1, + "next": null, + "previous": null, + "results": [ +... +---- +==== + + From 4566e3d02909b4c90b135d6611841660a38b8716 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Fri, 19 Jul 2024 13:29:19 +0100 Subject: [PATCH 043/590] 2.5 Make further changes to Controller Docs (#1570) (#1610) * Make further changes to Controller Docs https://issues.redhat.com/browse/AAP-26692 --- ...mbly-ag-instance-and-container-groups.adoc | 2 +- .../assembly-controller-activity-stream.adoc | 22 ++++++ .../assembly-controller-credentials.adoc | 22 +++--- .../assembly-controller-inventories.adoc | 30 ++++---- downstream/images/activity_stream_details.png | Bin 0 -> 46428 bytes downstream/images/activity_stream_page.png | Bin 0 -> 96646 bytes .../credential-types-drop-down-menu.png | Bin 71226 -> 42491 bytes .../ug-scm-project-branching-emphasized.png | Bin 167476 -> 62268 bytes .../con-controller-administration.adoc | 2 +- ...con-controller-capacity-determination.adoc | 2 +- .../con-controller-container-groups.adoc | 2 +- .../con-controller-infrastructure.adoc | 9 +-- .../con-controller-overview-details.adoc | 2 +- ...oc-controller-add-users-job-templates.adoc | 21 ++++-- ...roc-controller-create-container-group.adoc | 6 +- ...roc-controller-create-credential-type.adoc | 2 +- .../proc-controller-create-credential.adoc | 70 +++++++++--------- ...proc-controller-create-instance-group.adoc | 5 ++ .../proc-controller-create-job-template.adoc | 2 +- ...c-controller-define-filter-with-facts.adoc | 4 +- ...controller-inv-source-open-shift-virt.adoc | 2 +- .../proc-controller-inv-source-terraform.adoc | 2 +- ...proc-controller-set-up-github-webhook.adoc | 2 +- ...proc-controller-set-up-gitlab-webhook.adoc | 2 +- .../ref-controller-aws-secrets-lookup.adoc | 5 ++ .../ref-controller-content-sourcing.adoc | 2 +- .../ref-controller-credential-azure-key.adoc | 2 +- .../ref-controller-credential-bitbucket.adoc | 8 ++ ...-controller-credential-centrify-vault.adoc | 2 +- ...ontroller-credential-cyberark-central.adoc | 2 +- ...controller-credential-cyberark-conjur.adoc | 2 +- ...ontroller-credential-hashiCorp-secret.adoc | 2 +- ...controller-credential-hashiCorp-vault.adoc | 2 +- .../ref-controller-credential-terraform.adoc | 2 +- ...controller-credential-thycotic-server.adoc | 2 +- ...-controller-credential-thycotic-vault.adoc | 2 +- .../ref-controller-credential-types.adoc | 9 ++- ...ef-controller-instance-group-capacity.adoc | 3 +- ...controller-prompted-vault-credentials.adoc | 2 +- .../ref-get-started-credential-types.adoc | 17 +++-- .../proc-troubleshoot-job-permissions.adoc | 3 +- .../controller-user-guide/master.adoc | 10 ++- 42 files changed, 174 insertions(+), 114 deletions(-) create mode 100644 downstream/assemblies/platform/assembly-controller-activity-stream.adoc create mode 100644 downstream/images/activity_stream_details.png create mode 100644 downstream/images/activity_stream_page.png create mode 100644 downstream/modules/platform/ref-controller-aws-secrets-lookup.adoc create mode 100644 downstream/modules/platform/ref-controller-credential-bitbucket.adoc diff --git a/downstream/assemblies/platform/assembly-ag-instance-and-container-groups.adoc b/downstream/assemblies/platform/assembly-ag-instance-and-container-groups.adoc index 0224292e5a..1f8e158308 100644 --- a/downstream/assemblies/platform/assembly-ag-instance-and-container-groups.adoc +++ b/downstream/assemblies/platform/assembly-ag-instance-and-container-groups.adoc @@ -7,7 +7,7 @@ This is called a container group. You can execute jobs in a container group only as-needed per playbook. For more information, see xref:controller-container-groups[Container groups]. -For {ExecEnvShort}s, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#assembly-controller-execution-environments[Execution environments] in _{ControllerUG}_. +For {ExecEnvShort}s, see xref:assembly-controller-execution-environments[Execution environments]. include::platform/con-controller-instance-groups.adoc[leveloffset=+1] include::platform/ref-controller-group-policies-automationcontroller.adoc[leveloffset=+2] diff --git a/downstream/assemblies/platform/assembly-controller-activity-stream.adoc b/downstream/assemblies/platform/assembly-controller-activity-stream.adoc new file mode 100644 index 0000000000..2d86bfabc8 --- /dev/null +++ b/downstream/assemblies/platform/assembly-controller-activity-stream.adoc @@ -0,0 +1,22 @@ +[id="assembly-controller-activity-stream"] + += Activity stream + +* From the navigation panel, select {MenuAEAdminActivityStream}. ++ +image::activity_stream_page.png[Activity stream page] + +An Activity Stream shows all changes for a particular object. +For each change, the Activity Stream shows the time of the event, the user that initiated the event, and the action. +The information displayed varies depending on the type of event. + +* Click the image:examine.png[Examine,15,15] icon to display the event log for the change. ++ +image:activity_stream_details.png[Activity stream details] + +You can filter the Activity Stream by the initiating user, by system (if it was system initiated), or by any related object, such as a credential, job template, or schedule. +The Activity Stream shows the Activity Stream for the entire instance. +Most pages permit viewing an activity stream filtered for that specific object. + +You can view the activity stream on any page by clicking the btn:[Activity Stream] image:activitystream.png[activitystream,15,15] icon. + diff --git a/downstream/assemblies/platform/assembly-controller-credentials.adoc b/downstream/assemblies/platform/assembly-controller-credentials.adoc index 514a24f829..fb53480080 100644 --- a/downstream/assemblies/platform/assembly-controller-credentials.adoc +++ b/downstream/assemblies/platform/assembly-controller-credentials.adoc @@ -1,16 +1,16 @@ [id="controller-credentials"] -ifdef::controller-GS[] -= Managing credentials +//ifdef::controller-GS[] +//= Managing credentials -Credentials authenticate the controller user to launch Ansible playbooks. The passwords and SSH keys are used to authenticate against inventory hosts. -By using the credentials feature of {ControllerName}, you can require the {ControllerName} user to enter a password or key phrase when a playbook launches. +//Credentials authenticate the controller user to launch Ansible playbooks. The passwords and SSH keys are used to authenticate against inventory hosts. +//By using the credentials feature of {ControllerName}, you can require the {ControllerName} user to enter a password or key phrase when a playbook launches. -include::platform/proc-controller-create-credential.adoc[leveloffset=+1] -include::platform/proc-controller-edit-credential.adoc[leveloffset=+1] -endif::controller-GS[] -ifdef::controller-UG[] +//include::platform/proc-controller-create-credential.adoc[leveloffset=+1] +//include::platform/proc-controller-edit-credential.adoc[leveloffset=+1] +//endif::controller-GS[] +//ifdef::controller-UG[] = Managing user credentials @@ -37,6 +37,10 @@ include::platform/proc-controller-add-users-job-templates.adoc[leveloffset=+1] include::platform/ref-controller-credential-types.adoc[leveloffset=+1] include::platform/ref-controller-credential-aws.adoc[leveloffset=+2] include::platform/ref-controller-credential-galaxy-hub.adoc[leveloffset=+2] +//AWS Secrets Manager Lookup +include::platform/ref-controller-aws-secrets-lookup.adoc[leveloffset=+2] +//Bitbucket +include::platform/ref-controller-credential-bitbucket.adoc[leveloffset=+2] include::platform/ref-controller-credential-centrify-vault.adoc[leveloffset=+2] include::platform/ref-controller-credential-container-registry.adoc[leveloffset=+2] include::platform/ref-controller-credential-cyberark-central.adoc[leveloffset=+2] @@ -67,5 +71,5 @@ include::platform/ref-controller-credential-vault.adoc[leveloffset=+2] include::platform/ref-controller-credential-vmware-vcenter.adoc[leveloffset=+2] include::platform/ref-controller-use-credentials-in-playbooks.adoc[leveloffset=+1] -endif::controller-UG[] +//endif::controller-UG[] diff --git a/downstream/assemblies/platform/assembly-controller-inventories.adoc b/downstream/assemblies/platform/assembly-controller-inventories.adoc index ffdbfb1f34..bc029886af 100644 --- a/downstream/assemblies/platform/assembly-controller-inventories.adoc +++ b/downstream/assemblies/platform/assembly-controller-inventories.adoc @@ -7,21 +7,21 @@ ifdef::context[:parent-context: {context}] = Inventories -ifdef::controller-GS[] -An inventory is a collection of hosts managed by {ControllerName}. -Organizations are assigned to inventories, while permissions to launch playbooks against inventories are controlled at the user or team level. +//ifdef::controller-GS[] +//An inventory is a collection of hosts managed by {ControllerName}. +//Organizations are assigned to inventories, while permissions to launch playbooks against inventories are controlled at the user or team level. -For more information, see the following documentation: +//For more information, see the following documentation: -* link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-user-permissions[Adding and removing user permissions] -* link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-team-add-user[Adding or removing a user] -* link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/red_hat_ansible_automation_platform_planning_guide/index#about_the_installer_inventory_file[About the installer inventory file] +//* link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-user-permissions[Adding and removing user permissions] +//* link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-team-add-user[Adding or removing a user] +//* link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/red_hat_ansible_automation_platform_planning_guide/index#about_the_installer_inventory_file[About the installer inventory file] -include::platform/proc-controller-create-inventory.adoc[leveloffset=+1] -include::platform/con-controller-groups-hosts.adoc[leveloffset=+1] -include::platform/proc-controller-add-groups-hosts.adoc[leveloffset=+2] -endif::controller-GS[] -ifdef::controller-UG[] +//include::platform/proc-controller-create-inventory.adoc[leveloffset=+1] +//include::platform/con-controller-groups-hosts.adoc[leveloffset=+1] +//include::platform/proc-controller-add-groups-hosts.adoc[leveloffset=+2] +//endif::controller-GS[] +//ifdef::controller-UG[] {PlatformName} works against a list of managed nodes or hosts in your infrastructure that are logically organized, using an inventory file. You can use the {PlatformName} installer inventory file to specify your installation scenario and describe host deployments to Ansible. @@ -69,8 +69,8 @@ Click the Inventory name to display the *Details* page for the selected inventor inventory's groups and hosts. //Smart inventories are deprecated. -//include::platform/ref-controller-smart-inventories.adoc[leveloffset=+1] -//include::platform/ref-controller-smart-host-filter.adoc[leveloffset=+2] +include::platform/ref-controller-smart-inventories.adoc[leveloffset=+1] +include::platform/ref-controller-smart-host-filter.adoc[leveloffset=+2] //include::platform/proc-controller-define-filter-with-facts.adoc[leveloffset=+2] include::platform/ref-controller-constructed-inventories.adoc[leveloffset=+1] @@ -113,7 +113,7 @@ include::platform/ref-controller-export-old-scripts.adoc[leveloffset=+3] include::platform/ref-controller-view-completed-jobs.adoc[leveloffset=+1] include::platform/proc-controller-run-ad-hoc-commands.adoc[leveloffset=+1] -endif::controller-UG[] +//endif::controller-UG[] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] diff --git a/downstream/images/activity_stream_details.png b/downstream/images/activity_stream_details.png new file mode 100644 index 0000000000000000000000000000000000000000..75ebde3fe9b842c3e32b3b6224b85be4d4272e40 GIT binary patch literal 46428 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 literal 0 HcmV?d00001 diff --git a/downstream/images/activity_stream_page.png b/downstream/images/activity_stream_page.png new file mode 100644 index 0000000000000000000000000000000000000000..18ee045d902d1e8556ceff2f85b80cfdcbd957bd GIT binary patch literal 96646 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

#Uu`vGYYU`T|7p}0I9X)!q2b`x;qfQ=!yYBzo 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®r>35jg@43Z$7) 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 h6u+}9v;%6I*?%5sfmVN2E@{%;|{*gyaP literal 0 HcmV?d00001 diff --git a/downstream/images/credential-types-drop-down-menu.png b/downstream/images/credential-types-drop-down-menu.png index 9ed1f34abd364357841838327cc8da907be48aa8..b54f1a59f95cd16883bef7e61a3cc9090756121e 100644 GIT binary patch literal 42491 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 GpZ^Q{HLz^} literal 71226 zcmZ^~1yog0(=d!QQWsIWTZv0|H`1aA(%s$7rBS-OL6q)pq%PeZ(%oJEMR=a~UH|ue zu7&HKeP;Ha+Iwd9%n4SIlR$lq_ZkWc3ROx{^b-`+t5PT^XkJ8k$VkNa!&@jQ6e$xC z5d|p`5fTMkD?<}=11KoT;MlJSDoVXrX=B7> z!~(T7ev&iF`x)EYT?#};${fSSPoFBb1C7}F3eFkIjYx~Zpu4*pipKY{1w6MqjMw+> zE9I2H=3~JYlAkR#h?iv-23ALM&QmIn2gCMa-o zQ~rytF#-Wg%S!J9zR?DNIy|1wZ=x#SkANyp`qY`_VaV~$s&_~UrK>d1mnuq(lEy5+ zqal%p?OU)3;8K!VZsnrGr8g%(_>&d=6s!r6ubhv><#};e7pKW3@TJm#sy#QYw_&Bpq!q)R#(knny;Hbi+&yZR5A++IegOk_s?5|*x4CI$27fpFQu zC@~7-J%j6$HrFzLGA0gX-vVS&DMh?ALie-}UV1@les3I4NWvBP`3+04K#X+i8a$3t zG*Xk}KO8PF~r-+n28k@@0{Wt@+@=N|JD;k{OP=t9(U++L+vanpNW zZXME>`A=)^u{xsg{2=U1dWFp6Q>BevD)N!H@;gz1@`!dN>=*vJ2#LFJXI@zu1L}24 zRLcd+^l>}5cCz(b4C}m)Mm?P~SxLQ6X~-LjDW7A`_D2eB(<&Vj>A26)FjU zV@6i>{!Bs}VX9C5Dg5p`fnXS^Q6$7=P|Uakwx}Ua05J+#}dT*Ne3wysEWxC$cQK%0mK-$ zk`z%$z5Z_{zmp$J!sRfJej7y_#TYgCguTtD`omo6ftoMyAQe9MIs(XTa;$6(V z{7CM!;@x|jx33J~4c;5D)&lWLOoD9X(>C|du? zCMR9UCSUN;tY#9o2;m#C@eQjHULbp9UIu-pMJ{3PLRM4W*!IO4z?HknyV*}uUO=uz z-m7F_m?(2#0?T-4qIkq|w7KwJI511^XUAk>p;DpJuZpjmS#seFVpE#&+2FC%Y_)7R z!OH;4bRv-<4WJxQ%c^YAv8lp!=uGP7;%4Or`u@|s>`nJMF%x3|s&B_K3l<|giyU)3 zN)S96yt*%e?`z*w_@wERIOBTuWhtpv|C>7uZnHXvF*HFS^1<36c!vT z#t?x*_vtj9ngInCqYBuHM8o8MhJ^D(wFHSI>4B*vVvfTy?Qec6Ybu51oaQ4Iy`?DS zZ`F#+d3CQ5z!858*UNsZP^&a48!9U*zb*(>-dDb#M4RlLq?~LhJe*OmaJMKoSDvYy zIh*}98&;KSFsJP{7pA*uMqRF^=QMke+T`o;`#$_);9`g%gs>Lv4;m_(6XAAPTi6)E zEl!u(u!gs0z|v{{e4)EGzP6^m<;418*=^ie{XEA_ z++Z2}e_}$@9$g^k#2=mHyQ7?BJs8y!YtWdEJWHGX7!1^koQf z8*tpJcuA-Q{bBI|?!oQu@wGK-59&10k$Gi@@ygafHZj~cgcE2Ect`j$A7&plY{ z*BfwCZ~`c0NEm+RNG^Sjx|^j=rCNUV{(Zuifz7K|c7}Fg0XjO7I_o<7D>o~>D-$c1 z1T%T?zb1aLR-rxjuhpOQ^0T)Ro(OS^T25o6U9l%4xB2+@qO(RS zQ%XAefP#mLHfrvZ{U@rt@t=*-sL~pdvs|8QS2L?aKNItU$G(k9ZNJ}E8@;9SlUL!( zG|QUmEDxTd=92l4WbatMz1G+pn71XfB0G~T)FU}Copv0I-CeMHZeYt|#^QEO@PPMV zClsU|o1un7qfY9c^e&-_Y**D$`=W2pQn57u(>VD?P{ALdU6w8TS|d0VypY5b5ua2; zo1T&$=_Qy2?2S!HFlDMTHVqsX`$n~&vLRq`Ua6^CY5s#CQa-BYElw-yEu4S$UxYut z?HTP!?U!Rpd583)v{7$05>|NiMnZo6!T8hC-)VGWR6S6h#O5{WJF_=~ze!@pyjeL= zm8iyDW2U**XmR@M)Nb=p^RIGw*4lv2I9yTgM(*iH;(Nfgh)AMiV&Ps__$vWRl_20- zpt;sso$-DaaNXy`?w#ek*mvnzr`YMYz4t$Vr^CnT)0=4RG}+%X|7Gqi-v#@|Td8H% zWI6xIj@A3hUZh*}LF?S`JZ8d(R^p4Liik$G%9!dqrHS%M$NloE^xt9=Q>MaZjuS}} z48J{UFy?Oan+p2Sw-dltz8GD1r` z7jRonIjq|_UEEA&aMqZ9Y?wN{ookv)X1Gx|uUm8aRi$U&y#j8F57$6yu-*A^xpQq+ zHpN{`t<~b9_cwGf*(Z6(a(%(orQyi&G1bKh$q9V8y;#s_<=AqdCHFWxvAy83B{c1e zjE+gX=+fzRc2{GR6`5O!+6^u9S~FH54n608aGmU2mOdt zFy!;$7(N4IF=ozTP!Y;pItxIz0i&Es(4w zRqddluqdDYUP*nTID(`da3-Hs>{VoCxb>_o7oCZ2KG86 z&KBmDcHGWg3|6*AKqf9OE+8W_keQht0zq%*Vrj4AOmAsN{yfQl z<`Ffp)3Y_Pwl}e|Bzc-wN7u^1o{x;|X`%oAd#2OC+2ns#vb1|)3&J4q=?##Hff4wB zL$fzA{C}W5y?I9a$Jg_6yib#HE0{PNn5&AKSQuE^K}h3gVrF6G{kP8l@#=pl{a>gm z|AWfK!u-E6|JR%Uh51AZx4f;10YpkqvfyXp1^ypnFYvs;Cqex$!98o`-zY>a{I7X| z|5Y*n>r+%iEhs2KC@E2)&(5#*JP^DI{){+mAH=ZqLHmgga!IJdMxwH_HR;g8ZWQW!-H1I8$nK-%D7ZemM z?Oi1A6wmCA4i5tywnxS8D7XFWsK^9igP<@-peMcy${MS@6(gM)E{zpKN;5kXe zaqHE*?Ya89Z~vX92cROP_yPf0iwIUyd%}+17zx4!WTqHz$h@$nG%xf`_(C3Ci{a== zpO<+9FlGa-TzVZB5UxKEYEP-Pt9*Y$KRNg@6Mr zv;;T3E0f=pBlG2`&OawiwasR6BFsLhrA(HeE!j%)l0Or~Osc>P!ga|-(m9E7IT|W*@gL1&mruG_^|ojxP!W5w zX)$=Mnc=z(KCWGJ{G3%0L=2T3NE(X3mh2pgl&2TU3kc)YwCr*t9*EjpOf!hx!mbx& zB8i|H=mvX#LmCxPi=gPs#CH!a{~CiRkjC5HgWUIU-?Dvj=a-l_bt}r#!@=IJ85z(e z$>4d1pUAG)oXYXLIY#EURi)mGnOulv=%b@-@L%t6l;5UP_0bv?nWTkq%h-m$%JcUotJp1sD3VcjvC^H2z#-%_PW7+QpG*~^>Mq2$ zvf9hI&hLMWOLJXy$*;BPDMy7)Nz!+;ZE#cmAl_sA!2Vb_)e;GRo=ElUvLe6k2SN4J z_mesXuEp~;{p;#xA$D~O@4eb<$?ZI_%k*|qO}-S-{ZRbLK@L~>6ZvOK4P)4 z_6iW)eBRh)UW*3G$M$LsMK^WP1Jga&zLHVSojV|5NN1q89L35c*Gb;KxgHc3F&L|Y zPsHZ*Xm)imkw?~C&j!jyYA%@SuPb`!&r@~i3#MBxf9aqgVr6+@-w;t>{Rgy0yPiTouKo{>fjCB$L)CY?1i>HHD$EyeLf3#JAiJ+jZXHK?^{dNte+ z_4l2ELYB<)?>3uePU`wdbcRBMpO3>?1W*eP`-x_@^3~kK-bKCmXe;}Y z?M(EY^H52c$JEL0_fJB{^kI%z zOu8z%+r9`M9WRm-Kl>GnyqH2BZdn>Kfx4whZfF0?F1jkPM~Vj}mJjHnro1yE<~Vsn ze8~IJwZLe*`Ws9$#;YesC74VGIp?7V{Q|?$38zKm7BkY-ZKf#dj)JP#hDq0hL5+q( zW-&L{sLZ+w^4q_OaC_j9m;fC&sGx*`h+?)hyd96uh=C zwbXZf>HZEu(%q{dv;2@ys|O){FfMK9nz!H;+2JpgH#aIlY_0a~73!F~$>vA^G32TT zU-`{GbxP$Nv5$^SWgo7+X@rtaH#z$B(sRjaz8v^k;TM%iX-$Ab(Y?ri#LxuNxS$_= z#m3am`>Hg+@uVFn3}X>kW+D}g)OKW;U{u0k4NX2Pk-Cj$Dcim(;*VD6%KS+S6hFg= zsoX4TQcS*iN;<{vVwq{!$#}UO`+Zrz^YZur)8Ik1^kJKz9$b!vIP#U)=V9vDtdFur zE=EiJDzA{OKAs>?`aAjPezyg?@WEFy?t>k4ediK9)rL)JFYUS5_tZesRdgAW-$knT2afOsW^hkLURUAMB6%Y&TGe!A(G!*mv+w@yE1h z!w6+c?1#;^R;Tmu`BR)L(XK9gRY+LsgFdritCl_xDdEP0Cd^bPRa23F zj&;^0w1W{*3{?>80=tneKZHe@W9Vqv{C@h~78W*}Fx^X$&+oRo`L7Fl1wv)JTjyHWJyOygj z^|McLAzoLnBsWV~%^*Lr9rItUSVv_J3VI ziHJ5O9cgt*?_TQjSsdhD9D)J+Y$YVngcz^hs7N%LRwh2b-2xr6{4*fPE6i7}+JvX| zBc}g0{7(sQ*vV}HXxL{r&V)e%a_HX`FZdVvq!NMJ1xyrSMV;e5XuVEH2UFKnPWacp zZ6}GV>K^e4oc#@mnVzJpeurliM`ZxCz5U%5x3>JvEV(9d(Ud^Twvm?_I#x8}3+#qg zp0HMq?)nF=;hckyvwp;H<@n4~Ny*OQQK^AL%JG$T8bilW++DfozS!jx-Q$`USmh<7 zjs~~pu_uW=23l^bNnnOJOwfg}b}$m%wLucUN4@*Q%qFwLx1AEg%l)~p;-PqyB7tZV z0@jH;R5N)^@S&cxY`xbw=Nwe)U|`F*R+$!sNB~MC2nJyX9ff08{*!^Sg@$9B4;yL9(o=AcUtCo9ZD)}@zEwB5khwCJ&3a1%^_*e{b@vZdwZA)AJ z>OV16LTwyN?&OcxLtceHQ=Jx7UC(!_a4uq5J8Vw)36QnV=k12J(=n51m#zn$K9++W zWD=RhG~M>u64}h+_Ubm%0-B~=ym;S$4^L_8kKBi=0M9(xWGvYPM$%7Nrl1ad zt454f$0-e`KMtAuGcqE4&FPYlH&ZRTgi1f+4;WrM6lwcm@9tfFn9e3toy@|VYE ze!U&ceKD=K9xcybw!v-EW7)7zRZ#rf>qv3z54ILvvUz#%-FCS^Zwi-PA^m~q@hEUn z7r1rl=T5WfQi2{H;m;qBbjpB$O9|j4vmfZkb`TfNlIMFE0WD&Ou`)@o!;I8%#8)kiNliD4 z>$5TWqJ9Cpm8$(&w(}{RJC~(6n)xhO-E{)YmTsxoAir+16kRx*4BIVjh(9`!tWsk6^o)KpZ z#{PKqW)(SI7E5cdl%V`7DiBjNe`%L=6`ZJIDBM2!wc0Tu<)}{?dk6WpH?Er*pQ=Jh zo^K+IymA66;1y1cHA4)MT?Gy?#|~*|1leD}FdT=N?H40y_c^SE~uy zica%3-M!(SXXL7ub?Y+muIeWjb5>x8bF6X?--Q z(Ey~Aw>H>wEnZ%8((R%?NZkf^h;O_P5?PEGsL)dr=!SuN_GDwZqGqd@BH=`QB&N&} zzIP$GEU>l-5pk-9iO#~dyoEw(92#=vvkOj38q2+fWnFk>)LR303=8{$E}Y`T*gepk zsCcYBRJs*HK!Ux_D-awnfM9`tOWZByR)6PSH|kPqq5HrC#^@|?cXKV1}%I=H0yrjHlN`H<#vcT=wu!!5rRk6oL9A8X70 zM3^WYUEM0=m0M`7xMlLLe@aatf29O|A)+AGeeKjn!YU%K4$lQeCh`dh^;%iYk0BsG z`EaO>Fakey8cBFFBT)z@@KU*na8F3ss}`%m$g4o_cl@G`?ygg5#XU)z0*;mDg=@?25%mdkn+qPEss^x+0W>er1_t&Ojy(7e^B&j*aeqsvSKi*$TNDw-F&Ph|tX+s@( zg+Ktfzd!T}k5P~jr$*q}@iTSc#Ty$qMK>FrmIN~=q=Tc8pyBrvyRCY|8=&rsXl3Mr9Jm@b zZZaXQU2{8{QmlskI0a77zWfnAU%qO*tMMfyHLRDxZaSY-n>-IB_QU~$`gwmD;ctJk zQpbK%>FR4!$MEVK=Jeqd9$dm6Aq#91$u-VCg)=hvzFtrF;=*(MUXj*!K=P})jTka+ z=yb@C4v!^8#F464dnf9sjYn^`Yrb+IJ`ws~!3Lu=m#(1sbsMEM7Xl2Gl_^*c$OV|| z+U@!7R2E83h@aU``OXAAmD7U5)Ql0>fXM64#*E`V;<6B75DvwrEvFAJUz>PLWGev% z5f2MAB_>WI@j^~DaKs>9!*KdKo*z3Rq2FED7o`#5(WhO{TLPv;=Wk9hJE)cA)KxS_ zHieU^odP}F{3>Wg89}~B3Ufro==V=QAUBm*#Jfgj8HS^sjNKux2fIq`73hZSDZbP# zKTNsO6Bu+}#&!xH9=jNF{}ElhH609tghq%rcuc}Z^r(l`XBXlpNS6Og3gUWC`f;cm zZuH#mfr&J8&_MCBhdjLVBlpP}dqx3v6MIJZHlqMSHVmB@PoCi9(j~ z8ct>0mFH_tr$+}^43Z1p%inI!{hXlCq4!si-0EtE9M3M~d^i@Jv#X}oSx$MqNsCd7 z-&^|zzPfk5-w801DtenjJbVNZ?f|1j;B4n-? zFx$5tun8SO&w}enrWEZbTe0)(Ar0*0K)I4>U-jQFMI|CLpUkx(r|Rj57Jr);j&MCB z@HoHM{sHzx^YZR=NKF6-y;0mf-kJp(*Bx7%_$KgfaMh{0N1U}55@8gDz#1MM7e$jR zu!64F{DZq&{1Q?k6gDxH8F)Kf)4i<&30yxJBa_+OdphCoh$e6yd?H)Gn-2v%-L6XZx zEuu#p=0n!5Z{K=XIFCfvs91Y2yIbgS6~ONK({st=QuSRBvZJ1i+`++ucH%(ynyY)t z(MiM|-YpJeq$x>2)oJoOE48gH=hjof7Q9eg;JT}tGna~{2wz-mG?HK0HP){P4>~pS zwq$=^O`MX;RSTv7NHjjbgU-E0(x92&fr>us9Z_bFM-|Zn35dx zmfD04*ixiYK%(A~aO4wxcRPKq}K`pUP4s?lJ*RE?S`+T&^^a6gDfo?^l24X=42X14!Pwu}{) zXuOFSpFA?Fpm!Ug(>&+{ZTCp`^3)p;L+zp@5seNtWn-=YJ67h7&b}uhpw1a`;wQ1g z!mNDDMwvRizg)tm#KXNzwNWn7w|a%)+M%~u3y=66R8%@wLR{JfGa-p108Kj{{k9vC zokSb)DvOxFX28ZGVtlts0t%qMLb_YuXy%|JfT(cdM}jK8D9HRZU z1}WW%mxf=v70L{r2Lu;YQ-Rrx0g?+7lu`_8eI4oTY`DGsGaXB#xB>|~8ooJ*UokM@ z#xEq>>$(xeHoz`kHyNdI^0D5KfCk4CQ(wFa$r+6)%VkPg^^hQh2C4jF8s3 zSmJPJH7{sVq+LH`v*aWf;s%Jbq(ibmBvkNZP+>R~40^%v#X$^gv#3x(P!!%$?`+j9 z>%Q>1G^BcVR-sW}V9N0dxnAyAOwAiaIr>jwIhgQQ?;?jp5Kyb@QA`(sP~(Qq1EdHN zu0+FjziV*_`Os(b$wgQq2cdA_OYWr3g5}B^LA=({&! zaY?CHkz3^{P1ZI0um_mQyCV3!A_1i?5oR<9WUXu88LcUt3vpT);%62b52jSO(gb|4 zLF8{dzxSM*H!M`Mi^sU7bN=muzPW#8ra=|mP2?eSF>3}4+Gv~%({i^MOQ#J1gYUNP z+bSkKXpp~lJ8K}!wjw7nc?1;J&;GWNPLzv^ ze13vVhYQYWhV#->WI+?&N|@uZ=p#q17&*BfQzfy0Cv~#D2NzATjFJ1Bb6Wr$BCgZk z(f1=ayFWSRm?q_fH|?B4uHD35jSDVj3cky5St!v5r!(()(HF*;)Y@;{1t8>;gNDPdDVp~`?Cw4ySTdHXo4h}I zb63AQOL~36bkcB8Ua;kfU9K9fW!0iH?D2kt1mU&{b;}{u7zJ9eovp1_dnhm2`~zMk z*=|uynz7*b2_v_T^EL;cnoZa8-ginH>GZ@-)9~!1eAjEyj=ZZOETY6pLFp15z}e-B zJ?YpPdliwV{Tw1F`(E!7h(RS9x>J#dCrgbt$$(eiG)?%Pitny5LL7S56O|X${nsjG z;&QLaRHz3*`dukD9HC|)T3LrA2-SBW^>4TG-?oxQ@iBP zbkBMhTE{3)k(Mii*Db!?eqTQdw;228a`8fi!Jf2x;z!N-r~l=?JL)JxiLQdLQCVDC ze%FpB9~Kz>?&1v_VpnPR0LfLXY~=ZG}^4u7%{qXKi)2}l&-9y9xEBcq|-LYjB@O`Lzk?6u_;4(8tJd z`S%E_wuHYn#LMxXm)CVk2lrGoV~jKd(?)R!v<+(_)ne}`TA3zyR2v(n733+xic6Ft z2AjUv*5%-Ajhopo`B6qWtcU$9Jjbce<}CryZ-*vCCGoX)X)8k097J+rgzY7fG2UeN zvi!6ib|&05-+HPJ4yQ$iToKG1oN3;cryU8ho^7oWz3&y57dWrv3;7MU#}eLGbc+x| z3o9f?8_nh@c-9YjxdO{uqQN@Xr_^wfs2 zhW=_4D0({s2qV*0Dh%_#qEA+mh!Sifc3d_mB_;orKtDo++c|D$vBV)KyE|GgIWYOg zb@R&55NG6N{O=R(-Ne$OSw`(`;DH{;>)zU2}7*QFjX{PQ0ppl zQsFo0xIKSQ1N|Nr;CX@h($mV1pKlTcdzKYZ4vE95w>~xSErMu-Mdw{p1vn3;h}Utj z$pkX-t5-lq@s|ii$N7kTNAncsqPEFNo~>t=V6wqk~9$x&o9vTkr=~LFB-*c6X7-n}h%wfqK(Fo*`YP_xzXOg6x>u9n>wp2L+6M1I)uoHEaxEWzs zqD83xy!^rR7yF~S{7Dc#Wy`f7ej{V#uC3K1yK@8~H!EWPAK!lG0O|Oha!A@kB;8t} zB3a*!Nt*jH7y|uV?scmqZ*qg@w58Cc#W{7Q5FDw%Je|<=yu+CAI=zqF=*DXIr;WxMjOJ+DZ6~;Q3-vN*u8M>xU}amC zQzP~-ZyBlf=CswFVWDnKi@|tX$?4>u@oyD|L0T3PkD8n1va*Q6`7HAQP~MdA5x&oG zxD9EWrw5fx3@m*Pv1{4q?=)O{;a66>TxiC=0Q;uXnjpnJ9nvU8q_Md1VNE`%4n$`` ziBX0vL?smgiyc;%^Qx~FCg@Y&ddDt$#KUmjn-$gt>@(?XgXgrp(5K*}^He@|HAl^T zC)d2%(+O#H&0@f97v~iR5eIaQCTVpm5M8X)YnQwM_itfN84j>bReF>hCF!*wfhV`r zddK+Dr@DU!ZHhz{N$dHUr8#o?cwctpXNXAOsU4|$2oll|Ij{Wxur2HQ`0l=uD+uixOY@=|_QPkLnb@n!BtKroVPr#owNQ2G+N^hgZm)%ghIi$&1GTSAp@7V)@Zm9>G7Ew`7oPl<*`PzzK!x{i&zrz zf0!y^aD0q0knk4OYu%^W%K&h_Ns5NOlZ{K7OZrBAe z#7hvJJaD0$H{9vETBk>svdx5TifWsPK?)G?3P-seo!-DqFAPGu2n9Q(9c04EOjOM) zW`+y@vo2RZ&GA4B53>EN91|~L3JYI(f@1U=#f{CYs0QBpqnovyO-G@w+t&t-DCas{ zgB`GZ&ZKPt(_soUsey9xGy120BU%w$PtH?I1}%D={OBcn%S5cIhlHlJoC%{n=z4KL z`1ah@TgV2EVNx0^@)z4vz{({^@rk)1Q}EHKfoi2T>U^dP+NI~Z3T;lmV;oEpxOSq` z(p#2DvJ@mpEu1j{yP-Wtzsg3UMYX7rL=CgmTuPdu_usy zg;ys3REjbMMFcnfOx>vXp@Y3=bJs~qU%HH3Yw3C?%5k0BNlifuG5*tyU6a3ky~Z%% z&ZQY0OfZ*2#we+^;|n6gaJjR!R+FQWW_#J@F0yLxDa3!(_c+2A&Ghv&ka8R z!ZCU{-xa{WMk~>bQxZYwUEZlAa>^$Fx-Wy=@SDL0E2dXo}K7yCSYnPX(*i zPySFy=D+Gw2vGjD=A4p13fAMN-Kj=v1n-|lybpj`^^XV<@(5DKhnUZS z%@M56?NKvNqA|kf>Xv>H9v&o2J+1-pocZUx%pU;hIpCh_;nIAf<=^t1uvlW!%}4=x zbxE5afbdn5l>@mgZ@AUQzK*7?xiBo`#(WhvdVgQ@bMH;K2T}`~^t@Iu$-6OmCg$sU z3yWL#dRoP=Ax(dJKDSrfZu#v`7(PbLMwe*3chJDY!^>jOsF#$L{SJ;WdM-7-B2(B$ z9G{q)!gm4H3ZI;uPC6S-@H@{+yikk{su%l#g=@p5Ln&3biWVA&`J}R-*3l5bRLrl{ zl${a%afSd+_80P<5j%wl>iMRR3xEE35+KArOfV1;3&(U@LC=_i2%;n;jN-(Ot-BJ@ z&tk*^dAHX3O`8b75pe#KBn%k|Dl`0K_S&?UX)IpdDY3Yo_r<#QD1`&i{73n`( zO&d5X1D}o0mK*?3u_S!~fVAteKeg*QiW#Fn@#2m6)?ZLidme`NHPh>tri?En3h`xG zL41tswRsy(opUU#E&S20lfp+^REPytMkghlPd)qaz^} zl$9yMqu`LRv91nY(;?5q1PLlWrLTy`)3+al*c?B4 z8u@t$0BV1Nb4DsF<^Bla0wQKeX9PZkSF>cang0UWl0f9VLMaMw69Z$r^G~z@(7!<) z2b8}wAsCd;y3Viw&;++`fvN_?bb!w^E8u{l5DWkRv(pmz_fU3L*U{|xKlA&V9Du39 z1or*Y^Y$R>&41Ya7A`2GeHVE>=_`f$JT~kIu^eTYcy(bqc*?$KiUrmFk;hkB%^2kI zA0}wvpDc>Rj>%gw;CYGPFp!bgZrbX?g<(I$X`d+;q#$8*)xHyanW7@ zeNM?@G+23>mq&FvikFNBcg^TRct#dZ9+ghr#50~r7bB)xymq5K#Zl7o0of?m+*EEl zvVaf#Vl2Ffl{_H-4(F3z>h%P@ut;fO(>Nj=5zeUFVGDI2p<_Znqyj!DM3xWf4vmJ? zfyt?I$b+C3-nx1Dj2(9^@CBF07c(bFtST*~S-s zuM;MNp7C;{oST<(A>#yMd6N%{K_0gkRT$}B57)L&_3!M%nTnt5LPU}d4h|>#HA{Ut zQqlT5R_ z8Y`+B5w1Jq*Y5lt%}<*Ol(sZdc-Z6P88d%uFw|MTu^Or}U+A1cSZ z_Bk>ZU4$@zJP zRiS7kOe&l*ox-{Bp{b?qNkFw)AL^Jp*fvhK42!`=KR!?>h`u=p#-MVR$ z{MP9R=*2Zk(SZ@T*~%WE-I*%UdX312u{Z^}z^8wzB4Nx!ZhvVJh@3MTFBjd!tt|Y&$Hk05o_J!?wk1gQh`Oqc0dTw8aba>PI?@Lg-miWZQ<(8)?5aT2xD<$_Z( zZ)2Uy=|(R+zPa|MRpW6$2(bYFMd!R)#m9*eyB-B_*t9ABHkWbfc)n5oK~ij0MAe)B zbmmb4f{;+6-7+xD~bCwMQH#WB!2uQA_blVsKn(!w(i%ktx-6t!G5`>f_zzEWd zX>FLO-HPbt0WbzlmV7ajHF;}*>eFE^s74Cd166&Aue(iT(hG2hv}2S(H8Mfcv8O_! zxHt)3&TdJICZyK@Yi_fhE2ulz>gH^lru?Zsslu9-PHu}K9Ym4|v67|l@oJV_bz50K za^%zbvAV+7MJX=V_9(z=@eHqtFB{8AI>`R5xQ-FTSK8Jn;lg+&F zv>m)@Wk~{F&0ny>!V}3uTzb0faP3 zLf3#g83YEJXt-Llr@T865+{w(qKQs zSB%;|@cEf{zRI$BBh1GuC~($@ zOV^^LD0(T!qY9CS?AAy43&D;D22xxxEHA;zIT@f9-@geccQWBdYJ&UZIWj6BK@cR+ z<^FG=iwp5;pM(I{@Jid1o$ekLFVRepU=YMtsSBfkbpA!ikQfUe0{MGR;oD2VDM}&= ziPUuC5Pn1=#j?CK?1^T4f;iZ`aKU#nA;NTs7;rC+JruHK3h{_^Ewh;_@SpSyg`x5q zfQV@R9tSn>-y;chDm-X8o^$r{XU@^4!W{=159$p8&9l3k22!n*c*oSszH`7o^&qY`xg0oOmM+3jpgM_^p74~phLaXmh$ ztE-C=PjC5`(Cc4*+@$vlUX*BHis4!#I# zU*BreKhp$>V91Aa-+2W_!73jV2zfkP(l8YyE188gbbR?DWL?}FR@qYYSNKbi2n$I> zl3V-bUgR?WFC4+qV`461DjmI1)5D*8{!T>@vfw}?F{TO|F9IZiI`QJnk9?X!VF0nx za4{Sr%ruw+!w3`nXJS5MKN$skAzQJg&VCF;(a&bh3r&fkVy52oS2l~{KUB9P#)xYB zPbm64QxqgP2MK?09*9&PIw?Evu1e!xC`Ee;cbxhtJKJ&o13UW^6n#66Zne;(b$brQ zUy%Wxe2aS5zZ~$%*Zh`%#6azC+Fu0l@Fbsw2hpr|EB8PGm%@Kl4@tK$&~UN=@jkSJ zq!7L!_Js(N{7#ZiaAAm87(^_h|5g|6t?G;PrTqjGAIR)8|cs6y;k zyFXvt_LeR@&4(%38%)us$2Gm_0e`c=zALaWc`KZ{S+tbVRP)1u>PCXg-nGG8VwdF{ z3#`h+BXau3K}B&kOoe@`8*GiDwb(K>S9d;Kj$Tqzoj=5e#wwCZ)lKH{M$eFY6wM$dgOO10|T6ep1JZ`kY{8X&HBYx(P1T>By*eaMk7<5iD8sw!DaP508HoCkc?Iz$WPk1qA+*d~* zm6W3W(3Hxk;9!-_qfh$UDts?FEN<+thme7<2Uk|U#L$6xU`=1nbV@;}oGR-TGF7vI z34`cRjt{CLjedw?54QBAi&?Nl}}R z(=fDue*&bHHDAxiPJgA%_3C>uyIYb7v^JXmkEyc^tEy|eHr)*p(hbrn-4c?53P?8+ z(nxnncSx6rASo%`9fEASJEXhbxxIak@B6EuY}T4{&1;NvjMZ?O+J;l19@h1&p;S|0 zfj++j>E9>&g2LLrtD|J7_^Uo6-}>-jP>^uTtOLnYCFix!f@46(Vtq*)p8RRt z|LuHIU?f&T;{g*HdV9aee?PS)3v^g5VW0Uo^5ghVLHDy2(Tb^$a{q=#34{S?;3RyR z0}Qap&Q||Kh$)~VRnYi^=YPL!lSoaXQr@ET29^8x;eI!1OZVBz#nhzfAH)tXG4cx9G+oMp zg!8W~j9C3Gr&-oZNZQ-Q7M0@VSa1K{Mgw7BvhDBZ)}id~Gqu*VAz`pAh=u7uont&Q zKCcPZwKTB4Jw4v&5Y%+HzGeF+`hmfoHjcq+Frh6xAR4-cUL%1E5&r5BK_k+pnEQ(k zIo|nC(~JF?699=0LRo46VNT3LlR<6I799C__vZT0t4+>F(L!1}5QBtUCK;drZeEsawe>z3 zo`M)h4@0SE>2rygC2Aul-&CJGb^on;E!%jpPrq<;QRCA*+C5wG-;>V>T-LzL>Z|y- z)4qj_EU^$ByJmW*#W@dvJtK%C;1~x18p|Q-aaQ4|^sA<(Ci${|dh`{t)Uneft$$N& zmd7sh_3v^Y`cMjwubI#J`QK#@=6_e+7rU00(~1!}a=Sb3-Kc@+CqSV&l+uh z3^U+Js`Pxe0gE7qBcrnidN^iK$*@E)@3^@DP<3Aj>4)v22=el#lY!|E+aZ__jz$@w z_aSSNtt(n%3|#{*SL4lPH{~sfH+C(_X@@PeE-xqVHTCq6N`J&pp6@EtI90d-={83h z`s`A^wH;4W%{da8()*}a;(4=EWOlYa&TT!#+HkcRu>tVSh9&@F${K?CvVwNjNXpe% zO4^NC@24wY)iLTKYS$+;3MGScs;2olj(0!$Z;CCH<2N2bix+NbSfRc00n8b)i7UUq&boEylJOD}n!4BD2Oipu3a6*rZ&$;Hq=ouj)es$mPbNY;gnj);mXS*BP@y z&&xmNlufj;?^}KD*CTmGVz;t=7jI?(y|-S!7M*ZVJE!uYeg#QVoGN=O%TtBIeI3_* zGtI)8**WrVTTVP4L=j*E=IV3T!2O!yu-2o!L{;p4xuD4p#x`03-Yam0Ho)|m=y~{46YFM1@~ybn z)e)h7Iy2T{+tx7pru8Qu6~f_^%@^ovqLm#jo;hLv&30)xeL*7%18aRnki+HE{=|0{ zba_rRO@yp5c0&@XO9Jg`%Dux>ovLCvj0h4>%DTc=!F(-HQyA#86Iw| zfuS$vCT>~R&yd~+a9{Hvw4YSSc1T%xHwSB76qp2S4c$Ey2dY$V%b_kF^|r!DNQC}RkKDKNeHtv;a>7x!0a1t(HSKomQwn?6N~rydUx}s4LwIG4K_wrKBLiyFiXZ!hA|VsVa7DdJPy;D^HiOBbl2{$_GPO zxn{e2?0Z|K=aG)VtIfP@Z_;$gG+oNHXH~!nqpGU zI#^G}%Ox#J@7tesi{DLDD_I9lzQp!QOY(_;?2C2HB~*PPRic;v`KUl&>#CQO3NBH zpN`WD&$z8cvF(#5RI09uxzo&Ijq0wXJ#(|OYq|d7{uISj;+<{HZ_{4#kBOBgz2WTm z?~dT$#A9(9LYr9%@KprbFG`%5hqKlKwu1W~d>?PKJ-nH@{W7-hi@r)YhegXQBjqt= zE>msQ(maA7PCs~LB0ZVnh^A7T z5=y110xO6azU|k9FG4>(&D}W)!I6Cgk%3vdg~Bfph#FViWHyq92pu!H+Q?E;C}K31 zIq-`laAZgJ$Cs^--tAR$f?FB1tsu&@=7GTPM_0G#VNE;2)u^=1PrZsm5yQyZAgQXH zLf{j-b#5IK;c|=n8>97)4w4{3Kr=Kx zE6lf#$2g@TW_@mC>^zz`509Br7%OK=mfTg*6h?seb&jxB^7Yc4`{~+|yWLvVk?Gwv zlbaeV z^xm<=gJEHjXF+nfIDDV_} zGZVaSx+sy0I?ncYX?R!zcN_Piw!2n)#wP(-*|BkQjwe!!qD((7J#cUsZYykSAJjHc zz5QSeOYr^c9Dc5_3AyKH)_oL&BpqyXj|Btx?9_^igHD9PZ~c6_PWr?U3x|96=)}jn zX}TzIc*X5I*ME04ISkY+V(ST1AWYz8n721}>F~!C)BY(sGb<6QI^E|fY_}(u$asrB zC&iwqoRyEA*zkQ3JK9`xcF>93=#~@v+NOWboqXh&g>ss->(mhBQ^GZ8a212J2+x)Y z`Z}?C;iRs6=A=ke|1P38krEX_DCKz@GDIpKsW}cG#cif5rYF9xI=H-?$SCzX>UZMU z`a2p{@KWIfjT2E|G01$mkb`-SFJDiQTNg%(m8jj|;j@A%f2*U6{`cS9ctOR$X`e9S zt3(b1%g7L`S!;UUlsuDT1eNa;alxc?U65*L)7`gjJ=%Ce6?-VOUc#b!IQds@`ig~6 zwbZdy5v3R==w}21q);8`haglMT3lLP@J=_Nbp0pE2!i=4GMzz?)A-+)y{3jcrqHUH z?vd!VYQXyu2$Y=YFbNB^o|30qIs= zd>k#G6RGN#2oBqnx>KPJKl>8X(AQ6d#p0YOG8niGd`T8`D?19l*`!ds`sD*I9HraI z{9tGP;1yRX3&Y{TU8)U!vgcwn3Mdo+*Qq|p))1z&n zjw(~J6s0mpyX?|SC$hLBchu9j#7zxeYKc6g10mNLm;-7n_d#-BF(w^9 zf%F?(kWh;+*e0I+c~#`wSj@$jv(~U51v1Dxsf8Q~3DUIIe za}H-#8#PDy`xcuT<6rZWtlqchY%>bssHLgRMK9e9Va~3fe;E)jPoswDR_5KAUUL27 z3yUg!+xDL5?>{_?llr|xGhfb&s_6b$amJ;@sA};Ue1UZx#hb(6;Y=Qg4_x`{=ufDn z8^5G42Gv!tS?5hNP7mPX8riERzDP$kRg`LB9ox;iih>GiBhqh&IW%|n%u}eHB{+D#HOy`+Hnu#Jowt?;>owsDI~Mt*^LtH zy$&xfkA*B#VUAH(46{xz{u#$4`dfvp{A?RDqsQ*4P{)Ro+(pjA6Cat(t$X5u&}*sl zT-FnX>vi`^?y|bn3wE7;6Mo_Ndr5{D&cp8+BHpW(gpbEgPQTsy?hyISq7IcxGrDGW z_gw`gbb(3y1nk)6IEH`2V;b^};~#&vMPZz))OIS z-&c|_{A+}LU-NX?y7A3C`Fl@fpcuN8WZVptmhe%S0Ih@A*jnhB$fi|DeZ~2IlFknz zxJ;J|43yI59E(=yg$KmQQv{*C8=#5@Q(F$dGqYyL`k#9J0YRt)nJ{R43n`TE-`7gw z`q@|_xA(z%H}*-f5R&1za5^$#+VB0&$hxeXs*0MKUC%N z;>Ca8ABzvmSfE|qk|gM4u9)(9G6pt~ekiw-=jY3Je0(+BrhSGxvo(8o_sK>o@ZqIl zs6&|SRpi}&e*rQ%v{V%cieV$jls;#bWNzD)RpX5%bMp72)n^k1(Y^;!b!K(PYwHDT zkL3#}tXQkdF^0}Tsx-ELA*sZ$Haym{YsY0-(lQRBEYHuZS`}&`SQK=$A=q&nDWt`| z7NwH4ORkE7+ijGJ(BSIrw^tnBziW({th~C(d1hj|^1w2|QS(p!3xnD8a5JJRT==-4 zjdgeI!@V;xTBuX^0Zcd;+U9K%f+t~tW@l*m&I*lB z^NH{Ib5fL_hqV!RCpp=DP8>}Pfk+&*j~^$ExUH@?3X6;T`MaO(&9Ap$fj#|0oDwE+ z+CQ=F8@m6?;i02831fjjRi`T4ATpxux{gA^XLViQ)ZB-znL`I>ttwrzwYykkIvLywKqLDk(W1>`pvT4E27h|J z6a$JHAexcn3TZ$I?MXE@jVCAYr9g5Bx?bf|i~oD~Xyf)hx85vaA>RGp^!P!$a>Jfb1arwK(|a&`6hN zZF@RI)&BV!$rK1LX(|TFe3MPm9d;Tx$^KPvt;>N=n2(%HsWkQXiU4$|aE33eb9+KO zKAY%vz{Bv$#m7K)(f|_v3{m)|?~5=i_NhB{zdA`R=Bc*K_piihy0#H)93LsiLK882 zUn`$CaqLXbHR=_I(H|&gNgLEwsoxx5_$cjS45rA~G24d6>8X1#$|zovXB!#HXP%k-vFo_lqT6eHwi(yXx$55PoDM|Jc>z?V6~b->80X@hJaNtV zMkf9&c4FseGsJ;SDHe3<8pYY6C+wujI};deS??}|5@}aN(<9$}*%QrvpZ?4NGtIH? zS*hym+%F3GJW=(5LHmF8O`_$Z@DrygGzDxz;7Luue$~QA*7joXZtSP(8;RV7wjf3pr4C-*&vV z5#qKzPs@-X{7#rMnn>>wvSmbZPg^+9#IRptCPv?UCD3H1b?8y;-70l$uPeq-e%WX$ z=zLq_I`cX$2GOE;UC5qr7xk36e@Ls7e`YpUHAP!j^<{dU)2(BF=mvZGcr01b%Vpnp z75t(xjb2uZZ=>2Xc3re%#u9j8wr1k{zX;1V*I}9^aO)RsOhr*FxRyV=AjT&qAdVxL ztBQ0qZ+b8{HQD`0YeIwmvoFM;id6*rw2YAz{q!sLsOX`b-C?h(yIU4Z_IF!q?H>*# z;vr^b)ni-+a~159Ya2d8Z;6sO28gUEr?v(dT|ym=GE*31W=uP{N4KoExL3H+n^J-u z`z(MJ)ZtZp(qFsyu}Wmgy{harY1Mg}vc=cu+6DveOr)FDGq@K!=Q9IRqDEqg%E=Zb z=w=;WWi8Ta;DEt8iF-lr(?-bW&&6G!rla#q<<(~AF8S^F4~E5fmwu-(3l{W&c457} zmp`~{Wt9xOS+NOe6Q*>IVDcx#omrc2T!~23X(0=@pGtYFLV0<=uuDkN6Z~C5IIz+% zBCjAdvij~Hqx+^73J(1!PA=ql*85Yw$Ulm?DDH2(#?u#wI3?sCbWO)d{M~!TPparp zU`{p$2za@D>?dSRME|ZhX zPOMRlz2SW%t8i&uhR+5#XhSM24L$On4XJ@N0tF>W!7a@>|t-&WBeP}dWc{OfW(u{4~ zxc)g8J_z=sF}L?G7Od7&9i-QD7BpiQMR(T+i%)U%4Z95IWUhbzQ2ai6-idTR(CD2w z`W3@}ryP?uxZugAq~Yn-XbJ#gl9Jk%f3E}^2uI@RJgoEfkgFq0z2nm}Q`?{H)I#nn;Xv;Gj4V=N0J(x!ONyus#xWE9 zdrBb3wfxoa1NTod!*H!M8nckegsSJqI{pS50hu}lLaF)>5AVzM-Y zj$R`+Y0;qDoO5O|_UYSLe!-X#!h@z}$_b%&hN0Ytr0$R?5p^}9wZoe`6hS+pzWnL< zscr}?Vr>7^RM5nE7WTQv;+~YKK2dVvMpIw<%=qmkEt+Vy*gIhk^gU%s58|2KnxUTb zr5Fv zW@}s?0{v20}1MX!2#Fs?4MXID1fUlm|ru+H+3{NyCf{_s_ZaW3=OTs>3iQowF zj9^!A6UhPCSbw2pKkQdXs?qzH(WoIa!){Dt)l8s+5RSS}o2{bO^;{9S1|pZl$E$RGWk=C@@~=(6TtdKh%u zOM|Ba3K6Xa+TF&K=F6qT|2R~CSDBon1Rcbv2-KmJ(~}w|Sq1~of8HK(=9y=gYnmS1wlQ46 zbirJ!@0Pdeo+O(k44YNsXV;C=Z*9~I!n7>1v&yyLO?TF+_pI|nO(*CFFh}KDGS_(u zuSEAdi?ebxLvX?ecEl(L`BWO=eqDdDjQV8yxbhkw%hp1@_cILiV^f$MG&$L2!HXq zfTCCah3LSYN4s@O#VFys?)sFyB@S%U^-%G$^OR05)=;W}CNV*k6xAuu z^rO`8wpDsn;&$2J*#;PtKhrJU|M`gMtAmURS)H?MO=`ZFRRq3BZ9PUBD8SC7E=KV}#xToT@@QbTgLuQR|NnhmWSW2X!gHg3x{dyVIbv1 z&L*Ugebu$YEzrv{Gj$+YZAuCecHUMa#eP7UM`I~9?8awQNd)GOB$TX$`i;(qiwgsc zN~u(!Yp8nT#bt-%45!=C@^nduBi*{6oH9{!9jX|Xz7Mc{(nCXij-PuUG2;4Ns|X*^ zVT)bm0I!qXJaA{Mxq&^LRvph|n}>BwHEZ3qylUXt$q>(IUtb)p$xeODk6a%t*ilbU z@w!I&^16r9Js9C3!kQE?UitsUyW4GkJM71>oqyVm7XA|poWpmVT#w+l$9D*$s3Yco zjoXf`Wwi&eTamcmqa`Vz`!)(EXWA?-v@W2q5f&b)>xAiJ$8pnmmdY&C$MiA6a^*sK(AIp(+1m!L>2K)=4NT>8_>G7eC%zZshmWtB%uClaY^E0>S zg^homBd{9MBRQ@m#ToV~L_NA(C1DCSyp6q@JujnsQ-0tpy0sB5E`!juviM>$AWu(` zI`0J-L!mHqrR%}$?{(=WPW?%Elno^U>Rl332NEzpQXx@UiHiT?BU;$W`h!(=|k zHu4|#7;ajN-w36KJYmH5S8kmTX@IB7@xVp-Ac%fw7o4EVhuME{vl_v%4jQvE-QfWU zkT&mm*nE6K%)mKm(!YPRSDr!}Eg*GsdB_3fXqD2%l-V2B@ko9yXw888cO5(_YFFIT zK`+)D;EZqp$-F$0^!dm|6cvn}-%;GQ%BE)+jch@~y?> zJoS!Cn?@A$ojC#{_VW-ZE}}Ym3JeYN^fA4jmZ&S-DadHG&@vK61-9!*!`4&SKP|U^ zPC#kVJ8wtzUYVG)&2+n2F0algm|aOG%TRHW=tA8{(zRAlF%lJ~b_wwC0f1vu13RGv z7kF*+v@s$lVHtp1y&%%n<3K@LgVMZ8OSz#GR*I=({>S;`&N1Y|QzGK5nT@@u*bbwj z7X*>W`d6UJ!^UddbvLp2La^EUbpc`#umoJCr*G9EG`q*S~f0|CQ66BUZ^PkJvc7Dw4weQ0zWyz((^)a*}5BT(=oyVZQj!XOeDQ)7O zSYpliC!t^T-IgQsg02q{26r?SuUDTkImo_@9AAqOr+CjP=M3oZ z9~JH8>C6+)&+WhK_j5J^s~PIMv#7_6IyVd@7HiPZ!*}WjisotRyLZpdI}Wlj|e)7zjQrdr4g>)|A&Rc0)3U26^%>R>PdObvC@)hoq0TMXJbMWgp%uz%i_ zph~q+p|ZBAf*W!eBO_*0b{G?FszZ zJ^eS%8%dh)#>GE0GIy9hWx$LKQ-JhtKF6f=I`ZFbC)q5yM`;3?~dqA0hd_HFXxmmg{#U zJ#lnv3$kk(>#4<`=<*TSYmAo=Y1GT<(dk;jPj`@s+loQ9|YA(Y~YArXNbe(kP%1u{no(k0Du7kHD>+5Rn(be z!J|i=(~)w!PiqwUreAVU2}?`2uR#4BJnW~4PF`Bos@6i|84T$*G`(a_kq4;8+Lz!P z1H*Xvci`u0ijiw^Q9p_DH49b>>0;9*u6(9d$A@Jvdf0uPb}~#r3J)hSRurF1g@dTr zJgw1%?io&ue(}81+UVsqaQfTuXk$}&1|%4{{9P1=58N@8Rld3h&wT~-r%#v%Ph+;j z53v;9Q52+c_tXO1RZO_fhC;*A)Cy;h4@PVkWg=9to?2nMor_Nc$R#M`eT>E)K)NNL z%=K!8@a>;)suD$QhAjktA*Bim-W4G)jIVNO$UIarLgjKWJs*3#j|*b)<3^4`rW*$%Emi z@}{f9mL#JBUNVg&q0t2uO)UQUSd51a6lV(aX#3J>N9WZ9eys?#l?SK82AoS2!CJuY zR$?p*UCDu9xwaE-%LaTGa@iHtF*6|pXAQ-D&H5}wtvUl2Kgsdi+FlVO+W`&q{C}I&cGQO|- z*M{-SNKMzV$7$OKJlQ6NBgNVFZ$qN%>nX6JXXbusVWN`*Q84_@2Z`UCoM<=2jv2y- z6Iu2TAX~+P{b$1a6@hWoXE|63 zDV*O8WCUph-yVg5C!)xysakX!+JYyqZtpf`S2#-Oa{p#-Yn}^A+WIG>bWvyxu0}g-ivKS6)HCN~uu-y1&9Lvv z6k@QYllf|-F5AH!&lr@l*Aklz-peu`N;wlxisqmhEzhTvoO%T&MTG>!b|Y=9kJn)` zGG|oI{z}IXx}>|^qR|K697(B#AlM-V;WNZWsSc#dOX9g1DW!UaVvrlJ zf-+JgbnO0YOzHXtd{PwM%WsitP{vVPfzi<|JhfuQMS?@5p|b`O>?iju4PEW?lKRZBmP)8hDb)81{T|`uwpGQf}L9lN~uH$A@H|7uEXluetRq9)hdn1Oy5^JXoy?)~`AdYx?VyOT$}7c) zrXtRmPZ;7PLCB`wQcexV(LS0HwEAPA3M2_6$pICtNoTU*?1rsa#m z*1L$y;A?;sn1X-}m%A-rfl3WIGM0^@u)TOskST#I)m<4ApnyH7w$S)7!Q%10bS6ra zBKD~Wu~KP^ID9$cMZ0uc7xrj-@23s<*qlS{Twm;0q0yYM97?6z$QSKcI6(2w)VH@_=-OkaNV3*#7^=ag-Oz5Xrs`78GlSOq1x z>0huButu@7DDc9t>ep`aRK56@9bi2TA3!{gq;iD;&TS=$tcZCP8oQvU_G>^`vi5>- z9G#oCa^dU-YfQ%B#%RM~JFxtDoB zQVvsX_ko5?u7B8DF>{?{bR41eVfD!SeqbpF8Ke?AK6m=N2li~UOHBI(iRgH`Lwlqb*%Nl#TOD@?# zLjT??$Yi2+z-evS;9Mh{0K=fvf<89MAuTW!c2Aft)3Mga7f0jdNKCz(jJ&^!gNT!D zZ2TJ9MpL#L(#>(ls8R#gA@Wv3kCE*U3hqAXqB-2?!P`)kb?OL@lo!GUWBldSX#XDB zM++sU;i#;Fai)7eh|_EiX7e!c)yfE_W{Ba+QMURWg3T7EID%9?*lu3#IdQvq3rLA+ z>P&iO?w!{9WQlk*Q+9gP@v#Q#T6P+9Tm6hdtz~^n`D~&IB0Xh$d68?$6ndhD#BWx; zH0P-!-pe(^K&Hw6Q%{bcbRpTs#VC6Sq}|7a5Kg>De_vXIXT{ zA_LnPi4S%35o|uap9{nP8JH3Xvjk8)MVZaS;y)#2tP;1c4l%jBtnU>vLbCSDXH{(f z3`;+hbuh|(UoRQ_Uim^l=CgM zEsrJba7RtDxs#8f|FTV97~iz!!Bjv+TsE|R4;HWHVmVl=T& z?wE09UD2?&cXy;bH8^XWRchTvzImlNBtV^>!78Q05@%34dUmy--&>T}GLD4*x==n( zODEoyuD6lSgk|z0`+U4N(XT*{N7h8EqRXU`=DE}#u#lm-)!Svq{)c9fnU=&;-P)wQ zz^aWGFc3kD0ga?;inbU4|`Q&z3FFZn^E3+uTYY+?nL+>M!KIZ_Ymb7DPJT98T!zk!8N92354>gUjuK zP>h*PtgdpEj3mBWz60--;D{-pdfMQEp(i-@)~Z0Gv8WG=oq=WX|MZh@V|?eI2Ui6KFOJ0We|mPBVN z>{o0W7~eZ(@RbuaOjWQc#pX}7g?Hgm3U?E*MR%1s+Y!VLO>Pp=b3jk6o!|k`YD!>j zR|>YKQzROWt(aBvuHH@%me!<^B&cxt!xHqjhmw)GE_r`^F0j7x9VMtYAs9E5*_e!@ z8bfpmq^`$mtRY7$$dp2}3XGWqS>6}gzA>GY9gje2ky>i;?gX6brhxBzh?Ao4ecEr2 zr)L|Vt;0aIL9&?tPmCfsrj5lQ>qQM5Np<9$bSM6JAQ=L$_`AeqjtOOciH2_R9!#jh;6&_B^!?0>9_c&9>p|r&j==hd+QyFZvuG9y`!E zFnESV5+E}mCEf`Rv-_uJpdaAlj6NXzuf0g_d$*e&6V6k zkah&(Ih1nptNIDu*pL4ARpayU)p2G&CoF?kO)Uu;qR^InAMfoS+_yaU=4`5!wZMV? zseQmNqkv}wFS4t|tvhW#&+nfVX0*|Z4zgAUfx{&Akic4G^ynXT3jeI*u9Q+4WCk^# zJWTeSicrS=2#-u*7uOhT&?t%peZxTq(1`GW?8m>g1B47LFlswagR9&DB#~`l4HCHV z5JGpW^g9KHEE#3DN7T@7WcqHGG2KE65#?9pa7RTR-MsZb_}q>RHD8wl^nGy?q*N#< z0HWU}YX}``=r|V%vJQ-=YWl zx5#rayoOO1uf5KHYZ`%24fa-slS=CQFKJ{SKhYjLEiPgZ3FdSMU=cdyB!iEXVZuNqE2gY>@$(*$miZYm$_{>v0J` zv=NIII0+lGYw$4wT?VLb3f$9u7-G|jLtv4*{|2je^tt!4UG0o{boEgOdgyU)iJk@( zjfP>g;N}sdL8+eM_@9UnpwKo*l3Yikds&zE<;RpVpC@rAS?iZ%PeM|=PF1hoWp{-7 z1Z*lutm#y_u05#tKkFXy`2MzNKOALE>hlZi3Q|$fH1Ev_`T5aq={k2GmVq{_ovW7& zAF9sUgL;VikFICqa>!DoO8VOsKXtvMes@B3ZP0Wt*IW1i^yeL6JJ&!~3JhZX?qDKa zVo=$$e8m9@+RHGsh+FUO6hFx1z}mWg29l<}0BFR_WI$IzQy2ve(;~~>qNhVVEvc_~ zcWIr0IkDLziT+`_!e|8~V(jTF!P_a^NueWNOX?%BUP)x};3^$mcXX;AudpcwR-0f~ zmggUmKdp~Gs-2`1_*twXxKdK?@T*{X8DN4|4#O)T88;pFAqUrV6Y2<17*Kkjy{bQp zSJYc<_Bcla%cOKoLzWUK;KlY}?7qgz6!EKIG@>7v3B!@v*f%fAbahnqjvbn+BF90HB8)6m(ep|B-)}S=lXG_^fD5@+wKd(Y3C&UaegHNWBa!uf)G3x!0|^3Qbq#$jRwMJn9= z2rYUYNIMu+ox+FFI8RdEc}yb4QolmpgmX00|EhEz_eA0|=LITb#&SBs$%p3ix0iSj zU8iAtpj%#(1u^zS@i~A({@Vl;WT#IJnK@7B)kQUZ>=2oLd0taeo$qB z=h0Y^Dy8NTD;WXD%5zwJm*qD9Kd3ovuln3`c0kjC>=Um)&avFw(}Jlh1Zc}k+RJrcw2%iVi4Eu!|kEBQMKD|Y?1|# z$XrsW?1LeAl0}4;8iRHDih|X&BRr^9D+j7rUWR%cr@8?dvV_-Mw@*$ppSAo`vSjO|$7 zX=cg&qtDum*8Im4e`#cyDiEh~1$-RgpV1wouwagGF<@n_oi-NZck4qFm0Y`Ak_&~# zMtTuUqK+59-YAM7yhE38Q*RVW{Ji5W%$mPkAnuyYCq*7N>^`D~F|n%l&aPCvm*yr2 zpm3f^dEIk5H?$$w@U$8nG`1{E`?BrHkdW5`#{EB@Yo4}|RB?!qH>vi731U%D{vxJy ze?4S3``|9~T{2(H3Eqrt4URn|WsFQV(cvAah|k2j8w^v^JVZlWd(}AzHs3>Q6tdq& zVkndk3e{YuoqY{N6i>M$MR|A8b7-$!s$#ivc++3-zc00zVmhFGz6pz@Tt5aeBjm5L zq4^pZ*DK%OD)}malIU66k9jGLF%8tN*YiTdUd&#Jrk59ZcOvcCTI zV}KFWa86@>t$J#f^}>9BnWu2w{fk@0b=tv@QwB6pc)Hx_s{0Tv5^iW=tsl|^qoJS1 z7LH^|WZ+eKD)FWJk$fq!`PBURWEIe(8GDOb%>}sUg16ki_}wiK_?YXzHBTWwc{ug~ zMxmfGk6K!=MFz6YwEO*4H-?!x@?)0E_zNPl&G$Xsn2XBoX0^1Vry~MuXG5-=Gr(>7 zd;nrsVk!h!*B)VYF++Y}$LgAJwg2b^`lJ&SgOgr zvdrg)1uSaE`%m4*o7A)UEVirN#l{p4e|PhH`1kC$IiN6fF7YuTkayQ!P-xQr^NWPKcXVH(mrPBfg3T+ zR>`}}av{CaQRIpcgOY##l$Rq-aWlAh`W(+XxdtVyj*PlFF$v}dU$0F>N?a6#p3?;3 ze6L0B`Z_;2wRN^|YPP40m||*#><{+0@?#lQw{7}+KYjjb7FWss6(Z(+TfarWnA4jU%KUPv9mv_G*CeDr zj**sQVyRa|XAx20SCy-z^-bemcx`><#Q$MS10Fzbg^lDrDiZ|3OH}wB>_7LPqPzgP z@IrR!oA>xk&Y8I-p6Ee_$9b`AD}=M~N|FfdWH{z{mX{+~sr)ND;FUb*W32ip+{nao zVgXl~BCZgawXW!=s;Jne06aMMYQpYGdVrA*#XRR~OAj|2>_$JCcJD-A3xxC#!v;yk zt#x9HlWl@CXSV7P?l%0952yX0!$zIo$Zj$*n#-TaZqgW<|kV%FEZZj zcG%_22I)TRL)aV&iS*j{j)y}$`-)~SrDIxlS;;+);N{IDS4b?fRw$^m*j$!L7mp~8 zC!uczX>EgJ>w#%wSr-y>q~n&DPIrgL^1^w$;iYyU$&nSRQV_>647-a{)+=r76CrM@ zbOyum$vsF3)dlZncoIM$-+Qy*_7xiuFZyqFol8 zB^HzP2<-C8rp^Z}(hn86276m|^7F)<@|CHurgVry?)Y9gIb6{hEcS#G)fTF~8|Z7- z6RMq}!)Y&U5bEFebcAqN=2R5CR>NV^4#rR82y#F%dWB8D^|E81;N^&`IXm`^UtZWo zNYk1_{A$t=i6X&OdF$_|{J&kyY%@+htHmF`HXo^F)OF+rj%~aX_l8js+gayy>svNl zEE^^AdFCH!n$u>HP;k){?_G>}mE2LFWYYVEz6}2oQ{>mOR4c((?*U`7#iS7A;G`Gu zJ_V`$`Q-g-O-6}wI`waCCFFQfbMZUqc}Xtgmc$*Af?@qBy#Lr)xZnM$MBxsZj4@N| zVo3>6y`kzvwab(Kxr^+*<`p@Nnfo@9J*TCOg_L-h4g1tjx-uQNVIh%9HFHdGxDq!5F$FeSD0xE@ET1Yy#)}t2x=2d+Psz&MRk$_?T2Qq6 zlza#oDMw`Mb^Rn$%|E}-C?MoQN3nx9JV{X9CkqUH)o}~2)kORx@`+}JAUbZ2K%wqe zYy%NNOF0MovXD5amh!rrh*DT562x2W!TWs>(KFX&!{!W#ISwe=<9@9gqf{-gqPAg? z1O~lAJdz=NXGz^E%5T5S^+$PSXGbJj$JFg}hJyc~HfdXoyj{~u&%7cPwsc?3`z*e= z68e+rsZk5@NurdU}p9n{2Ym|TDdkZm`Nk+b0W#ZoV?5RJ-qTlt$o}PxfHMysp z1b&e)aT_Qux{{SR4Rex|I8ZlOD{EX=_@o{ah3ph}3_p$G;M()X(~pa=HOt6gXf0KB zp3&2^Ytj(vUf&WcuEn>p-u7%4)T$)du|8>aQzSZq%>3KQ=Y zS|ovmr;XLM=)32qAJR;SKTg&7@j79ojW5-U+Vg(tP#q;qmOxL<04r=*w*hg=d3dUQ zOp2iZu_Crl10}GVrd!c1P7N35ux+LgpCQ+dNtu8by|IUY9UUgHvp^0N)+%8kXGw|& zQQ|A=&Aj6;$)?EA+0{+*9=PtFJUDC)wEWQcV0IDto}d*qH(jze;!3|)7?34@EdL`(#Y}HJAGA&lyb(z&mUN9ACV1T>g}|Ay*EgujM<}U^2u%=T&XL z42#_OYhyV(0uQdk%}tuvPU>eL;#zMoZq|Mo>U+npy5^a-tXlXxZeVL^@1?Na0yu+r%G^W4tC{C}j1VP;Yei zD|r0si|@!eXfGyD0~$TJ|Bt7y42zq5s(g%?(QX|yOoe`q(NXoQcAi71nCe^ zLXeP^?iP_2SsDRpqAKu3{eQO3_P(i!bcTSi1r_r zY`_uZq$2vu7(8Q-8W@_-SDW3FH6~c&ADn4{IO;NDa2D}*k)AVp$hm>hq&sJN|A8!B zJfnAFi`ID#_Pw3FEp+dEXRj^`@=|Aa{f-W*OFN4 z`Pi5O-fLF+E&j*4#2V6M`OuQ*id}QWX?)TzW1MP%NM=N>a&injsq|$cuE~Rmg z`RNIlUGejsSX_};<)^zAXOojSNW!NSJ=kWXA46@acyk?JAJaS|J4$AteH#VCX|xa{djMf_nF%1PoAj zOw>{`#K-O?f4A}VCT4zJ*q7Wv-ZWXDOgBUqj-mZxk6G~2Z_z(Gy4>%l>kJ=k!cykS z+O$E$v`;BhIDDmq{w>yZN9LhX)u7kEEPx(7vS816CRUieX}0qTdU9Yk#5Bf%kkeEt zBx`lbsym{t-*UB7fIdt8BwYNpXVI@IJG1^{oOu`QgXc_~?$Ar?YksPeoZBwOKGfG2 zGm@(@9}qZ6Dtj>{2NdY%yYAG~A{blP)7Sy8+B(TUm6%d9c(B>zu1k3nYgSgt0G2TtzA`G><=FAT-RN-I?R5<)_bv=w*aXsBEM426;yxTcvevuJ!hN zBcI|b`!`_qbg?AeopbB5v-K9w)CH7c(owBc82oHbXodzSd8&O4$LqNvqLW!syzlW) zOT5*Tl;lDKddPBZ-P-%&zQySY*9vF5=~q2?=5XAVVPf7qXMgmNzlc(}fC#}gxjgfW zPTm#ajKl@DCo(*|M`k6ot0GEOreCdt`MEE9154wsaoS0FmmjUbzQ$;oYVUg*Uz=B& z`fnSXquG29U1v}@dGfB1bC@!Gfey9pJYDaMjm?ne#n|oUxKavh?}M3pNsw0SAH}&1 z2L_o9yrd-9>+rO4+VF!6C8xUX0%`yBw5QJ$TVmUr3B{gA2cW=K6#dQn=e_NW4SAN- z5OT_amD(k!hcQ-7)&vriqaZ@4E>_k}m(JK282z44VW zKUt?!{<6})M$&7K^-oof3)|)m@;n?_H;QLNzL6(1OZ%wq;Anyu%R6CHr~1vyp?K-P z^U0^c-T(BlU2i~%6M5h~8U5N0$>z7lH`d**kePc?v z!pQRw_E$871x&snB~=RxMCg&NreMaZ-HZH1A_H(9axL_+Tg3Oa7| z-epxU<#6arCLm(oz$WxBddr7S4O-?W@=x_-3<%qP9~k^%Px?+J`K=fl%u3L6^4xpU zFHWuCB)z&arcc=MNy$8+aatokVMMV*{Id~8vk`QeG0wkB6lULE@ARFoFLl-Nw*v0mi)1%f>s_e2!8Qss6>3IvvM4_x#wBv=a(kubIQUWUK1+ zGmUVnrtb#g=cOJ4tL=IR(~b_KP0K*er_41lM4ci=QWaOOOxO z{KhlMU^Wux)U%(l((5yMHJc$D&1Y$2Xj>t?_ht2-mU*t0o*JcfzZbpQqnaw4 zDx0HLa4+7#=6Z&n+Rzf7`sukwdIgv2!~eE|FbtD9)=E)J0u#*`rm%n88F!d%$Nb-O zra!3||J#OC9#Yl{yi%Q0Mf=}o!xQGEti66z<-|`}`@AH>Bklj*$&rd8nts7A9#R|T zchi{4Ds#Xpb6e-HsDP)Eg6e$v<#n|Nxnqef@|XQ@L&ve?Jue=Ftrs9UO8um9S|{dDn#% zvQ6(E-wy7Guknq(GnqWHpL@ZH!}xD!8C60<+*3jxMTRs+g%rhv{E41mxND=;_O~0| zbGGfkW?yJ#y__M#BH|sn6Z!{$mF;Y=?#B8zyQkjy$cF>e6D`4r$x45{WAu6#T zdr&cm{47G|u*+w!%M5ZZvAFvmln(ohW*G*DPna}WQsoe=FuLVKVF>i3j3Z`~>%Ce% z6mE}|Mm2 zkSa%T;1lz@ipAdeV&s@vWxfpmzUEg^mi@BdWk-pO02iD-;lA|!<;*^zhxew}l%rkz zot|U@`$Lb|*qSWEiu;_?jAlZCB|qBr)-z7@Pp#+I3c09uI2+77=k%fP!Gv+tw`RPi zyUkyyYIYv|bfkTW(@EaO4A;<3k?x0m%h99Y&rXLH)pV;L>UetnS_0OO3cr~Iu{T!u zn!MV7w3klj$CT`z=JF@udqK=dks?1nwFp-r;9;!R22z%Ik2;-jlIxa@6Itwvm6Hg8 z^!_hP?=Nkc8&YIAi3dP#BWv2OhaRYiQ>{EOX}`UEMscC;YN0}oN(BrI^>?Fnediq0 z`X<+he}@1q@a}p)?J?e5#&dn26j9trNC?LU=+-(JuW7&eeLCP?nN;*+Rv-F_(jRD+ zyO72LHj9LBvBL#;Ns5s&);-v1FJ0+@_`DyGwBNPS=?B?)Rw3DPI{nUy5Zu-FbUDY9h9tD_y@m3+vzvxvMkS~Cp>1L?VC!1o>WFeU zIL#JAoe;v)>uMfURliK^G#n4lfbcpBzzb5yzF#XKH^%{TZIfoeE1I>07b~Lh&ZClF z5EG8;iLDhT^Xc$w{*aGB2LQN17C@_yBQbA*?v3iHMbPO1K;G|>QWgZ{y}#1S%L7VT z^I7j2scw)iv`2vpQQb!7WLtrhb8Jw0e(H6ke#jHh+n9a_dZMF2#rXziyiAv>#Se4S zB)|FOumC_ibOTu?F^G5hSPSToXadpMi3DM>)U0uM5;Ou4hXjMLpLQp@J1r| zP>OsI)-B=kdHv~sJPcA+o|&1R@FT9!pnc^m5-)Fg)+Xt+jx=xRgy#19LG8e!xCjRM zDAmz-vWfJH9H3?P&-txBT%e~KIe*u^{UBDwYKu`)2MX!6ugIAEdxfJnzUO^T(Hezuirbx zBC2uZzgHuJfzN|ro>>O-_iG*>e^%|i&}TIClgkr4`o^ub!n> zk*HeinWLqkUO5|84g`71kq$3B8db2>Bf;&2{RGUl6_9_A8CykP++yv&6c2eo`I=lU zcZ~IGjGWk-Q{5z)fF;7hqw`*M);r6enFnlG?tfY~&yqZJJdmP-t?7?B4mkM{^N96;xKp7MUQamdzW&OT($ipAmc6zCzw3&P$m4%U!I^C`)6Y z!udXM&WLF{6ZQlW6ZgUpH`Z{BIG!(#Fd%>J21<@&ktzD$#X^oX1N2Ux>6;k8Tr=;0 zrteZzEgPYpdXEB<_B1*nN1cx4N7^Wi^?)TiZ{5g(Wt!TA-)kHCs`t~Y$W=shpa^96 znfJ_q3un8q5gc$nE|4VE=A;ueh-oh2S1EcjMe=J!HK_Ol8z+7-O5l$tbYAgy9UK?@ zkV8qkhSD<%NtCx#oRbPPUwrq5oK;cCsrY%HD+h7(a-OfDFL$^8-d4@tBLCIfG?anK zyP>?k#_D)S3~tX?4vnPIZ{bK<>!pH#ITs%bOMbRP-keP3cuNP!lOzW*QJ#hd)UFM> zMj*B>=rNHN18GG6F(8Df$4IIzv6Zy|ONW@>sV4AS@+^vH z0Y-I9CZiw-lx9V|eM_~^ilBrsl|&i(ft>j0NHP;P8lWn;-M^eLByCE^-_!w2qHi-0 zO?Kt7dMI)iq&&2OFb71zSgRKRK#2RjSd2I5l~^jn{>DB zr7>~;dK$Pp>vFRFo%Q-)6@nmqrgHbX1TXRsVj?a{OLXsotj=wHsh^l z#OCS`K{s{o&jt@qqBU?LLx2xXS{kS&-cpO(mbC=Cx9wI7VSa<4=>2A8s{92FUkmJzzMf}!}>M#W9F4h zJvMK{C{{tuNUL6`Xv|~Gzkq)6x>(V)nFVL0Iz9czF!%QQV2dD47?4TaR0*ZHu@jT}oF%Ew!amy$o~yIXeAm{~pL05N$zmF>0X#HXqF=T`K{(~~ zX(a4mXuHZxy#R4mjq_AkHAj}(xmS;ZO?Qm)shQ6c_ng7eL`_`6w#ea<{!lPQxmG{K z?yu7acj3F78O4e`&pyg(jSfYp{1=m|TE+bWQj6$vR$gO$l+>|Fc#M*>l>Nx!b08)` zg-CgtN3PHV6%8LKHaHi@-s|3!*r{H{&DSATyBBIfc1KlJgAf`FcgKf>Do4L!Uc6V} zu|-|j3oiA69S{F|^0HfrL=<;~5ViZgghcj=*?0v>GgO;}2FVt{aoi15OxxtBup%~Q z{lf^FP;j@N&p*-r6fGLW7V!sIE$$;r2{s8X5byXg*$mg>Jx#1*n9-Dsk2`}rQ&2?_stmX1u$YujAjj%(|;t7;eBw$Y_x@5n(cNGo95@4LN_e-MjVMsVo zi@Y%E5G&Xs1lp)y6qd6-8?PT{Xu!P?>Up%EtQPrlLB4Fjto1NA+>GaHxp!qwo<8s3 zgHuw%eJ`6OOVhas6qqkXaX zm>m`kER@riRQd+9S*VjH1eg}Pfzc^D+OV*ut$*LV;*WY?9Ftcm{fBp;AAVHIZv*Yd zP9sRaVR{}FT|*pplBOdPichH@xdCqc1OGL4BTHS)qfq;b$*yk~_N95>qu27Ue;}io zmcS(S-@;Fm=5r^BM<=eOHMbWX7swI1ty4|kwuuw`9_^)1n$6Bez3{t})UL1J_a&e* zjqN3OMo2T8++$mx7fqmP#0V@1Jlo3S>1EtQZ7iV8490OOe3{3dF~ZW)-hO?g&M~Hu z9Y805A`J>oN92^onvzHOY;P{PGat(z0HvC}Z&Ygbt3$4}=R^GUIvF|w`WRXZWNDka z(QR3W#|@Y7%OiIL1l1^4F|!b!fiSdW&-=TJT*Y*?fVj4^-}NTdcbQvyx&O{A==4XP zL!6l4es6yizW&o}%4#k;`UJ*xAj}A~?_=C7XS<@v4E`<(Bg;aJ?#hLy-U{7I&nDm5 zCnGzR*brV98^Dy<$bjX&DLx^?TD_cY!?TY$py zDA~s4%r_{jX7jP=13i3KVpuO*{W}uf`x;RRaYo0z$HZCdHJ{~82O5aG_CobDKRYQg z)vKTkj^JmMf3_bK+#laj#mW|a!*A&7o#xt%h{|?dlpP+aA4=x6L$mGuk``P$>ST{; z(tB&0J1XzjlB%2APmru%q>IDXKj9y5QA+=UQzF6B)>Rksvj=WP=tTE`x|$=xF~jxG zXZnfiq<3ruKWmSjKFr_BI6RfKgwpwr?Y@|6(Go%^SZ&qL=e%TrLFBXK8qGZSdhxKg zayufnPnzk*C`p%6J22cB;^?dh%HG$CgjAy>*_?^n|JA|CLvOX_i5}tW z#&5$*&qPShPRvQs`X)yJ`w37?bXwwxOc`P8bQn_61c}H zu*?U;{Vq+p%G+V=5nr&s>5eI*a3_!)F@BKGdhjqku0Qs#G6jS;-b`519cm4~H&!}= z0z02fk9{e9(3zcT+dW6^z-zkHiT>n0(Z0^LS7B5Dnp{pq5(bRT{>9=mx|(5_zYLQo zOnDk6HX^z<3cInFaYva_{uY-%kj($6K|_pm5ojFeK$zV92J~O`&t?fj-J#n+@i=&K z*7AIHkdko;jlmv#BsI>jM}}*mq8#oNRH^srK2nlrezomtp+%8d3%c#y{4}M++JI>%C;BpL-uT)#U-$;a@OIg|#7BQMoXY+7m!#=Nl&4=Z z-*};IS7|cqWT1xYYbxY%3k*=a{W56wk;yUt3m4m1Bv4DjEhPmFz1GidylgtKRryj> z0n$VAm|;$%L-L;8YY#(Js z`o*?stE?`^;%}Qek`=}mDr{;Ub7%-kQtrD5(Y`Pbh!vTvlI;13S(K`Oucuv@ABQOm z5l^hbo)uRi`7t+CYFiMB!bXdab+c>&jU~SL*gP3K#ydo7I%x4}buii&WlT`#Hz&SP zCjq!=CXtKr_B1~?b>yV`{;k;A{gXKA6&i#lf!t}U3WSAuY#^7dmswU^=h+eQ*1Gom zW|xt#BKjXq+?ibX;<^;56i*cPD?_XHr!uc$7T}pe^N?qkLEsn;J^83f3a?W|c@J@w zg~yi7ulPj`B-in|kL}c|rWV@J*kUVmFV3_GCx) zBR)2_b=KU(Haty}GjOP&6aC0euw2By(oAYFoOiHfqBNZ*j@XiGh5z}7?Sarj{O98) zLr*Mgg*&Luy_$Oi5yzz7(2F#|LtD;iXAW)?8kl$O*q;<5nY5>&kC(YZ14*fyX+pi% zO*>wNLCDymJ68#KyJ@r=V7Y-T1$elqvsP$&ePg;wxUJFe07WbX?Y^_Yv-ONRUU|yo+ zy^V)DUB(ix;#ZIsG#@tDgeo3BmR?Qb>Ol`ePZs6#SeBIuPr3h!cg)thnCR~U=N$Qq z0)~C+z|(#RXlSX5KWDbmo}4z>#lF&qs{-I+4)wlOi_D{ z^4G(NwWAi%ea&tYM&6I9b(|#kk@su=@eF6?dC|{i`T{o17vc5FcrPy%AH{P~6ODR7vXiRq8I*2ajXUE$%l^n#KeBX9!Pyja8-TCVn6Wn9{NH?+QwMM1ASBQd+~v#F8t4858_Z~ei^ z)BcD{#?oKZWuhxC#;@gIFfm;~mO(vuwb%Ol9`pR9+&u_YM1TRr?$yzKR~VL&(9NiK zLp_Zb>Y*z74%xJFGR zCyHWII6=L=U6w!Q*V16)AiZRG9!`FW#~9Jy&x}s^a}Pc^Oab9(C&I-@X3WGiNP_Z2 zdsLvKtKDT=#6!&2QLaAHti~7)t)t1=u|eGg`f3w?iZSIz9X1F`w^MW}MQP&ZL87+5 ze~H7cRF-Lp2c2q-^VEJ{6y#pUi}w*fG>E>xA;Od?C3dj+i4b9qvXA4xNwkO6^8QhA zVPy8|kFR{JI(_`hbCYzU2hI3BN}@Dl)2J~Tu2b_GhT-ajUH91Tb1QC%A;K9|b=dr(xO!qUv0ky^!dFk76Q<5L3mRu7Q$|^kMtq${8aR zy=WEZikRTQIItmdk|jdzuCu11!ZY|!>s{NyTzURQhL1;wVrP-cp%M01%lDT#kHBK< zf{g^Wu|XL)$$H)+D`n51E<%0sKzhpj%)zyljVm4B!HSK1EmpT9d4M`XM8KA$(QxM02@RBcWF&STfmnH%YDt5AXp z!7@4KD*O#!cX6UdLT#f`^vu})Jk_EC1Q?0TXPSGw&(#pCb`>wa@o zMV06K&%4KZ)lZ!y59bKKg7ewGlkme$k~wSMp&AoKWQcTxVY$stTAX)#c*dnRvNLMF zCePl+w_IFcTBJ_tqcIWjc9 zc8OQ25cteZ)!T4%%B3i82hFMEUG##jA5l9S`kc5_CiFR0K%m2eUmi>1tH&@;pE(<(D`KA{f@RSu*q%Z=$db&hw7O1VkhkA*LG1x7qX^@!m8awu3f+Uk*^ zeYetvQ$FY=XuhKDqjIckfe8OZk)CL$-D0){37K}~cu)UbkM@X~8d6S@KrSTY-oq#q z>nd12VAwjLn*)7EPVLO&n!NF*TvedI&{QW;`7>{TCw1kpenSW6y-En3D~{S{^>&J9 z-(q+4c&q7~o|PyX>n2XQt0gMZRWPz06$MJMM?)MvR?`;pWZ}0e;rb)1P3fk#dhNY0 zwRqn;90qdy(1v$nioW@%`CC@~1i{!jn}(t;9~H;yoqPDYzhr854Rhqp-`Um12|e~c zT($?SrOnyNC=E8e@z4k~zLtykg#K*&cQSe+inl7qha&i9qB8{#Nd54k>1W;1defiQt)A@)7Cxs2 z!H4W7sfrcSY}z;R3(m1^^PJJ;fq94853ZwJAKzR@CP~MKe#7!sCYgcqZ=2uhsj@FqQJfQf-o!uMiC6QMf4#_R*==yrvG}p0rZz$8zC*U0=<`i(z~gFG(S6M?wrj) z36DTnD-XPcI@)BWO_`*2{8C11+t?iueEc$1_N(8M1iE-=?b$a<7DHiLM|xAy{5ad@ zx4f+ef~p1L#0SDNQ4Y7Gh?dov3cmuRaKv4D!j!x8$9?u_?T{j>4D+8Yi{|9_06Dw@he8T6{Y-=E92D#bgT zHKmF7{?UAOjHq+;Qk<^BqLv9aMj!O7NBiP(tDj3w?2733{(F-zL)gZA{$l9o?ftBs z@qLXf0^&Wn=9vFa%05j8?bZ6O7}ZOm!ZR3+9{KY))ZB|z3OxVF%?}uFE6#TajB>tM z+O=lj{^Kwu;26)%_}mH&S0fcMKLkbmnWQv|&abEl|KBgahch)#PgD2b0O6j@vl%Cx zx-ydK*ZO2sxmk(VuEwAMXpOROJ8v zKN{Ge&%Z;hV!6HWqnwx;|KGm0$6-{~q3-R|H#F>ApShDHeKR`brLpN{#?A|%XY8`k zp$zW%KD*Mp-Z9RIYp5^jqts=?vT8)yfL;<(DfLDzKpS}^5-}DJ-YBq?G3e0H1ZUdZ%uf!sN(-19>$<2B7 zd~KTaqd^|va3}bg9$t~`RH_9$t?@i~^+;Y%b^YvB_#?7Fz=$D05h^}dQN5w&Jp%aY zYVGgJswf&iMhjugp?_~APXBr1Q z7ks` zF2H$-8cwshr0*Ocx@jTn!^)?y%*iMHDrvmkovnB?_?T({?B*o|KBHH~;p&u1F|0lX znzWr$`r5RhTIm>*F3WLfS!lV_w&*hbxVpj7elCBkXvXZhbd+ zEZu2NrFM9+{GKp!A|_0T{*WlM^glY^^BLM{)z_!}2J<-qkPnkod-&Qz#EMdu9ibk; zYT5EBaju8+C6Lj3*+gs-g-;emrp7;D-e11Hh<^9$#rB%{40EO_G3c#fVlBSxC3<_L z3rDhSAyaPm$=3-~RK4BGF4uNw>3S_j7{&N?M7B%PqFkGPiU98(FRzJJ z?NdXin&dX*)NtEKJV20@E}x@PBvHH&s>r@5I3~tOGK+6>@hvW6_Ncfi5$&gF+!TkPQb#fTrm)B4&nqV7=o; z*3()6zZOKDr^Oc8iG34ZuKd~skRFO267BE#-L(ad#!73Dlb@#v+9#Ptch_a8 z(2ojegd;~a`(mA5qID(d>_>DN!W({5z$dz)s1!Hzn+6t?L+s!nqGgb7Y-gd#eGBw? zbB==4w+!o=W6(3#oOu8&<*-?TdomzTFbZiUey~TZ&V?AFXN-EKbYV@yX9k zDJ=r+N=HJ2Eck4uKwR;t5Z0iu?; zkTzB~BI&zpZ%EVRruaq{V<0GrYdMtIt?llTzS`$W-blPKPokTmw=KnZ~*2F{e9 z53K^<0KaI3Tn0#SDFLp-YjB~y z%(9MUhnw2$$DCw<`IRqGy}*3GxQPQ(pE#TS^GJGqh{j|4%UL%G=ZYl9$wc;#@xGe= z_CV0^#GavT7x;@r+N#ixKfzx`c5Qi{ffF1ykKbc~ovnKem2C1dJr?oGMM^l1kr8;~ z3t(pj1zG%C{0+?A%yTv$50k#IH`hsIG(WfK$ee8&GVAXz^77}ak7L);RwpMCc>vQI#x=NL zZW|a*%iC0j1sPl%ap%9{XN(Kam?FT*d7@4U=&Se9AA!`rESD^=Yx7?t9&{g(V4Ldl`( z`pZ_oE6ND%;c&Vpj>Ge(W_CaLz_4zfI?4xa(&oDE;k$Gvh~SfGilw}ChDiWFr&&RW zsqbStn7gT3UCc@o4o=}vH)8hyOl*g~Um31eSQsDDbd{bEK=wge(}7MA<#1?p9C=hA z>KdjBOTcE-`!xbh_*j@S1Rv=&U*zneX5#W6VlRgU4K9#ubAm^qWp~anwg|C5g9YB@ zCTIMX8+I6DPf>UXRa#P&vTZCwzuCL!G>4{3?MKWTU|kyx>LpGZh{Xj2l;h7wOo%zJ z{)DrN(&b+CxK>EDK3X}kMJc@Bj+a!+tQ7w&_~*v%MiUou?u)}a^ANlAxDZMrBmH8m6VZ*`~Y!Vm%&hC@yB&#U+>FV@W}+*{V)v>1lyeMMC?UwJVwA z6FR>qsPnuVksOC3!1;cB%f~{-;m9YlBKYQ>zwpoJU7c9;G)U>hUlo2!l%qn6|Ls~T z29?q%$DXlm2gk?BFEB;LX#;0A#dtb$NS^;?_C%}pzNLdY>bk1RuytkFFl6yo-pP9# z&8FYIyLlu`ZcWr0xQ+`lzbygG)T_Jr><|Nc5S1d4O7Km@-)8JEtnN{19_xdbRrkn@ z9(wq%g2%D518N_>hY=KrjB&twFLvy_f=CxD&qUDxo3TQxI(PF>wMPG+?UrSx`B)FEVlFmG$N{Bj2iqVAP*D z-|_KIo!i_v&+ib$aY@k!hcqn@VmiCTKnUV1H(7oZ3cBhuJSI`8PDCGlAjrhr0)-Fp zgncwMxa0R%1AyWWt9sH~icWeKCA1x+Uce|0L3irmu~_w|)gNBplaKk}P+LXp3_f~> zo@jc1G5C2`T$_KWdpt{_O1#vjo8OX;gOO+CgT1GS^k5}SUfd^>^yhY3wS(u;l;0J} zjC-WaDXmY%rI5?Z`Am%0UA2Rmbd?d3F9zQ0wtsO`G(0G5lb&ExtRZQViYO_k;(GGf z?uRr#3W~Ng1rKG7E~9dbT>pEW=|$f{<$lz3VY!%Y-{;T7N>D$O&#+p+Df&AVRG;Q; z;#}!DYB}XK&~lo5i}5@$UkkgoHm^%~lwb7Z&m6@a|HntaRuqr!2X%#B(-GK2BRK9U z=GjmlXtmbGD=_x0^1eHeln`Mu^Ne|`95#d6t& z^_5W`Gogs?5if+{4F`tR2icFV@0}|j7gcU-bE##u70}qh(^;(wpt|XL1)kyrdSGs( zsIkr?m3f89mZ=xTvyUQlPP#+>eL0miaPr{Z_;d7oOD*bqe@YC3e)s6$VqG4T`Nj$q zx2-YI@bvSsgC{3rUdD74qo<-+o#o>Vtn(|zL7`-_;;w3E{7LZe{*UT#qpnQgx-X;V z9Wv<0`QLLBAtUN`^mEB{YCiU)=Qs^Q!SC{%MdplBCd-YCW7+&e<2AfV8HEfiV(BD? zigVBIE%!JbN}CO@HNxo5L1Vd6CKe4=Gt7JU50KIKHisHoZoMlk1=dA zk)rE@8}$NlhMxP3!MO6#iI1`CZsM3dXUT{=V1uCp9-Yx$Q6D==Tv=9sP^D@LrC~_C z!8js%v}E`aW$$bOoi`@h1cz-m+5v-4sdvJX+kQCkdt$u(5!^(nEJiI=_Ueu7*PDty zOa-vi_v7`PX(Xn|i7NR_V7s6u@cF;hrylVDgsh>}jlJv1w~F>1ohP3oa>1P+x$*r` zf7mE<_)=eLn7~Nb?U}wp6;I7yx~l589RGtw!1`{1`1PLl^^!r27y2}*H3xDj{(sPj z_J5+T*Q-xfr5jlvvzY$_Al`C@1zhPT5CF+n?5eQgNrn0U3BNnCR0{mhSOqL?CSk)r zKC;}-d3|J2`v*MiJx2R68w%nE{!-_kO@#Hx|NCFRRM33R%1s0f+&kWGcHSf~<$ihl ze>*V2LHxd6=1i2h^3`JK6X%P{=gbWMfF35C^pwzD$lZy)a58o6b8ZXa1g6D*;0sfj z7jg2e{oTCZag}vKRmNowCZAvKe*V5}s?AAKte9{m8D?lKOE@sp#Fm z?+pe^`fmOG43A9k(bYUp<(gZ>yqI&I$^7`I5T|JRzqgz`6tz6l)_VHt*Ke^OM!%jq zun7Ne^uhR(G3mI60Bj@$l^PFP#`13jQ!z|bfK1VOiNOT#FlFH1vAA|+o`7DF+=Rbr z_84WHOckhMxizl-x$@Xj*z-wC4R@!q{`Hd~LvMdCaU;iO?{dd{y?)ZW70<=%W$V$18ljT`O! zd8=(tj+dx})IZBK&a?mUUD*5)O;m+o28widc%>Dbw3_SzZhdpIQF8{{r1e+5y?7@& z*Y~u+%`;Q(^byZATL-!p*z4I-xFQTS`dx9#*`;qsM%d;T<|`-M)~QFFEJ(@L&B=RYrP zuE{UB%5oO$oli>#lIES*+u}|Z{Jt#Rst{%zP`i%iIG}Pm*}5#B7bp)MgS8Ac$Ub_u zBt$}=TV}a6QHTJm2xr`ny+b(y=0ZZCG#I(ET629mnN-GtDr9Q!Gb62-2AP)ciK$8%Mhf`U5hR=?SDT^Bk<7IX}z^Q9(f+n?(kiH!>Y1r0{XjIoUqHRA29c zOF%{M502pIJH0)*P!LKUCR?!oCcK{R~&nTjf7nUGR|2|S0tCR=Sy6JyUedgBDr&@q^v0EM@MS6L-@8L;ee%q*-cVaj<=4_%3K!p7&Ty5RC$kfyK=Yq-`Hmz@yVUYzSSy zg2>jeQ6H^(O@_|D*ZdKzu0-({WWjfdzCfDR$#E?LLja6o1#ksi5Xg}@uK(l7vxLFA zfnrBw<}d210FYm0tnqF<*>n8UYZs8@IfWVMR@;ebg@`041X)qe()JuP`a-Zi|6ac# z>eaBLX|xS2iKe$_a~|=i9n*VoqJfIg_n}58ETe#pkR%9~>dXD@r%M2uv34NDE1w)mGN)w9n zcRb`)@B?sTAb`mI2;Q6o&Rx%0a29tVL)|5N^5Lcy2aj%RKy+N~taV%@(4GPV&&FFM z==Ap;-_QntaE>@q$#3r8)df02g37EU@Cbh2Z|8Sv%RXhq>`UR(S}kEP7Cg| z>4@~x`sKQl&24cvOvqUwGr~Y`yBB~Xo%o{P(+?|sBFc9`apZK1{zPGbd51)DvVa%h z*xI94FneSj?8 zsPldmasd-1!DSoBdyfQN>>LnOt942v0wE{VIBIvD0s&2oANta;07J?bl0FshN{Wgf z|L1to2G2HZS3nvih}7|;@~WJCb^D27Xhy~*NfjEC7)JD7a}us@jKoC{wcUhxX05&i zNYjQ9GQLI|VY7&w2~u#7<>b-qhi}1Rfv*1tTKBPBiZ<|ihzETx57u=Dkw5t3&>M{{ zuqxKd^gW=7CZzuDf57XX@;GSnfO$zlUm=1wxD8Ci$Rwvoq?TGYqQ;@lyh5n?MBfKi z8FYYLyVe4`L2Jqmhz?VU_&jYgEXB;uIw+}Jn`uoSDKEVr(C2gTBAHj|zGFNl{I`Cb z*;PWW(jC9Vi^e+?crleATRb<)4VX+OeihP>GYTLy;d1od9~%rSuO7JrR1pGjP*=JK z1+NJv4y?L=3QC?#$g5A^(_S5Hwcz`-9=(fts&3P%ANUFLpaVmZG9`&7rV)GPa;?HO zA#9!`INaf<(Q??A{+|W4(hMf2;vuf(1DtzZco!?EZT?trxc67{Niov(5)no1Z3>G| z2F6!`(>Sea8^47a4v9YIal|w*f8n-s&*K{h?H=jWymAkz44^2|8f5AGg`r?_7cw-0 zQAB*3FcC>!5R?gR=w+}LK06qXOkqgv1C$X{uPPS9QTH;fDAj;#fL;D zbAS(!2bjR|;8;*hZzeW?Yt6*~+7;x`KW0wy2WU_UkhtBxH8_{%JV31Xm&Z2;-H@-+ zu-&OV5IYS?t1afy(t($NS!r0_f`V^;2}EgKZ!7HLY0F`T(F!XOugjkMlx92~N}!-d zho*pAz+nD>j%@3}F_$(Cc z@mo$Us?1ad{I4LND_}sU53jq!RDOHe40j25LJq)0*u26t)c^psm(;oRomh5Af`PN< zlUG*om+c^uNVz@|hr9{HA>CvoPVIDLG6WQlNb(`+L7y*hl$`l?SO!0`ab#f48?o3B zcNH9WqNdqE^G+8}f^LxvrB3jB(}+J5?dn$GT)t=A!RW<-=D$qhh55oQ+H~ew$X5?A zZ@{E?a4-1sd24HrF3BD-YN)kF^swjqzIE!3<@~s1rMXq>X<4t31r!{FBSA&j5rM{j zY1;h$TWyYh`7dGBC&;)Ng5xpCnwOa){-drUB_mc{?YXW%9DL1E{)8JY7IQoRFEm^8 z8*IO$C4_E0gcN^Qp5ZPtcU<+8MCZOYpz54?8Vju$j!J1^VJ!7QtBDYwqv13EpcyLB z&<#VKvI!q%A>qwD9c#XCj**OW_ROY5QBA=2P~w%VN`* z`NIZ-LYl?G<0)U^Kt6vywuo8a?lAa^vW0=0jZ-m*PS?R?jY~(3ECF1vjs5nV_rr30Y~5ZIt4ci?Iv@&rqDM9^C+txm6P4M z@2o7bEeLKoDbXcbz~AjXZT6>w^p`7;Rh!FEjDJ}G zK1jI6?{yaq)Y0R8o#J)--Pd&={tpzWl;zceK0dv@uns|L{5&>o+t8FE?OdOt65S0p zRS_a!u&CrzSc^=Nwek?bdLd9_22I&8J4U@gWn)0G6En}eyda&i(aj0uU`g z57h$7axDm?dTp8}y0AR0^|W0=d5d@P66Ys9HSaWcj?viNa^#^yI0wy!@C{4)pBoYL z?6i|-e86J4&$tav@bUgw;dp7A?>%thhy8%08W1I3^JJN;SJoCaccI`bfy!JL_^$4p z{(cfM(2!HES#CncXr_DL+qX7nZj9*)5xu{6EN>sjem849X!4u!OM_KwbiA*tj^Ki) zgYTczxuQm4UD_<`L)`q3Gx49}E}}b5>-|$M#IQ*?dH?6$9jEhx>b*Q@&ds4?9sO}t*Pek8u8$rV>uF`JtxWF{?wa&SaWQ9N;PMG!9t9OCt6dj-MP zWrUNykXB~hn?MTQ1-qARX3q}~i+;sFu#Dy3{Fbgh-5wH>&zb&U9pb*S4>YX98VH9n zn#Vr1#~((z!fq4so%((M_>>yklY0pWZd}mR)xUEAbG+L_i({gC;M9C5$oy_b@Lpc~ zv32XLOJB91L?XM4dw+b!YA9#ho|jxBSQI!kGM)*vUax2eeIrN6kp#OI7q7%0%7C0N zkOT&FfEM<#bH~g15*rNbVr42)X-l9me!L=b%zZfm^l>Fmap-^j=_XiG(11!t#hN*i;LOP@DX_H$XK_) znme7Fy^>6gyLs4mn_wJ`3Wq8ATeNBNQ@aMs*Vz*4KWZFhuhl5pU~N({@`h~vw7p2c&DsRvir z3Q1XE;}=u8544=6>R3O>zi=$2--QHO!?}-^FUzKRek_#eHL~F{ylq}U&C;RX4d$?l zp=AlhBb>Dz_!%%ck)9(n4hM#!zEy4Lpa0j?SI0%QG=9?|-3`(p-5@C)N(vIvEuGTc zEZs_{l!So9(p}PmlynJ7H~5>q&%K}bh5z<&c4v3b40FCIDk(-3bc`=$*duT#B^T*T z(`M|c;RnYFSF07t*(UJKa$#yiyEcW+4-N~y%@oSvnOyohTTs-@Gww9Ki?JQVWeOV( zhd76_zAhV%Pr}7``Y5JxCHDX$R!t2=^Ab@l2zq<*jt3brt{aE5NA=oXeYF4W;2H{w z8>occ7h3SY#k}wsGPiyyoEG4Q(%tQcd0f82UqHQwPfc4a^Ya)DR9GcD4`f*jgSe*? z38Yw0<5_X^Yx775J3JI)nDoQL?bVf`n17LYu9wB3{JxOiT9PKP63&P4dGTfHZj^hV1M-|}C&_8(b zTA{6I1v5>-K{-cSvSo}HhDXi2*ci`8vGm~|P`OZS*l>PyvzbSZ?F$*PQ`6-O5X{eu z@<+kp_M|aeee9epbIRksc&#N$zS);WTMuXRagwWKwiNQO=VOCQo*qo+)rwy$v^@WSsmQE07g zd5;eg=x6<3P)rKgITjQ|wJofFu~29s#QsxMZ77Ha$#O=UGv#K=vC#Z;SL2zJF2~t_ zJ-8=%s=_{*__CZPbh;t(YR{4;r^n{r7~6hbul$T&31S;S09KQj~P zT87Imm0kfisoDbqFx-yBvcL@7ANtw*$mV8c|zG=V(zn-F8t)-vJcA9N<&Dc zq;A||$~Gfsqz#9|-cClg6~r8ZxFHT;nUHke2W?Z~tY%^GB%(SOguQwdc(!+J)aLQ) zdk~H1+?ePL`P0< zR&bjNrJ}D=ooD8=2yuFH(^}^_Tpl0OB*GD2uZkt z?^}m~YiWW;S?h2feiT08Th08*TWQ-bgI|g)x?E z{bWz?>p;aB8dh`cWpoEuir=nhA8Zl5>4bJry&)vtV?4vy8|NA7yl!yx@**e!0FdEp zVc&8~{TS?f*rKoigjLz^4V}vTyS`2OJrXMAP1?cod z6n-Q#9Uw>`?8qcIPvT~FBUcNKC0Zs=HM3H+iSIjlTA3hu+uTi=ac?G~o^gS=x68@m zgDIx`QD8VuzYxcMgnI$b&kcj{hx0HJJrZ{ZDZdvoTFFNB`m2*~Uf7_XYgCtSvKP&@ zAmqeMqPDJk(_-a|OR=h!2G#)5N=STx+IbQVg<(8(CMpEuSJF7WPl!R=mw)Az?8-9?;-`5X(#2W59PFUSq0@h_e(BwG37K9 zPDEd4AGifFN{`kdBT=8l5;c}*7D4qX2v(t?!BYE^l460*>v0B_q!?m610_S6Cj`By)GQwb76+Z5O77s*htLpGN>*9VbUAju zsmT@mn&B)LwagO`5TH4aw)u)Ct89#UTx*LM(TkK~Ah`+Iet}z6mf<*8mx9HAhdf)hvKcK~TTy{XmpA1VU=uGd+YS_MOu$nUC)q8c*h!{{X4aq(b~V z#MK+LJyh2|J~PUw^yBpbhKmK+DW**|V_`|F9Oswat(FpWPJ)`*?L5q%0s#-OL#ykY zNPE8E$8*JfYM(sr(?a<^!~QTM{?8(;32%dOHUB5H`+{F^Zqh>$m2?yF_yi)w*f z2%;Upn1QJ2%8ww1GAVrEh5I?g`*$CQ*puhJVBgS{R)PEG^G?n%JP@M?opgKExmk4c z;(m~wnN+tTJDN2~%JkNg$+g^5?-QC995(J~c=sulDwQVda}T*k zmUNOC9>;Q%3N$%LqbE$3qExm zi(%p&37_b=>(FJF=AOKT&-f`mh3)nl_pDGX*Cn9*20ngk;-2etqLfxgxC#f7{I2jc{3*^u3sGUSbNyo<=io^|=9*@toOgxx0} z=@#d9RK)i5&}n$Yk2gKO$tS;3#5`YlWXN|S6qYbGEcZX&Xxj9tzK9RDTph-(xw z>r-o5C);Vwyy%L&VUdwv(LCeBq1AUWKOfZBV`XA<$o|H=AjaH;Jc0TY2c&HBnJQGR z;0{y@n<`@DmD$7yF(C<0ny<5Qn6{m=4iQjF@r!9>#53#Ob5iEIbX>>9RqhRVxjbZ| zH1}w=Yc_ACv2kt0mTncEF)reD7Rr%N(rJ<3z?W?8B43txDh`e)Zj1d0KkZyhJK1o0 z;kj=?k=$Cosw;X-x0=M4i3natKL-SjJI2IY#R4V1@ zsqq_Qenw_5)K3$UuDQ?Ve~u9PW0qTN6BX6eJ17W0>VqbM3wo!oj^h=Exf?{}BV5T$ z#{N?Av+ML^vGJn?D!aD<@<+kO@d3-!4<6oqSsu_SY6rMI0;&DXjMCd9qNCX7F2<^+OT;+x$ zy4(gWrNEdY(4#4}+ElWx&?S1V&1t0l?F%8+#mW-dWG1YFx`6TyuQ?EY7cl4#r{GU4anUYrPXEUms)JQm9zeK6cyz7Q=4TU{ zFwLW?^$>p(^rx8%ig*w@y>;?Uj#9b{E&@Y;)u`R@xIX@pC>+-gnNThB+W)2K=kE1k z1w=zk+IU;h?SmPnhwlE}qLsYU(K(fy|1t7Mh6rK9Ji4dfmy&<(gySk)XR)r*)7;Y0 zbBY#QFMnkTBei}Heg8b6E;-0+m*9`ZbE6uqgnyLA*!b$1PHwIgAV!kcWZZ3iAZ%OH}TV%z}@h_-#R9kNMT&W$f9e2ysW(7zsDJZdD4M(F+G!^LIU-yht7m|Yx)dY5pkJBk?eK3TZbmJGJAv%pzQJ;$E{~LpgI>LCPWD7h6 z>Rq<3>c4V}Jt_Q8mpFP`DD3eYjU{3gH=?=@!`AOa|8r!CF5knIEOP1}ze6f)ottItmofLA zYtrE8Skw_O@ouu{lN$>x6#((GcnVn2 zE5u`hhV{xQ<_nSZqEm**7_>%se7^y|Sme{kpR0OZOWKrye$ngQD+t{ywCXIsIlE)* zT-X|p2Qg^!6_YkJ^Q8)e`&U*tnn{$<3T&dX{|4-K{A{^X{WjiqwY}Z`(Oq!4ZTIlo zw{MT%ahBKU zKNu68$9}>=ceg;*0zk+ z;q@2q^?tI-)#ZAlH9584=m-PjK`$%?3f8$rsj^tgTLzuBOOgDBV=(rkO-GxOHOE*K z!7v;MvBe*lsdZy7E6e6|i*0AUln9MhfiH)i9eUie4lB+AB$t6M5bgKYn)dcgt8h_) z>Ig^>bFVUWNeWYH=ro{WE!|sDU+!tCYolO25dSLj!cmzamI->$Yb3X8oUKc*SsC`N$_Lc_fFr+PHK1OaTvw?>bPl z2#V*K?8IBiIU!zhfwT!UNGStZb5*B?69O!x_A2Bq;o* ze+ek!Qm-|w@5EV5AH3)`Lwok8if$KX%Ur!+?NaMNn2W7I=@RBG|D8L)q4p7F9mqN` zNi_y^F-IE(uq{HZEQqg)3Qbq-zlEV$y>b`^)nb?2+o@U~2BW{0Gyrcx zriSW`ijIvtmLNo_Wl`n#xzYSqkE)-h4<@EqmT}u*y~+a6&dij$sHZJCuC#@x>F5tb z`@SR1wduP~by@`JyE<1}_en!sxlKCI=2M%ZoJO?fH&C6DuL&(HXK%mKPwIgwov>pe zF24IgodB9EPo&N#SOTBfgo z&4qod`Tq3bW!)zF+PFCISXdqF=$ay*S(vappSZ%Rk(PT6?CbhZTVYXr*CsCkGdrBG zPJ6^t3{*Obd!5>UkH2<4jQ2#7^01}@7D;T3f954IuOG}W1M9I}o*%GidGT9N<~^~} zC(nPch~8g*?G(6KJAq|{fu1h9poy+v#9k1SX0?hxfJdG8clV5Ytr{LC>=3FU7CV6q zqq_iH^0M@}L~Q-*USVv!8Pf5;=hu7IM+(aY3Cfk z!g32j8lNoaT!e1senP;YrNc>iC73mQ{PE}g0I{OaoDf!psM*ae4#%7dv5p6O zEt41y*M1G-?Y%_GoM&(~oSzA#mQJ0nDAS0Xc^&8US?t$-XfWLsutm`TiF-3F_(_jX z3{$6q<++iv&J+V7+8rB^PZS0h^Ax3`RRiub%&K<5&WsB}lIzcq%E<-AFOY;%rn2}K zo&Wf&-U?QOUTF*ti-C85{GS*MOO^x@h4HTZ*FuXnMb5w%lm$uN2BIdO5?7$Djs&eu zJc0QY3baMXYvBkl3D#le6!!adoWR->oI8Qfi@xp?E{U#lNZk~@$7V>RsCQvuLfQ#+ zmVctf@-OPt@9t+R>TFDGAs6ZK~3;K8UZpTzJVIzV#6jIO|JL#qoNZ|x^ zxgIrsG|SzT!I88;!T*tZEbSEmGe>f;cww*AEAwv!id=9FB={@_onea}nnY3=`R(_2 zg=_=#O6X<*V;Rg?%wCXxx42+_t+(}*nN;R4@Z*rilNzLoo8JTT&G@yl)v$a#9*fE( z9kYCzcPo(kWCfd^fI_Rh^J@8`zQ3VDNqKUI0MC@9* zQB1xu+*ROCs|9|DAEXSZ<|Z8}UV^iKz_J?LkB*XzJPgVxEvC?GXDBs%C#ZtINlD$t zy`A^Cpdd0O77w>SUUS;8b|z-_c#P(H^<9JJq$Hu4ZfsBJSvWg+F#EGs_JPYy-&{+2 z1$~|QH-1@hoIVVhf7m~B9vN-3rhLjg6eOoBic=o>ofO%WAaVO?1qh^0egI{}9XmN< zTjZN%{)vrP$19C2GXK}Po)h!H`jsOWp3&cq&L#?Q!TL|dr##WzT!m(_>pohzD6XT!(hy53-UQylHufm?_Ol_$d-NMr^w|gSn?yXVs zU7SU{UtPp*W>YFg3J0w%HCpuaFbA!M2xMwJC)|qu+Ppn_1WK$CKr@QA#g7QbqCAbI z&RRLU0MpWXie(Xu?FRw|d!ig-&b*4__UosHM0 zDcgRTMMFgGnrv-g&eyY+X7=m|AVae1PF@zhH*WyTyW6S+xh&fzFzf@2qp3w%@4Tx% zO~*)S&YM%Ln~8d8IMbLRPD#Y_JUW|)a=5yrnPmuM1*Wr;e}%LVi%;s1Vo~yQ#~QhL z4l`zuJ`kvhCH2e65{p;bCx~AT71Dm&Rfce8j(uq32jO89hh(nfUkd($EV4uc6)0-z z3NU7R8Vg$MD~h`z9Z19ZhJ0HytiB3;Sbvbo;8UygEPt0WVy{6h4e72EPH1CcG*m!b zcAm~9siMxfTbu(e9cG-}Guqp;=d4{y5SEKDCy8D|a=dq?*j03OGKz~}Ezyzk6 zXPq3$s5k~R4Qv3GdLkN34|}qG_hw{`4@HwnC5;g8WLxJSvHTcFjGoePr|yQnktfB% zdBVj+u6jm!j43kP)xm^rPb$MtxbuR*h;cnmOLh7zG%p!y$4%RZBFP;lX(YHQc=L?= z%?B65?8>^T?*~bjVxovB3PgsK^=;vD*2@Z@qF{28*lE%e-;c%Pszp@@yE z1@(_-xMta_mKQlj#Ps_K>sVp_GNu!zz8#BZ|tIM1_ zzqCCGF&8e5D#<1ymnN%(1fX^2@2MAttsXWQvn!yRpedaz#jve71Ay!YJi#Rg8oU_; z*o^#ie(;z#K*M>yHz(ghD2}4#OFL_O-#{-{(~F7wB)czD!)EdcDwU%tBurlEtx5~t zV#-v(gPP_t`LPuE?rsN zOvgu$n*R5CQ1WmWUku}RiyJMv&bcOl(WzpOC*}|@7|~P^f^N=SHKgHz4?ax4!&Zyj z`uR^M(nUB&th>h;1-hCsJh9Zbr4W%m%3`h&MM(Jb5pH$}MbT1`HBQP*)CS2z62E*K z>y75mp0F!a%-N3OXc7?wbF$!yRVTa0(hvq}UH#?odA)|d{xkle|L z^Yy8h)oJW^NF54z^+Te;~ccl+R55g!J{w zTW#}HS=_mS0@r{A(A}z^GtgILsutFZHuSB4(>xdqQS8IHgjx|_as?pK?{xG?A#s(9dBnMgwqTMpvnq~muzD=Z*bwOIiF8O{PE zVmjY%MoB~@TTi_0Rp*oVtwbqCCmn<-Mt_O_V|UBl3X@{#&vCwt!~jRHESZvd&9Zjg zyzTf-s2PjS2PQhaoYq_q{&`^ql}+I2EWHDj`S=oh z-`NlK$|w`BQcA47UIe+;<{!^U*__v|lp<+7n{$k0bqF_r8X91af+y=TpB$U?tiCu? zL3PtqXx-E{@}tBMf6oc6Qbq)+lStZIjVVxjTYUahKri;@btySL^jK450spENfq5TI z#ML=OD_e{}71@kb*iX7$^=JFtZ(kn2>mVwxr^~R-%aU0HGHOJ2t?9DD7n;BCG^7KS zNyVhS*}1QixF1}bBWSV+o}f_NBD)O))tOGge%d{!&s{U*5aYP8DD1d` zTb^%RSWEaOHD!DWw2Tei#5x#O_ zBB5^4`NA4-jMK zZ(ms-sy&G0QfiyMpi2nv$5hzn83XsdjcMlDx~aAKrUkV6n9uyW|K49~L5>2y`e(XU zusY-&bRpu5rHP3BpxGkh{VM!wNK8|D-@KWJTFe(JKTtJEBj2KyC$Zi*Z~O(BI3hG0 zb0SeIT6qX%hm@+e0PC*wTL^ZL3X4G^7GQW&hPUk z)2L?=y6h?>#CmUgZ_d})Pns{w&3}Wje2Vxsv&ddUktH>nsp?Rqc!ZE#jArrKY#|RC zNqqSi1%_}n3Y*sx;?XYev<-A{;=J4p?P~-_T*nFxByzI{7D%HIlVg`fy%Br*gZJx5U2tx(1lxNe>Y+I6WHW{K+cK<8dZZ82 zpQ!c4-e86}zq5NO=H{Gsf1GH)73Q`c*{vhOU%cU8(s1hFG4?CHoI|1~&L`Qzx*+`P zsGAo4Uo%y4BOdc&@rWdsHKpVRo6R-6T((GeVMT<%si-o6V=e^~Ox(4%aA(SYEX1p> zZHE$Re{SCr=ZwCMh+IYAX6@`lv|F|*hCDyeNBN`?K%Nbed-s}!9v+2@gH26!4bQdD zs~n5}IEgpu>V^3BL8y;}xbFp~)_H}OiX6EY>;8-Hn)r<)b4Cx(NZM2D_lD%?y}MrM zs>>^HuN&P-9B=16-luuJC@SU+D1Mlf!D-ZgI#iT;8fk24`r5X-X(Mf?LPmZoH1gVp zy^u#F?)}&0kL=S?371zf7yTUqp5kW>IJeumVgfA53ecFVXUuPMwvtKSrm8%g+RtSy zMk#zy;p9-w?~j!ZR*&qSJu8h@r^O&nhGbkD6ar_MXph(leL7_!+Kijyr z0;foyn)_@y zC2mh9m1NY)iFhi#B^ZQ^s`G6}D01=Ka;*ggf7X>!LNVsf(QH(o)x23-M*OA8m}<`q zaS-9wcWge$p>Et4L(-=BXjQ$wa=QDyN^LjLfOFp;+%$(O{tlj#IpmKIqF+N3Mu_iP zkj=;AV&^eYqI9xXo=5qU&XFeg3A%{qj6?~qU~>N=-~W=C$7CE{?)<5^2*SUoInYhI zqg1_$&guI1@1U|lKZBawaK;StPF&@$^TD}Ycs4#r&n}rCWS(3^ExS`^{t2EtTgV=O zoe_LO5bSb`J9vGg==b{H=WN6y-ISpm$CEynp=_k7n+JmnqUR2vQ*V?!0x49IrY9Qz zzCI)mjemuD;Tru*!pQ$#Kfef15d`O(B~o#y(^Gg+t$aOmgN?rnZ|@0G#bp^D1+X@9 zia)$bYiCP5lc0hfaYkyz1@Th>sNWSwuypAutmE9(NgO=>elDP?o9kbS{^xXOqz~lq zKk|64sdUZLYs#mb*Z+NZfEGNj!ax=EI(XBM8PyjJ&gB0*DL9@lgQwWzjCK49Qx~y% zfX)_-$Xo-{`Uv)U2hmR=qw$*|e)tyTL1+||uSPcEBUKSu3VE-m=j&Zp{$p>zO7HKu zrVbbO#k9a^GXtt?#<1hIhogE%BT3){7 z+G5Lnft>F$d`vy%lEZJfYBox(va&Bu-=VbnxZoP{4J}7uHg0{^HX3NdTdcn{+ChWZ zp()m|*1UNHSJ1TN`fSJXE{l1UC8au=<`cOfcVnD!7EoT;$W^ID#t%bpNG1H5hc(nF z8aZ~#v-?|J)*p9`1F%7>$#|ZE#tu(+=};x#ABrSj_Xb!*h2-P4xpmBMf3TLs2OTDy zySF1SQtOHhOudLGUj63Q3RX{dxQ$@Vd=9R^Ft-=XP{-}MH8k0FwPgzKJ+XjRI&)42 z7qsrQ;W6;NCblGbzyY|B=TGwlXON8@0cs3TZh?&{(n!W84GeQr5ar2wuk}HB88(1$ z{W5_KKThXfPV4YzlzvA(V|1z4Pw8}PhdCMH=N}s4?QS1V%4m9{10{H>fJ+0`h9OAV zrLW{pdiT+>m32&HH`}zI=uJZa!&jT(8Hwpro^lGqCH)7UiA>3w&PN|FkY^z=wSYl7#8gs_r1rMEk;@vawQC;(_YbE3c)(C7>~UdWANQ0jK{!0(DmDyP6b96*QEtMBdyP-yl=ub1K!uBQ&E;gt{U`d8qw;xikKO<(VpvVOjcy9PC+lp>AB~D;=7FRdUE$>-~0eLw;s#Y zi3U<$EElXkI`jZu#q#Vou!W%;2R<}I(6K@fM4^5YABlE!DgUX z7<#KV^^3qd3J5U+5u-HoBlk zI0-JhNWdKK3sT+g7hEp7?+f*{A)_G0*wsHOXD&I4y_$ttMT;hNdy9|2WTAvP1cGRN z!M$M*z-ZGXYv_#1#gcjasguiIc1+FL9uDaoY8`zF<+|De4Hl{XEX=SN98+L~6Lk8b zsrm4o5|?XukT1u!Gz(I@z~xqJZ+{8he9OnKi>2f7B3|IW{Avr0pB~}E-~FCWY7sX? z!Os&8n3JGzfee-|;yc{%!pz&V|Qt_NT|cx(wL)+ppng~im2jWW1< z0G#$C`#(i7;2Y}&II5|87(aRu{^fz-3!z_;w*c{;AchAs&+D_gM*g`R8UcKVc@+PB*#S&N8VtT2N=?doQSL;&GRPnPzzV%A3 z&L`|oiQhWE*i^|2Ma2;`AK@$DTKop=yx*C*sKiJ!2D+P3uqjCaRDeoBM=N_RHMo!% z%mRNJjN`$uc=oa}bB(;l11y98n9PP>8HhU(za7KCr>5R!Pv_1(AOB)%%6!AGW4C4; zFO~8Xke;U&OEayoNZ$M7@iDks@U;t?htdtA~SX!*}B{7%aQ7LgB z?|%N(7sbSszX0I$*wqZR&t5_8+;;;qab@i7K#*uh8ow4XA8Ah-4D&u%RUL;ZlHw9F z6}-ZvLvaPR=Gq7H14U3vZ?OP!^~Re``xfY-J0I+-;(1QU45f(|&9i@eg@VfsQ9iDZ z5BUm~yLE~1)8`il#+0c#Pcy@!dFqd%z9Alo9xsMH9tl`&3z_r5np#io#vHZpSly-H zU;n$#UT}|GFE_{~6UZ|`tuO7jhW^bP%|})MI`qXt_0;rn*yPhoj3B^B^bYhRz>jqs zMc)jVg|svQ2hU(3Tj(VAvV<8pjBaJF$y6A=Y)L|uoPQ2MBiEKVOCl)=eTQD3c3_Y!eaXP z)^Xz$n?NqwmTNyEvU~!&GFvq?`D8|X0{&hRto?aY3OLGhdanuPlka^ z_*uWdlpR4_GZ9ZlA&rPE<3pzTa3}mOOV2~a5gR03`lgjTse9N-NBiJO9+Uvi-5*^54wesoF)Eh z{xtln8~#Ub;G=h?%AlM9H*LuTM|(V8@F8ILMs9e@3WXM)bb`{3B`--p)yog^MWH;4 z^$pa+%&~F_PDU?-HEzVxZr|sg+Vs_fHU0Y{FAiB~u24-k$Y9E*avh>=!R&d?b&R2q zABrc1+SlK>FL7=xPIIXCmfzaNG`$}!{6}PrVZ~xGFDzYbP!5N^qbi*V*nda$T9P-; zYSXwX*RPWeynbyaNMH|Azqi-5J8JCV*HSZIC%&vu)Tb&-&ujXLeIuCd|NVz)>KH;Fs@lsIluS6M{M zIgRKKLQ=Xa(Q^{iMz0$*9{U}(6RgV{0B@wbmwrsNE)A7|zQCq~@zFa1b-Ph-qDbIX z`?-UiwQL9yf}Pp6!%Sg`oVZwDJcd^ne*S%Ye^$)W#kVa>&q^L!3;5+Q8-}A?E-`g{ zBVIqxWm5%FKg0l^)hU}yp-=?^5_D65`(yg={-)UZ_+Fxj_Vv&@nHU9BOH8Q8m4Vyp z^QJnM0`dEo{3>*Z`in|R>m47XFQU;ew=N|+M(CL_U zsdpTiPb)?`Or7E@*EPtoJtyQ=j?@a){0yyqOK>XPjmy**^lHlYiPrN&TbAMLM7D0< z$*vc`@ScG-#is6(TePJWs#n?|+CEA-?;-+J8m*M(&WTg1n3^a(DXS54N#Zc^x@Yi0{%d`CAxRTJDNV7b;S zyx`Qc_jD%T2_=hG&Z?(bOl4qrmBMreP_aEd#j%|AHqG~cG9rO~MgZ3*Znbth+m+GX z7o;NYDr^X#{DKaU@Lm`c81GHBpDqUTn40yJgdr(y5EP+Y+FQ7jD%9k*zjVBG;xQST zc%&ZutzA6$r^t#Vz%Jmlw^O+AT})hLGmUzQUTGZ6tlJ4a$9>jth1O zHQvh0DT&qBEL*H*P(>EG)QZ$}q9#8j9=FOm=W(y{-jAjOZ(oH9X?+sWgU8R(4+QCM=$t;q@O{BzM#wC@skB~_ z_}$Rj@D4o~`q{mzK~6rEAC;H;DJAFnv21JNy42Xw*A>S|DzA>iFWabART(2BM$@2l zg%XxGc~4l8Dzy6a&d1A|<)L2I7y4=%mJ8wQLV7K};dI?460uPgpDq5H_z6$3y``lw zB#q~psTa>Qi-i)+Z5j&}2kxsKUG*FTMUr%!uUUB?zVb44B*zZvD{#8a}s>gs`%3 zOc@aj1;Y3)pXk zfdY%eJ&cET7({`InDdu@YXM z%IrG2Hg!@a@j*PO3fEJ->(cnbJv0*pYKb@939a70L7tw;0xR|G3r;US`CR76Bt^j* zRP9{>%kvuVzIJAXd=WgGyay$*+8t7zirIrSMF-CXQ&cVWu$AV4r7pH+fZq3bE;(9L z6N&NY-pe6Xf73`m=?csF)H{UhxW#2OCJA&FMJ%Z2VgB3@20}8)ke$8-kbP`+LvB}P zTENCC^ms4`;TtD?{PXv5f{>Z{P`!giU^wp*QSF5JJ_24_I%^80D6T5|C57i0x7HpI zL*&F^=?_dy*^wba*za^%Gzf(Ngjm$Suc!%Z;V(;jADuIg!cDu#2v9;~^H^T5%ahet zHB2j)F0B6ra-4{V%bycHDPB>>7Btw;x4QVWyf9=?xN`A)gU`c-rMN8CwSkaI^oUUs z(|HMza;QEtdrL~Ou60WX6*+s!w`8;k+E3rfqjVgzt9YrLw(@X7u>N2_4ps)tNmzUyJ`Uhw~D<)E%lt(?D>-^Tzhw9uS1db!xbRpb#>*{t{FC3ei zCP%YLhRvVJ%MYl92+!#HzSIDi0URl#j))a~rCv0@F&| zlNBsMzUQ{lk(`X<(FWU$&Dg4!i*C$(HDlUIjrJRP1D(=KfCc2lN!?*CT)D7qh#J_N z_vvDu{cg1Es`xE)EAMd`C0Z-VN@?^C|H?0>{Cc|VXtq=_<&@=nxj6p;SILw>i;b)` za(GSZXZ5**@3-5{is45ro7$c4iY2rjpM}cLd-1VYuT=Uc(QMn2oiA6uyxJ&oJ<&3% z6sz8SzFqV@Ep1M#%x9a)7^&*}b&Q`uW30J~cT5vI7loEMblP*$O--|tDUdGGOFE@# zJNLDYPWg$GLcSjErvsbuD<1|GOkMG9L-Jk6bP@daoN3L-<05}^x(+dVtu9m`InjhiIMw=!W*?5Q>G0D zr!R)~22Ss|YRuZ|@656+p0RPU5dZ|Ls~IBIv9uI5N0EVgSTFiNV3?l-q5Q$tqB{+M ztyHQi*BE5e!S3ZRS6lvvHA|Jz1wA_Tp@6VByvq4?dgVf1!)FSSIAdhb|95^vc+j~- z%jczcGX9Q$bMX9sh^ihgz<2Qn?TGi^V*d|j4gL!cLv{^m`~Jd*`9=K;B5&d$M5CtL z%X+NCZ4w)iT>duvcWCYs2uEKe!4|+TY1F6c;x3z4pX*+WE&4vFO;SoF@ z>}b<``Df{0Tss!;6M1d=-(7W*QG&mT=5JKi9{zhnObADFciM>G89u9}L``K)e7ke~ z-_zNkBETLFgzx=}uOOORDC7crd@T?+xGzXxc<;;3LaZG=|69y|$3>0?Mr((OYW--C zcX#!wmV9C)_8)-U<{gqdl96|NPrV0&XyUF1zbdBgJX!o~l+yKci}(2dp3WpKbt^iz zA64eNT|Sg1NTgsD;z*=0f@wm9O6T*M%p(W&d$qyW`#^eefb3Q%25kQi1?N_!4Z_|H zHLVyVAfWP;3LI-Un_Z;7L_$Qx9(!8K!|IS}^mV+#;R#Ag0RJQ&y*!e{G8;`+9OjRq ziZ{AAxDG07g#UgI<^=F$T!)cVBX$~_%O5|=uAX-PKHdkhMcW`tedv#zjH+ht$m%|A zUyM2tFiGecg+UOis`&&^)MW(BowI8eBAe_MA@Lg zFqrB))w!xB*LHIK5T@4HwDqiDbg9&$;?1g#Ve#lqYNOI(tg5%B!0l+NlTWpdr6q@l zt?_=N_KYLHL*-%0O@5EQchAJF%I`C##*x>b#hlb#lO_oVwV`DmdV0? zTTVJ9W6mvUB-yBp_tRT%^q(6GEfW{s#e)_~69#9*=Bf3X;_@%&Z6EeNx3Po`fR{phsNuP+FZp*E1V?qr4Rszm_UAfNknM;n1IN&3mYC1WI9}wx>pG2Kd`+br#$8Sl@xC99T@DArcGjaT z)`(5mtM~88?z9LCAu&J7$+`Q=Q!^qlV>fiLbn8k9e!rTusb`m6p!0gS97WMe@Eske zr|loQD?bI7o0-YwZ8I~`S;H8baz|@l&<{BLQHE}XG&N$MS#qv_rcxIksSw^!k>ix- zeya^?%#|hmD@@Y6R~Ib~mJo7|6zAuk3VdCcZj>?K7D01X|DDMxO652m9%$d9l2Y!^~RAoO)n}qxy D+^mx~ diff --git a/downstream/images/ug-scm-project-branching-emphasized.png b/downstream/images/ug-scm-project-branching-emphasized.png index 0936e3d2ca8e30183756e2c8b1f263016a3173ec..84041d07da3b9b6e3dd2ec44ccff4b197ea57603 100644 GIT binary patch literal 62268 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 TG_1+dY&~x3*h8bg`0{@MPvy`_ literal 167476 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 MO containergroup-ca.crt ---- + -. Use the contents of `containergroup-sa.token` and `containergroup-ca.crt` to provide the information for the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#ref-controller-credential-openShift[OpenShift or Kubernetes API Bearer Token] required for the container group. +. Use the contents of `containergroup-sa.token` and `containergroup-ca.crt` to provide the information for the xref:ref-controller-credential-openShift[OpenShift or Kubernetes API Bearer Token] required for the container group. -To create a container group, create an link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#ref-controller-credential-openShift[OpenShift or Kubernetes API Bearer Token] credential to use with your container group. -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-getting-started-create-credential[Creating a credential] in the _{ControllerUG}_. +To create a container group, create an xref:ref-controller-credential-openShift[OpenShift or Kubernetes API Bearer Token] credential to use with your container group. +For more information, see xref:controller-create-credential[Creating a credential]. .Procedure diff --git a/downstream/modules/platform/proc-controller-create-credential-type.adoc b/downstream/modules/platform/proc-controller-create-credential-type.adoc index c7766dd7eb..14f3f17444 100644 --- a/downstream/modules/platform/proc-controller-create-credential-type.adoc +++ b/downstream/modules/platform/proc-controller-create-credential-type.adoc @@ -209,4 +209,4 @@ image:credential-types-new-listed-verify.png[Verify new credential type] .Additional resources -For information about how to create a new credential, see xref:controller-getting-started-create-credential[Creating a credential]. +For information about how to create a new credential, see xref:controller-create-credential[Creating a credential]. diff --git a/downstream/modules/platform/proc-controller-create-credential.adoc b/downstream/modules/platform/proc-controller-create-credential.adoc index 5d1c5502bb..9a283d52e0 100644 --- a/downstream/modules/platform/proc-controller-create-credential.adoc +++ b/downstream/modules/platform/proc-controller-create-credential.adoc @@ -1,13 +1,13 @@ -[id="controller-getting-started-create-credential"] +[id="controller-create-credential"] = Creating new credentials -ifdef::controller-GS[] -As part of the initial setup, a demonstration credential and a Galaxy credential have been created for your use. Use the Galaxy credential as a template. -It can be copied, but not edited. -You can add more credentials as necessary. -endif::controller-GS[] +//ifdef::controller-GS[] +//As part of the initial setup, a demonstration credential and a Galaxy credential have been created for your use. Use the Galaxy credential as a template. +//It can be copied, but not edited. +//You can add more credentials as necessary. +//endif::controller-GS[] -ifdef::controller-UG[] +//ifdef::controller-UG[] Credentials added to a team are made available to all members of the team. You can also add credentials to individual users. @@ -15,42 +15,38 @@ As part of the initial setup, two credentials are available for your use: Demo C Use the Ansible Galaxy credential as a template. You can copy this credential, but not edit it. Add more credentials as needed. -endif::controller-UG[] +//endif::controller-UG[] .Procedure . From the navigation panel, select {MenuAECredentials}. -ifdef::controller-GS[] -. To add a new credential, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-getting-started-create-credential[Creating a credential] in _{ControllerUG}_. -+ -[NOTE] -==== -When you set up additional credentials, the user you assign must have root access or be able to use SSH to connect to the host machine. -==== -+ -. Click btn:[Demo Credential] to view its details. - -image::controller-credentials-demo-details.png[Demo Credential] -endif::controller-GS[] -ifdef::controller-UG[] -. Click btn:[Add]. -+ +//ifdef::controller-GS[] +//. To add a new credential, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-getting-started-create-credential[Creating a credential] in _{ControllerUG}_. +//+ +//[NOTE] +//==== +//When you set up additional credentials, the user you assign must have root access or be able to use SSH to connect to the host machine. +//==== +//+ +//. Click btn:[Demo Credential] to view its details. + +//image::controller-credentials-demo-details.png[Demo Credential] +//endif::controller-GS[] +//ifdef::controller-UG[] +. On the *Credentials* page, click btn:[Create credential]. +//+ //image:credentials-create-credential.png[Credentials-create] . Enter the following information: -* The name for your new credential. -* Optional: a description for the new credential. -* Optional: The name of the organization with which the credential is associated. -+ -[NOTE] -==== -A credential with a set of permissions associated with one organization persists if the credential is reassigned to another -organization. -==== -. In the *Credential Type* field, enter or select the credential type you want to create. -+ -//image:credential-types-drop-down-menu.png[Credential types] +* *Name*: the name for your new credential. +* (Optional) *Description*: a description for the new credential. +* Optional *Organization*: The name of the organization with which the credential is associated. The default is *Default*. +* *Credential Type*: enter or select the credential type you want to create. . Enter the appropriate details depending on the type of credential selected, as described in xref:ref-controller-credential-types[Credential types]. -. Click btn:[Save]. ++ +image:credential-types-drop-down-menu.png[Credential types drop down list] + +. Click btn:[Create credential]. -endif::controller-UG[] +//You can also use this procedure from the *Credentials* tab when you select a credential type on the *Credential Types* page. Not sure how to document that, it should be a single route. +//endif::controller-UG[] diff --git a/downstream/modules/platform/proc-controller-create-instance-group.adoc b/downstream/modules/platform/proc-controller-create-instance-group.adoc index e9923756fc..b7b0f39401 100644 --- a/downstream/modules/platform/proc-controller-create-instance-group.adoc +++ b/downstream/modules/platform/proc-controller-create-instance-group.adoc @@ -26,7 +26,12 @@ If you do not specify values, then the *Policy instance minimum* and *Policy ins [NOTE] ==== The default value of 0 for *Max concurrent jobs* and *Max forks* denotes no limit. +ifdef::controller-UG[] For more information, see xref:controller-instance-group-capacity[Instance group capacity limits]. +endif::controller-UG[] +ifdef::operator-mesh[] +For more information, see link:link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/using_automation_execution/assembly-controller-secret-management#controller-instance-group-capacity[Instance group capacity limits]. +endif::operator-mesh[] ==== . Click btn:[Create Instance Group], or, if you have edited an existing Instance Group click btn:[Save Instance Group] diff --git a/downstream/modules/platform/proc-controller-create-job-template.adoc b/downstream/modules/platform/proc-controller-create-job-template.adoc index 67cf3fb6e0..a5f026034f 100644 --- a/downstream/modules/platform/proc-controller-create-job-template.adoc +++ b/downstream/modules/platform/proc-controller-create-job-template.adoc @@ -156,7 +156,7 @@ You must configure this in the settings on the webhook service in order for {Con + Before you can select it, the credential must exist. + -See TBD[Credential Types] to create one. +See xref:ref-controller-credential-types[Credential Types] to create one. ** For additional information about setting up webhooks, see xref:controller-work-with-webhooks[Working with Webhooks]. * *Concurrent jobs*: If checked, you are allowing jobs in the queue to run simultaneously if not dependent on one another. Check this box if you want to run job slices simultaneously. For more information, see xref:controller-capacity-determination[{ControllerNameStart} capacity determination and job impact]. * *Enable fact storage*: If checked, {ControllerName} stores gathered facts for all hosts in an inventory related to the job running. diff --git a/downstream/modules/platform/proc-controller-define-filter-with-facts.adoc b/downstream/modules/platform/proc-controller-define-filter-with-facts.adoc index bfe7fb9671..5ee2c74ca4 100644 --- a/downstream/modules/platform/proc-controller-define-filter-with-facts.adoc +++ b/downstream/modules/platform/proc-controller-define-filter-with-facts.adoc @@ -6,8 +6,8 @@ Use the following procedure to use `ansible_facts` to define the host filter whe .Procedure . From the navigation panel, select {MenuInfrastructureInventories}. -. Select *Add Smart Inventory* from *Add* list. -. In the *Create new smart inventory* page, click the image:search.png[Search,15,15] icon in the *Smart host filter* field. +. Select *Create Smart Inventory* from *Create inventory* list. +//. In the *Create Smart Inventory* page, click the image:search.png[Search,15,15] icon in the *Smart host filter* field. This opens a window to filter hosts for this inventory. + image:define_host_filter.png[Dfine host filter] diff --git a/downstream/modules/platform/proc-controller-inv-source-open-shift-virt.adoc b/downstream/modules/platform/proc-controller-inv-source-open-shift-virt.adoc index 38c927cc92..92413f0e3c 100644 --- a/downstream/modules/platform/proc-controller-inv-source-open-shift-virt.adoc +++ b/downstream/modules/platform/proc-controller-inv-source-open-shift-virt.adoc @@ -14,7 +14,7 @@ To configure a Red Hat OpenShift Container Platform Virtualization, you need a v * The *Add new source* window expands with the required *Credential* field. + Choose from an existing Kubernetes API Bearer Token credential. -For more information, see the TBD[OpenShift or Kubernetes API Bearer Token credential type] section. +For more information, see xref:ref-controller-credential-openShift[OpenShift or Kubernetes API Bearer Token credential type]. In this example, the `cmv2.engineering.redhat.com` credential is used. . You can optionally specify the *Verbosity*, *Host Filter*, *Enabled Variable/Value*, and *Update options* as described in the xref:proc-controller-add-source[Adding a source] steps. . Use the *Source Variables* field to override variables used by the `kubernetes` inventory plugin. diff --git a/downstream/modules/platform/proc-controller-inv-source-terraform.adoc b/downstream/modules/platform/proc-controller-inv-source-terraform.adoc index 8703377d8c..45677e9589 100644 --- a/downstream/modules/platform/proc-controller-inv-source-terraform.adoc +++ b/downstream/modules/platform/proc-controller-inv-source-terraform.adoc @@ -18,7 +18,7 @@ The plugin parses a terraform state file and add hosts for AWS EC2, GCE, and {Az . From the menu:Source[] menu, select *Terraform State*. * The *Add new source* window expands with the required *Credential* field. + -Choose from an existing Terraform backend configuration credential. For more information, see TBD[Terraform backend configuration]. +Choose an existing Terraform backend configuration credential. For more information, see xref:ref-controller-credential-terraform[Terraform backend configuration]. . Enable the options to *Overwrite* and *Update on Launch*. . Use the *Source Variables* field to override variables used by the `terraform_state` inventory plugin. Enter variables by using either JSON or YAML syntax. diff --git a/downstream/modules/platform/proc-controller-set-up-github-webhook.adoc b/downstream/modules/platform/proc-controller-set-up-github-webhook.adoc index c854e14626..3240294075 100644 --- a/downstream/modules/platform/proc-controller-set-up-github-webhook.adoc +++ b/downstream/modules/platform/proc-controller-set-up-github-webhook.adoc @@ -28,7 +28,7 @@ You cannot access this token again in GitHub. ==== + . Use the PAT to optionally create a GitHub credential: -.. Go to your instance, and TBD[Create a new credential for the GitHub PAT] using the generated token. +.. Go to your instance, and link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/configuring_automation_execution/controller-credentials#ref-controller-credential-gitHub-pat[Create a new credential for the GitHub PAT] using the generated token. .. Make note of the name of this credential, as you use it in the job template that posts back to GitHub. + image::ug-webhooks-github-PAT-token.png[GitHub PAT token] diff --git a/downstream/modules/platform/proc-controller-set-up-gitlab-webhook.adoc b/downstream/modules/platform/proc-controller-set-up-gitlab-webhook.adoc index ab5e2b9f09..cd120d4eb6 100644 --- a/downstream/modules/platform/proc-controller-set-up-gitlab-webhook.adoc +++ b/downstream/modules/platform/proc-controller-set-up-gitlab-webhook.adoc @@ -24,7 +24,7 @@ You cannot access this token again in GitLab. ==== + . Use the PAT to optionally create a GitLab credential: -.. Go to your instance, and TBD[create a new credential for the GitLab PAT] using the generated token. +.. Go to your instance, and link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/using_automation_execution/controller-credentials/ref-controller-credential-gitLab-pat[Create a new credential for the GitLab PAT] using the generated token. .. Make note of the name of this credential, as you use it in the job template that posts back to GitLab. + image::ug-webhooks-create-credential-gitlab-PAT-token.png[GitLab PAT token] diff --git a/downstream/modules/platform/ref-controller-aws-secrets-lookup.adoc b/downstream/modules/platform/ref-controller-aws-secrets-lookup.adoc new file mode 100644 index 0000000000..b88aaa5886 --- /dev/null +++ b/downstream/modules/platform/ref-controller-aws-secrets-lookup.adoc @@ -0,0 +1,5 @@ +[id="ref-controller-aws-secrets-lookup"] + += AWS secrets manager lookup + +This is considered part of the secret management capability. For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/configuring_automation_execution/assembly-controller-secret-management#ref-aws-secrets-manager-lookup[AWS Secrets Manager Lookup] \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-content-sourcing.adoc b/downstream/modules/platform/ref-controller-content-sourcing.adoc index b6601e58c2..b922f74596 100644 --- a/downstream/modules/platform/ref-controller-content-sourcing.adoc +++ b/downstream/modules/platform/ref-controller-content-sourcing.adoc @@ -28,6 +28,6 @@ The organization's *Add* and *Edit* windows have an optional *Credential* lookup image:organizations-galaxy-credentials.png[Create organization] It is important to specify the order of these credentials as order sets precedence for the sync and lookup of the content. -For more information, see xref:proc-controller-create-organization[Creating an organization]. +For more information, see TBD[Creating an organization]. For more information about how to set up a project by using collections, see xref:proc-projects-using-collections-with-hub[Using Collections with {HubName}]. diff --git a/downstream/modules/platform/ref-controller-credential-azure-key.adoc b/downstream/modules/platform/ref-controller-credential-azure-key.adoc index 85d1cda63e..00da4cf070 100644 --- a/downstream/modules/platform/ref-controller-credential-azure-key.adoc +++ b/downstream/modules/platform/ref-controller-credential-azure-key.adoc @@ -4,4 +4,4 @@ This is considered part of the secret management capability. -For more information, see xref:ref-azure-key-vault-lookup[{Azure} Key Vault]. \ No newline at end of file +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/configuring_automation_execution/assembly-controller-secret-management#ref-azure-key-vault-lookup[{Azure} Key Vault]. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-credential-bitbucket.adoc b/downstream/modules/platform/ref-controller-credential-bitbucket.adoc new file mode 100644 index 0000000000..1e27842b20 --- /dev/null +++ b/downstream/modules/platform/ref-controller-credential-bitbucket.adoc @@ -0,0 +1,8 @@ +[id="ref-controller-credential-bitbucket"] + += BitBucket data center HTTP access token + +Bitbucket Data Center is a self-hosted Git repository for collaboration and management. +Select this credential type to enable you to use HTTP access tokens in place of passwords for Git over HTTPS. + +For further information, see link:https://confluence.atlassian.com/bitbucketserver/http-access-tokens-939515499.html[HTTP access tokens] in the Bitbucket Data Center documentation.. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-credential-centrify-vault.adoc b/downstream/modules/platform/ref-controller-credential-centrify-vault.adoc index 7a3541bb15..e06d268aaa 100644 --- a/downstream/modules/platform/ref-controller-credential-centrify-vault.adoc +++ b/downstream/modules/platform/ref-controller-credential-centrify-vault.adoc @@ -3,4 +3,4 @@ = Centrify Vault Credential Provider Lookup credential type This is considered part of the secret management capability. -For more information, see xref:ref-centrify-vault-lookup[Centrify Vault Credential Provider Lookup]. \ No newline at end of file +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/configuring_automation_execution/assembly-controller-secret-management#ref-centrify-vault-lookup[Centrify Vault Credential Provider Lookup]. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-credential-cyberark-central.adoc b/downstream/modules/platform/ref-controller-credential-cyberark-central.adoc index 85b0caf43c..5ef3290cf8 100644 --- a/downstream/modules/platform/ref-controller-credential-cyberark-central.adoc +++ b/downstream/modules/platform/ref-controller-credential-cyberark-central.adoc @@ -4,4 +4,4 @@ This is considered part of the secret management capability. -For more information, see xref:ref-cyberark-ccp-lookup[CyberArk Central Credential Provider (CCP) Lookup]. \ No newline at end of file +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/configuring_automation_execution/assembly-controller-secret-management#ref-cyberark-ccp-lookup[CyberArk Central Credential Provider (CCP) Lookup]. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-credential-cyberark-conjur.adoc b/downstream/modules/platform/ref-controller-credential-cyberark-conjur.adoc index 745c43536a..e7b756bba4 100644 --- a/downstream/modules/platform/ref-controller-credential-cyberark-conjur.adoc +++ b/downstream/modules/platform/ref-controller-credential-cyberark-conjur.adoc @@ -4,4 +4,4 @@ This is considered part of the secret management capability. -For more information, see xref:ref-cyberark-conjur-lookup[CyberArk Conjur Secrets Manager Lookup]. \ No newline at end of file +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/configuring_automation_execution/assembly-controller-secret-management#ref-cyberark-conjur-lookup[CyberArk Conjur Secrets Manager Lookup]. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-credential-hashiCorp-secret.adoc b/downstream/modules/platform/ref-controller-credential-hashiCorp-secret.adoc index 0856907152..89d12896a3 100644 --- a/downstream/modules/platform/ref-controller-credential-hashiCorp-secret.adoc +++ b/downstream/modules/platform/ref-controller-credential-hashiCorp-secret.adoc @@ -4,4 +4,4 @@ This is considered part of the secret management capability. -For more information, see xref:ref-hashicorp-vault-lookup[HashiCorp Vault Secret Lookup]. \ No newline at end of file +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/configuring_automation_execution/assembly-controller-secret-management#ref-hashicorp-vault-lookup[HashiCorp Vault Secret Lookup]. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-credential-hashiCorp-vault.adoc b/downstream/modules/platform/ref-controller-credential-hashiCorp-vault.adoc index dde92210cf..dc7347f240 100644 --- a/downstream/modules/platform/ref-controller-credential-hashiCorp-vault.adoc +++ b/downstream/modules/platform/ref-controller-credential-hashiCorp-vault.adoc @@ -4,4 +4,4 @@ This is considered part of the secret management capability. -For more information, see xref:ref-hashicorp-signed-ssh[HashiCorp Vault Signed SSH]. \ No newline at end of file +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/configuring_automation_execution/ref-hashicorp-signed-ssh[HashiCorp Vault Signed SSH]. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-credential-terraform.adoc b/downstream/modules/platform/ref-controller-credential-terraform.adoc index 3a2e8306b3..9f7c2e0b01 100644 --- a/downstream/modules/platform/ref-controller-credential-terraform.adoc +++ b/downstream/modules/platform/ref-controller-credential-terraform.adoc @@ -8,7 +8,7 @@ Terraform is a HashiCorp tool used to automate various infrastructure tasks. Select this credential type to enable synchronization with the Terraform inventory source. The Terraform credential requires the *Backend configuration* attribute which must contain the data from a link:https://developer.hashicorp.com/terraform/language/settings/backends/configuration[Terraform backend block]. -You can paste, drag a file, browse to upload a file, or click the image:leftkey.png[Key,15,15] icon to populate the field from an external xref:assembly-controller-secret-management[Secret Management System]. +You can paste, drag a file, browse to upload a file, or click the image:leftkey.png[Key,15,15] icon to populate the field from an external link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/configuring_automation_execution/assembly-controller-secret-management[Secret Management System]. Terraform backend configuration requires the following inputs: diff --git a/downstream/modules/platform/ref-controller-credential-thycotic-server.adoc b/downstream/modules/platform/ref-controller-credential-thycotic-server.adoc index b6d5e18f92..4d15ec928f 100644 --- a/downstream/modules/platform/ref-controller-credential-thycotic-server.adoc +++ b/downstream/modules/platform/ref-controller-credential-thycotic-server.adoc @@ -4,4 +4,4 @@ This is considered part of the secret management capability. -For more information, see xref:ref-thycotic-secret-server[Thycotic Secret Server]. \ No newline at end of file +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/configuring_automation_execution/assembly-controller-secret-management#ref-thycotic-secret-server[Thycotic Secret Server]. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-credential-thycotic-vault.adoc b/downstream/modules/platform/ref-controller-credential-thycotic-vault.adoc index e5eb58a3be..c94a977fdc 100644 --- a/downstream/modules/platform/ref-controller-credential-thycotic-vault.adoc +++ b/downstream/modules/platform/ref-controller-credential-thycotic-vault.adoc @@ -4,4 +4,4 @@ This is considered part of the secret management capability. -For more information, see xref:ref-thycotic-devops-vault[Thycotic DevOps Secrets Vault]. \ No newline at end of file +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/configuring_automation_execution/assembly-controller-secret-management#ref-thycotic-devops-vault[Thycotic DevOps Secrets Vault]. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-credential-types.adoc b/downstream/modules/platform/ref-controller-credential-types.adoc index 071d95a60a..9eb6687e23 100644 --- a/downstream/modules/platform/ref-controller-credential-types.adoc +++ b/downstream/modules/platform/ref-controller-credential-types.adoc @@ -6,6 +6,10 @@ * xref:ref-controller-credential-aws[Amazon Web Services] * xref:ref-controller-credential-galaxy-hub[{Galaxy}/Automation Hub API Token] +//added AWS Secrets Manager Lookup +* xref:ref-controller-aws-secrets-lookup[AWS Secrets Manager Lookup] +//added Bitbucket Data Center HTTP Access Token +* xref:ref-controller-credential-bitbucket[Bitbucket Data Center HTTP Access Token] * xref:ref-controller-credential-centrify-vault[Centrify Vault Credential Provider Lookup] * xref:ref-controller-credential-container-registry[Container Registry] * xref:ref-controller-credential-cyberark-central[CyberArk Central Credential Provider Lookup] @@ -27,11 +31,12 @@ * xref:ref-controller-credential-satellite[Red Hat Satellite 6] * xref:ref-controller-credential-virtualization[Red Hat Virtualization] * xref:ref-controller-credential-source-control[Source Control] +* xref:ref-controller-credential-terraform[Terraform Backend Configuration] * xref:ref-controller-credential-thycotic-vault[Thycotic DevOps Secrets Vault] * xref:ref-controller-credential-thycotic-server[Thycotic Secret Server] * xref:ref-controller-credential-vault[Vault] * xref:ref-controller-credential-vmware-vcenter[VMware vCenter] -The credential types associated with Centrify, CyberArk, HashiCorp Vault, {Azure} Key Vault, and Thycotic are part of the credential plugins capability that enables an external system to lookup your secrets information. +The credential types associated with AWS Secrets Manager, Centrify, CyberArk, HashiCorp Vault, {Azure} Key Vault, and Thycotic are part of the credential plugins capability that enables an external system to lookup your secrets information. -For more information, see xref:assembly-controller-secret-management[Secrets Management System]. \ No newline at end of file +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/configuring_automation_execution/assembly-controller-secret-management[Secrets Management System]. \ No newline at end of file diff --git a/downstream/modules/platform/ref-controller-instance-group-capacity.adoc b/downstream/modules/platform/ref-controller-instance-group-capacity.adoc index 0402e46bc1..30890eef74 100644 --- a/downstream/modules/platform/ref-controller-instance-group-capacity.adoc +++ b/downstream/modules/platform/ref-controller-instance-group-capacity.adoc @@ -30,4 +30,5 @@ For container groups, using the `max_forks` value is useful given that all jobs The default `pod_spec` sets requests and not limits, so the pods can "burst" above their requested value without being throttled or reaped. By setting the `max_forks value`, you can help prevent a scenario where too many jobs with large forks values get scheduled concurrently and cause the OpenShift nodes to be oversubscribed with multiple pods using more resources than their requested value. -To set the maximum values for the concurrent jobs and forks in an instance group, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-create-instance-group[Creating an instance group] in _{ControllerUG}_. +To set the maximum values for the concurrent jobs and forks in an instance group, see +xref:controller-create-instance-group[Creating an instance group]. diff --git a/downstream/modules/platform/ref-controller-prompted-vault-credentials.adoc b/downstream/modules/platform/ref-controller-prompted-vault-credentials.adoc index 498f61ee0d..35e4e5e14e 100644 --- a/downstream/modules/platform/ref-controller-prompted-vault-credentials.adoc +++ b/downstream/modules/platform/ref-controller-prompted-vault-credentials.adoc @@ -32,4 +32,4 @@ POST /api/v2/job_templates/N/launch/ Instead of uploading sensitive credential information into {ControllerName}, you can link credential fields to external systems and use them to run your playbooks. -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#assembly-controller-secret-management[Secret Management System] in _{ControllerUG}_. +For more information, see xref:assembly-controller-secret-management[Secret Management System]. diff --git a/downstream/modules/platform/ref-get-started-credential-types.adoc b/downstream/modules/platform/ref-get-started-credential-types.adoc index 857820a4fe..07abd1be89 100644 --- a/downstream/modules/platform/ref-get-started-credential-types.adoc +++ b/downstream/modules/platform/ref-get-started-credential-types.adoc @@ -2,17 +2,20 @@ = Getting started with credential types //[ddacosta] Consider rewriting this as a procedure. -From the navigation panel, select {MenuAMCredentialType}. -If no custom credential types have been created, the *Credential Types* prompts you to add one. +.Procedure +. From the navigation panel, select {MenuAECredentials}. +If no custom credential types have been created, the *Credential Types* page prompts you to add one. ++ //image:credential-types-home-empty.png[Credential Types - empty] - ++ If credential types have been created, this page displays a list of existing and available Credential Types. - ++ //image:credential-types-home-with-example-types.png[Credential Types - example credential types] -To view more information about a credential type, click the name of a credential or the Edit image:leftpencil.png[Edit, 15,15] icon. +. Select the name of a credential or the Edit image:leftpencil.png[Edit, 15,15] icon to view more information about a credential type, . -Each credential type displays its own unique configurations in the *Input Configuration* field and the *Injector Configuration* field, if -applicable. +. On the *Details* tab, each credential type displays its own unique configurations in the *Input Configuration* field and the *Injector Configuration* field, if applicable. Both YAML and JSON formats are supported in the configuration fields. + +//NOTE The Back to Credential Types Tab throws an error. diff --git a/downstream/modules/troubleshooting-aap/proc-troubleshoot-job-permissions.adoc b/downstream/modules/troubleshooting-aap/proc-troubleshoot-job-permissions.adoc index 9cf73e5c63..a9d748a610 100644 --- a/downstream/modules/troubleshooting-aap/proc-troubleshoot-job-permissions.adoc +++ b/downstream/modules/troubleshooting-aap/proc-troubleshoot-job-permissions.adoc @@ -16,5 +16,4 @@ This issue happens when your {PrivateHubName} is protected with a password or to [role="_additional-resources"] .Additional resources -* For information about creating new credentials in {ControllerName}, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-getting-started-create-credential[Creating new credentials] in the Automation Controller User Guide. - +* For information about creating new credentials in {ControllerName}, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/using_automation_execution/controller-credentials#controller-create-credential[Creating new credentials] in _{ControllerUG}_. diff --git a/downstream/titles/controller/controller-user-guide/master.adoc b/downstream/titles/controller/controller-user-guide/master.adoc index 21f7fcbfc7..ba21f9076f 100644 --- a/downstream/titles/controller/controller-user-guide/master.adoc +++ b/downstream/titles/controller/controller-user-guide/master.adoc @@ -56,20 +56,22 @@ include::platform/assembly-controller-instances.adoc[leveloffset=+1] include::platform/assembly-controller-execution-environments.adoc[leveloffset=+1] include::platform/assembly-controller-ee-setup-reference.adoc[leveloffset=+1] //Moved to Donna's Access management document -//include::platform/assembly-controller-organizations.adoc[leveloffset=+1] +//include::platform/assembly-controller-organizations.adoc[leveloffset=+1 //include::platform/assembly-controller-users.adoc[leveloffset=+1] //include::platform/assembly-controller-teams.adoc[leveloffset=+1] //Possibly in Donna's credentials document -//include::platform/assembly-controller-credentials.adoc[leveloffset=+1] -//include::platform/assembly-controller-custom-credentials.adoc[leveloffset=+1] +include::platform/assembly-controller-credentials.adoc[leveloffset=+1] +include::platform/assembly-controller-custom-credentials.adoc[leveloffset=+1] +include::platform/assembly-controller-activity-stream.adoc[leveloffset=+1] //Moved to admin guide //include::platform/assembly-controller-secret-management.adoc[leveloffset=+1] //include::platform/assembly-controller-applications.adoc[leveloffset=+1] -include::platform/assembly-ug-controller-work-with-webhooks.adoc[leveloffset=+1] include::platform/assembly-ug-controller-notifications.adoc[leveloffset=+1] include::platform/assembly-ug-controller-attributes-custom-notifications.adoc[leveloffset=+1] +include::platform/assembly-ug-controller-work-with-webhooks.adoc[leveloffset=+1] include::platform/assembly-ug-controller-setting-up-insights.adoc[leveloffset=+1] include::platform/assembly-controller-best-practices.adoc[leveloffset=+1] //RBAC contents to Donna's document, Jobs info to Jobs. +//Moved to admin guide. //include::platform/assembly-controller-security.adoc[leveloffset=+1] include::platform/assembly-controller-glossary.adoc[leveloffset=+1] From 811d50935225b0a46284ac051cd4cb5d5eb55671 Mon Sep 17 00:00:00 2001 From: Jameria Self <73364088+jself-sudoku@users.noreply.github.com> Date: Mon, 22 Jul 2024 10:27:07 -0400 Subject: [PATCH 044/590] AAP-20808 Added new HS assembly and EDA HS process. (#1600) (#1617) * AAP-20808 Added new HS assembly and EDA HS process * AAP-20808 Added final updates for new HS section * AAP-20808 Added cross-reference to set-up procedure * AAP-20808 Final edits to content before peer review * AAP-20808 Peer review edits applied --- .../platform/assembly-horizontal-scaling.adoc | 16 ++++++++++++ .../platform/con-hs-eda-controller.adoc | 23 ++++++++++++++++ .../platform/con-hs-eda-sizing-scaling.adoc | 11 ++++++++ .../modules/platform/proc-hs-eda-setup.adoc | 26 +++++++++++++++++++ .../titles/aap-installation-guide/master.adoc | 1 + 5 files changed, 77 insertions(+) create mode 100644 downstream/assemblies/platform/assembly-horizontal-scaling.adoc create mode 100644 downstream/modules/platform/con-hs-eda-controller.adoc create mode 100644 downstream/modules/platform/con-hs-eda-sizing-scaling.adoc create mode 100644 downstream/modules/platform/proc-hs-eda-setup.adoc diff --git a/downstream/assemblies/platform/assembly-horizontal-scaling.adoc b/downstream/assemblies/platform/assembly-horizontal-scaling.adoc new file mode 100644 index 0000000000..6d0262b243 --- /dev/null +++ b/downstream/assemblies/platform/assembly-horizontal-scaling.adoc @@ -0,0 +1,16 @@ +ifdef::context[:parent-context: {context}] + +[id="assembly-horizontal-scaling"] += Horizontal Scaling in {PlatformName} + +//:context: activate-aap + +[role="_abstract"] +You can set up multi-node deployments for components across {PlatformNameShort}. Whether you require horizontal scaling for {MenuTopAE}, {MenuAD}, or {AutomationMesh}, you can scale your deployments based on your organization’s needs. + +include::platform/con-hs-eda-controller.adoc[leveloffset=+1] +include::platform/con-hs-eda-sizing-scaling.adoc[leveloffset=+2] +include::platform/proc-hs-eda-setup.adoc[leveloffset=+2] + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] diff --git a/downstream/modules/platform/con-hs-eda-controller.adoc b/downstream/modules/platform/con-hs-eda-controller.adoc new file mode 100644 index 0000000000..bbbb0b428c --- /dev/null +++ b/downstream/modules/platform/con-hs-eda-controller.adoc @@ -0,0 +1,23 @@ +[id="con-hs-eda-controller"] + += Horizontal scaling in {EDAcontroller} + +With {EDAcontroller}, you can set up horizontal scaling for your events automation. This multi-node deployment enables you to define as many nodes as you prefer during the installation process. You can also increase or decrease the number of nodes at any time according to your organizational needs. + +The following node types are used in this deployment: + +API node type:: Responds to the HTTP REST API of {EDAcontroller}. +Worker node type:: Runs an {EDAName} worker, which is the component of Event-Driven Ansible that not only manages projects and activations, but also executes the activations themselves. +Hybrid node type:: Is a combination of the API node and the worker node. + +The following example shows how you would set up an inventory file for horizontal scaling of {EDAcontroller} on {RHEL} VMs using the host group name `[automationedacontroller]` and the node type variable `eda_node_type`: + +----- +[automationedacontroller] + +3.88.116.111 +routable_hostname=automationedacontroller-api.example.com eda_node_type=api + +# worker node +3.88.116.112 routable_hostname=automationedacontroller-api.example.com eda_node_type=worker +----- diff --git a/downstream/modules/platform/con-hs-eda-sizing-scaling.adoc b/downstream/modules/platform/con-hs-eda-sizing-scaling.adoc new file mode 100644 index 0000000000..29a0221478 --- /dev/null +++ b/downstream/modules/platform/con-hs-eda-sizing-scaling.adoc @@ -0,0 +1,11 @@ +[id="con-hs-eda-sizing-scaling"] + += Sizing and scaling guidelines + +API nodes process user requests (interactions with the UI or API) while worker nodes process the activations and other background tasks required for {EDAName} to function properly. The number of API nodes you require correlates to the desired number of users of the application and the number of worker nodes correlates to the desired number of activations you want to run. + +Since activations are variable and controlled by worker nodes, the supported approach for scaling is to use separate API and worker nodes instead of hybrid nodes due to the efficient allocation of hardware resources by worker nodes. By separating the nodes, you can scale each type independently based on specific needs, leading to better resource utilization and cost efficiency. + +An example of an instance in which you might consider scaling up your node deployment is when you want to deploy {EDAName} for a small group of users who will run a large number of activations. In this case, one API node is adequate, but if you require more, you can scale up to three additional worker nodes. + +To set up a multi-node deployment, follow the procedure in xref:proc-hs-eda-setup[Setting up horizontal scaling for {EDAcontroller}]. diff --git a/downstream/modules/platform/proc-hs-eda-setup.adoc b/downstream/modules/platform/proc-hs-eda-setup.adoc new file mode 100644 index 0000000000..d55b046e1e --- /dev/null +++ b/downstream/modules/platform/proc-hs-eda-setup.adoc @@ -0,0 +1,26 @@ +[id="proc-hs-eda-setup"] + += Setting up horizontal scaling for {EDAcontroller} + +[role=_abstract] + +To scale up (add more nodes) or scale down (remove nodes), you must update the content of the inventory to add or remove nodes and rerun the installer. + +.Procedure +. Update the inventory to add two more worker nodes: + ++ +----- +[automationedacontroller] + +3.88.116.111 routable_hostname=automationedacontroller-api.example.com eda_node_type=api + +3.88.116.112 routable_hostname=automationedacontroller-api.example.com eda_node_type=worker + +# two more worker nodes +3.88.116.113 routable_hostname=automationedacontroller-api.example.com eda_node_type=worker + +3.88.116.114 routable_hostname=automationedacontroller-api.example.com eda_node_type=worker +----- + +. Re-run the installer. diff --git a/downstream/titles/aap-installation-guide/master.adoc b/downstream/titles/aap-installation-guide/master.adoc index 66bf557e4c..b49dc6e6ab 100644 --- a/downstream/titles/aap-installation-guide/master.adoc +++ b/downstream/titles/aap-installation-guide/master.adoc @@ -21,6 +21,7 @@ include::platform/assembly-platform-install-overview.adoc[leveloffset=+1] include::platform/assembly-system-requirements.adoc[leveloffset=+1] include::platform/assembly-platform-install-scenario.adoc[leveloffset=+1] //[dcdacosta]Removing this assembly because modules are now included in assembly-platform-install-scenario] include::platform/assembly-deploy-high-availability-hub.adoc[leveloffset=+1] +include::platform/assembly-horizontal-scaling.adoc[leveloffset=+1] include::platform/assembly-disconnected-installation.adoc[leveloffset=+1] //12/2/22 [dcd: moved following assemblies to new operations guide] //include::platform/assembly-configuring-proxy-support.adoc[leveloffset=+1] From 274e36f23e85e38e1bfbb389d3951efd502769d0 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Mon, 22 Jul 2024 23:52:14 +0100 Subject: [PATCH 045/590] Correct Vale errors in our aap-docs (#1614) (#1615) * Correct Vale errors in our aap-docs Some errors of note that should be resolved as part of this ticket: - Keep one space between words - Use 'Ansible Playbook' rather than 'Ansible playbook'. - Use 'before' rather than 'prior to'. - Use 'built-in' rather than 'built in'. - Use 'checkbox' rather than 'check box'. - Use 'environment' rather than 'ENV'. - Use 'includes' rather than 'ships with'. - Use 'log in to' rather than 'Log into'. - Use 'pop-up' rather than 'popup'. - Use 'want' rather than 'wish'. Correct Vale errors in our aap-docs https://issues.redhat.com/browse/AAP-24651 * updates based on peer review feedback --- .../modules/dev-guide/proc-select-custom-venv-export.adoc | 2 +- downstream/modules/hub/con-approval-pipeline.adoc | 2 +- .../proc-pushing-container-images-from-your-local.adoc | 2 +- ...ecution-environment-in-a-disconnected-environment.adoc | 8 ++++---- .../platform/con-controller-understand-architecture.adoc | 2 +- .../platform/con-operator-upgrade-considerations.adoc | 2 +- .../modules/platform/proc-aap-activate-with-manifest.adoc | 4 ++-- .../modules/platform/proc-configure-upgraded-aap.adoc | 2 +- .../proc-controller-adding-subscription-manually.adoc | 2 +- .../modules/platform/proc-controller-deleting-a-user.adoc | 2 +- .../platform/proc-controller-reset-tower-base.adoc | 2 +- .../platform/proc-controller-run-ad-hoc-commands.adoc | 2 +- .../platform/proc-controller-run-job-template.adoc | 4 ++-- .../modules/platform/proc-controller-set-up-SAML.adoc | 2 +- .../platform/proc-creating-collection-namespace.adoc | 2 +- ...ating-the-custom-execution-environment-definition.adoc | 2 +- downstream/modules/platform/proc-deprovision-group.adoc | 2 +- .../platform/proc-installing-the-ansible-builder-rpm.adoc | 8 ++++---- .../platform/proc-operator-external-db-controller.adoc | 2 +- .../modules/platform/proc-operator-external-db-hub.adoc | 2 +- .../platform/ref-controller-audit-functionality.adoc | 4 ++-- .../platform/ref-controller-change-admin-password.adoc | 4 ++-- .../platform/ref-controller-internal-services.adoc | 2 +- .../platform/ref-controller-smart-host-filter.adoc | 2 +- 24 files changed, 34 insertions(+), 34 deletions(-) diff --git a/downstream/modules/dev-guide/proc-select-custom-venv-export.adoc b/downstream/modules/dev-guide/proc-select-custom-venv-export.adoc index 2574e1f25a..cf20aac006 100644 --- a/downstream/modules/dev-guide/proc-select-custom-venv-export.adoc +++ b/downstream/modules/dev-guide/proc-select-custom-venv-export.adoc @@ -3,7 +3,7 @@ = Selecting the custom virtual environment to export [role="_abstract"] -Select the custom virtual environment you wish to export using `awx-manage export_custom_venv` command. +Select the custom virtual environment you want to export by using `awx-manage export_custom_venv` command. .Procedure diff --git a/downstream/modules/hub/con-approval-pipeline.adoc b/downstream/modules/hub/con-approval-pipeline.adoc index efd5a9b3a0..b13d11f6b6 100644 --- a/downstream/modules/hub/con-approval-pipeline.adoc +++ b/downstream/modules/hub/con-approval-pipeline.adoc @@ -6,7 +6,7 @@ = Approval pipeline for custom repositories in {HubName} -In {HubName} you can approve collections into any repository marked with the `pipeline=approved` label. By default, {HubName} ships with one repository for approved content, but you have the option to add more from the repository creation screen. You cannot directly publish into a repository marked with the `pipeline=approved` label. A collection must first go through a staging repository and be approved before being published into a 'pipleline=approved' repository. +In {HubName} you can approve collections into any repository marked with the `pipeline=approved` label. By default, {HubName} includes one repository for approved content, but you have the option to add more from the repository creation screen. You cannot directly publish into a repository marked with the `pipeline=approved` label. A collection must first go through a staging repository and be approved before being published into a 'pipleline=approved' repository. Auto approval:: When auto approve is enabled, any collection you upload to a staging repository is automatically promoted to all of the repositories marked as `pipeline=approved`. diff --git a/downstream/modules/hub/proc-pushing-container-images-from-your-local.adoc b/downstream/modules/hub/proc-pushing-container-images-from-your-local.adoc index 8cdc4ab79d..29c1c923fd 100644 --- a/downstream/modules/hub/proc-pushing-container-images-from-your-local.adoc +++ b/downstream/modules/hub/proc-pushing-container-images-from-your-local.adoc @@ -6,7 +6,7 @@ Use the following procedure to sign images on a local system and push those signed images to the {HubName} registry. .Procedure -. From a terminal, log into podman, or any container client currently in use: +. From a terminal, log in to Podman, or any container client currently in use: + ---- > podman pull diff --git a/downstream/modules/platform/con-building-an-execution-environment-in-a-disconnected-environment.adoc b/downstream/modules/platform/con-building-an-execution-environment-in-a-disconnected-environment.adoc index f702eb5c9b..8d4f85f6f3 100644 --- a/downstream/modules/platform/con-building-an-execution-environment-in-a-disconnected-environment.adoc +++ b/downstream/modules/platform/con-building-an-execution-environment-in-a-disconnected-environment.adoc @@ -12,15 +12,15 @@ link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/creating_ * PyPI (pypi.org) for any python packages required as collection dependencies. -* RPM repositories such as the RHEL or UBI repositories (cdn.redhat.com) for adding or updating RPMs to the execution environment image, if needed. +* RPM repositories such as the RHEL or UBI repositories (cdn.redhat.com) for adding or updating RPMs to the {ExecEnvShort} image, if needed. * registry.redhat.io for access to the base container images. -Building an {ExecEnvShort} image in a disconnected environment requires mirroring content from these locations. See link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/red_hat_ansible_automation_platform_installation_guide/index#importing-collections-into-private-automation-hub_disconnected-installation[Importing Collections into private automation hub] for information on importing collections from Ansible {Galaxy} or {HubName} into a {PrivateHubName}. +Building an {ExecEnvShort} image in a disconnected environment requires mirroring content from these locations. See link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/red_hat_ansible_automation_platform_installation_guide/index#importing-collections-into-private-automation-hub_disconnected-installation[Importing Collections into {PrivateHubName}] for information about importing collections from {Galaxy} or {HubName} into a {PrivateHubName}. -Mirrored PyPI content once transferred into the disconnected network can be made available using a web server or an artifact repository like Nexus. The RHEL and UBI repository content can be exported from an internet-facing Red Hat Satellite server, copied into the disconnected environment, then imported into a disconnected Satellite so it is available for building custom {ExecEnvShort}s. See link:{BaseURL}/red_hat_satellite/{SatelliteVers}/html-single/installing_satellite_server_in_a_disconnected_network_environment/index#iss_export_sync_in_an_air_gapped_scenario[ISS Export Sync in an Air-Gapped Scenario] for details. +Mirrored PyPI content once transferred into the disconnected network can be made available by using a web server or an artifact repository such as Nexus. The RHEL and UBI repository content can be exported from an internet-facing Red Hat Satellite Server, copied into the disconnected environment, then imported into a disconnected Satellite so it is available for building custom {ExecEnvShort}s. See link:{BaseURL}/red_hat_satellite/{SatelliteVers}/html-single/installing_satellite_server_in_a_disconnected_network_environment/index#iss_export_sync_in_an_air_gapped_scenario[ISS Export Sync in an Air-Gapped Scenario] for details. -The default base container image, ee-minimal-rhel8, is used to create custom {ExecEnvShort} images and is included with the bundled installer. This image is added to the {PrivateHubName} at install time. If a different base container image such as ee-minimal-rhel9 is required, it must be imported to the disconnected network and added to the {PrivateHubName} container registry. +The default base container image, ee-minimal-rhel8, is used to create custom {ExecEnvShort} images and is included with the bundled installer. This image is added to the {PrivateHubName} at install time. If a different base container image such as ee-minimal-rhel9 is required, it must be imported to the disconnected network and added to the {PrivateHubName} container registry. Once all of the prerequisites are available on the disconnected network, the ansible-builder command can be used to create custom {ExecEnvShort} images. diff --git a/downstream/modules/platform/con-controller-understand-architecture.adoc b/downstream/modules/platform/con-controller-understand-architecture.adoc index 7319c94cc7..a7dab89548 100644 --- a/downstream/modules/platform/con-controller-understand-architecture.adoc +++ b/downstream/modules/platform/con-controller-understand-architecture.adoc @@ -3,7 +3,7 @@ = Understand the architecture of {PlatformNameShort} and {ControllerName} {PlatformNameShort} and {ControllerName} comprise a general-purpose, declarative automation platform. -That means that once an Ansible playbook is launched (by {ControllerName}, or directly on the command line), the playbook, inventory, and credentials provided to Ansible are considered to be the source of truth. +That means that when an Ansible Playbook is launched (by {ControllerName}, or directly on the command line), the playbook, inventory, and credentials provided to Ansible are considered to be the source of truth. If you want policies around external verification of specific playbook content, job definition, or inventory contents, you must complete these processes before the automation is launched, either by the {ControllerName} web UI, or the {ControllerName} API. The use of source control, branching, and mandatory code review is best practice for Ansible automation. diff --git a/downstream/modules/platform/con-operator-upgrade-considerations.adoc b/downstream/modules/platform/con-operator-upgrade-considerations.adoc index 646d66df6f..b112b8a5a1 100644 --- a/downstream/modules/platform/con-operator-upgrade-considerations.adoc +++ b/downstream/modules/platform/con-operator-upgrade-considerations.adoc @@ -6,7 +6,7 @@ [role="_abstract"] {PlatformName} version 2.0 was the first release of the {OperatorPlatform}. If you are upgrading from version 2.0, continue to the xref:upgrading-operator_operator-upgrade[Upgrading the {OperatorPlatform}] procedure. -If you are using a version of {OCPShort} that is not supported by the version of {PlatformName} to which you are upgrading, you must upgrade your {OCPShort} cluster to a supported version prior to upgrading. +If you are using a version of {OCPShort} that is not supported by the version of {PlatformName} to which you are upgrading, you must upgrade your {OCPShort} cluster to a supported version before upgrading. Refer to the link:https://access.redhat.com/support/policy/updates/ansible-automation-platform[Red Hat Ansible Automation Platform Life Cycle] to determine the {OCPShort} version needed. diff --git a/downstream/modules/platform/proc-aap-activate-with-manifest.adoc b/downstream/modules/platform/proc-aap-activate-with-manifest.adoc index 0f6b004635..b775ef18ce 100644 --- a/downstream/modules/platform/proc-aap-activate-with-manifest.adoc +++ b/downstream/modules/platform/proc-aap-activate-with-manifest.adoc @@ -3,7 +3,7 @@ = Activate with a manifest file -If you have a subscriptions manifest, you can upload the manifest file either using the {PlatformName} interface or manually in an Ansible playbook. +If you have a subscriptions manifest, you can upload the manifest file either by using the {PlatformName} interface or manually in an Ansible Playbook. .Prerequisites You must have a Red Hat Subscription Manifest file exported from the Red Hat Customer Portal. For more information, see xref:assembly-aap-obtain-manifest-files[Obtaining a manifest file]. @@ -25,7 +25,7 @@ If the btn:[BROWSE] button is disabled on the License page, clear the *USERNAME* .Uploading manually -If you are unable to apply or update the subscription info using the {PlatformName} interface, you can upload the subscriptions manifest manually in an Ansible playbook using the `license` module in the `ansible.controller` collection. +If you are unable to apply or update the subscription information by using the {PlatformName} interface, you can upload the subscriptions manifest manually in an Ansible Playbook by using the `license` module in the `ansible.controller` collection. ----- - name: Set the license using a file diff --git a/downstream/modules/platform/proc-configure-upgraded-aap.adoc b/downstream/modules/platform/proc-configure-upgraded-aap.adoc index f3d37901d5..ed709e87d7 100644 --- a/downstream/modules/platform/proc-configure-upgraded-aap.adoc +++ b/downstream/modules/platform/proc-configure-upgraded-aap.adoc @@ -6,7 +6,7 @@ After upgrading your {PlatformName} instance, associate your original instances to its corresponding instance groups by configuring settings in the {ControllerName} UI: -. Log into the new Controller instance. +. Log in to the new Controller instance. . Content from old instance, such as credentials, jobs, inventories should now be visible on your Controller instance. . Navigate to {MenuInfrastructureInstanceGroups}. . Associate execution nodes by clicking on an instance group, then click the *Instances* tab. diff --git a/downstream/modules/platform/proc-controller-adding-subscription-manually.adoc b/downstream/modules/platform/proc-controller-adding-subscription-manually.adoc index 3b0cdb2532..ea2b2c7d64 100644 --- a/downstream/modules/platform/proc-controller-adding-subscription-manually.adoc +++ b/downstream/modules/platform/proc-controller-adding-subscription-manually.adoc @@ -2,7 +2,7 @@ = Add a subscription manually -If you are unable to apply or update the subscription information by using the {ControllerName} user interface, you can upload the subscriptions manifest manually in an Ansible playbook. +If you are unable to apply or update the subscription information by using the {ControllerName} user interface, you can upload the subscriptions manifest manually in an Ansible Playbook. Use the license module in the `ansible.controller` collection: diff --git a/downstream/modules/platform/proc-controller-deleting-a-user.adoc b/downstream/modules/platform/proc-controller-deleting-a-user.adoc index 8dc4831d99..4f65170115 100644 --- a/downstream/modules/platform/proc-controller-deleting-a-user.adoc +++ b/downstream/modules/platform/proc-controller-deleting-a-user.adoc @@ -8,7 +8,7 @@ When you delete a user account, the name and email of the user are permanently r .Procedure . From the navigation panel, select {MenuControllerUsers}. . Click btn:[Users] to display a list of the current users. -. Select the check box for the user that you want to remove. +. Select the checkbox for the user that you want to remove. . Click btn:[Delete]. //+ //image:users-home-users-checked-delete.png[image] diff --git a/downstream/modules/platform/proc-controller-reset-tower-base.adoc b/downstream/modules/platform/proc-controller-reset-tower-base.adoc index 4f7d249732..f011000e58 100644 --- a/downstream/modules/platform/proc-controller-reset-tower-base.adoc +++ b/downstream/modules/platform/proc-controller-reset-tower-base.adoc @@ -14,6 +14,6 @@ Use the following procedure to reset `TOWER_URL_BASE` if the wrong address has b . From the navigation panel, select menu:{MenuAEAdminSettings}[System]. . Click btn:[Edit]. -. Enter the address in the *Base URL of the service* field for the DNS entry you wish to appear in notifications. +. Enter the address in the *Base URL of the service* field for the DNS entry you want to appear in notifications. //[ddacosta] Subscription is not an option from the Settings menu in the controller test environment. Need to verify where this lives and if it changes for 2.5 //. Re-add your license in menu:Settings[Subscription settings]. diff --git a/downstream/modules/platform/proc-controller-run-ad-hoc-commands.adoc b/downstream/modules/platform/proc-controller-run-ad-hoc-commands.adoc index 9c1f4bbb8a..b7f2f0c910 100644 --- a/downstream/modules/platform/proc-controller-run-ad-hoc-commands.adoc +++ b/downstream/modules/platform/proc-controller-run-ad-hoc-commands.adoc @@ -39,7 +39,7 @@ The Run command window opens. To target all hosts in the inventory enter `all` or `*`, or leave the field blank. This is automatically populated with whatever was selected in the previous view before clicking the launch button. * *Machine Credential*: Select the credential to use when accessing the remote hosts to run the command. -Choose the credential containing the username and SSH key or password that Ansible needs to log into the remote hosts. +Choose the credential containing the username and SSH key or password that Ansible needs to log in to the remote hosts. * *Verbosity*: Select a verbosity level for the standard output. * *Forks*: If needed, select the number of parallel or simultaneous processes to use while executing the command. * *Show Changes*: Select to enable the display of Ansible changes in the diff --git a/downstream/modules/platform/proc-controller-run-job-template.adoc b/downstream/modules/platform/proc-controller-run-job-template.adoc index 1366086bef..3c9b992825 100644 --- a/downstream/modules/platform/proc-controller-run-job-template.adoc +++ b/downstream/modules/platform/proc-controller-run-job-template.adoc @@ -2,8 +2,8 @@ = Running a job template -A benefit of {ControllerName} is the push-button deployment of Ansible playbooks. -You can configure a template to store all the parameters that you would normally pass to the Ansible playbook on the command line. +A benefit of {ControllerName} is the push-button deployment of Ansible Playbooks. +You can configure a template to store all the parameters that you would normally pass to the Ansible Playbook on the command line. In addition to the playbooks, the template passes the inventory, credentials, extra variables, and all options and settings that you can specify on the command line. .Procedure diff --git a/downstream/modules/platform/proc-controller-set-up-SAML.adoc b/downstream/modules/platform/proc-controller-set-up-SAML.adoc index a20e34455d..1ebb738454 100644 --- a/downstream/modules/platform/proc-controller-set-up-SAML.adoc +++ b/downstream/modules/platform/proc-controller-set-up-SAML.adoc @@ -173,7 +173,7 @@ To avoid this, you can remove (or add) administrator privileges based on SAML ma + . Optional: Provide the *SAML Organization Map*. For more information, see xref:ref-controller-organization-mapping[Organization mapping] and xref:ref-controller-team-mapping[Team mapping]. -. You can configure {ControllerName} to look for particular attributes that contain Team and Organization membership to associate with users when they log into {ControllerName}. +. You can configure {ControllerName} to look for particular attributes that contain Team and Organization membership to associate with users when they log in to {ControllerName}. The attribute names are defined in the *SAML Organization Attribute Mapping* and the *SAML Team Attribute Mapping* fields. + .Example SAML Organization Attribute Mapping diff --git a/downstream/modules/platform/proc-creating-collection-namespace.adoc b/downstream/modules/platform/proc-creating-collection-namespace.adoc index 78a0a369e8..4084ac7c12 100644 --- a/downstream/modules/platform/proc-creating-collection-namespace.adoc +++ b/downstream/modules/platform/proc-creating-collection-namespace.adoc @@ -34,7 +34,7 @@ Once the namespace has been created, you can import the collection by using the . Click btn:[Upload]. -This opens the 'My Imports' page. You can see the status of the import and various details of the files and modules that have been imported. +This opens the 'My Imports' page. You can see the status of the import and various details of the files and modules that have been imported. == Importing the collection tarball by using the CLI diff --git a/downstream/modules/platform/proc-creating-the-custom-execution-environment-definition.adoc b/downstream/modules/platform/proc-creating-the-custom-execution-environment-definition.adoc index 291739651d..ace86cbad1 100644 --- a/downstream/modules/platform/proc-creating-the-custom-execution-environment-definition.adoc +++ b/downstream/modules/platform/proc-creating-the-custom-execution-environment-definition.adoc @@ -97,7 +97,7 @@ trusted-host = ---- + -. Optional: If a `bindep.txt` file is being used to add RPMs the custom {ExecEnvShort}, create a `custom.repo` file under the `files/` subdirectory that points to your disconnected Satellite or other location hosting the RPM repositories. If this step is necessary, uncomment the steps in the example `execution-environment.yml` file that correspond with the `custom.repo` file. +. Optional: If you use a `bindep.txt` file to add RPMs the custom {ExecEnvShort}, create a `custom.repo` file under the `files/` subdirectory that points to your disconnected Satellite or other location hosting the RPM repositories. If this step is necessary, uncomment the steps in the example `execution-environment.yml` file that correspond with the `custom.repo` file. + The following example is for the UBI repos. Other local repos can be added to this file as well. The URL path may need to change depending on where the mirror content is located on the web server. diff --git a/downstream/modules/platform/proc-deprovision-group.adoc b/downstream/modules/platform/proc-deprovision-group.adoc index 44753741ae..401698c006 100644 --- a/downstream/modules/platform/proc-deprovision-group.adoc +++ b/downstream/modules/platform/proc-deprovision-group.adoc @@ -16,7 +16,7 @@ You can deprovision any hosts in your inventory except for the first host specif .Procedure -* Add `*node_state=deprovision*` to the [group:vars] associated with the group you wish to deprovision. +* Add `*node_state=deprovision*` to the [group:vars] associated with the group you want to deprovision. .Example diff --git a/downstream/modules/platform/proc-installing-the-ansible-builder-rpm.adoc b/downstream/modules/platform/proc-installing-the-ansible-builder-rpm.adoc index eae85c1fa0..12260dbb6f 100644 --- a/downstream/modules/platform/proc-installing-the-ansible-builder-rpm.adoc +++ b/downstream/modules/platform/proc-installing-the-ansible-builder-rpm.adoc @@ -8,7 +8,7 @@ [role="_abstract"] -On the RHEL system where custom {ExecEnvShort}s will be built, you will install the {Builder} RPM using a Satellite server that already exists in the environment. This method is preferred because the {ExecEnvShort} images can use any RHEL content from the pre-existing Satellite if required. +On the RHEL system where custom {ExecEnvShort}s will be built, you will install the {Builder} RPM by using a Satellite Server that already exists in the environment. This method is preferred because the {ExecEnvShort} images can use any RHEL content from the pre-existing Satellite if required. .Procedure @@ -17,11 +17,11 @@ On the RHEL system where custom {ExecEnvShort}s will be built, you will install .. Subscribe the RHEL system to a Satellite on the disconnected network. -.. Attach the {PlatformNameShort} subscription and enable the AAP repository. The repository name will either be `ansible-automation-platform-2.4-for-rhel-8-x86_64-rpms` or `ansible-automation-platform-2.4-for-rhel-9-x86_64-rpms` depending on the version of RHEL used on the underlying system. +.. Attach the {PlatformNameShort} subscription and enable the {PlatformNameShort} repository. The repository name is either `ansible-automation-platform-2.4-for-rhel-8-x86_64-rpms` or `ansible-automation-platform-2.4-for-rhel-9-x86_64-rpms` depending on the version of RHEL used on the underlying system. -.. Install the {Builder} RPM. The version of the {Builder} RPM must be 3.0.0 or later in order for the examples below to work properly. +.. Install the {Builder} RPM. The version of the {Builder} RPM must be 3.0.0 or later in order for the examples below to work properly. -. Install the {Builder} RPM from the {PlatformNameShort} setup bundle. Use this method if a Satellite server is not available on your disconnected network. +. Install the {Builder} RPM from the {PlatformNameShort} setup bundle. Use this method if a Satellite Server is not available on your disconnected network. .. Unarchive the {PlatformNameShort} setup bundle. diff --git a/downstream/modules/platform/proc-operator-external-db-controller.adoc b/downstream/modules/platform/proc-operator-external-db-controller.adoc index 0bfee14bd6..2899ce06c4 100644 --- a/downstream/modules/platform/proc-operator-external-db-controller.adoc +++ b/downstream/modules/platform/proc-operator-external-db-controller.adoc @@ -47,7 +47,7 @@ stringData: type: "unmanaged" type: Opaque ---- -<1> Namespace to create the secret in. This should be the same namespace you wish to deploy to. +<1> Namespace to create the secret in. This should be the same namespace you want to deploy to. <2> The resolvable hostname for your database node. <3> External port defaults to `5432`. <4> Value for variable `password` should not contain single or double quotes (', ") or backslashes (\) to avoid any issues during deployment, backup or restoration. diff --git a/downstream/modules/platform/proc-operator-external-db-hub.adoc b/downstream/modules/platform/proc-operator-external-db-hub.adoc index 45d3b3442a..ff124365cb 100644 --- a/downstream/modules/platform/proc-operator-external-db-hub.adoc +++ b/downstream/modules/platform/proc-operator-external-db-hub.adoc @@ -47,7 +47,7 @@ stringData: type: "unmanaged" type: Opaque ---- -<1> Namespace to create the secret in. This should be the same namespace you wish to deploy to. +<1> Namespace to create the secret in. This should be the same namespace you want to deploy to. <2> The resolvable hostname for your database node. <3> External port defaults to `5432`. <4> Value for variable `password` should not contain single or double quotes (', ") or backslashes (\) to avoid any issues during deployment, backup or restoration. diff --git a/downstream/modules/platform/ref-controller-audit-functionality.adoc b/downstream/modules/platform/ref-controller-audit-functionality.adoc index e15a680232..58c37ec208 100644 --- a/downstream/modules/platform/ref-controller-audit-functionality.adoc +++ b/downstream/modules/platform/ref-controller-audit-functionality.adoc @@ -3,9 +3,9 @@ = Audit and logging functionality For any administrative access, it is important to audit and watch for actions. -For the system overall, you can do this through the built in audit support and the built-in logging support. +For the system overall, you can do this through the built-in audit support and the built-in logging support. -For {ControllerName}, you can do this through the built-in Activity Stream support that logs all changes within {ControllerName}, as well as through the automation logs. +For {ControllerName}, you can do this through the built-in Activity Stream support that logs all changes within {ControllerName}, and through the automation logs. Best practices dictate collecting logging and auditing centrally rather than reviewing it on the local system. You must configure {ControllerName} to use standard IDs or logging and auditing (Splunk) in your environment. diff --git a/downstream/modules/platform/ref-controller-change-admin-password.adoc b/downstream/modules/platform/ref-controller-change-admin-password.adoc index 166d67f74e..2677ea48e3 100644 --- a/downstream/modules/platform/ref-controller-change-admin-password.adoc +++ b/downstream/modules/platform/ref-controller-change-admin-password.adoc @@ -2,8 +2,8 @@ = Change the {ControllerName} Administrator Password -During the installation process, you are prompted to enter an administrator password which is used for the `admin` superuser or system administrator created by {ControllerName}. -If you log into the instance using SSH, it tells you the default administrator password in the prompt. +During the installation process, you are prompted to enter an administrator password that is used for the `admin` superuser or system administrator created by {ControllerName}. +If you log in to the instance by using SSH, it tells you the default administrator password in the prompt. If you need to change this password at any point, run the following command as root on the {ControllerName} server: diff --git a/downstream/modules/platform/ref-controller-internal-services.adoc b/downstream/modules/platform/ref-controller-internal-services.adoc index 0ecdff36fa..2fa2dd8812 100644 --- a/downstream/modules/platform/ref-controller-internal-services.adoc +++ b/downstream/modules/platform/ref-controller-internal-services.adoc @@ -6,7 +6,7 @@ PostgreSQL database:: The connection to the PostgreSQL database is done by password authentication over TCP, either through localhost or remotely (external database). -This connection can use PostgreSQL's built in support for SSL/TLS, as natively configured by the installer support. +This connection can use PostgreSQL's built-in support for SSL/TLS, as natively configured by the installer support. SSL/TLS protocols are configured by the default OpenSSL configuration. A Redis key or value store:: diff --git a/downstream/modules/platform/ref-controller-smart-host-filter.adoc b/downstream/modules/platform/ref-controller-smart-host-filter.adoc index 62dc160fec..274b5a6f1d 100644 --- a/downstream/modules/platform/ref-controller-smart-host-filter.adoc +++ b/downstream/modules/platform/ref-controller-smart-host-filter.adoc @@ -4,7 +4,7 @@ You can use a search filter to populate hosts for an inventory. This feature uses the fact searching feature. -{ControllerNameStart} stores facts generated by an Ansible playbook during a Job Template in the database whenever `use_fact_cache=True` is set per-Job Template. +{ControllerNameStart} stores facts generated by an Ansible Playbook during a Job Template in the database whenever `use_fact_cache=True` is set per-Job Template. New facts are merged with existing facts and are per-host. These stored facts can be used to filter hosts with the `/api/v2/hosts` endpoint, using the `GET` query parameter `host_filter`. From f402b8a915be7230bdc954f857e030b13bb1552f Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Tue, 23 Jul 2024 09:56:42 +0100 Subject: [PATCH 046/590] updating feedback and disclaimer modules in aap-common (#1612) (#1619) --- downstream/aap-common/external-site-disclaimer.adoc | 2 +- downstream/aap-common/providing-feedback.adoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/downstream/aap-common/external-site-disclaimer.adoc b/downstream/aap-common/external-site-disclaimer.adoc index 020020f7eb..923ef0ad04 100644 --- a/downstream/aap-common/external-site-disclaimer.adoc +++ b/downstream/aap-common/external-site-disclaimer.adoc @@ -17,4 +17,4 @@ // Add the following in the file where you want the text to be included: // include::snippets/external-site-disclaimer.adoc[] -*Disclaimer*: Links contained in this note to external website(s) are provided for convenience only. Red Hat has not reviewed the links and is not responsible for the content or its availability. The inclusion of any link to an external website does not imply endorsement by Red Hat of the website or their entities, products or services. You agree that Red Hat is not responsible or liable for any loss or expenses that may result due to your use of (or reliance on) the external site or content. +*Disclaimer*: Links contained in this note to external websites are provided for convenience only. Red Hat has not reviewed the links and is not responsible for the content or its availability. The inclusion of any link to an external website does not imply endorsement by Red Hat of the website or their entities, products or services. You agree that Red Hat is not responsible or liable for any loss or expenses that may result due to your use of (or reliance on) the external site or content. diff --git a/downstream/aap-common/providing-feedback.adoc b/downstream/aap-common/providing-feedback.adoc index ef5a39c0e3..9fb541ab69 100644 --- a/downstream/aap-common/providing-feedback.adoc +++ b/downstream/aap-common/providing-feedback.adoc @@ -3,5 +3,5 @@ [id="providing-feedback"] = Providing feedback on Red Hat documentation -If you have a suggestion to improve this documentation, or find an error, please contact technical support at link:https://access.redhat.com[https://access.redhat.com] to create an issue on the {PlatformNameShort} Jira project using the *docs-product* component. +If you have a suggestion to improve this documentation, or find an error, you can contact technical support at link:https://access.redhat.com[https://access.redhat.com] to open a request. From bc4d263d9100c24c93994dec9226bb94efb4d8a1 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Tue, 23 Jul 2024 10:11:02 +0100 Subject: [PATCH 047/590] adding SME comments on final draft (#1621) (#1622) --- .../modules/platform/proc-cli-get-controller-pwd.adoc | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/downstream/modules/platform/proc-cli-get-controller-pwd.adoc b/downstream/modules/platform/proc-cli-get-controller-pwd.adoc index abc9a451a6..1f42a5fe2a 100644 --- a/downstream/modules/platform/proc-cli-get-controller-pwd.adoc +++ b/downstream/modules/platform/proc-cli-get-controller-pwd.adoc @@ -59,20 +59,12 @@ data: password: ODzLODzLODzLODzLODzLODzLODzLODzLODzLODzLODzL kind: Secret metadata: - annotations: - kubectl.kubernetes.io/last-applied-configuration: '{"apiVersion":"v1","kind":"Secret","metadata":{"labels":{"app.kubernetes.io/component":"automationcontroller","app.kubernetes.io/managed-by":"automationcontroller-operator","app.kubernetes.io/name":"example","app.kubernetes.io/operator-version":"","app.kubernetes.io/part-of":"example"},"name":"example-admin-password","namespace":"ansible-automation-platform"},"stringData":{"password":"88TG88TG88TG88TG88TG88TG88TG88TG"}}' - creationTimestamp: "2021-11-03T00:02:24Z" labels: - app.kubernetes.io/component: automationcontroller - app.kubernetes.io/managed-by: automationcontroller-operator + app.kubernetes.io/component: aap app.kubernetes.io/name: example app.kubernetes.io/operator-version: "" app.kubernetes.io/part-of: example name: example-admin-password namespace: ansible-automation-platform - resourceVersion: "185185" - uid: 39393939-5252-4242-b929-665f665f665f ----- - -For this example, the password is `88TG88TG88TG88TG88TG88TG88TG88TG`. From bd3bd88da7932215cd09ee378bbc069f2a5b13b0 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Thu, 25 Jul 2024 10:59:36 +0100 Subject: [PATCH 048/590] Editorial review of entire doc ahead of 2.5 EA (#1628) (#1631) --- .../assembly-configure-aap-operator.adoc | 2 + .../assembly-installing-hub-operator.adoc | 13 ++-- ...assembly-operator-add-execution-nodes.adoc | 2 +- ...ng-rhsso-operator-with-automation-hub.adoc | 2 +- .../modules/platform/con-about-operator.adoc | 2 +- .../platform/con-ocp-supported-install.adoc | 2 +- .../proc-add-operator-execution-nodes.adoc | 6 +- .../proc-controller-ingress-options.adoc | 4 +- .../platform/proc-create-keycloak-client.adoc | 2 +- .../proc-create-keycloak-instance.adoc | 2 +- .../platform/proc-hub-ingress-options.adoc | 4 +- .../platform/proc-install-aap-operator.adoc | 2 +- .../proc-install-cli-aap-operator.adoc | 2 +- .../proc-installing-hub-using-operator.adoc | 4 +- .../platform/proc-operator-access-aap.adoc | 2 +- .../proc-operator-deploy-central-config.adoc | 61 +++++++++---------- .../proc-operator-external-db-controller.adoc | 6 +- .../proc-operator-external-db-hub.adoc | 8 +-- .../platform/proc-update-rhsso-client.adoc | 2 +- 19 files changed, 65 insertions(+), 63 deletions(-) diff --git a/downstream/assemblies/platform/assembly-configure-aap-operator.adoc b/downstream/assemblies/platform/assembly-configure-aap-operator.adoc index 69b0e99fc4..65f0236367 100644 --- a/downstream/assemblies/platform/assembly-configure-aap-operator.adoc +++ b/downstream/assemblies/platform/assembly-configure-aap-operator.adoc @@ -16,6 +16,8 @@ The platform gateway for {PlatformNameShort} enables you to manage the following Before you can deploy the platform gateway you must have {OperatorPlatform} installed in a namespace. If you have not installed {OperatorPlatform} see <>. +NOTE: Platform gateway is only available under {OperatorPlatform} version 2.5. Every component deployed under {OperatorPlatform} 2.5 will also default to version 2.5. + If you have the {OperatorPlatform} and some or all of the {PlatformNameShort} components installed see <> for how to proceed. include::platform/proc-operator-link-components.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-installing-hub-operator.adoc b/downstream/assemblies/platform/assembly-installing-hub-operator.adoc index 654d36cb0f..5b65083582 100644 --- a/downstream/assemblies/platform/assembly-installing-hub-operator.adoc +++ b/downstream/assemblies/platform/assembly-installing-hub-operator.adoc @@ -27,15 +27,16 @@ When an instance of {HubName} is removed, the PVCs are not automatically deleted == Prerequisites -* You have installed the {PlatformName} operator in Operator Hub. +* You have installed the {OperatorPlatform} in Operator Hub. -== Installing the {HubName} operator -Use this procedure to install the {HubName} operator. +// commenting out below as encouraging users to use platform gateway for installation, only covering configuration here [gmurray] +// == Installing the {HubName} operator +// Use this procedure to install the {HubName} operator. -.Procedure +// .Procedure -. Navigate to menu:Operators[Installed Operators]. -. Locate the *Automation hub* entry, then click btn:[Create instance]. +// . Navigate to menu:Operators[Installed Operators]. +// . Locate the *Automation hub* entry, then click btn:[Create instance]. include::platform/con-storage-options-for-operator-installation-on-ocp.adoc[leveloffset=+2] include::platform/proc-provision-ocp-storage-with-readwritemany.adoc[leveloffset=+3] diff --git a/downstream/assemblies/platform/assembly-operator-add-execution-nodes.adoc b/downstream/assemblies/platform/assembly-operator-add-execution-nodes.adoc index 8bf218fe42..bb723ff01e 100644 --- a/downstream/assemblies/platform/assembly-operator-add-execution-nodes.adoc +++ b/downstream/assemblies/platform/assembly-operator-add-execution-nodes.adoc @@ -6,7 +6,7 @@ ifdef::context[:parent-context: {context}] :context: operator-upgrade -You can enable the {PlatformNameShort} Operator with execution nodes by downloading and installing the install bundle. +You can enable the {OperatorPlatform} with execution nodes by downloading and installing the install bundle. include::platform/proc-add-operator-execution-nodes.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-using-rhsso-operator-with-automation-hub.adoc b/downstream/assemblies/platform/assembly-using-rhsso-operator-with-automation-hub.adoc index 4052f59442..cb371f10c0 100644 --- a/downstream/assemblies/platform/assembly-using-rhsso-operator-with-automation-hub.adoc +++ b/downstream/assemblies/platform/assembly-using-rhsso-operator-with-automation-hub.adoc @@ -9,7 +9,7 @@ ifdef::context[:parent-context: {context}] {PrivateHubNameStart} uses {RHSSO} for authentication. The {OperatorRHSSO} creates and manages resources. -Use this Operator to create custom resources to automate {RHSSO} administration in Openshift. +Use this operator to create custom resources to automate {RHSSO} administration in OpenShift. * When installing {PlatformNameShort} on _Virtual Machines_ (VMs) the installer can automatically install and configure {RHSSO} for use with {PrivateHubName}. diff --git a/downstream/modules/platform/con-about-operator.adoc b/downstream/modules/platform/con-about-operator.adoc index d38d9620a2..ea54b95823 100644 --- a/downstream/modules/platform/con-about-operator.adoc +++ b/downstream/modules/platform/con-about-operator.adoc @@ -4,7 +4,7 @@ [role="_abstract"] The {OperatorPlatform} provides cloud-native, push-button deployment of new {PlatformNameShort} instances in your OpenShift environment. -The {OperatorPlatform} includes resource types to deploy and manage instances of {ControllerNameStart} and {PrivateHubName}. +The {OperatorPlatform} includes resource types to deploy and manage instances of {ControllerName} and {PrivateHubName}. It also includes {ControllerName} job resources for defining and launching jobs inside your {ControllerName} deployments. Deploying {PlatformNameShort} instances with a Kubernetes native operator offers several advantages over launching instances from a playbook deployed on {OCP}, including upgrades and full lifecycle support for your {PlatformName} deployments. diff --git a/downstream/modules/platform/con-ocp-supported-install.adoc b/downstream/modules/platform/con-ocp-supported-install.adoc index d50cdb597a..45b9abd5bc 100644 --- a/downstream/modules/platform/con-ocp-supported-install.adoc +++ b/downstream/modules/platform/con-ocp-supported-install.adoc @@ -5,7 +5,7 @@ You can use the OperatorHub on the {OCP} web console to install {OperatorPlatform}. -Alternatively, you can install {OperatorPlatform} from the {OCPShort} command-line interface (CLI), `oc`. +Alternatively, you can install {OperatorPlatform} from the {OCPShort} command-line interface (CLI), `oc`. See <> for help with this. After you have installed {OperatorPlatform} you must create an *AnsibleAutomationPlatform* custom resource (CR). This allows you to manage {PlatformNameShort} components from a single unified interface known as the platform gateway. As of version 2.5, you must create an {PlatformNameShort} CR, even if you have an existing {ControllerName}, {HubName}, or {EDAName}, components. diff --git a/downstream/modules/platform/proc-add-operator-execution-nodes.adoc b/downstream/modules/platform/proc-add-operator-execution-nodes.adoc index 0c649ec0ed..befc4f63ab 100644 --- a/downstream/modules/platform/proc-add-operator-execution-nodes.adoc +++ b/downstream/modules/platform/proc-add-operator-execution-nodes.adoc @@ -1,9 +1,9 @@ [id="add-operator-execution-nodes_{context}"] .Prerequisites -* An {ControllerName} instance -* The receptor collection package is installed -* The `ansible-runner` package is installed +* An {ControllerName} instance. +* The receptor collection package is installed. +* The `ansible-runner` package is installed. .Procedure . Log in to {PlatformName}. diff --git a/downstream/modules/platform/proc-controller-ingress-options.adoc b/downstream/modules/platform/proc-controller-ingress-options.adoc index d95e0f3f0f..66c0a05c78 100644 --- a/downstream/modules/platform/proc-controller-ingress-options.adoc +++ b/downstream/modules/platform/proc-controller-ingress-options.adoc @@ -1,8 +1,8 @@ [id="proc-controller-ingress-options_{context}"] -= Configuring the Ingress type for your {ControllerName} operator += Configuring the ingress type for your {ControllerName} operator -The {PlatformName} operator installation form allows you to further configure your {ControllerName} operator Ingress under *Advanced configuration*. +The {OperatorPlatform} installation form allows you to further configure your {ControllerName} operator ingress under *Advanced configuration*. .Procedure diff --git a/downstream/modules/platform/proc-create-keycloak-client.adoc b/downstream/modules/platform/proc-create-keycloak-client.adoc index ad9f0f5eb6..6b2d6f1b8e 100644 --- a/downstream/modules/platform/proc-create-keycloak-client.adoc +++ b/downstream/modules/platform/proc-create-keycloak-client.adoc @@ -141,6 +141,6 @@ spec: . Click btn:[Create] and wait for the process to complete. -When {HubName} is deployed, you must update the client with the “Valid Redirect URIs” and “Web Origins” as described in xref:proc-update-rhsso-client_{context}[Updating the {RHSSO} client] +After you deploy {HubName}, you must update the client with the “Valid Redirect URIs” and “Web Origins” as described in xref:proc-update-rhsso-client_{context}[Updating the {RHSSO} client] Additionally, the client comes pre-configured with token mappers, however, if your authentication provider does not provide group data to Red Hat SSO, then the group mapping must be updated to reflect how that information is passed. This is commonly by user attribute. diff --git a/downstream/modules/platform/proc-create-keycloak-instance.adoc b/downstream/modules/platform/proc-create-keycloak-instance.adoc index 5f2be0cacf..a9ab571dc6 100644 --- a/downstream/modules/platform/proc-create-keycloak-instance.adoc +++ b/downstream/modules/platform/proc-create-keycloak-instance.adoc @@ -2,7 +2,7 @@ = Creating a Keycloak instance -When the {OperatorRHSSO} is installed you can create a Keycloak instance for use with {PlatformNameShort}. +After you install the {OperatorRHSSO}, you can create a Keycloak instance for use with {PlatformNameShort}. From here you provide an external Postgres or one will be created for you. diff --git a/downstream/modules/platform/proc-hub-ingress-options.adoc b/downstream/modules/platform/proc-hub-ingress-options.adoc index 1fefedb4ec..a6a9daf1ac 100644 --- a/downstream/modules/platform/proc-hub-ingress-options.adoc +++ b/downstream/modules/platform/proc-hub-ingress-options.adoc @@ -1,8 +1,8 @@ [id="proc-hub-ingress-options_{context}"] -= Configuring the Ingress type for your {HubName} operator += Configuring the ingress type for your {HubName} operator -The {PlatformName} operator installation form allows you to further configure your {HubName} operator Ingress under *Advanced configuration*. +The {OperatorPlatform} installation form allows you to further configure your {HubName} operator ingress under *Advanced configuration*. .Procedure diff --git a/downstream/modules/platform/proc-install-aap-operator.adoc b/downstream/modules/platform/proc-install-aap-operator.adoc index 327bbba38a..f3a226fef1 100644 --- a/downstream/modules/platform/proc-install-aap-operator.adoc +++ b/downstream/modules/platform/proc-install-aap-operator.adoc @@ -3,7 +3,7 @@ .Procedure . Log in to {OCP}. . Navigate to menu:Operators[OperatorHub]. -. Search for the {PlatformName} operator and click btn:[Install]. +. Search for {PlatformNameShort} and click btn:[Install]. . Select an *Update Channel*: + * *stable-2.x*: installs a namespace-scoped operator, which limits deployments of {HubName} and {ControllerName} instances to the namespace the operator is installed in. This is suitable for most cases. The stable-2.x channel does not require administrator privileges and utilizes fewer resources because it only monitors a single namespace. diff --git a/downstream/modules/platform/proc-install-cli-aap-operator.adoc b/downstream/modules/platform/proc-install-cli-aap-operator.adoc index 02da7b36b7..6c5c8d9223 100644 --- a/downstream/modules/platform/proc-install-cli-aap-operator.adoc +++ b/downstream/modules/platform/proc-install-cli-aap-operator.adoc @@ -10,7 +10,7 @@ Use this procedure to subscribe a namespace to an operator. .Procedure -. Create a project for the operator +. Create a project for the operator. + ----- oc new-project ansible-automation-platform diff --git a/downstream/modules/platform/proc-installing-hub-using-operator.adoc b/downstream/modules/platform/proc-installing-hub-using-operator.adoc index 12453aee41..6f93318156 100644 --- a/downstream/modules/platform/proc-installing-hub-using-operator.adoc +++ b/downstream/modules/platform/proc-installing-hub-using-operator.adoc @@ -1,8 +1,8 @@ [id="proc-installing-hub-using-operator_{context}"] -= Installing {HubName} using the Operator += Installing {HubName} using the {OperatorPlatform} -Use the following procedure to install {HubName} using the operator. +Use the following procedure to install {HubName} using the {OperatorPlatform}. .Procedure diff --git a/downstream/modules/platform/proc-operator-access-aap.adoc b/downstream/modules/platform/proc-operator-access-aap.adoc index de5e5833ad..3bf5bd1772 100644 --- a/downstream/modules/platform/proc-operator-access-aap.adoc +++ b/downstream/modules/platform/proc-operator-access-aap.adoc @@ -10,7 +10,7 @@ To access your *AnsibleAutomationPlatform* instance: . Navigate to menu:Networking[Routes] . Click the link under *Location* for *AnsibleAutomationPlatform*. -. This redirects you to the *AnsibleAutomationPlatform* login page. Enter your username in the *Username* field. +. This redirects you to the {PlatformNameShort} login page. Enter "admin" as your username in the *Username* field. . For the password you need to: .. Go to to menu:Workloads[Secrets]. .. Click btn:[-admin-password] and copy the password. diff --git a/downstream/modules/platform/proc-operator-deploy-central-config.adoc b/downstream/modules/platform/proc-operator-deploy-central-config.adoc index 5569c4f58a..9597d85373 100644 --- a/downstream/modules/platform/proc-operator-deploy-central-config.adoc +++ b/downstream/modules/platform/proc-operator-deploy-central-config.adoc @@ -14,37 +14,36 @@ The following procedure simulates a scenario where you have {ControllerName} as . Click btn:[YAML view] and copy in the following: + ---- -yaml -apiVersion: aap.ansible.com/v1alpha1 - kind: AnsibleAutomationPlatform - metadata: - name: example-aap - namespace: aap - spec: - # Platform - image_pull_policy: IfNotPresent - # Components - controller: - disabled: false - name: existing-controller-name - eda: - disabled: false - hub: - disabled: false - ## uncomment if using file storage for Content pod - storage_type: file - file_storage_storage_class: your-rwx-storage-class - file_storage_size: 10Gi - - ## uncomment if using S3 storage for Content pod - # storage_type: S3 - # object_storage_s3_secret: example-galaxy-object-storage - - ## uncomment if using Azure storage for Content pod - # storage_type: azure - # object_storage_azure_secret: azure-secret-name - lightspeed: - disabled: true + apiVersion: aap.ansible.com/v1alpha1 + kind: AnsibleAutomationPlatform + metadata: + name: example-aap + namespace: aap + spec: + # Platform + image_pull_policy: IfNotPresent + # Components + controller: + disabled: false + name: existing-controller-name + eda: + disabled: false + hub: + disabled: false + ## uncomment if using file storage for Content pod + storage_type: file + file_storage_storage_class: your-rwx-storage-class + file_storage_size: 10Gi + + ## uncomment if using S3 storage for Content pod + # storage_type: S3 + # object_storage_s3_secret: example-galaxy-object-storage + + ## uncomment if using Azure storage for Content pod + # storage_type: azure + # object_storage_azure_secret: azure-secret-name + lightspeed: + disabled: true ---- .. For new components, if you do not specify a name, a default name is generated. . Click btn:[Create]. diff --git a/downstream/modules/platform/proc-operator-external-db-controller.adoc b/downstream/modules/platform/proc-operator-external-db-controller.adoc index 2899ce06c4..eed39c6ac3 100644 --- a/downstream/modules/platform/proc-operator-external-db-controller.adoc +++ b/downstream/modules/platform/proc-operator-external-db-controller.adoc @@ -6,7 +6,7 @@ [role="_abstract"] For users who prefer to deploy {PlatformNameShort} with an external database, they can do so by configuring a secret with instance credentials and connection information, then applying it to their cluster using the `oc create` command. -By default, the {PlatformName} operator automatically creates and configures a managed PostgreSQL pod in the same namespace as your {PlatformNameShort} deployment. You can deploy {PlatformNameShort} with an external database instead of the managed PostgreSQL pod that the {PlatformName} operator automatically creates. +By default, the {OperatorPlatform} automatically creates and configures a managed PostgreSQL pod in the same namespace as your {PlatformNameShort} deployment. You can deploy {PlatformNameShort} with an external database instead of the managed PostgreSQL pod that the {OperatorPlatform} automatically creates. Using an external database lets you share and reuse resources and manually manage backups, upgrades, and performance optimizations. @@ -15,7 +15,7 @@ Using an external database lets you share and reuse resources and manually manag The same external database (PostgreSQL instance) can be used for both {HubName} and {ControllerName} as long as the database names are different. In other words, you can have multiple databases with different names inside a single PostgreSQL instance. ==== -The following section outlines the steps to configure an external database for your {ControllerName} on a {PlatformNameShort} operator. +The following section outlines the steps to configure an external database for your {ControllerName} on a {OperatorPlatform}. .Prerequisite The external database must be a PostgreSQL database that is the version supported by the current release of {PlatformNameShort}. @@ -29,7 +29,7 @@ The external database must be a PostgreSQL database that is the version supporte The external postgres instance credentials and connection information must be stored in a secret, which is then set on the {ControllerName} spec. -. Create a `postgres_configuration_secret` .yaml file, following the template below: +. Create a `postgres_configuration_secret` YAML file, following the template below: + ---- apiVersion: v1 diff --git a/downstream/modules/platform/proc-operator-external-db-hub.adoc b/downstream/modules/platform/proc-operator-external-db-hub.adoc index ff124365cb..353937b69f 100644 --- a/downstream/modules/platform/proc-operator-external-db-hub.adoc +++ b/downstream/modules/platform/proc-operator-external-db-hub.adoc @@ -1,12 +1,12 @@ [id="proc-operator-external-db-hub"] -= Configuring an external database for {HubName} on {PlatformName} operator += Configuring an external database for {HubName} on {OperatorPlatform} [role="_abstract"] For users who prefer to deploy {PlatformNameShort} with an external database, they can do so by configuring a secret with instance credentials and connection information, then applying it to their cluster using the `oc create` command. -By default, the {PlatformName} operator automatically creates and configures a managed PostgreSQL pod in the same namespace as your {PlatformNameShort} deployment. +By default, the {OperatorPlatform} automatically creates and configures a managed PostgreSQL pod in the same namespace as your {PlatformNameShort} deployment. You can choose to use an external database instead if you prefer to use a dedicated node to ensure dedicated resources or to manually manage backups, upgrades, or performance tweaks. @@ -15,7 +15,7 @@ You can choose to use an external database instead if you prefer to use a dedica The same external database (PostgreSQL instance) can be used for both {HubName} and {ControllerName} as long as the database names are different. In other words, you can have multiple databases with different names inside a single PostgreSQL instance. ==== -The following section outlines the steps to configure an external database for your {HubName} on a {PlatformNameShort} operator. +The following section outlines the steps to configure an external database for your {HubName} on a {OperatorPlatform}. .Prerequisite The external database must be a PostgreSQL database that is the version supported by the current release of {PlatformNameShort}. @@ -29,7 +29,7 @@ The external database must be a PostgreSQL database that is the version supporte The external postgres instance credentials and connection information will need to be stored in a secret, which will then be set on the {HubName} spec. -. Create a `postgres_configuration_secret` .yaml file, following the template below: +. Create a `postgres_configuration_secret` YAML file, following the template below: + ---- apiVersion: v1 diff --git a/downstream/modules/platform/proc-update-rhsso-client.adoc b/downstream/modules/platform/proc-update-rhsso-client.adoc index 7625965f9b..db9a4a0286 100644 --- a/downstream/modules/platform/proc-update-rhsso-client.adoc +++ b/downstream/modules/platform/proc-update-rhsso-client.adoc @@ -2,7 +2,7 @@ = Updating the {RHSSO} client -When {HubName} is installed and you know the URL of the instance, you must update the {RHSSO} to set the Valid Redirect URIs and Web Origins settings. +After you install {HubName} and you know the URL of the instance, you must update the {RHSSO} to set the Valid Redirect URIs and Web Origins settings. .Procedure From 609a30204556142d2c8f51d197f9ea2fedf83ef6 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Fri, 26 Jul 2024 11:22:00 +0100 Subject: [PATCH 049/590] Editorial review on backup and recovery doc (#1637) (#1638) * Editorial review on backup and recovery doc * PR suggestion --- .../modules/platform/con-aap-backup-recommendations.adoc | 4 ++-- downstream/modules/platform/con-aap-backup-recovery.adoc | 8 ++++---- .../modules/platform/proc-aap-controller-backup.adoc | 8 ++++---- .../modules/platform/proc-aap-controller-restore.adoc | 4 ++-- .../modules/platform/proc-aap-controller-yaml-backup.adoc | 4 +--- .../platform/proc-aap-controller-yaml-restore.adoc | 2 +- downstream/modules/platform/proc-aap-hub-backup.adoc | 6 +++--- downstream/modules/platform/proc-aap-hub-restore.adoc | 6 +++--- .../platform/proc-aap-platform-gateway-backup.adoc | 4 ++-- .../platform/proc-aap-platform-gateway-restore.adoc | 2 +- 10 files changed, 23 insertions(+), 25 deletions(-) diff --git a/downstream/modules/platform/con-aap-backup-recommendations.adoc b/downstream/modules/platform/con-aap-backup-recommendations.adoc index a777425df5..d0fec03010 100644 --- a/downstream/modules/platform/con-aap-backup-recommendations.adoc +++ b/downstream/modules/platform/con-aap-backup-recommendations.adoc @@ -6,6 +6,6 @@ [role="_abstract"] Recovering from data loss requires that you plan for and create backup resources of your {PlatformName} deployments on a regular basis. At a minimum, Red Hat recommends backing up deployments of {PlatformName} under the following circumstances: -* Before upgrading your {PlatformName} deployments -* Before upgrading your Openshift cluster +* Before upgrading your {PlatformName} deployments. +* Before upgrading your OpenShift cluster. * Once per week. This is particularly important if your environment is configured for automatic upgrades. diff --git a/downstream/modules/platform/con-aap-backup-recovery.adoc b/downstream/modules/platform/con-aap-backup-recovery.adoc index 975457201b..4db07db507 100644 --- a/downstream/modules/platform/con-aap-backup-recovery.adoc +++ b/downstream/modules/platform/con-aap-backup-recovery.adoc @@ -7,10 +7,10 @@ Red Hat recommends backing up deployments of {PlatformName} in your {OCP} enviro A backup resource of your {PlatformName} deployment includes the following: -* Custom deployment of specific values in the `spec` section of the {PlatformNameShort} custom resource object -* Back up of the `postgresql` database -* `secret_key`, `admin_password`, and `broadcast_websocket` secrets -* Database configuration +* Custom deployment of specific values in the `spec` section of the {PlatformNameShort} custom resource object. +* Back up of the `postgresql` database. +* `secret_key`, `admin_password`, and `broadcast_websocket` secrets. +* Database configuration. [NOTE] ==== diff --git a/downstream/modules/platform/proc-aap-controller-backup.adoc b/downstream/modules/platform/proc-aap-controller-backup.adoc index fc3d72f5e8..7a2af22554 100644 --- a/downstream/modules/platform/proc-aap-controller-backup.adoc +++ b/downstream/modules/platform/proc-aap-controller-backup.adoc @@ -7,8 +7,8 @@ Use this procedure to back up a deployment of the controller, including jobs, in .Prerequisites -* You must be authenticated with an Openshift cluster. -* The {OperatorPlatform} has been installed to the cluster. +* You must be authenticated with an OpenShift cluster. +* You have installed the {OperatorPlatform} on the cluster. * The {ControllerName} is deployed to using the {OperatorPlatform}. .Procedure @@ -21,8 +21,8 @@ Use this procedure to back up a deployment of the controller, including jobs, in . Enter the *Deployment name* of the deployed {PlatformNameShort} instance being backed up. For example, if your {ControllerName} must be backed up and the deployment name is `aap-controller`, enter 'aap-controller' in the *Deployment name* field. . If you want to use a custom, pre-created pvc: -.. Optionally enter the name of the *Backup persistant volume claim*. -.. Optionally enter the *Backup PVC storage requirements*, and *Backup PVC storage class*. +.. [Optional]: enter the name of the *Backup persistent volume claim*. +.. [Optional]: enter the *Backup PVC storage requirements*, and *Backup PVC storage class*. + [NOTE] ==== diff --git a/downstream/modules/platform/proc-aap-controller-restore.adoc b/downstream/modules/platform/proc-aap-controller-restore.adoc index 365348af0f..f717fcd44c 100644 --- a/downstream/modules/platform/proc-aap-controller-restore.adoc +++ b/downstream/modules/platform/proc-aap-controller-restore.adoc @@ -14,8 +14,8 @@ If the backup custom resource being restored is a backup of a currently running .Prerequisites -* You must be authenticated with an Openshift cluster. -* The {ControllerName} has been deployed to the cluster. +* You must be authenticated with an OpenShift cluster. +* You have deployed {ControllerName} on the cluster. * An AutomationControllerBackup is available on a PVC in your cluster. .Procedure diff --git a/downstream/modules/platform/proc-aap-controller-yaml-backup.adoc b/downstream/modules/platform/proc-aap-controller-yaml-backup.adoc index 97d0932c2c..86dcdc9e74 100644 --- a/downstream/modules/platform/proc-aap-controller-yaml-backup.adoc +++ b/downstream/modules/platform/proc-aap-controller-yaml-backup.adoc @@ -6,10 +6,8 @@ See the following procedure for how to back up a deployment of the {ControllerNa .Prerequisites - * You must be authenticated with an OpenShift cluster. - -* The {OperatorPlatform} has been installed to the cluster. +* You have installed the {OperatorPlatform} on the cluster. * The {ControllerName} is deployed to using the {OperatorPlatform}. .Procedure diff --git a/downstream/modules/platform/proc-aap-controller-yaml-restore.adoc b/downstream/modules/platform/proc-aap-controller-yaml-restore.adoc index 7e9c511ec7..ddd6967d93 100644 --- a/downstream/modules/platform/proc-aap-controller-yaml-restore.adoc +++ b/downstream/modules/platform/proc-aap-controller-yaml-restore.adoc @@ -33,7 +33,7 @@ stringData: type: "unmanaged" type: Opaque ---- -<1> Namespace to create the secret in. This should be the same namespace you wish to deploy to. +<1> Namespace to create the secret in. This should be the same namespace you want to deploy to. <2> The resolvable hostname for your database node. <3> External port defaults to `5432`. <4> Value for variable `password` should not contain single or double quotes (', ") or backslashes (\) to avoid any issues during deployment, backup or restoration. diff --git a/downstream/modules/platform/proc-aap-hub-backup.adoc b/downstream/modules/platform/proc-aap-hub-backup.adoc index 9f2b8a11a8..d9528a92dd 100644 --- a/downstream/modules/platform/proc-aap-hub-backup.adoc +++ b/downstream/modules/platform/proc-aap-hub-backup.adoc @@ -7,8 +7,8 @@ Use this procedure to back up a deployment of the hub, including all hosted Ansi .Prerequisites -* You must be authenticated with an Openshift cluster. -* The {OperatorPlatform} has been installed to the cluster. +* You must be authenticated with an OpenShift cluster. +* You have installed the {OperatorPlatform} on the cluster. * The {HubName} is deployed to using the {OperatorPlatform}. .Procedure @@ -24,4 +24,4 @@ For example, if your {HubName} must be backed up and the deployment name is `aap .. Optionally, enter the name of the *Backup persistent volume claim*, *Backup persistent volume claim namespace*, *Backup PVC storage requirements*, and *Backup PVC storage class*. . Click btn:[Create]. + -A backup of the specified deployment is created and available for data recovery or deployment rollback. +This creates a backup of the specified deployment and is available for data recovery or deployment rollback. diff --git a/downstream/modules/platform/proc-aap-hub-restore.adoc b/downstream/modules/platform/proc-aap-hub-restore.adoc index 7ae89f9475..c9c6c282ce 100644 --- a/downstream/modules/platform/proc-aap-hub-restore.adoc +++ b/downstream/modules/platform/proc-aap-hub-restore.adoc @@ -12,8 +12,8 @@ The name specified for the new AutomationHub custom resource must not match an e .Prerequisites -* You must be authenticated with an Openshift cluster. -* The {HubName} has been deployed to the cluster. +* You must be authenticated with an OpenShift cluster. +* You have deployed {HubName} on the cluster. * An AutomationHubBackup is available on a PVC in your cluster. .Procedure @@ -27,4 +27,4 @@ The name specified for the new AutomationHub custom resource must not match an e . Enter the *Backup Name* of the AutomationHubBackup object. . Click btn:[Create]. + -A new deployment is created and your backup is restored to it. +This creates a new deployment and your backup is restored to it. diff --git a/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc b/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc index a5c8d74eaf..34d35ab3a7 100644 --- a/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc +++ b/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc @@ -4,8 +4,8 @@ Regularly backing up your *AnsibleAutomationPlatform* deployment is vital to protect against unexpected data loss and application errors. *AnsibleAutomationPlatform* hosts any enabled components (such as, {ControllerName}, {HubName}, and {EDAName}), when you back up *AnsibleAutomationPlatform* the operator will also back up these components. .Prerequisites -* You must be authenticated on Openshift cluster. -* The {OperatorPlatform} has been installed on the cluster. +* You must be authenticated on OpenShift cluster. +* You have installed the {OperatorPlatform} on the cluster. * The *AnsibleAutomationPlatform* instance is deployed using the {OperatorPlatform}. .Procedure diff --git a/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc b/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc index 6e6841ad21..2d609afa72 100644 --- a/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc +++ b/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc @@ -11,7 +11,7 @@ Now, you create a single *AnsibleAutomationPlatformRestore* resource, which cre * EDARestore .Prerequisites -* You must be authenticated with an Openshift cluster. +* You must be authenticated with an OpenShift cluster. * You have installed the {OperatorPlatform} on the cluster. * The *AnsibleAutomationPlatformBackups* deployment is available in your cluster. From ec04d8a29e3881107ee4a352a3b47c1a12f84b0b Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Fri, 26 Jul 2024 18:47:58 +0100 Subject: [PATCH 050/590] Update tech preview notice per supplementary style guide (#1639) (#1643) --- downstream/snippets/technology-preview.adoc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/downstream/snippets/technology-preview.adoc b/downstream/snippets/technology-preview.adoc index 4f60f2f7a7..62fbd6aaf7 100644 --- a/downstream/snippets/technology-preview.adoc +++ b/downstream/snippets/technology-preview.adoc @@ -1,3 +1,5 @@ -Technology Preview features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. +Technology Preview features are not supported with Red{nbsp}Hat production service level agreements (SLAs) and might not be functionally complete. +Red{nbsp}Hat does not recommend using them in production. +These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process. -For more information about the support scope of Red Hat Technology Preview features, see link:https://access.redhat.com/support/offerings/techpreview/[Technology Preview Features Support Scope]. \ No newline at end of file +For more information about the support scope of Red{nbsp}Hat Technology Preview features, see link:https://access.redhat.com/support/offerings/techpreview/[Technology Preview Features Support Scope]. From 03127eee2cdbf2792200385a39391c67860cd85f Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Mon, 29 Jul 2024 11:24:53 +0100 Subject: [PATCH 051/590] Updating module on creating an inventory (#1613) (#1646) * Updating module on creating an inventory Correct section on creating host filters https://issues.redhat.com/browse/AAP-27447 * Update module on creating an inventory Added additional verbosity types Correct section on creating host filters https://issues.redhat.com/browse/AAP-27447 * Update module on creating an inventory Additional infornmation Correct section on creating host filters https://issues.redhat.com/browse/AAP-27447 * Updating module on creating an inventory Tidying up Correct section on creating host filters https://issues.redhat.com/browse/AAP-27447 * Updating module on creating an inventory Corrections Correct section on creating host filters https://issues.redhat.com/browse/AAP-27447 --- .../proc-controller-adding-new-inventory.adoc | 61 ++++++++++++------- 1 file changed, 38 insertions(+), 23 deletions(-) diff --git a/downstream/modules/platform/proc-controller-adding-new-inventory.adoc b/downstream/modules/platform/proc-controller-adding-new-inventory.adoc index 31bc330cea..a3a29bf368 100644 --- a/downstream/modules/platform/proc-controller-adding-new-inventory.adoc +++ b/downstream/modules/platform/proc-controller-adding-new-inventory.adoc @@ -21,40 +21,56 @@ The *Inventories* window displays a list of the inventories that are currently a * *Name*: Enter a name appropriate for this inventory. * Optional: *Description*: Enter an arbitrary description as appropriate. * *Organization*: Required. Choose among the available organizations. -//* Only applicable to Smart Inventories: *Smart Host Filter*: Click the image:search.png[Search,15,15] icon to open a separate window to filter hosts for this inventory. -//These options are based on the organization you chose. -//+ -//Filters are similar to tags in that tags are used to filter certain hosts that contain those names. -//Therefore, to populate the *Smart Host Filter* field, specify a tag that contains the hosts you want, not the hosts themselves. -//Enter the tag in the *Search* field and click btn:[Enter]. -//Filters are case-sensitive. -//For more information, see xref:ref-controller-smart-host-filter[Smart host filters]. -* *Instance Groups*: Click the image:search.png[Search,15,15] icon to open a separate window. -Select the instance group or groups for this inventory to run on. -If the list is extensive, use the search to narrow the options. +* Only applicable to Smart Inventories: *Smart Host Filter*: Populate the hosts for this inventory by using a search filter. ++ +_Example_ ++ +name__icontains=RedHat. ++ +These options are based on the organization you chose. ++ +Filters are similar to tags in that tags are used to filter certain hosts that contain those names. +Therefore, to populate the *Smart Host Filter* field, specify a tag that contains the hosts you want, not the hosts themselves. ++ +Filters are case-sensitive. +* *Instance Groups*: Select the instance group or groups for this inventory to run on. ++ You can select multiple instance groups and sort them in the order that you want them run. + //image:select-instance-groups-modal.png[image] * Optional: *Labels*: Supply labels that describe this inventory, so they can be used to group and filter inventories and jobs. * Only applicable to constructed inventories: *Input inventories*: Specify the source inventories to include in this constructed inventory. -Click the image:search.png[Search,15,15] icon to select from available inventories. +//Click the image:search.png[Search,15,15] icon to select from available inventories. Empty groups from input inventories are copied into the constructed inventory. -* Optional:(Only applicable to constructed inventories): *Cached timeout (seconds)*: Set the length of time you want the cache plugin -data to timeout. +* Optional:(Only applicable to constructed inventories): *Cached timeout (seconds)*: Set the length of time you want the cache plugin data to timeout. * Only applicable to constructed inventories: *Verbosity*: Control the level of output that Ansible produces as the playbook executes related to inventory sources associated with constructed inventories. -Select the verbosity from Normal to various Verbose or Debug settings. -This only appears in the "details" report view. -** Verbose logging includes the output of all commands. -** Debug logging is exceedingly verbose and includes information about SSH operations that can be useful in certain -support instances. Most users do not need to see debug mode output. ++ +Select the verbosity from: + +* *Normal* +* *Verbose* +* *More verbose* +* *Debug* +* *Connection Debug* +* *WinRM Debug* + +** *Verbose* logging includes the output of all commands. +** *More verbose* provides more detail than *Verbose*. +** *Debug* logging is exceedingly verbose and includes information about SSH operations that can be useful in certain support instances. Most users do not need to see debug mode output. +//Not sure of this +** *Connection Debug* enables you to run ssh in verbose mode, providing debugging information about the SSH connection progress. +//Not sure of this. +** *WinRM Debug* used for verbosity specific to windows remote management ++ +Click the image:arrow.png[Expand,15,15] icon for information on *How to use the constructed inventory plugin*. * Only applicable to constructed inventories: *Limit*: Restricts the number of returned hosts for the inventory source associated with the constructed inventory. You can paste a group name into the limit field to only include hosts in that group. For more information, see the *Source vars* setting. * Only applicable to standard inventories: *Options*: Check the *Prevent Instance Group Fallback* option to enable only the instance groups listed in the *Instance Groups* field to execute the job. If unchecked, all available instances in the execution pool are used based on the hierarchy described in -link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_administration_guide/index#controller-control-job-run[Control where a job runs] in _{ControllerAG}_. -Click the image:question_circle.png[Help,15,15] icon for additional information. +xref:controller-control-job-run[Control where a job runs]. +//Click the image:question_circle.png[Help,15,15] icon for additional information. + //[NOTE] //==== @@ -72,5 +88,4 @@ This is particularly useful because you can paste that group name into the limit //See Example 1 in xref:ref-controller-smart-host-filter[Smart host filters]. . Click btn:[Create inventory]. -After saving the new inventory, you can proceed with configuring permissions, groups, hosts, sources, and view completed jobs, if -applicable to the type of inventory. +After saving the new inventory, you can proceed with configuring permissions, groups, hosts, sources, and view completed jobs, if applicable to the type of inventory. From 5b796398952567b9297eaa66a30aac3accc81e7f Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Mon, 29 Jul 2024 12:43:19 +0100 Subject: [PATCH 052/590] updating UI change (#1632) (#1644) * Editorial review of entire doc ahead of 2.5 EA (#1628) * PR suggestions --- .../platform/con-ocp-supported-install.adoc | 2 +- .../platform/proc-aap-platform-gateway-backup.adoc | 14 +++++++------- .../proc-aap-platform-gateway-restore.adoc | 8 ++++---- .../modules/platform/proc-operator-aap-faq.adoc | 4 ++-- .../modules/platform/proc-operator-access-aap.adoc | 6 +++--- .../proc-operator-deploy-central-config.adoc | 8 ++++---- .../platform/proc-operator-link-components.adoc | 8 ++++---- 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/downstream/modules/platform/con-ocp-supported-install.adoc b/downstream/modules/platform/con-ocp-supported-install.adoc index 45b9abd5bc..c5bfe1d0ab 100644 --- a/downstream/modules/platform/con-ocp-supported-install.adoc +++ b/downstream/modules/platform/con-ocp-supported-install.adoc @@ -7,7 +7,7 @@ You can use the OperatorHub on the {OCP} web console to install {OperatorPlatfor Alternatively, you can install {OperatorPlatform} from the {OCPShort} command-line interface (CLI), `oc`. See <> for help with this. -After you have installed {OperatorPlatform} you must create an *AnsibleAutomationPlatform* custom resource (CR). This allows you to manage {PlatformNameShort} components from a single unified interface known as the platform gateway. As of version 2.5, you must create an {PlatformNameShort} CR, even if you have an existing {ControllerName}, {HubName}, or {EDAName}, components. +After you have installed {OperatorPlatform} you must create an *{PlatformNameShort}* custom resource (CR). This enables you to manage {PlatformNameShort} components from a single unified interface known as the platform gateway. As of version 2.5, you must create an {PlatformNameShort} CR, even if you have an existing {ControllerName}, {HubName}, or {EDAName}, components. If existing components have already been deployed, you must specify these components on the {PlatformNameShort} CR. You must create the custom resource in the same namespace as the existing components. diff --git a/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc b/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc index 34d35ab3a7..3c842fe8ce 100644 --- a/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc +++ b/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc @@ -1,21 +1,21 @@ [id="aap-platform-gateway-backup_{context}"] -= Backing up your AnsibleAutomationPlatform deployment -Regularly backing up your *AnsibleAutomationPlatform* deployment is vital to protect against unexpected data loss and application errors. *AnsibleAutomationPlatform* hosts any enabled components (such as, {ControllerName}, {HubName}, and {EDAName}), when you back up *AnsibleAutomationPlatform* the operator will also back up these components. += Backing up your {PlatformNameShort} deployment +Regularly backing up your *{PlatformNameShort}* deployment is vital to protect against unexpected data loss and application errors. *{PlatformNameShort}* hosts any enabled components (such as, {ControllerName}, {HubName}, and {EDAName}), when you back up *{PlatformNameShort}* the operator will also back up these components. .Prerequisites -* You must be authenticated on OpenShift cluster. -* You have installed the {OperatorPlatform} on the cluster. -* The *AnsibleAutomationPlatform* instance is deployed using the {OperatorPlatform}. +* You must be authenticated on Openshift cluster. +* The {OperatorPlatform} has been installed on the cluster. +* The *{PlatformNameShort}* instance is deployed using the {OperatorPlatform}. .Procedure . Log in to {OCP}. . Go to menu:Operators[Installed Operators]. . Select the {OperatorPlatform} installed on your project namespace. . Go to your *All Instances* tab, and click btn:[Create New]. -. Select *Ansible Automation Platform Backup* from the list. +. Select *{PlatformNameShort} Backup* from the list. + -NOTE: When creating the *Ansible Automation Platform Backup* resource it also creates backup resources for each of the nested components that are enabled. +NOTE: When creating the *{PlatformNameShort} Backup* resource it also creates backup resources for each of the nested components that are enabled. + . In the *Name* field, enter a name for the backup. . In the *Deployment name* field, enter the name of the deployed {PlatformNameShort} instance being backed up. For example if your {PlatformNameShort} deployment must be backed up and the deployment name is aap, enter 'aap' in the *Deployment name* field. diff --git a/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc b/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc index 2d609afa72..f9575cebdc 100644 --- a/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc +++ b/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc @@ -1,7 +1,7 @@ [id="aap-platform-gateway-restore_{context}"] -= Recovering your AnsibleAutomationPlatform deployment -*AnsibleAutomationPlatform* manages any enabled components (such as, {ControllerName}, {HubName}, and {EDAName}), when you recover *AnsibleAutomationPlatform* you also restore these components. += Recovering your {PlatformNameShort} deployment +*{PlatformNameShort}* manages any enabled components (such as, {ControllerName}, {HubName}, and {EDAName}), when you recover *{PlatformNameShort}* you also restore these components. In previous versions of the {OperatorPlatform}, it was necessary to create a restore object for each component of the platform. Now, you create a single *AnsibleAutomationPlatformRestore* resource, which creates and manages the other restore objects: @@ -20,9 +20,9 @@ Now, you create a single *AnsibleAutomationPlatformRestore* resource, which cre . Go to menu:Operators[Installed Operators]. . Select the {OperatorPlatform} installed on your project namespace. . Go to your *All Instances* tab, and click btn:[Create New]. -. Select *Ansible Automation Platform Restore* from the list. +. Select *{PlatformNameShort} Restore* from the list. . For *Name* enter the name for the recovery deployment. -. For *New Ansible Automation Platform Name* enter the new name for your {PlatformNameShort} instance. +. For *New {PlatformNameShort} Name* enter the new name for your {PlatformNameShort} instance. . *Backup Source* defaults to *CR*. . For *Backup name* enter the name your chose when creating the backup. . Click btn:[Create]. diff --git a/downstream/modules/platform/proc-operator-aap-faq.adoc b/downstream/modules/platform/proc-operator-aap-faq.adoc index 1501a95031..11ed99232e 100644 --- a/downstream/modules/platform/proc-operator-aap-faq.adoc +++ b/downstream/modules/platform/proc-operator-aap-faq.adoc @@ -2,7 +2,7 @@ = Frequently asked questions on platform gateway -If I delete my Ansible Automation Platform deployment will I still have access to Automation Controller?:: +If I delete my {PlatformNameShort} deployment will I still have access to Automation Controller?:: No, {ControllerName}, {HubName}, and {EDAName} are nested within the deployment and are also deleted. Something went wrong with my deployment but I'm not sure what, how can I find out?:: @@ -10,7 +10,7 @@ You can follow along in the command line while the operator is reconciling, this Alternatively you can click into the deployment instance to see the status conditions being updated as the deployment goes on. Is it still possible to view individual component logs?:: -When troubleshooting you should examine the *AnsibleAutomationPlatform* instance for the main logs and then each individual component (*EDA*, *AutomationHub*, *AutomationController*) for more specific information. +When troubleshooting you should examine the *{PlatformNameShort}* instance for the main logs and then each individual component (*EDA*, *AutomationHub*, *AutomationController*) for more specific information. Where can I view the condition of an instance?:: To display status conditions click into the instance, and look under the *Details* or *Events* tab. diff --git a/downstream/modules/platform/proc-operator-access-aap.adoc b/downstream/modules/platform/proc-operator-access-aap.adoc index 3bf5bd1772..ba4ca3000f 100644 --- a/downstream/modules/platform/proc-operator-access-aap.adoc +++ b/downstream/modules/platform/proc-operator-access-aap.adoc @@ -1,15 +1,15 @@ [id="operator-access-aap_{context}"] = Accessing the platform gateway -You should use the *AnsibleAutomationPlatform* instance as your default. +You should use the *{PlatformNameShort}* instance as your default. This instance links the {ControllerName}, {HubName}, and {EDAName} deployments to a single interface. .Procedure -To access your *AnsibleAutomationPlatform* instance: +To access your *{PlatformNameShort}* instance: . Navigate to menu:Networking[Routes] -. Click the link under *Location* for *AnsibleAutomationPlatform*. +. Click the link under *Location* for *{PlatformNameShort}*. . This redirects you to the {PlatformNameShort} login page. Enter "admin" as your username in the *Username* field. . For the password you need to: .. Go to to menu:Workloads[Secrets]. diff --git a/downstream/modules/platform/proc-operator-deploy-central-config.adoc b/downstream/modules/platform/proc-operator-deploy-central-config.adoc index 9597d85373..03f6fc66a8 100644 --- a/downstream/modules/platform/proc-operator-deploy-central-config.adoc +++ b/downstream/modules/platform/proc-operator-deploy-central-config.adoc @@ -1,7 +1,7 @@ [id="operator-deploy-central-config_{context}"] = Deploying the platform gateway with existing {PlatformNameShort} components -You can link any components of the {PlatformNameShort}, that you have already installed to a new *AnsibleAutomationPlatform* instance. +You can link any components of the {PlatformNameShort}, that you have already installed to a new *{PlatformNameShort}* instance. The following procedure simulates a scenario where you have {ControllerName} as an existing component and want to add {HubName} and {EDAName}. @@ -9,8 +9,8 @@ The following procedure simulates a scenario where you have {ControllerName} as . Log in to {OCP}. . Go to to menu:Operators[Installed Operators]. . Click btn:[Subscriptions] and edit your *Update channel* to *stable-2.5*. -. Click btn:[Details] and on the *AnsibleAutomationPlatform* tile click btn:[Create instance]. -. From the *Create AnsibleAutomationPlatform* page enter a name for your instance in the *Name* field. +. Click btn:[Details] and on the *{PlatformNameShort}* tile click btn:[Create instance]. +. From the *Create {PlatformNameShort}* page enter a name for your instance in the *Name* field. . Click btn:[YAML view] and copy in the following: + ---- @@ -49,7 +49,7 @@ The following procedure simulates a scenario where you have {ControllerName} as . Click btn:[Create]. . To access your new instance, see <>. -NOTE: If you have an existing controller with a managed Postgres pod, after creating the *AnsibleAutomationPlatform* resource your {ControllerName} instance will continue to use that original Postgres pod. If you were to do a fresh install you would have a single Postgres managed pod for all instances. +NOTE: If you have an existing controller with a managed Postgres pod, after creating the *{PlatformNameShort}* resource your {ControllerName} instance will continue to use that original Postgres pod. If you were to do a fresh install you would have a single Postgres managed pod for all instances. diff --git a/downstream/modules/platform/proc-operator-link-components.adoc b/downstream/modules/platform/proc-operator-link-components.adoc index a31d7dd978..00639fbe32 100644 --- a/downstream/modules/platform/proc-operator-link-components.adoc +++ b/downstream/modules/platform/proc-operator-link-components.adoc @@ -2,13 +2,13 @@ = Linking your components to the platform gateway -After installing the {OperatorPlatform} in your namespace you can set up your *AnsibleAutomationPlatform* instance. +After installing the {OperatorPlatform} in your namespace you can set up your *{PlatformNameShort}* instance. Then link all the platform components to a single user interface. .Procedure . Go to your {OperatorPlatform} and click btn:[Details]. -. On the *AnsibleAutomationPlatform* tile click btn:[Create instance]. -. From the *Create AnsibleAutomationPlatform* page enter a name for your instance in the *Name* field. +. On the *{PlatformNameShort}* tile click btn:[Create instance]. +. From the *Create {PlatformNameShort}* page enter a name for your instance in the *Name* field. . Click btn:[YAML view] and paste the following: + ---- @@ -30,6 +30,6 @@ spec: .Verification Go to your {OperatorPlatform} deployment and click btn:[All instances] to verify if all instances deployed correctly. -You should see the *AnsibleAutomationPlatform* instance and the deployed *AutomationController*, *EDA*, and *AutomationHub* instances here. +You should see the *{PlatformNameShort}* instance and the deployed *AutomationController*, *EDA*, and *AutomationHub* instances here. Alternatively you can check by the command line, run: `oc get route` From 2463749028c55f7a44787951cfc7bae50af8af5f Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Tue, 30 Jul 2024 13:21:34 -0700 Subject: [PATCH 053/590] AAP-19236 - Adding new modules for gateway access management (#1647) (#1654) * AAP-19236 - Add new modules for gateway access management * AAP-19236 - Minor fixes and adding a snippet --------- Co-authored-by: Donna DaCosta --- .../platform/con-gw-managing-access.adoc | 11 ++++++++ .../proc-gw-add-admin-organization.adoc | 23 ++++++++++++++++ .../platform/proc-gw-add-admin-team.adoc | 16 +++++++++++ .../proc-gw-add-team-organization.adoc | 27 +++++++++++++++++++ .../platform/proc-gw-delete-organization.adoc | 22 +++++++++++++++ .../modules/platform/proc-gw-delete-team.adoc | 18 +++++++++++++ .../proc-gw-organizations-exec-env.adoc | 25 +++++++++++++++++ .../platform/proc-gw-remove-roles-team.adoc | 18 +++++++++++++ .../platform/proc-gw-remove-roles-user.adoc | 17 ++++++++++++ .../proc-gw-team-access-resources.adoc | 15 +++++++++++ .../platform/proc-gw-team-add-user.adoc | 14 ++++++++++ .../platform/proc-gw-team-list-view.adoc | 15 +++++++++++ .../platform/proc-gw-team-remove-user.adoc | 22 +++++++++++++++ .../proc-gw-user-access-resources.adoc | 16 +++++++++++ .../platform/proc-gw-users-list-view.adoc | 14 ++++++++++ ...nip-gw-roles-note-multiple-components.adoc | 4 +++ 16 files changed, 277 insertions(+) create mode 100644 downstream/modules/platform/con-gw-managing-access.adoc create mode 100644 downstream/modules/platform/proc-gw-add-admin-organization.adoc create mode 100644 downstream/modules/platform/proc-gw-add-admin-team.adoc create mode 100644 downstream/modules/platform/proc-gw-add-team-organization.adoc create mode 100644 downstream/modules/platform/proc-gw-delete-organization.adoc create mode 100644 downstream/modules/platform/proc-gw-delete-team.adoc create mode 100644 downstream/modules/platform/proc-gw-organizations-exec-env.adoc create mode 100644 downstream/modules/platform/proc-gw-remove-roles-team.adoc create mode 100644 downstream/modules/platform/proc-gw-remove-roles-user.adoc create mode 100644 downstream/modules/platform/proc-gw-team-access-resources.adoc create mode 100644 downstream/modules/platform/proc-gw-team-add-user.adoc create mode 100644 downstream/modules/platform/proc-gw-team-list-view.adoc create mode 100644 downstream/modules/platform/proc-gw-team-remove-user.adoc create mode 100644 downstream/modules/platform/proc-gw-user-access-resources.adoc create mode 100644 downstream/modules/platform/proc-gw-users-list-view.adoc create mode 100644 downstream/snippets/snip-gw-roles-note-multiple-components.adoc diff --git a/downstream/modules/platform/con-gw-managing-access.adoc b/downstream/modules/platform/con-gw-managing-access.adoc new file mode 100644 index 0000000000..dc4ef85856 --- /dev/null +++ b/downstream/modules/platform/con-gw-managing-access.adoc @@ -0,0 +1,11 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-managing-access_{context}"] + += Managing access with role based access control + +Role-based access control (RBAC) restricts user access based on their role within an organization. The roles in RBAC refer to the levels of access that users have to the network. + +You can control what users can do with the components of {PlatformNameShort} at a broad or granular level depending on your RBAC policy. You can designate whether the user is a system administrator or normal user and align roles and access permissions with their positions within the organization. + +Roles can be defined with multiple permissions that can then be assigned to resources, teams and users. The permissions that make up a role dictate what the assigned role allows. Permissions are allocated with only the access needed for a user to perform the tasks appropriate for their role. diff --git a/downstream/modules/platform/proc-gw-add-admin-organization.adoc b/downstream/modules/platform/proc-gw-add-admin-organization.adoc new file mode 100644 index 0000000000..ef441d04d6 --- /dev/null +++ b/downstream/modules/platform/proc-gw-add-admin-organization.adoc @@ -0,0 +1,23 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-add-admin-organization"] + += Adding an administrator to an organization + +You can add administrators to an organization which allows them to manage the membership and settings of the organization. For example, they can create new users and teams within the organization, and grant permission to users within the organization. +To add an administrator to an organization, the user must already exist. + +.Procedure + +. From the navigation panel, select {MenuAMOrganizations}. +. From the Organizations list view, select the organization to which you want to add a user, administrator, or team. +. Click the *Administrators* tab. +. Click btn:[Add administrators]. +. Select the users from the list by clicking the checkbox next to the name to assign the administrator role to them for this organization. +. Click btn:[Save]. +. To remove a particular administrator from the organization, select *Remove administrator* from the {MoreActionsIcon} list next to the administrator name. This launches a confirmation dialog, asking you to confirm the removal. ++ +[NOTE] +==== +If the user had previously been added as a member to this organization, they will continue to be a member of this organization. However, if they were added to the organization when the administrator assignment was made, they will be removed from the organization. +==== diff --git a/downstream/modules/platform/proc-gw-add-admin-team.adoc b/downstream/modules/platform/proc-gw-add-admin-team.adoc new file mode 100644 index 0000000000..ff4b5d3d55 --- /dev/null +++ b/downstream/modules/platform/proc-gw-add-admin-team.adoc @@ -0,0 +1,16 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-add-admin-team_{context}"] + += Adding administrators to a team + +You can add administrators to a team which allows them to manage the membership and settings of that team. For example, they can create new users and grant permission to users within the team. +To add an administrator to a team, the administrator must already have been created. For more information, see xref:proc-controller-creating-a-user[Creating a user]. + +.Procedure + +. From the navigation panel, select {MenuAMTeams}. +. Select the team to which you want to add an administrator. +. Select the *Administrators* tab and click btn:[Add administrator(s)]. +. Select one or more users from the list by clicking the checkbox next to the name to add them as administrators of this team. +. Click btn:[Add administrators]. diff --git a/downstream/modules/platform/proc-gw-add-team-organization.adoc b/downstream/modules/platform/proc-gw-add-team-organization.adoc new file mode 100644 index 0000000000..2d2d5288c5 --- /dev/null +++ b/downstream/modules/platform/proc-gw-add-team-organization.adoc @@ -0,0 +1,27 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-add-team-organization_{context}"] + += Adding a team to an organization + +You can provide team access to an organization by adding roles to the team. To add roles to a team, the team must already exist in the organization. For more information, see xref:proc-controller-creating-a-team[Creating a team]. +To add roles for a team, the role must already exist. See xref:proc-gw-roles_auto-exec[Automation execution roles] and xref:proc-gw-roles_auto-dec[Automation decision roles] for more information about creating new roles. + +.Procedure + +. From the navigation panel, select {MenuAMOrganizations}. +. From the Organizations list view, select the organization to which you want to add team access. +. Click the *Teams* tab. If no teams exist, click btn:[Create team] to create a team and add it to this organization. +. Click btn:[Add roles]. +. Select the roles you want the selected team to have. Scroll down for a complete list of roles. ++ +include::snippets/snip-gw-roles-note-multiple-components.adoc ++ +. Click btn:[Next] to review the roles settings. +. Click btn:[Finish] to apply the roles to the selected teams. The Add roles dialog displays the updated roles assigned for each team. +. Click btn:[Close]. ++ +[NOTE] +==== +A team with associated roles retains them if they are reassigned to another organization. +==== diff --git a/downstream/modules/platform/proc-gw-delete-organization.adoc b/downstream/modules/platform/proc-gw-delete-organization.adoc new file mode 100644 index 0000000000..aa662fa399 --- /dev/null +++ b/downstream/modules/platform/proc-gw-delete-organization.adoc @@ -0,0 +1,22 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-delete-organization_{context}"] + += Deleting an organization + +Before you can delete an organization, you must be an Organization administrator or System administrator. When you delete an organization, the organization, team, users and work items are permanently removed from {PlatformNameShort}. + +[NOTE] +==== +When you attempt to delete items that are used by other work items, a message is displayed warning you that the deletion might impact other resources and prompts you to confirm the deletion. Some screens contain items that are invalid or have been deleted previously, and will fail to run. +==== + +.Procedure +. From the navigation panel, select {MenuAMOrganizations}. +. Click the More Actions icon next to the organization you want removed and select *Delete organization*. +. Select the checkbox and click *Delete organizations* to proceed with the deletion. Otherwise, click btn:[Cancel]. ++ +[NOTE] +==== +You can delete multiple organizations by selecting the checkbox next to each organization you want to remove, and clicking Delete selected organizations from the more actions list on the menu bar. +==== diff --git a/downstream/modules/platform/proc-gw-delete-team.adoc b/downstream/modules/platform/proc-gw-delete-team.adoc new file mode 100644 index 0000000000..b50cf37170 --- /dev/null +++ b/downstream/modules/platform/proc-gw-delete-team.adoc @@ -0,0 +1,18 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-delete-team_{context}"] + += Deleting a team + +Before you can delete a team, you must have team permissions. When you delete a team, the inherited permissions members got from that team are revoked. + +.Procedure + +. From the navigation panel, select {MenuAMTeams}. +. Select the check box for the team that you want to remove. +. Select the {MoreActionsIcon} icon and select *Delete team*. ++ +[NOTE] +==== +You can delete multiple teams by selecting the checkbox next to each team you want to remove, and selecting *Delete selected* from the {MoreActionsIcon} list. +==== diff --git a/downstream/modules/platform/proc-gw-organizations-exec-env.adoc b/downstream/modules/platform/proc-gw-organizations-exec-env.adoc new file mode 100644 index 0000000000..1fcce58b06 --- /dev/null +++ b/downstream/modules/platform/proc-gw-organizations-exec-env.adoc @@ -0,0 +1,25 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-organizations-exec-env_{context}"] + += Working with execution environments + +When automation controller is enabled on the platform, you can review any execution environments you have set up and manage their settings within the organization resource. + +For more information about execution environments, see link:{BaseURL}/{PlatformVers}/html/using_automation_execution/index#assembly-controller-execution-environments[Execution environments] in _Using automation execution_ guide. + + +.Procedure + +. From the navigation panel, select {MenuAMOrganizations}. +. From the Organizations list view, select the organization to which you want to manage execution environments. +. Select the *Execution Environments* tab. +. If no execution environments are available, click btn:[Create execution environment] to create one. Alternatively, you can create an execution environment from the navigation panel by selecting {MenuInfrastructureExecEnvironments}. +. Click btn:[Create execution environment]. ++ +[NOTE] +==== +After creating a new execution environment, return to Access Management > Organizations and select the organization in which you created the execution environment to update the list on that tab. +==== ++ +. Select the execution environments to use with your particular organization. diff --git a/downstream/modules/platform/proc-gw-remove-roles-team.adoc b/downstream/modules/platform/proc-gw-remove-roles-team.adoc new file mode 100644 index 0000000000..9e88f5ac7e --- /dev/null +++ b/downstream/modules/platform/proc-gw-remove-roles-team.adoc @@ -0,0 +1,18 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-remove-roles-team_{context}"] + += Removing roles from a team + +You can remove roles from a team by selecting the - icon next to the resource. This launches a confirmation dialog, asking you to confirm the removal. + +.Procedure + +. From the navigation panel, select {MenuAMTeams}. +. Select the team *Name* from which you want to remove roles. +. Select the *Roles* tab. ++ +include::snippets/snip-gw-roles-note-multiple-components.adoc ++ +. Select the checkbox next to each resource you want to remove and click *Remove selected roles* from the *{MoreActionsIcon}* list on the menu bar. +. Select the checkbox to confirm removal of the selected roles and click *Remove role*. diff --git a/downstream/modules/platform/proc-gw-remove-roles-user.adoc b/downstream/modules/platform/proc-gw-remove-roles-user.adoc new file mode 100644 index 0000000000..79abf32235 --- /dev/null +++ b/downstream/modules/platform/proc-gw-remove-roles-user.adoc @@ -0,0 +1,17 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-remove-roles-user_{context}"] + += Removing roles from a user +You can remove roles from a user by selecting the *-* icon next to the resource. This launches a confirmation dialog, asking you to confirm the removal. + +.Procedure + +. From the navigation panel, select {MenuAMUsers}. +. Select the user Name from which you want to remove roles. +. Select the *Roles* tab. ++ +include::snippets/snip-gw-roles-note-multiple-components.adoc ++ +. Select the checkbox next to each resource you want to remove and click *Remove selected roles* from the {MoreActionsIcon} list on the menu bar. +. Select the checkbox to confirm removal of the selected roles and click btn:[Remove role]. diff --git a/downstream/modules/platform/proc-gw-team-access-resources.adoc b/downstream/modules/platform/proc-gw-team-access-resources.adoc new file mode 100644 index 0000000000..2599731dd9 --- /dev/null +++ b/downstream/modules/platform/proc-gw-team-access-resources.adoc @@ -0,0 +1,15 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-team-access_{context}"] + += Providing team access to a resource +You can grant users access through the teams of which they are members. When you add a user as a member of a team, they inherit access to the roles and resources defined for that team. + +.Procedure + +. From the navigation panel, select a resource to which you want to provide team access. For example, {MenuAETemplates}. +. Select the *Team Access* tab. +. Click the checkbox beside the team to assign that team to your chosen type of resource and click btn:[Next]. +. Select the roles you want applied to the team for the chosen resource and click btn:[Next]. +. Review the settings and click btn:[Save]. A progress bar displays indicating whether the role assignments were successfully applied. +. You can remove resource access for a team by selecting the - icon next to the team. This launches a confirmation dialog, asking you to confirm the removal. diff --git a/downstream/modules/platform/proc-gw-team-add-user.adoc b/downstream/modules/platform/proc-gw-team-add-user.adoc new file mode 100644 index 0000000000..af6085247e --- /dev/null +++ b/downstream/modules/platform/proc-gw-team-add-user.adoc @@ -0,0 +1,14 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-team-add-user_{context}"] + += Adding users to a team +To add a user to a team, the user must already have been created. For more information, see (TBD - Create a user). Adding a user to a team adds them as a member only. Use the *Roles* tab to assign a role for the user on different resources to the selected team. + +.Procedure + +. From the navigation panel, select {MenuAMTeams}. +. Select the team to which you want to add users. +. Select the *Users* tab and click btn:[Add users]. +. Select one or more users from the list by clicking the checkbox next to the name to add them as members of this team. +. Click btn:[Save]. diff --git a/downstream/modules/platform/proc-gw-team-list-view.adoc b/downstream/modules/platform/proc-gw-team-list-view.adoc new file mode 100644 index 0000000000..936177fa93 --- /dev/null +++ b/downstream/modules/platform/proc-gw-team-list-view.adoc @@ -0,0 +1,15 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-users-list-view_{context}"] + += Teams list view + +The Teams page displays the existing teams for your installation. From here, you can search for a specific team, filter the list of teams by team name or organization, or change the sort order for the list. + +.Procedure + +. From the navigation panel, select {MenuAMTeams}. +. In the *Search* bar, enter an appropriate keyword for the team you want to search for and click the arrow icon. +. From the menu bar, you can sort the list of teams by using the arrows for *Name* and *Organization* to toggle your sorting preference. +. You can view team details by clicking a team *Name* on the Teams page. +. You can view organization details by clicking the link in the Organization column. diff --git a/downstream/modules/platform/proc-gw-team-remove-user.adoc b/downstream/modules/platform/proc-gw-team-remove-user.adoc new file mode 100644 index 0000000000..629f9735b3 --- /dev/null +++ b/downstream/modules/platform/proc-gw-team-remove-user.adoc @@ -0,0 +1,22 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-team-remove-user_{context}"] + += Removing users from a team + +You can remove a user from a team from the Team list view. + +.Procedure + +. From the navigation panel, select {MenuAMTeams}. +. Select the team from which you want to remove users. +. Select the *Users* tab. +. Click the {MoreActionsIcon} icon next to the user you want to remove as a member of the team and select *Remove user*. +. You can delete multiple users by selecting the checkbox next to each user you want to remove, and selecting *Remove selected users* from the {MoreActionsIcon} list. ++ +[NOTE] +==== +If the user is a Team administrator, you can remove their membership to the team from the *Administrators* tab. +==== ++ +This launches a confirmation dialog, asking you to confirm the removal. diff --git a/downstream/modules/platform/proc-gw-user-access-resources.adoc b/downstream/modules/platform/proc-gw-user-access-resources.adoc new file mode 100644 index 0000000000..41df2bb3dc --- /dev/null +++ b/downstream/modules/platform/proc-gw-user-access-resources.adoc @@ -0,0 +1,16 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-user-access-resources_{context}"] + += Providing user access to a resource + +You can grant users access to resources through the roles to which they are assigned. + +.Procedure + +. From the navigation panel, select a resource to which you want to provide team access. For example, {MenuAETemplates}. +. Select the *User access* tab. +. Click the checkbox beside the user to assign that user to your chosen type of resource and click btn:[Next]. +. Select the roles you want applied to the user for the chosen resource and click btn:[Next]. +. Review the settings and click btn:[Save]. A progress bar displays indicating whether the role assignments were successfully applied. +. You can remove resource access for a user by selecting the - icon next to the user. This launches a confirmation dialog, asking you to confirm the removal. diff --git a/downstream/modules/platform/proc-gw-users-list-view.adoc b/downstream/modules/platform/proc-gw-users-list-view.adoc new file mode 100644 index 0000000000..96d2c935d9 --- /dev/null +++ b/downstream/modules/platform/proc-gw-users-list-view.adoc @@ -0,0 +1,14 @@ +:_mod-docs-content-type: PROCEDURE + +[id="proc-gw-users-list-view_{context}"] + += Users list view + +The User page displays the existing users for your installation. From here, you can search for a specific user, filter the list of users, or change the sort order for the list. + +.Procedure + +. From the navigation panel, select {MenuAMUsers}. +. In the *Search* bar, enter an appropriate keyword for the user you want to search for and click the arrow icon. +. From the menu bar, you can sort the list of users by using the arrows for *Username*, *User type*, *First name*, or *Last name* to toggle your sorting preference. +. You can view user details by selecting a *Username* on the Users page and selecting the *Details* tab. diff --git a/downstream/snippets/snip-gw-roles-note-multiple-components.adoc b/downstream/snippets/snip-gw-roles-note-multiple-components.adoc new file mode 100644 index 0000000000..27f5aefcd2 --- /dev/null +++ b/downstream/snippets/snip-gw-roles-note-multiple-components.adoc @@ -0,0 +1,4 @@ +[NOTE] +==== +If you have multiple {PlatformNameShort} components installed, you will see selections for the roles associated with each component in the *Roles* menu bar. For example, Automation Execution for {ControllerName} roles and Automation Decisions for {EDAName} roles. +==== \ No newline at end of file From b9848d021a26a44ec1016a949d36b7d3d8e54e82 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Tue, 30 Jul 2024 13:22:22 -0700 Subject: [PATCH 054/590] AAP-20549 - Implementing gateway UI changes into the Operations guide (#1604) (#1655) * AAP-20549 - Implementing gateway UI changes into the Operations guide * AAP-20540 - Updated information for user analytics tracking --------- Co-authored-by: Donna DaCosta --- .../aap-common/external-site-disclaimer.adoc | 6 +++--- .../platform/assembly-platform-whats-next.adoc | 4 ++-- .../modules/platform/con-known-proxies.adoc | 10 +++++++++- .../modules/platform/con-sticky-sessions.adoc | 2 +- .../platform/con-why-automation-mesh.adoc | 6 ++++-- .../proc-aap-activate-with-credentials.adoc | 9 +++++---- .../proc-aap-activate-with-manifest.adoc | 8 +++++--- .../platform/proc-configure-known-proxies.adoc | 18 ++++++++++-------- .../proc-configuring-reverse-proxy.adoc | 12 +++++++----- .../platform/proc-control-data-collection.adoc | 13 +++++-------- .../platform/proc-enable-proxy-support.adoc | 9 ++++----- 11 files changed, 55 insertions(+), 42 deletions(-) diff --git a/downstream/aap-common/external-site-disclaimer.adoc b/downstream/aap-common/external-site-disclaimer.adoc index 923ef0ad04..b33617837b 100644 --- a/downstream/aap-common/external-site-disclaimer.adoc +++ b/downstream/aap-common/external-site-disclaimer.adoc @@ -12,9 +12,9 @@ // The following example adds a symlink to snippets from a hub title // $ cd /titles/hub/getting-started // $ ln -s ../../../snippets ./snippets -// +// // Including the file in a document // Add the following in the file where you want the text to be included: // include::snippets/external-site-disclaimer.adoc[] - -*Disclaimer*: Links contained in this note to external websites are provided for convenience only. Red Hat has not reviewed the links and is not responsible for the content or its availability. The inclusion of any link to an external website does not imply endorsement by Red Hat of the website or their entities, products or services. You agree that Red Hat is not responsible or liable for any loss or expenses that may result due to your use of (or reliance on) the external site or content. +//[ddacosta] generalized this to be usable in broader applications. +*Disclaimer*: Links contained in this information to external website(s) are provided for convenience only. Red Hat has not reviewed the links and is not responsible for the content or its availability. The inclusion of any link to an external website does not imply endorsement by Red Hat of the website or their entities, products or services. You agree that Red Hat is not responsible or liable for any loss or expenses that may result due to your use of (or reliance on) the external site or content. diff --git a/downstream/assemblies/platform/assembly-platform-whats-next.adoc b/downstream/assemblies/platform/assembly-platform-whats-next.adoc index 99336b92ba..f9bc69b01c 100644 --- a/downstream/assemblies/platform/assembly-platform-whats-next.adoc +++ b/downstream/assemblies/platform/assembly-platform-whats-next.adoc @@ -9,7 +9,7 @@ Whether you are a new {PlatformNameShort} user looking to start automating, or a //isolated node migration //playbooks to download - -include::assembly-migrate-platform.adoc[leveloffset=+1] +//[ddacosta]Migration not part of 2.5EA so removing this section until a migration path is made available. The content will need to be reworked for changes to migration/upgrade. +// include::assembly-migrate-platform.adoc[leveloffset=+1] include::platform/proc-update-ee-image-locations.adoc[leveloffset=+1] include::platform/con-why-automation-mesh.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/con-known-proxies.adoc b/downstream/modules/platform/con-known-proxies.adoc index 052f2c8722..dc6235b4e6 100644 --- a/downstream/modules/platform/con-known-proxies.adoc +++ b/downstream/modules/platform/con-known-proxies.adoc @@ -10,8 +10,16 @@ When {ControllerName} is configured with `REMOTE_HOST_HEADERS = ['HTTP_X_FORWARD If {ControllerName} is reachable without use of the proxy/load balancer, or if the proxy does not validate the header, the value of `X-Forwarded-For` can be falsified to fake the originating IP addresses. Using `HTTP_X_FORWARDED_FOR` in the `REMOTE_HOST_HEADERS` setting poses a vulnerability. -To avoid this, you can configure a list of known proxies that are allowed using the *PROXY_IP_ALLOWED_LIST* field in the settings menu on your {ControllerName}. +To avoid this, you can configure a list of known proxies that are allowed. + +.Procedure +. From the navigation panel, select {MenuSetSystem}. +. Enter a list of proxy IP addresses from which the service should trust custom remote header values in the *Proxy IP Allowed List* field. ++ +[NOTE] +==== Load balancers and hosts that are not on the known proxies list will result in a rejected request. +==== //.Example vulnerabilities: // diff --git a/downstream/modules/platform/con-sticky-sessions.adoc b/downstream/modules/platform/con-sticky-sessions.adoc index da473b1216..7adb5647f2 100644 --- a/downstream/modules/platform/con-sticky-sessions.adoc +++ b/downstream/modules/platform/con-sticky-sessions.adoc @@ -3,4 +3,4 @@ = Enable sticky sessions [role="_abstract"] -By default, an Application Load Balancer routes each request independently to a registered target based on the chosen load-balancing algorithm. To avoid authentication errors when running multiple instances of {HubName} behind a load balancer, you must enable sticky sessions. Enabling sticky sessions sets a custom application cookie that matches the cookie configured on the load balancer to enable stickiness. This custom cookie can include any of the cookie attributes required by the application. +By default, an application load balancer routes each request independently to a registered target based on the chosen load-balancing algorithm. To avoid authentication errors when running multiple instances of {HubName} behind a load balancer, you must enable sticky sessions. Enabling sticky sessions sets a custom application cookie that matches the cookie configured on the load balancer to enable stickiness. This custom cookie can include any of the cookie attributes required by the application. diff --git a/downstream/modules/platform/con-why-automation-mesh.adoc b/downstream/modules/platform/con-why-automation-mesh.adoc index 4be04db817..e48ff809f6 100644 --- a/downstream/modules/platform/con-why-automation-mesh.adoc +++ b/downstream/modules/platform/con-why-automation-mesh.adoc @@ -4,13 +4,15 @@ The {AutomationMesh} component of the {PlatformName} simplifies the process of distributing automation across multi-site deployments. For enterprises with multiple isolated IT environments, {AutomationMesh} provides a consistent and reliable way to deploy and scale up automation across your execution nodes using a peer-to-peer mesh communication network. -When upgrading from version 1.x to the latest version of {PlatformNameShort}, you must migrate the data from your legacy isolated nodes into execution nodes necessary for {AutomationMesh}. You can implement {AutomationMesh} by planning out a network of hybrid and control nodes, then editing the inventory file found in the {PlatformNameShort} installer to assign mesh-related values to each of your execution nodes. +//[ddacosta] There is no upgrade/migration path for 2.5EA so removing this until upgrade/migration is possible. +//When upgrading from version 1.x to the latest version of {PlatformNameShort}, you must migrate the data from your legacy isolated nodes into execution nodes necessary for {AutomationMesh}. You can implement {AutomationMesh} by planning out a network of hybrid and control nodes, then editing the inventory file found in the {PlatformNameShort} installer to assign mesh-related values to each of your execution nodes. [role="_additional-resources"] .Additional resources -* For instructions on how to migrate from isolated nodes to execution nodes, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_upgrade_and_migration_guide/index[Red Hat Ansible Automation Platform Upgrade and Migration Guide]. +//[ddacosta] There is no upgrade/migration path for 2.5EA so removing this until upgrade/migration is possible. +//* For instructions on how to migrate from isolated nodes to execution nodes, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_upgrade_and_migration_guide/index[Red Hat Ansible Automation Platform Upgrade and Migration Guide]. * For information about automation mesh and the various ways to design your automation mesh for your environment: diff --git a/downstream/modules/platform/proc-aap-activate-with-credentials.adoc b/downstream/modules/platform/proc-aap-activate-with-credentials.adoc index ca6325214b..3c6d18120e 100644 --- a/downstream/modules/platform/proc-aap-activate-with-credentials.adoc +++ b/downstream/modules/platform/proc-aap-activate-with-credentials.adoc @@ -6,15 +6,16 @@ When {PlatformNameShort} launches for the first time, the {PlatformNameShort} Subscription screen automatically displays. You can use your Red Hat credentials to retrieve and import your subscription directly into {PlatformNameShort}. .Procedures +. Select *Username / password*. . Enter your Red Hat username and password. -. Click btn:[Get Subscriptions]. +. Select your subscription from the *Subscription* list. + [NOTE] ==== You can also use your Satellite username and password if your cluster nodes are registered to Satellite through Subscription Manager. ==== + +. The Automation Analytics option is checked by default. These selections help Red Hat improve the product by delivering you a much better user experience. You can opt out by deselecting the options. . Review the End User License Agreement and select *I agree to the End User License Agreement*. -. The Tracking and Analytics options are checked by default. These selections help Red Hat improve the product by delivering you a much better user experience. You can opt out by deselecting the options. -. Click btn:[Submit]. -. Once your subscription has been accepted, the license screen displays and navigates you to the Dashboard of the {PlatformNameShort} interface. You can return to the license screen by clicking the btn:[Settings] icon *⚙* and selecting the *License* tab from the Settings screen. +. Click btn:[Finish]. +. After your subscription has been accepted, the license screen displays and navigates you to the Dashboard of the {PlatformNameShort} interface. You can return to the license screen by selecting {MenuSetSubscription} from the navigation panel and clicking btn:[Edit subscription].. diff --git a/downstream/modules/platform/proc-aap-activate-with-manifest.adoc b/downstream/modules/platform/proc-aap-activate-with-manifest.adoc index b775ef18ce..ce54d98df7 100644 --- a/downstream/modules/platform/proc-aap-activate-with-manifest.adoc +++ b/downstream/modules/platform/proc-aap-activate-with-manifest.adoc @@ -13,10 +13,12 @@ You must have a Red Hat Subscription Manifest file exported from the Red Hat Cus . Complete steps to generate and download the manifest file . Log in to {PlatformName}. //[ddacosta] There is no license setting in the test environment for 2.4? Need to verify this selection. In 2.5, I think it will be Settings[Subscription]... -. If you are not immediately prompted for a manifest file, go to menu:Settings[License]. -. Make sure the *Username* and *Password* fields are empty. +. If you are not immediately prompted for a manifest file, go to {MenuSetSubscription}. +. Select *Subscription manifest*. . Click btn:[Browse] and select the manifest file. -. Click btn:[Next]. +. The Automation Analytics option is checked by default. These selections help Red Hat improve the product by delivering you a much better user experience. You can opt out by deselecting the options. +. Review the End User License Agreement and select *I agree to the End User License Agreement*. +. Click btn:[Finish]. [NOTE] ==== diff --git a/downstream/modules/platform/proc-configure-known-proxies.adoc b/downstream/modules/platform/proc-configure-known-proxies.adoc index 00625167cb..13d1e6d954 100644 --- a/downstream/modules/platform/proc-configure-known-proxies.adoc +++ b/downstream/modules/platform/proc-configure-known-proxies.adoc @@ -5,26 +5,28 @@ [role="_abstract"] -To configure a list of known proxies for your {ControllerName}, add the proxy IP addresses to the *PROXY_IP_ALLOWED_LIST* field in the settings page for your {ControllerName}. +To configure a list of known proxies for your {ControllerName}, add the proxy IP addresses to the *Proxy IP Allowed List* field in the System Settings page. .Procedure -//[ddacosta] Need to verify that in 2.5 this is Settings[System]... -. On your {ControllerName}, navigate to {MenuAEAdminSettings} and select *Miscellaneous System settings* from the list of *System* options. -. In the *PROXY_IP_ALLOWED_LIST* field, enter IP addresses that are allowed to connect to your {ControllerName}, following the syntax in the example below: +//[ddacosta] The Settings > System configurations are for controller only, so don't change ControllerName to PlatformName. +. From the navigation panel, select {MenuSetSystem}. +. In the *Proxy IP Allowed List* field, enter IP addresses that are allowed to connect to your {ControllerName}, following the syntax in the example below: + -.Example *PROXY_IP_ALLOWED_LIST* entry +.Example *Proxy IP Allowed List* entry ---- [ "example1.proxy.com:8080", "example2.proxy.com:8080" ] ---- - ++ [IMPORTANT] ==== -* `PROXY_IP_ALLOWED_LIST` requires proxies in the list are properly sanitizing header input and correctly setting an ``X-Forwarded-For`` value equal to the real source IP of the client. {ControllerNameStart} can rely on the IP addresses and hostnames in `PROXY_IP_ALLOWED_LIST` to provide non-spoofed values for the `X-Forwarded-For` field. -* Do not configure `HTTP_X_FORWARDED_FOR` as an item in `REMOTE_HOST_HEADERS`unless *all* of the following conditions are satisfied: +* *Proxy IP Allowed List* requires proxies in the list are properly sanitizing header input and correctly setting an ``X-Forwarded-For`` value equal to the real source IP of the client. {ControllerNameStart} can rely on the IP addresses and hostnames in *Proxy IP Allowed List* to provide non-spoofed values for `X-Forwarded-For`.` +* Do not configure `HTTP_X_FORWARDED_FOR` as an item in *Remote Host Headers* unless *all* of the following conditions are satisfied: ** You are using a proxied environment with ssl termination; ** The proxy provides sanitization or validation of the `X-Forwarded-For` header to prevent client spoofing; ** `/etc/tower/conf.d/remote_host_headers.py` defines `PROXY_IP_ALLOWED_LIST` that contains only the originating IP addresses of trusted proxies or load balancers. ==== ++ +. Click btn:[Save] to save the settings. diff --git a/downstream/modules/platform/proc-configuring-reverse-proxy.adoc b/downstream/modules/platform/proc-configuring-reverse-proxy.adoc index 3a854d38c8..5d8830a997 100644 --- a/downstream/modules/platform/proc-configuring-reverse-proxy.adoc +++ b/downstream/modules/platform/proc-configuring-reverse-proxy.adoc @@ -7,13 +7,13 @@ = Configuring a reverse proxy [role="_abstract"] -You can support a reverse proxy server configuration by adding `HTTP_X_FORWARDED_FOR` to the *REMOTE_HOST_HEADERS* field in your {ControllerName} settings. The ``X-Forwarded-For`` (XFF) HTTP header field identifies the originating IP address of a client connecting to a web server through an HTTP proxy or load balancer. +You can support a reverse proxy server configuration by adding `HTTP_X_FORWARDED_FOR` to the *Remote Host Headers* field in the Systems Settings. The ``X-Forwarded-For`` (XFF) HTTP header field identifies the originating IP address of a client connecting to a web server through an HTTP proxy or load balancer. .Procedure -//[ddacosta] Need to verify that in 2.5 this is Settings[System]... -. On your {ControllerName}, navigate to {MenuAEAdminSettings} and select *Miscellaneous System settings* from the list of *System* options. -. In the *REMOTE_HOST_HEADERS* field, enter the following values: +//[ddacosta] Settings > System are controller specific for 2.5EA so don't change ControllerName to PlatformName. +. From the navigation panel, select {MenuSetSystem}. +. In the *Remote Host Headers* field, enter the following values: + ---- [ @@ -22,9 +22,11 @@ You can support a reverse proxy server configuration by adding `HTTP_X_FORWARDED "REMOTE_HOST" ] ---- ++ . Add the lines below to ``/etc/tower/conf.d/custom.py`` to ensure the application uses the correct headers: - ++ ---- USE_X_FORWARDED_PORT = True USE_X_FORWARDED_HOST = True ---- +. Click btn:[Save] to save the settings. diff --git a/downstream/modules/platform/proc-control-data-collection.adoc b/downstream/modules/platform/proc-control-data-collection.adoc index 12f09d5952..d8c2fa3be6 100644 --- a/downstream/modules/platform/proc-control-data-collection.adoc +++ b/downstream/modules/platform/proc-control-data-collection.adoc @@ -3,15 +3,12 @@ = Controlling data collection from {ControllerName} [role="_abstract"] -You can control how {ControllerName} collects data by setting your participation level in the *User Interface* tab in the *Settings* menu. +You can control how {ControllerName} collects data from the {MenuSetSystem} menu. .Procedure . Log in to your {ControllerName}. -//[ddacosta]I don't see an equivalent in 2.5, need to verify where it gets added -. Navigate to {MenuAEAdminSettings} and select *User Interface settings* from the *User Interface* option. -. Select the desired level of data collection from the *User Analytics Tracking State* drop-down list: -** *Off*: Prevents any data collection. -** *Anonymous*: Enables data collection without your specific user data. -** *Detailed*: Enables data collection including your specific user data. -. Click btn:[Save] to apply the settings or btn:[Cancel] to discard the changes. +. From the navigation panel, select {MenuSetSystem}. +. Select *Gather data for Automation Analytics* to enable {ControllerName} to gather data on automation and send it to Automation Analytics. + + \ No newline at end of file diff --git a/downstream/modules/platform/proc-enable-proxy-support.adoc b/downstream/modules/platform/proc-enable-proxy-support.adoc index 720871fb2a..412899e42a 100644 --- a/downstream/modules/platform/proc-enable-proxy-support.adoc +++ b/downstream/modules/platform/proc-enable-proxy-support.adoc @@ -2,16 +2,15 @@ [id="proc-enable-proxy-support_{context}"] = Enable proxy support - +//FYI - In 2.5 EA, the System menu is specific to controller so do not change to AAP. To provide proxy server support, {ControllerName} handles proxied requests (such as ALB, NLB , HAProxy, Squid, Nginx and tinyproxy in front of {ControllerName}) via the *REMOTE_HOST_HEADERS* list variable in the {ControllerName} settings. By default, *REMOTE_HOST_HEADERS* is set to `["REMOTE_ADDR", "REMOTE_HOST"]`. To enable proxy server support, edit the *REMOTE_HOST_HEADERS* field in the settings page for your {ControllerName}: .Procedure -. On your {ControllerName}, navigate to {MenuAEAdminSettings}. -. Select *Miscellaneous System settings* from the list of *System* options. -. In the *REMOTE_HOST_HEADERS* field, enter the following values: +. From the navigation panel, select {MenuSetSystem}. +. In the *Remote Host Headers* field, enter the following values: + ---- [ @@ -21,4 +20,4 @@ To enable proxy server support, edit the *REMOTE_HOST_HEADERS* field in the sett ] ---- -{ControllerNameStart} determines the remote host’s IP address by searching through the list of headers in *REMOTE_HOST_HEADERS* until the first IP address is located. +{ControllerNameStart} determines the remote host’s IP address by searching through the list of headers in *Remote Host Headers* until the first IP address is located. From 8dcacd02d8f591b9a160e840fa1f837f6f16a413 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Wed, 31 Jul 2024 09:57:26 +0100 Subject: [PATCH 055/590] Correct attributes that don't resolve in code blocks (#1656) (#1657) VM-install guide - Correct attributes that don't resolve in code blocks https://issues.redhat.com/browse/AAP-28102 --- .../modules/platform/ref-gateway-controller-hub-eda-ext-db.adoc | 1 + .../platform/ref-single-controller-hub-eda-with-managed-db.adoc | 1 + 2 files changed, 2 insertions(+) diff --git a/downstream/modules/platform/ref-gateway-controller-hub-eda-ext-db.adoc b/downstream/modules/platform/ref-gateway-controller-hub-eda-ext-db.adoc index 8e52cd7000..22ea17509e 100644 --- a/downstream/modules/platform/ref-gateway-controller-hub-eda-ext-db.adoc +++ b/downstream/modules/platform/ref-gateway-controller-hub-eda-ext-db.adoc @@ -15,6 +15,7 @@ Use this example to populate the inventory file to deploy single instances of pl ==== +[literal, subs="+attributes"] ----- [automationcontroller] controller.example.com diff --git a/downstream/modules/platform/ref-single-controller-hub-eda-with-managed-db.adoc b/downstream/modules/platform/ref-single-controller-hub-eda-with-managed-db.adoc index a2657d08b9..6605d6ddf6 100644 --- a/downstream/modules/platform/ref-single-controller-hub-eda-with-managed-db.adoc +++ b/downstream/modules/platform/ref-single-controller-hub-eda-with-managed-db.adoc @@ -15,6 +15,7 @@ Use this example to populate the inventory file to deploy single instances of {C ==== +[literal, subs="+attributes"] ----- [automationcontroller] controller.example.com From 3d9cbb89790efb485b9e9ba6244efd10e2d57659 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Wed, 31 Jul 2024 10:18:14 +0100 Subject: [PATCH 056/590] 2.5 Updating the EDA section of the deploy guide (#1659) (#1660) --- ...-eda-controller-with-aap-operator-ocp.adoc | 39 ++++++++----------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/downstream/modules/platform/proc-deploy-eda-controller-with-aap-operator-ocp.adoc b/downstream/modules/platform/proc-deploy-eda-controller-with-aap-operator-ocp.adoc index 1a75943d32..e0a811c92d 100644 --- a/downstream/modules/platform/proc-deploy-eda-controller-with-aap-operator-ocp.adoc +++ b/downstream/modules/platform/proc-deploy-eda-controller-with-aap-operator-ocp.adoc @@ -14,9 +14,22 @@ . Locate and select your installation of {PlatformNameShort}. -. Under *Provided APIs*, locate the {EDAName} modal and click *Create instance*. +. Under the *Details* tab, locate the *EDA* modal and click *Create instance*. + +. Click btn:[Form view], and in the *Name* field, enter the name you want for your new {EDAcontroller} deployment. + -This takes you to the Form View to customize your installation. +[IMPORTANT] +==== +If you have installed other {PlatformNameShort} components in your current {OCPShort} namespace, ensure that you provide a unique name for your {EDAcontroller} when you create your {EDAName} custom resource. Otherwise, naming conflicts can occur and impact {EDAcontroller} deployment. +==== +. Specify your controller URL in the *Automation Server URL* field. ++ +If you deployed {ControllerName} in Openshift as well, you can find the URL in the navigation panel under menu:Networking[Routes]. ++ +[NOTE] +==== +This is the only required customization, but you can customize other options using the UI form or directly in the YAML configuration tab, if desired. +==== + [IMPORTANT] ==== @@ -35,34 +48,16 @@ extra_settings: value: '12' ---- + -. Click btn:[Reload] and btn:[Save]. Return to the *Form* view. - -. In the *Name* field, enter the name you want for your new {EDAcontroller} deployment. -+ -[IMPORTANT] -==== -If you have other {PlatformNameShort} components installed in your current {OCPShort} namespace, ensure that you provide a unique name for your {EDAcontroller} when you create your {EDAName} custom resource. Otherwise, naming conflicts can occur and impact {EDAcontroller} deployment. -==== -+ -. Specify your controller URL. -+ -If you deployed {ControllerName} in Openshift as well, you can find the URL in the navigation panel under menu:Networking[Routes]. -+ -[NOTE] -==== -This is the only required customization, but you can customize other options using the UI form or directly in the YAML configuration tab, if desired. -==== - . Click btn:[Create]. This deploys {EDAcontroller} in the namespace you specified. + -After a couple minutes when the installation is marked as *Successful*, you can find the URL for the {EDAName} UI on the *Routes* page in the Openshift UI. +After a couple minutes when the installation is marked as *Successful*, you can find the URL for the {EDAName} UI on the *Routes* page in the OpenShift UI. . From the navigation panel, select menu:Networking[Routes] to find the new Route URL that has been created for you. + Routes are listed according to the name of your custom resource. -. Click the new URL to navigate to {EDAName} in the browser. +. Click the new URL under the *Location* column to navigate to {EDAName} in the browser. . From the navigation panel, select menu:Workloads[Secrets] and locate the Admin Password k8s secret that was created for you, unless you specified a custom one. + From 07994e7df2116bd1bfab5b3f698f5b82d2801004 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Thu, 1 Aug 2024 12:25:08 -0700 Subject: [PATCH 057/590] AAP-19236 - Add assemblies for Access Management and peer review changes for modules from 1647 (#1653) (#1665) * AAP-19236 - Add assemblies for Access Management and peer review changes from the modules PR * AAP-19236 - Implemented peer review changes --- .../assembly-controller-organizations.adoc | 51 ++++++++++--------- .../platform/assembly-controller-teams.adoc | 31 ++++++----- .../platform/assembly-controller-users.adoc | 50 +++++++++++------- .../platform/assembly-gw-resources.adoc | 18 +++++++ .../proc-gw-organizations-exec-env.adoc | 14 ++--- .../proc-gw-team-access-resources.adoc | 2 +- 6 files changed, 103 insertions(+), 63 deletions(-) create mode 100644 downstream/assemblies/platform/assembly-gw-resources.adoc diff --git a/downstream/assemblies/platform/assembly-controller-organizations.adoc b/downstream/assemblies/platform/assembly-controller-organizations.adoc index 779971e06e..13d96ec8cb 100644 --- a/downstream/assemblies/platform/assembly-controller-organizations.adoc +++ b/downstream/assemblies/platform/assembly-controller-organizations.adoc @@ -1,37 +1,40 @@ -[id="assembly-controller-organizations"] +ifdef::context[:parent-context: {context}] -ifdef::controller-GS[] -= Managing organizations in {ControllerName} +:_mod-docs-content-type: ASSEMBLY -An organization is a logical collection of users, teams, projects, and inventories. -It is the highest level object in the controller object hierarchy. -After you have created an organization, {ControllerName} displays the organization details. -You can then manage access and execution environments for the organization. +[id="assembly-my-user-story_{context}"] -image::controller-tower-hierarchy.png[Hierarchy] - -include::platform/proc-controller-review-organizations.adoc[leveloffset=+1] -include::platform/proc-controller-edit-an-organization.adoc[leveloffset=+1] -endif::controller-GS[] -ifdef::controller-UG[] = Organizations -An organization is a logical collection of users, teams, projects, and inventories. -It is the highest level object in the controller object hierarchy. +:context: access-mgmt-orgs + +An organization is a logical collection of users, teams, and resources. It is the highest level object in the {PlatformNameShort} object hierarchy. After you have created an organization, {PlatformNameShort} displays the organization details. You can then manage access and execution environments for the organization. +{PlatformNameShort} automatically creates a default organization and the system administrator is automatically assigned to this organization. If you have a Self-support level license, you have only the default organization available and must not delete it. + +[NOTE] +==== +Only Enterprise or Premium licenses can add new organizations. +==== + +Enterprise and Premium license users who want to add a new organization should refer to the xref:proc-controller-create-organization[Creating an organization]. + +include::proc-controller-review-organizations.adoc[leveloffset=+1] + +include::proc-controller-create-organization.adoc[leveloffset=+1] -image::controller-tower-hierarchy.png[Hierarchy] +include::con-controller-access-organizations.adoc[leveloffset=+1] -From the navigation menu, select btn:[Organizations] to display the existing organizations for your installation. +include::proc-controller-add-organization-user.adoc[leveloffset=+2] -image:organizations-home-showing-example-organization.png[Organizations] +include::proc-gw-add-admin-organization.adoc[leveloffset=+2] -Organizations can be searched by *Name* or *Description*. +include::proc-gw-add-team-organization.adoc[leveloffset=+2] -Modify organizations using the image:leftpencil.png[Edit,15,15] icon. -Click btn:[Delete] to remove a selected organization. +include::proc-gw-delete-organization.adoc[leveloffset=+2] -include::platform/proc-controller-create-organization.adoc[leveloffset=+1] -include::platform/con-controller-access-organizations.adoc[leveloffset=+1] +include::proc-gw-oganization-notifications.adoc[leveloffset=+1] -endif::controller-UG[] +include::proc-gw-organizations-exec-env.adoc[leveloffset=+1] +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/platform/assembly-controller-teams.adoc b/downstream/assemblies/platform/assembly-controller-teams.adoc index 4cd9299a90..b8301675c6 100644 --- a/downstream/assemblies/platform/assembly-controller-teams.adoc +++ b/downstream/assemblies/platform/assembly-controller-teams.adoc @@ -1,24 +1,31 @@ ifdef::context[:parent-context: {context}] -[id="assembly-controller-teams"] +:_mod-docs-content-type: ASSEMBLY + +[id="assembly-controller-teams_{context}"] + += Teams :context: controller-teams -= Managing teams -A *Team* is a subdivision of an organization with associated users, projects, credentials, and permissions. -Teams offer a means to implement role-based access control schemes and delegate responsibilities across organizations. -For example, you can grant permissions to a whole team rather than to each user on the team. +A team is a subdivision of an organization with associated users and resources. Teams provide a means to implement role-based access control schemes and delegate responsibilities across organizations. For instance, you can grant permissions to a team rather than each user on the team. +You can create as many teams as needed for your organization. Teams can only be assigned to one organization while an organization can be made up of multiple teams. Each team can be assigned roles, the same way roles are assigned for users. With teams you can assign credential ownership at scale, preventing the need to click through multiple interfaces to assign the same credentials to each individual user. + +include::proc-controller-creating-a-team.adoc[leveloffset=+1] + +include::proc-gw-team-list-view.adoc[leveloffset=+1] + +include::proc-gw-team-add-user.adoc[leveloffset=+1] -From the navigation panel, select {MenuControllerTeams}. +include::proc-gw-team-remove-user.adoc[leveloffset=+1] -image:organizations-teams-list.png[Teams list] +include::proc-gw-add-admin-team.adoc[leveloffset=+1] -You can sort and search the team list and searched by *Name* or *Organization*. +include::proc-controller-user-permissions.adoc[leveloffset=+1] -Click the Edit image:leftpencil.png[Edit,15,15] icon next to the entry to edit information about the team. -You can also review *Users* and *Permissions* associated with this team. +include::proc-gw-remove-roles-team.adoc[leveloffset=+1] -include::platform/proc-controller-creating-a-team.adoc[leveloffset=+1] +include::proc-gw-delete-team.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] -ifndef::parent-context[:!context:] +ifndef::parent-context[:!context:] \ No newline at end of file diff --git a/downstream/assemblies/platform/assembly-controller-users.adoc b/downstream/assemblies/platform/assembly-controller-users.adoc index b0e3a56ebd..6f5b7bc173 100644 --- a/downstream/assemblies/platform/assembly-controller-users.adoc +++ b/downstream/assemblies/platform/assembly-controller-users.adoc @@ -1,19 +1,31 @@ -[id="assembly-controller-users"] - -ifdef::controller-GS[] -= User roles in {ControllerName} -endif::controller-GS[] -ifdef::controller-UG[] -= Managing Users in {ControllerName} -endif::controller-UG[] - -include::platform/con-controller-create-users.adoc[leveloffset=+1] -ifdef::controller-UG[] -include::platform/proc-controller-creating-a-user.adoc[leveloffset=+1] -include::platform/proc-controller-deleting-a-user.adoc[leveloffset=+1] -include::platform/ref-controller-user-organizations.adoc[leveloffset=+1] -include::platform/ref-controller-user-teams.adoc[leveloffset=+1] -include::platform/ref-controller-user-roles.adoc[leveloffset=+1] -include::platform/proc-controller-user-permissions.adoc[leveloffset=+2] -include::platform/proc-controller-user-tokens.adoc[leveloffset=+1] -endif::controller-UG[] +ifdef::context[:parent-context: {context}] + +[id="assembly-controller-users_{context}"] += Users + +:context: access-mgmt-users + +Users associated with an organization are shown in the *Users* tab of the organization. + +You can add other users to an organization, including a normal user or system administrator, but first, you must create them. + +[NOTE] +==== +{PlatformNameShort} automatically creates a default admin user so they can log in and set up {PlatformNameShort} for their organization. This user can not be deleted or modified. + +==== +You can sort or search the User list by *Username*, *First name*, *Last name*, or *Email*. Click the arrows in the header to toggle your sorting preference. +You can view *User type* and *Email* beside the user name on the Users page. + +include::proc-gw-users-list-view.adoc[leveloffset=+1] + +include::proc-controller-creating-a-user.adoc[leveloffset=+1] + +include::proc-controller-deleting-a-user.adoc[leveloffset=+1] + +include::ref-controller-user-roles.adoc[leveloffset=+1] + +include::proc-gw-remove-roles-user.adoc[leveloffset=+1] + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/platform/assembly-gw-resources.adoc b/downstream/assemblies/platform/assembly-gw-resources.adoc new file mode 100644 index 0000000000..f2bcfd90fa --- /dev/null +++ b/downstream/assemblies/platform/assembly-gw-resources.adoc @@ -0,0 +1,18 @@ +ifdef::context[:parent-context: {context}] + +:_mod-docs-content-type: ASSEMBLY + +[id="assembly-gw-resources_{context}"] + += Resources + +:context: access-mgmt-resources + +You can manage user access to {PlatformNameShort} resources and what users can do with those resources. Users are granted access through the roles to which they are assigned or through roles inherited through the role hierarchy, for example, through the roles they inherit through team membership. {PlatformNameShort} resources differ depending on the functionality you are configuring. For example, resources can be job templates and projects for automation execution or decision environments and rulebook activations for automation decisions. + +include:: proc-gw-team-access-resources.adoc[leveloffset=+1] + +include:: proc-gw-user-access-resources.adoc[leveloffset=+1] + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] diff --git a/downstream/modules/platform/proc-gw-organizations-exec-env.adoc b/downstream/modules/platform/proc-gw-organizations-exec-env.adoc index 1fcce58b06..8d31fca0e3 100644 --- a/downstream/modules/platform/proc-gw-organizations-exec-env.adoc +++ b/downstream/modules/platform/proc-gw-organizations-exec-env.adoc @@ -2,9 +2,9 @@ [id="proc-gw-organizations-exec-env_{context}"] -= Working with execution environments += Working with {ExecEnvShort}s -When automation controller is enabled on the platform, you can review any execution environments you have set up and manage their settings within the organization resource. +When {ControllerName} is enabled on the platform, you can review any {ExecEnvShort}s you have set up and manage their settings within the organization resource. For more information about execution environments, see link:{BaseURL}/{PlatformVers}/html/using_automation_execution/index#assembly-controller-execution-environments[Execution environments] in _Using automation execution_ guide. @@ -12,14 +12,14 @@ For more information about execution environments, see link:{BaseURL}/{PlatformV .Procedure . From the navigation panel, select {MenuAMOrganizations}. -. From the Organizations list view, select the organization to which you want to manage execution environments. +. From the Organizations list view, select the organization whose {ExecEnvShort}s you want to manage. . Select the *Execution Environments* tab. -. If no execution environments are available, click btn:[Create execution environment] to create one. Alternatively, you can create an execution environment from the navigation panel by selecting {MenuInfrastructureExecEnvironments}. -. Click btn:[Create execution environment]. +. If no {ExecEnvShort}s are available, click btn:[Create execution environment] to create one. Alternatively, you can create an {ExecEnvShort} from the navigation panel by selecting {MenuInfrastructureExecEnvironments}. +. Click btn:[Create {ExecEnvShort}]. + [NOTE] ==== -After creating a new execution environment, return to Access Management > Organizations and select the organization in which you created the execution environment to update the list on that tab. +After creating a new {ExecEnvShort}s, return to {MenuAMOrganizations} and select the organization in which you created the {ExecEnvShort} to update the list on that tab. ==== + -. Select the execution environments to use with your particular organization. +. Select the {ExecEnvShort}s to use with your particular organization. diff --git a/downstream/modules/platform/proc-gw-team-access-resources.adoc b/downstream/modules/platform/proc-gw-team-access-resources.adoc index 2599731dd9..e3a0b82491 100644 --- a/downstream/modules/platform/proc-gw-team-access-resources.adoc +++ b/downstream/modules/platform/proc-gw-team-access-resources.adoc @@ -3,7 +3,7 @@ [id="proc-gw-team-access_{context}"] = Providing team access to a resource -You can grant users access through the teams of which they are members. When you add a user as a member of a team, they inherit access to the roles and resources defined for that team. +You can grant users access based on their team membership. When you add a user as a member of a team, they inherit access to the roles and resources defined for that team. .Procedure From a5f220a8883aae7d947daaf90053b67b319da24e Mon Sep 17 00:00:00 2001 From: Jameria Self <73364088+jself-sudoku@users.noreply.github.com> Date: Thu, 1 Aug 2024 15:55:32 -0400 Subject: [PATCH 058/590] AAP-13268-EDA updated eda controller user guide (#1495) (#1666) * AAP-13268-EDA updated eda controller user guide Co-authored-by: Elizabeth Murtough <114593312+emurtoug@users.noreply.github.com> --- .../eda/assembly-eda-performance-tuning.adoc | 15 ++++++++++++++ .../eda/con-characterizing-your-workload.adoc | 12 +++++++++++ .../eda/con-modifying-memory-limit.adoc | 19 ++++++++++++++++++ ...on-modifying-simultaneous-activations.adoc | 17 ++++++++++++++++ .../eda/con-system-level-monitoring.adoc | 18 +++++++++++++++++ ...c-modifying-activations-after-install.adoc | 14 +++++++++++++ ...-modifying-activations-during-install.adoc | 15 ++++++++++++++ .../proc-modifying-memory-after-install.adoc | 13 ++++++++++++ .../proc-modifying-memory-during-install.adoc | 13 ++++++++++++ .../eda/ref-performance-troubleshooting.adoc | 20 +++++++++++++++++++ .../titles/eda/eda-user-guide/master.adoc | 1 + 11 files changed, 157 insertions(+) create mode 100644 downstream/assemblies/eda/assembly-eda-performance-tuning.adoc create mode 100644 downstream/modules/eda/con-characterizing-your-workload.adoc create mode 100644 downstream/modules/eda/con-modifying-memory-limit.adoc create mode 100644 downstream/modules/eda/con-modifying-simultaneous-activations.adoc create mode 100644 downstream/modules/eda/con-system-level-monitoring.adoc create mode 100644 downstream/modules/eda/proc-modifying-activations-after-install.adoc create mode 100644 downstream/modules/eda/proc-modifying-activations-during-install.adoc create mode 100644 downstream/modules/eda/proc-modifying-memory-after-install.adoc create mode 100644 downstream/modules/eda/proc-modifying-memory-during-install.adoc create mode 100644 downstream/modules/eda/ref-performance-troubleshooting.adoc diff --git a/downstream/assemblies/eda/assembly-eda-performance-tuning.adoc b/downstream/assemblies/eda/assembly-eda-performance-tuning.adoc new file mode 100644 index 0000000000..25d843e7d7 --- /dev/null +++ b/downstream/assemblies/eda/assembly-eda-performance-tuning.adoc @@ -0,0 +1,15 @@ +[id="eda-performance-tuning"] + += Performance tuning for {EDAcontroller} + +{EDAName} is a highly scalable, flexible automation capability. +{EDAcontroller} provides the interface in which {EDAName} automation performs. +Tune your {EDAcontroller} to optimize performance and scalability through: + +* Characterizing your workload +* System level monitoring +* Performance troubleshooting + +include::eda/con-characterizing-your-workload.adoc[leveloffset=+1] +include::eda/con-system-level-monitoring.adoc[leveloffset=+1] +include::eda/ref-performance-troubleshooting.adoc[leveloffset=+1] diff --git a/downstream/modules/eda/con-characterizing-your-workload.adoc b/downstream/modules/eda/con-characterizing-your-workload.adoc new file mode 100644 index 0000000000..cd064c636a --- /dev/null +++ b/downstream/modules/eda/con-characterizing-your-workload.adoc @@ -0,0 +1,12 @@ +[id="characterizing-your-workload"] + += Characterizing your workload + +[role="_abstract"] +In {EDAcontroller}, your workload includes the number of rulebook activations and events being received. Consider the following factors to characterize your {EDAcontroller} workload: + +. Number of simultaneous rulebook activations +. Number of events received by {EDAcontroller} + +include::con-modifying-simultaneous-activations.adoc[leveloffset=+1] +include::con-modifying-memory-limit.adoc[leveloffset=+1] diff --git a/downstream/modules/eda/con-modifying-memory-limit.adoc b/downstream/modules/eda/con-modifying-memory-limit.adoc new file mode 100644 index 0000000000..bcce7b419e --- /dev/null +++ b/downstream/modules/eda/con-modifying-memory-limit.adoc @@ -0,0 +1,19 @@ +[id="modifying-memory-limit"] + += Modifying the default memory limit for each rulebook activation + +[role="_abstract"] +Memory usage is based on the number of events that {EDAcontroller} has to process. +Each rulebook activation container has a 200MB memory limit. +For example, with 4 CPU and 16GB of RAM, one rulebook activation container with an assigned 200MB memory limit can not handle more than 150,000 events per minute. +If the number of parallel running rulebook activations is higher, then the maximum number of events each rulebook activation can process is reduced. +If there are too many incoming events at a very high rate, the container can run out of memory trying to process the events. +This will kill the container, and your rulebook activation will fail with a status code of 137. + +To address this failure, you can increase the amount of memory allocated to rulebook activations in order to process a high number of events at a high rate by using one of the following procedures: + +* Modifying the default memory limit for each rulebook activation during installation +* Modifying the default memory limit for each rulebook activation after installation + +include::proc-modifying-memory-during-install.adoc[leveloffset=+1] +include::proc-modifying-memory-after-install.adoc[leveloffset=+1] \ No newline at end of file diff --git a/downstream/modules/eda/con-modifying-simultaneous-activations.adoc b/downstream/modules/eda/con-modifying-simultaneous-activations.adoc new file mode 100644 index 0000000000..823afe2706 --- /dev/null +++ b/downstream/modules/eda/con-modifying-simultaneous-activations.adoc @@ -0,0 +1,17 @@ +[id="modifying-simultaneous-activations"] + += Modifying the number of simultaneous rulebook activations + +[role="_abstract"] +By default, {EDAcontroller} allows 12 rulebook activations to run simultaneously. +If any more than 12 rulebook activations are created, the expected behavior is that subsequent rulebook activations wait in pending until there is an available rulebook activation worker. +In this case, the rulebook activation status will display as “pending” even if there is enough free memory and CPU on your {EDAcontroller} instance. +To change this behavior, you must change the default maximum number of running rulebook activations. + +**Note:** The value for `EDA_MAX_RUNNING_ACTIVATIONS` doesn’t change with the change in instance size, so it needs to be adjusted manually. + +include::proc-modifying-activations-during-install.adoc[leveloffset=+1] +include::proc-modifying-activations-after-install.adoc[leveloffset=+1] + +.Resources +For more information about rulebook activations, see the link:https://access.redhat.com/documentation/en-us/red_hat_ansible_automation_platform/2.4/html-single/event-driven_ansible_controller_user_guide/index#eda-rulebook-activations[Rulebook activations]. \ No newline at end of file diff --git a/downstream/modules/eda/con-system-level-monitoring.adoc b/downstream/modules/eda/con-system-level-monitoring.adoc new file mode 100644 index 0000000000..38d3e7b718 --- /dev/null +++ b/downstream/modules/eda/con-system-level-monitoring.adoc @@ -0,0 +1,18 @@ +[id="system-level-monitoring"] + += System level monitoring for {EDAcontroller} + +[role="_abstract"] +After characterizing your workload to determine how many rulebook activations you are running in parallel and how many events you are receiving at any given point, you must consider monitoring your {EDAcontroller} host at the system level. +Using system level monitoring to review information about {EDAName}’s performance over time helps when diagnosing problems or when considering capacity for future growth. + +System level monitoring includes the following information: + +* Disk I/O +* RAM utilization +* CPU utilization +* Network traffic + +Higher CPU, RAM, or Disk utilization can affect the overall performance of {EDAcontroller}. +For example, a high utilization of any of these system level resources indicates that either the {EDAcontroller} is running too many rulebook activations, or some of the individual rulebook activations are using a high volume of resources. +In this case, you must increase your system level resources to support your workload. diff --git a/downstream/modules/eda/proc-modifying-activations-after-install.adoc b/downstream/modules/eda/proc-modifying-activations-after-install.adoc new file mode 100644 index 0000000000..b6bbab2b38 --- /dev/null +++ b/downstream/modules/eda/proc-modifying-activations-after-install.adoc @@ -0,0 +1,14 @@ +[id="modifying-activations-after-install"] + += Modifying the number of simultaneous rulebook activations after {EDAcontroller} installation + +[role="_abstract"] +By default, {EDAcontroller} allows 12 activations to run simultaneously. +You can modify this default value after installation by using the following procedure: + +.Procedure +. Navigate to the environment file at `/etc/ansible-automation-platform/eda`. +. Choose the number of maximum running activations that you need. +For example, `EDA_MAX_RUNNING_ACTIVATIONS = 16` +. Use the following command to restart EDA services: `systemctl restart automation-eda-controller.target` + diff --git a/downstream/modules/eda/proc-modifying-activations-during-install.adoc b/downstream/modules/eda/proc-modifying-activations-during-install.adoc new file mode 100644 index 0000000000..235f98f492 --- /dev/null +++ b/downstream/modules/eda/proc-modifying-activations-during-install.adoc @@ -0,0 +1,15 @@ +[id="modifying-activations-during-install"] + += Modifying the number of simultaneous rulebook activations during {EDAcontroller} installation + +[role="_abstract"] +By default, {EDAcontroller} allows 12 activations to run simultaneously. +You can modify this default value during installation by using the following procedure: + +.Procedure +Provide a variable to the VM installer: + +. Navigate to the setup inventory file. +. Add `automationedacontroller_max_running_activations` in the [all:vars] section. +For example, `automationedacontroller_max_running_activations=16`. +. Run the setup. \ No newline at end of file diff --git a/downstream/modules/eda/proc-modifying-memory-after-install.adoc b/downstream/modules/eda/proc-modifying-memory-after-install.adoc new file mode 100644 index 0000000000..398b6b8204 --- /dev/null +++ b/downstream/modules/eda/proc-modifying-memory-after-install.adoc @@ -0,0 +1,13 @@ +[id="modifying-memory-after-install"] + += Modifying the default memory limit for each rulebook activation after installation + +[role="_abstract"] +By default, each rulebook activation container has a 200MB memory limit. +You can modify this default value after installation by using the following procedure: + +.Procedure +. Navigate to the environment file at `/etc/ansible-automation-platform/eda`. +. Modify the default container memory limit. +For example, `EDA_PODMAN_MEM_LIMIT = '300m'`. +. Restart the {EDAcontroller} services using `systemctl restart automation-eda-controller.target`. diff --git a/downstream/modules/eda/proc-modifying-memory-during-install.adoc b/downstream/modules/eda/proc-modifying-memory-during-install.adoc new file mode 100644 index 0000000000..cfd7d29008 --- /dev/null +++ b/downstream/modules/eda/proc-modifying-memory-during-install.adoc @@ -0,0 +1,13 @@ +[id="modifying-memory-during-install"] + += Modifying the default memory limit for each rulebook activation during installation + +[role="_abstract"] +By default, each rulebook activation container has a 200MB memory limit. +You can modify this default value during installation by using the following procedure: + +.Procedure +. Navigate to the setup inventory file. +. Add `automationedacontroller_podman_mem_limit` in the [all:vars] section. +For example, `automationedacontroller_podman_mem_limit='400m'`. +. Run the setup. diff --git a/downstream/modules/eda/ref-performance-troubleshooting.adoc b/downstream/modules/eda/ref-performance-troubleshooting.adoc new file mode 100644 index 0000000000..dba80fcff3 --- /dev/null +++ b/downstream/modules/eda/ref-performance-troubleshooting.adoc @@ -0,0 +1,20 @@ +[id="performance-troubleshooting"] + += Performance Troubleshooting for {EDAcontroller} + +[role="_abstract"] +Based on the default parameters within {EDAcontroller}, you might encounter scenarios that pose challenges to completing your workload. +The following section provides descriptions of these scenarios and troubleshooting guidance. + +* My activation status displays as “running”, but it is not processing the events. +** Ensure that you are using the correct event source in the rulebook activation. +If the event you are expecting is coming from a source other than what is in the rulebook, {EDAcontroller} will not process the event. + +* My activation status displays as “running”, and {EDAcontroller} is also receiving the events, but no actions are occuring. +** Ensure that you have set the correct conditions for matching the event and taking actions in the rulebook activation. + +* My activation keeps restarting in an infinite loop. +** By default, the reset policy for rulebook activations is set to “on failure”. Change the estart policy using the following procedure: +. Navigate to the Rulebook Activation screen. +. Click the Restart Policy drop down menu. +. Choose the appropriate value: “On Failure”, “Always”, “Never”. diff --git a/downstream/titles/eda/eda-user-guide/master.adoc b/downstream/titles/eda/eda-user-guide/master.adoc index 4dad15ff30..9842a8dd15 100644 --- a/downstream/titles/eda/eda-user-guide/master.adoc +++ b/downstream/titles/eda/eda-user-guide/master.adoc @@ -19,3 +19,4 @@ include::eda/assembly-eda-decision-environments.adoc[leveloffset=+1] include::eda/assembly-eda-set-up-token.adoc[leveloffset=+1] include::eda/assembly-eda-rulebook-activations.adoc[leveloffset=+1] include::eda/assembly-eda-rule-audit.adoc[leveloffset=+1] +include::eda/assembly-eda-performance-tuning.adoc[leveloffset=+1] From 351895299bfeea653d73530aad608de9f86eccc6 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Fri, 2 Aug 2024 09:16:00 +0100 Subject: [PATCH 059/590] Update ordering and hierarchy of HA automation hub sections in VM-install guide (#1664) (#1669) VM-install guide - HA automation hub should be moved up a level in the document hierarchy https://issues.redhat.com/browse/AAP-28097 --- .../assembly-platform-install-scenario.adoc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/downstream/assemblies/platform/assembly-platform-install-scenario.adoc b/downstream/assemblies/platform/assembly-platform-install-scenario.adoc index f3718603fb..1bd9f89a25 100644 --- a/downstream/assemblies/platform/assembly-platform-install-scenario.adoc +++ b/downstream/assemblies/platform/assembly-platform-install-scenario.adoc @@ -48,14 +48,9 @@ include::platform/con-eda-2-5-with-controller-2-4.adoc[leveloffset=+3] // include::platform/ref-standalone-controller-hub-ext-database-inventory.adoc[leveloffset=+3] //[rjgrange] Removed for AAP-22613 Removing all references to SSO and LDAP installation //include::platform/ref-connect-hub-to-rhsso.adoc[leveloffset=+4] - include::platform/ref-gateway-controller-ext-db.adoc[leveloffset=+3] include::platform/ref-gateway-controller-hub-ext-db.adoc[leveloffset=+3] -include::platform/con-ha-hub-installation.adoc[leveloffset=+4] -include::platform/proc-install-ha-hub-selinux.adoc[leveloffset=+4] -include::platform/proc-configure-pulpcore-service.adoc[leveloffset=+4] -include::platform/proc-apply-selinux-context.adoc[leveloffset=+4] -include::hub/hub/proc-configure-content-signing-on-pah.adoc[leveloffset=+3] + //[rjgrange] Removed for AAP-22613 Removing all references to SSO and LDAP installation //include::platform/ref-ldap-config-on-pah.adoc[leveloffset=+3] //include::platform/ref-ldap-referrals.adoc[leveloffset=+3] @@ -64,6 +59,13 @@ include::hub/hub/proc-configure-content-signing-on-pah.adoc[leveloffset=+3] //include::platform/ref-standalone-hub-ext-database-customer-provided.adoc[leveloffset=+3] // dcdacosta - removed this assembly because the modules are included above. include::assembly-installing-high-availability-hub.adoc[leveloffset=+3] include::platform/ref-gateway-controller-hub-eda-ext-db.adoc[leveloffset=+3] + +include::platform/con-ha-hub-installation.adoc[leveloffset=+3] +include::platform/proc-install-ha-hub-selinux.adoc[leveloffset=+3] +include::platform/proc-configure-pulpcore-service.adoc[leveloffset=+4] +include::platform/proc-apply-selinux-context.adoc[leveloffset=+4] +include::hub/hub/proc-configure-content-signing-on-pah.adoc[leveloffset=+3] + include::platform/proc-running-setup-script.adoc[leveloffset=+1] include::platform/proc-verify-aap-installation.adoc[leveloffset=+1] From 5789adb66ccd4e2b1c7807e1f623df2c864c6b25 Mon Sep 17 00:00:00 2001 From: Jameria Self <73364088+jself-sudoku@users.noreply.github.com> Date: Fri, 2 Aug 2024 08:58:54 -0400 Subject: [PATCH 060/590] AAP-25614 Deprecate chapter on setting up controller tokens in EDA controller user guide (#1633) (#1668) * AAP-25614 Deprecated the former topic on setting up controller tokens for now * AAP-25614 Updated overview; remove previous controller token topic and added performance tuning --- .../assemblies/eda/assembly-eda-user-guide-overview.adoc | 3 ++- downstream/titles/eda/eda-user-guide/master.adoc | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/downstream/assemblies/eda/assembly-eda-user-guide-overview.adoc b/downstream/assemblies/eda/assembly-eda-user-guide-overview.adoc index eb204aac93..a7167fe5bc 100644 --- a/downstream/assemblies/eda/assembly-eda-user-guide-overview.adoc +++ b/downstream/assemblies/eda/assembly-eda-user-guide-overview.adoc @@ -10,8 +10,9 @@ The following procedures form the user configuration: * xref:eda-set-up-credential[Setting up credentials] * xref:eda-set-up-new-project[Setting up a new project] * xref:eda-set-up-new-decision-environment[Setting up a new decision environment] -* xref:eda-set-up-token[Setting up a token to authenticate to {PlatformNameShort} Controller] +//* xref:eda-set-up-token[Setting up a token to authenticate to {PlatformNameShort} Controller] * xref:eda-set-up-rulebook-activation[Setting up a rulebook activation] +* xref:eda-performance-tuning[Performance tuning for EDAcontroller] [NOTE] diff --git a/downstream/titles/eda/eda-user-guide/master.adoc b/downstream/titles/eda/eda-user-guide/master.adoc index 9842a8dd15..ebedade6c3 100644 --- a/downstream/titles/eda/eda-user-guide/master.adoc +++ b/downstream/titles/eda/eda-user-guide/master.adoc @@ -16,7 +16,7 @@ include::eda/assembly-eda-user-guide-overview.adoc[leveloffset=+1] include::eda/assembly-eda-credentials.adoc[leveloffset=+1] include::eda/assembly-eda-projects.adoc[leveloffset=+1] include::eda/assembly-eda-decision-environments.adoc[leveloffset=+1] -include::eda/assembly-eda-set-up-token.adoc[leveloffset=+1] +//include::eda/assembly-eda-set-up-token.adoc[leveloffset=+1] include::eda/assembly-eda-rulebook-activations.adoc[leveloffset=+1] include::eda/assembly-eda-rule-audit.adoc[leveloffset=+1] include::eda/assembly-eda-performance-tuning.adoc[leveloffset=+1] From a400ff0db99d04d1403b068098d8db0c05e21f22 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Fri, 2 Aug 2024 14:23:21 +0100 Subject: [PATCH 061/590] Update URL of trial licence (#1671) (#1673) update URL of trial license from ansible.com to redhat.com https://issues.redhat.com/browse/AAP-26587 --- .../modules/platform/ref-controller-trial-evaluation.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/downstream/modules/platform/ref-controller-trial-evaluation.adoc b/downstream/modules/platform/ref-controller-trial-evaluation.adoc index 649b47b321..c2e2bc2255 100644 --- a/downstream/modules/platform/ref-controller-trial-evaluation.adoc +++ b/downstream/modules/platform/ref-controller-trial-evaluation.adoc @@ -4,6 +4,6 @@ You require a license to run {ControllerName}. You can start by using a free trial license. -* Trial licenses for {PlatformNameShort} are available at: http://ansible.com/license +* Trial licenses for {PlatformNameShort} are available at: https://www.redhat.com/en/products/trials?products=ansible * Support is not included in a trial license or during an evaluation of the {ControllerName} software. \ No newline at end of file From 6b302ca41d689dcabe07ba153cd53b1fdd156e60 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Fri, 2 Aug 2024 16:06:20 +0100 Subject: [PATCH 062/590] Update SELinux command (#1652) (#1674) * Update SELinux command [Docs] NFS SELinux context for Automation Hub is missing https://issues.redhat.com/browse/AAP-27172 * Update SELinux command Correction [Docs] NFS SELinux context for Automation Hub is missing https://issues.redhat.com/browse/AAP-27172 --- downstream/modules/platform/proc-install-ha-hub-selinux.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/downstream/modules/platform/proc-install-ha-hub-selinux.adoc b/downstream/modules/platform/proc-install-ha-hub-selinux.adoc index 8889e456b3..92cf62a8c7 100644 --- a/downstream/modules/platform/proc-install-ha-hub-selinux.adoc +++ b/downstream/modules/platform/proc-install-ha-hub-selinux.adoc @@ -21,7 +21,7 @@ $ mkdir /var/lib/pulp/ . Open `/etc/fstab` using a text editor, then add the following values: + ---- -srv_rhel8:/data /var/lib/pulp nfs defaults,_netdev,nosharecache 0 0 +srv_rhel8:/data /var/lib/pulp nfs defaults,_netdev,nosharecache,context="system_u:object_r:var_lib_t:s0" 0 0 srv_rhel8:/data/pulpcore_static /var/lib/pulp/pulpcore_static nfs defaults,_netdev,nosharecache,context="system_u:object_r:httpd_sys_content_rw_t:s0" 0 0 ---- . Run the reload systemd manager configuration command: From 6f9c8e19599c3f3aefbde6a700a07007619978b8 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Mon, 5 Aug 2024 14:52:21 -0600 Subject: [PATCH 063/590] AAP-19236 fix include statements to include platform/ (#1680) (#1683) --- .../assembly-controller-organizations.adoc | 18 +++++++++--------- .../platform/assembly-controller-teams.adoc | 16 ++++++++-------- .../platform/assembly-controller-users.adoc | 10 +++++----- .../platform/assembly-gw-resources.adoc | 4 ++-- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/downstream/assemblies/platform/assembly-controller-organizations.adoc b/downstream/assemblies/platform/assembly-controller-organizations.adoc index 13d96ec8cb..7468e415e2 100644 --- a/downstream/assemblies/platform/assembly-controller-organizations.adoc +++ b/downstream/assemblies/platform/assembly-controller-organizations.adoc @@ -18,23 +18,23 @@ Only Enterprise or Premium licenses can add new organizations. Enterprise and Premium license users who want to add a new organization should refer to the xref:proc-controller-create-organization[Creating an organization]. -include::proc-controller-review-organizations.adoc[leveloffset=+1] +include::platform/proc-controller-review-organizations.adoc[leveloffset=+1] -include::proc-controller-create-organization.adoc[leveloffset=+1] +include::platform/proc-controller-create-organization.adoc[leveloffset=+1] -include::con-controller-access-organizations.adoc[leveloffset=+1] +include::platform/con-controller-access-organizations.adoc[leveloffset=+1] -include::proc-controller-add-organization-user.adoc[leveloffset=+2] +include::platform/proc-controller-add-organization-user.adoc[leveloffset=+2] -include::proc-gw-add-admin-organization.adoc[leveloffset=+2] +include::platform/proc-gw-add-admin-organization.adoc[leveloffset=+2] -include::proc-gw-add-team-organization.adoc[leveloffset=+2] +include::platform/proc-gw-add-team-organization.adoc[leveloffset=+2] -include::proc-gw-delete-organization.adoc[leveloffset=+2] +include::platform/proc-gw-delete-organization.adoc[leveloffset=+2] -include::proc-gw-oganization-notifications.adoc[leveloffset=+1] +include::platform/proc-gw-oganization-notifications.adoc[leveloffset=+1] -include::proc-gw-organizations-exec-env.adoc[leveloffset=+1] +include::platform/proc-gw-organizations-exec-env.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/platform/assembly-controller-teams.adoc b/downstream/assemblies/platform/assembly-controller-teams.adoc index b8301675c6..4728b5c285 100644 --- a/downstream/assemblies/platform/assembly-controller-teams.adoc +++ b/downstream/assemblies/platform/assembly-controller-teams.adoc @@ -11,21 +11,21 @@ ifdef::context[:parent-context: {context}] A team is a subdivision of an organization with associated users and resources. Teams provide a means to implement role-based access control schemes and delegate responsibilities across organizations. For instance, you can grant permissions to a team rather than each user on the team. You can create as many teams as needed for your organization. Teams can only be assigned to one organization while an organization can be made up of multiple teams. Each team can be assigned roles, the same way roles are assigned for users. With teams you can assign credential ownership at scale, preventing the need to click through multiple interfaces to assign the same credentials to each individual user. -include::proc-controller-creating-a-team.adoc[leveloffset=+1] +include::platform/proc-controller-creating-a-team.adoc[leveloffset=+1] -include::proc-gw-team-list-view.adoc[leveloffset=+1] +include::platform/proc-gw-team-list-view.adoc[leveloffset=+1] -include::proc-gw-team-add-user.adoc[leveloffset=+1] +include::platform/proc-gw-team-add-user.adoc[leveloffset=+1] -include::proc-gw-team-remove-user.adoc[leveloffset=+1] +include::platform/proc-gw-team-remove-user.adoc[leveloffset=+1] -include::proc-gw-add-admin-team.adoc[leveloffset=+1] +include::platform/proc-gw-add-admin-team.adoc[leveloffset=+1] -include::proc-controller-user-permissions.adoc[leveloffset=+1] +include::platform/proc-controller-user-permissions.adoc[leveloffset=+1] -include::proc-gw-remove-roles-team.adoc[leveloffset=+1] +include::platform/proc-gw-remove-roles-team.adoc[leveloffset=+1] -include::proc-gw-delete-team.adoc[leveloffset=+1] +include::platform/proc-gw-delete-team.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] \ No newline at end of file diff --git a/downstream/assemblies/platform/assembly-controller-users.adoc b/downstream/assemblies/platform/assembly-controller-users.adoc index 6f5b7bc173..a15d5c64eb 100644 --- a/downstream/assemblies/platform/assembly-controller-users.adoc +++ b/downstream/assemblies/platform/assembly-controller-users.adoc @@ -17,15 +17,15 @@ You can add other users to an organization, including a normal user or system ad You can sort or search the User list by *Username*, *First name*, *Last name*, or *Email*. Click the arrows in the header to toggle your sorting preference. You can view *User type* and *Email* beside the user name on the Users page. -include::proc-gw-users-list-view.adoc[leveloffset=+1] +include::platform/proc-gw-users-list-view.adoc[leveloffset=+1] -include::proc-controller-creating-a-user.adoc[leveloffset=+1] +include::platform/proc-controller-creating-a-user.adoc[leveloffset=+1] -include::proc-controller-deleting-a-user.adoc[leveloffset=+1] +include::platform/proc-controller-deleting-a-user.adoc[leveloffset=+1] -include::ref-controller-user-roles.adoc[leveloffset=+1] +include::platform/ref-controller-user-roles.adoc[leveloffset=+1] -include::proc-gw-remove-roles-user.adoc[leveloffset=+1] +include::platform/proc-gw-remove-roles-user.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/platform/assembly-gw-resources.adoc b/downstream/assemblies/platform/assembly-gw-resources.adoc index f2bcfd90fa..030b5d1604 100644 --- a/downstream/assemblies/platform/assembly-gw-resources.adoc +++ b/downstream/assemblies/platform/assembly-gw-resources.adoc @@ -10,9 +10,9 @@ ifdef::context[:parent-context: {context}] You can manage user access to {PlatformNameShort} resources and what users can do with those resources. Users are granted access through the roles to which they are assigned or through roles inherited through the role hierarchy, for example, through the roles they inherit through team membership. {PlatformNameShort} resources differ depending on the functionality you are configuring. For example, resources can be job templates and projects for automation execution or decision environments and rulebook activations for automation decisions. -include:: proc-gw-team-access-resources.adoc[leveloffset=+1] +include::platform/proc-gw-team-access-resources.adoc[leveloffset=+1] -include:: proc-gw-user-access-resources.adoc[leveloffset=+1] +include::platform/proc-gw-user-access-resources.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] From 13058a574c32c3104b653015837cb282217161a1 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Mon, 5 Aug 2024 15:03:00 -0600 Subject: [PATCH 064/590] AAP-19133 Update content on teams for 2.5 RBAC changes (#1678) (#1684) * AAP-19133 Update content on teams for 2.5 RBAC changes * AAP-19133 - implement peer review changes --- .../proc-controller-creating-a-team.adoc | 57 +++++-------------- .../proc-controller-user-permissions.adoc | 46 +++++---------- 2 files changed, 30 insertions(+), 73 deletions(-) diff --git a/downstream/modules/platform/proc-controller-creating-a-team.adoc b/downstream/modules/platform/proc-controller-creating-a-team.adoc index 5cabe5ad96..5e90cd8883 100644 --- a/downstream/modules/platform/proc-controller-creating-a-team.adoc +++ b/downstream/modules/platform/proc-controller-creating-a-team.adoc @@ -1,50 +1,23 @@ +:_mod-docs-content-type: PROCEDURE + [id="proc-controller-creating-a-team"] = Creating a team -You can create as many teams of users as you need for your organization. -You can assign permissions to each team, just as with users. -Teams can also assign ownership for credentials, minimizing the steps to assign the same credentials to the same user. - +You can create new teams, assign an organization to the team, and manage the users and administrators associated with each team. Users associated with a team inherit the permissions associated with the team and any organization permissions to which the team has membership. +To add a user or administrator to a team, the user must have already been created. .Procedure -. On the *Teams* page, click btn:[Add]. +. From the navigation panel, select {MenuAMTeams}. +. Click btn:[Create team]. +. Enter a *Name* and optionally provide a *Description* for the team. +. Select an organization from the *Organization* list to which you want to associate this team. + -//image:teams-create-new-team.png[Teams -create new team] -. Enter the appropriate details into the following fields: - -* *Name* -* Optional: *Description* -* *Organization*: You must select an existing organization -. Click *Save*. -The *Details* dialog opens. -. Review and edit your team information. +[NOTE] +==== +Each team can only be assigned to one organization. +==== + -image:teams-example-team-successfully-created.png[Teams- Details dialog] - -== Adding or removing a user to a team - -To add a user to a team, the user must already have been created. -For more information, see xref:proc-controller-creating-a-user[Creating a user]. -Adding a user to a team adds them as a member only. -Use the *Access* tab to specify a role for the user on different resources. - -.Procedure -. In the *Access* tab of the *Details* page click btn:[Add]. -. Follow the prompts to add a user and assign them to roles. -. Click btn:[Save]. - -== Removing roles for a user - -.Procedure - -* To remove roles for a particular user, click the image:disassociate.png[Disassociate,10,10] icon next to its resource. - -//image:permissions-disassociate.png[image] - -This launches a confirmation dialog, asking you to confirm the disassociation. - -//image:permissions-disassociate-confirm.png[image] +. Click btn:[Create team]. ++ +The *Details* page opens, where you can review and edit your team information. -include::ref-controller-team-access.adoc[leveloffset=+1] -include::ref-controller-team-roles.adoc[leveloffset=+1] -include::proc-controller-team-add-permissions.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/proc-controller-user-permissions.adoc b/downstream/modules/platform/proc-controller-user-permissions.adoc index c07233f547..62dc4baf2d 100644 --- a/downstream/modules/platform/proc-controller-user-permissions.adoc +++ b/downstream/modules/platform/proc-controller-user-permissions.adoc @@ -1,38 +1,22 @@ +:_mod-docs-content-type: PROCEDURE + [id="proc-controller-user-permissions"] -= Adding and removing user permissions += Adding roles to a team -To add permissions to a particular user: +You can assign permissions to teams, such as edit and administer resources and other elements. +You can set permissions through an inventory, project, job template and other resources, or within the Organizations view. .Procedure -. From the *Users* list view, click on the name of a user. -. On the *Details* page, click btn:[Add]. -This opens the *Add user permissions* wizard. -+ -image:users-add-permissions-form.png[Add Permissions Form] -. Select the object to a assign permissions, for which the user will have access. -. Click btn:[Next]. -. Select the resource to assign team roles and click btn:[Next]. +. From the navigation panel, select {MenuAMTeams}. +. Select the team *Name* to which you want to add roles. +. Select the *Roles* tab and click btn:[Add roles]. + -image:users-permissions-IG-select.png[image] - -. Select the resource you want to assign permissions to. -Different resources have different options available. +include::snippets/snip-gw-roles-note-multiple-components.adoc + -image:users-permissions-IG-roles.png[image] - -. Click btn:[Save]. -. The *Roles* page displays the updated profile for the user with the permissions assigned for each selected resource. - -[NOTE] -==== -You can also add teams, individual, or multiple users and assign them permissions at the object level. -This includes templates, credentials, inventories, projects, organizations, or instance groups. -This feature reduces the time for an organization to onboard many users at one time. -==== - -.To remove permissions: -* Click the image:disassociate.png[Disassociate,10,10] icon next to the resource. -This launches a confirmation dialog asking you to confirm the disassociation. - - +. Select a *Resource type* and click btn:[Next]. +. Select the resources to receive the new roles and click btn:[Next]. +. Select the roles to apply to the resources and click btn:[Next]. +. Review the settings and click btn:[Save]. ++ +A progress bar displays indicating whether the role assignments were successfully applied. From 21ba3ba556b8bfb765499644b0993cf30693dbf5 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Mon, 5 Aug 2024 15:06:44 -0600 Subject: [PATCH 065/590] AAP-19133 Update existing modules for organizations for 2.5 RBAC changes (#1677) (#1685) * AAP-19133 Update existing modules for organizations for 2.5 RBAC changes * AAP-19133 - implement peer review changes --- .../con-controller-access-organizations.adoc | 24 ++------ ...proc-controller-add-organization-user.adoc | 39 +++++------- .../proc-controller-create-organization.adoc | 59 +++++++------------ .../proc-controller-review-organizations.adoc | 26 +++----- ...controller-organization-notifications.adoc | 20 ++++--- 5 files changed, 59 insertions(+), 109 deletions(-) diff --git a/downstream/modules/platform/con-controller-access-organizations.adoc b/downstream/modules/platform/con-controller-access-organizations.adoc index d916d64d7b..b6ec1e7a66 100644 --- a/downstream/modules/platform/con-controller-access-organizations.adoc +++ b/downstream/modules/platform/con-controller-access-organizations.adoc @@ -1,24 +1,8 @@ -[id="con-controller-access-organizations"] - -= Access to organizations - -* Select btn:[Access] when viewing your organization to display the users associated with this organization, and their -roles. +:_mod-docs-content-type: CONCEPT -image:organizations-show-users-permissions-organization.png[Organization access] - -Use this page to complete the following tasks: - -* Manage the user membership for this organization. -Click btn:[Users] on the navigation panel to manage user membership on a per-user basis from the *Users* page. -* Assign specific users certain levels of permissions within your organization. -* Enable them to act as an administrator for a particular resource. -For more information, see link:https://docs.ansible.com/automation-controller/latest/html/userguide/security.html#rbac-ug[Role-Based Access Controls]. +[id="con-controller-access-organizations"] -Click a user to display that user's details. -You can review, grant, edit, and remove associated permissions for that user. -For more information, see xref:assembly-controller-users[Users]. += Access to organizations +You can manage access to an organization by selecting an organization from the Organizations list view and selecting the associated tabs for providing access to xref:proc-controller-add-organization-user[Users], xref:proc-gw-add-admin-organization[Administrators] or xref:proc-gw-add-team-organization[Teams]. -include::proc-controller-add-organization-user.adoc[leveloffset=+1] -include::ref-controller-organization-notifications.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/proc-controller-add-organization-user.adoc b/downstream/modules/platform/proc-controller-add-organization-user.adoc index 652f53b73d..dedb4e5544 100644 --- a/downstream/modules/platform/proc-controller-add-organization-user.adoc +++ b/downstream/modules/platform/proc-controller-add-organization-user.adoc @@ -1,37 +1,26 @@ [id="proc-controller-add-organization-user"] -= Add a User or Team - -To add a user or team to an organization, the user or team must already exist. - -For more information, see xref:proc-controller-creating-a-user[Creating a User] and xref:proc-controller-creating-a-team[Creating a Team]. - -To add existing users or team to the Organization: +Adding a user to an organization +You can provide a user with access to an organization by adding them to the organization and managing the roles associated with the user. To add a user to an organization, the user must already exist. For more information, see xref:proc-controller-creating-a-user[Creating a user]. +To add roles for a user, the role must already exist. See xref:proc-gw-roles_auto-eec[Automation execution roles] and xref:proc-gw-roles_auto-dec[Automation decision] roles for more information about creating new roles. .Procedure -. In the *Access tab* of the *Organization* page, click btn:[Add]. -. Select a user or team to add. -. Click btn:[Next]. -. Select one or more users or teams from the list by clicking the checkbox next to the name to add them as members. +. From the navigation panel, select {MenuAMOrganizations}. +. From the Organizations list view, select the organization to which you want to add a user. +. Click the *Users* tab to add users. +. Click btn:[Add users] and select one or more users from the list by clicking the checkbox next to the name to add them as members. . Click btn:[Next]. +. Select the roles you want the selected user to have. Scroll down for a complete list of roles. + -image:organizations-add-users-for-example-organization.png[Add roles] +include::snippets/snip-gw-roles-note-multiple-components.adoc + -In this example, two users have been selected. -. Select the role you want the selected user or team to have. -Scroll down for a complete list of roles. -Different resources have different options available. +. Click btn:[Next] to review the roles settings. +. Click btn:[Finish] to apply the roles to the selected users, and to add them as members. The *Add users* dialog displays the updated roles assigned for each user. + -image:organizations-add-users-roles.png[Add user roles] -. Click btn:[Save] to apply the roles to the selected user or team, and to add them as members. -The *Add Users* or *Add Teams* window displays the updated roles assigned for each user and team. +[NOTE] A user with associated roles retains them if they are reassigned to another organization. + -[NOTE] -==== -A user or team with associated roles retains them if they are reassigned to another organization. -==== -. To remove roles for a particular user, click the disassociate image:disassociate.png[Disassociate,10,10] icon next to its resource. -This launches a confirmation dialog, asking you to confirm the disassociation. +. To remove a particular user from the organization, select *Remove user* from the {MoreActionsIcon} list next to the user or team. This launches a confirmation dialog, asking you to confirm the removal. + diff --git a/downstream/modules/platform/proc-controller-create-organization.adoc b/downstream/modules/platform/proc-controller-create-organization.adoc index 10a2575f19..f6ebd2e9be 100644 --- a/downstream/modules/platform/proc-controller-create-organization.adoc +++ b/downstream/modules/platform/proc-controller-create-organization.adoc @@ -1,51 +1,32 @@ +:_mod-docs-content-type: PROCEDURE + [id="proc-controller-create-organization"] = Creating an organization -[NOTE] -==== -{ControllerNameStart} automatically creates a default organization. -If you have a Self-support level license, you have only the default organization available and must not delete it. - +{PlatformNameShort} automatically creates a default organization. If you have a self-support level license, you have only the default organization available and can not delete it. You can use the default organization as it is initially set up and edit it later. -==== -. Click btn:[Add] to create a new organization. -+ -image:organizations-new-organization-form.png[Organizations- new organization form] - -. You can configure several attributes of an organization: - -* Enter the *Name* for your organization (required). -* Enter a *Description* for the organization. -* *Max Hosts* is only editable by a superuser to set an upper limit on the number of license hosts that an organization can have. -Setting this value to *0* signifies no limit. -If you try to add a host to an organization that has reached or exceeded its cap on hosts, an error message displays: -+ -The inventory sync output view also shows the host limit error. +.Procedure +. From the navigation panel, select {MenuAMOrganizations}. +. Click btn:[Create organization]. +. Enter the *Name* and optionally provide a *Description* for your organization. + -image:organizations-max-hosts-error-output-view.png[Error] +[NOTE] +==== +If {ControllerName} is enabled on the platform, continue with Step 4. Otherwise, proceed to Step 7. +==== + -Click btn:[Details] for additional information about the error. +. Enter the name of the *Instance Groups* on which to run this organization. +. Select the name of the *Default execution environment* or search for one that exists on which to run this organization. +. Optional: Enter the *Galaxy credentials* or search from a list of existing ones. +. Click btn:[Next]. +. You can manage the instance group order by dragging and dropping the instance group up or down in the list. + -* Enter the name of the *Instance Groups* on which to run this organization. -* Enter the name of the {ExecEnvShort} or search for one that exists on which to run this organization. -For more information, see link:https://docs.ansible.com/automation-controller/4.4/html/upgrade-migration-guide/upgrade_to_ees.html#upgrade-venv[Upgrading to Execution Environments]. -* Optional: Enter the *Galaxy Credentials* or search from a list of existing ones. -. Click btn:[Save] to finish creating the organization. - -When the organization is created, {ControllerName} displays the Organization details, and enables you to manage access and {ExecEnvShort}s for the organization. - -image:organizations-show-record-for-example-organization.png[Organization details] - -From the *Details* tab, you can edit or delete the organization. - [NOTE] ==== -If you attempt to delete items that are used by other work items, a message lists the items that are affected by the deletion and prompts you to confirm the deletion. -Some screens contain items that are invalid or have been deleted previously, and will fail to run. +The execution precedence is determined by the order in which the instance groups are listed. ==== - -The following is an example of such a message: - -image:warning-deletion-dependencies.png[Warning] \ No newline at end of file ++ +. Click btn:[Next] and verify the organization settings. +. Click btn:[Finish]. diff --git a/downstream/modules/platform/proc-controller-review-organizations.adoc b/downstream/modules/platform/proc-controller-review-organizations.adoc index 77f0f51f1a..bd2b0cca2a 100644 --- a/downstream/modules/platform/proc-controller-review-organizations.adoc +++ b/downstream/modules/platform/proc-controller-review-organizations.adoc @@ -1,23 +1,15 @@ +:_mod-docs-content-type: PROCEDURE + [id="controller-review-organizations"] -= Reviewing the organization += Organizations list view -The Organizations page displays the existing organizations for your installation. +The Organizations page displays the existing organizations for your installation. From here, you can search for a specific organization, filter the list of organizations, or change the sort order for the list. .Procedure -* From the navigation panel, select {MenuControllerOrganizations}. -+ -[NOTE] -==== -{ControllerNameStart} automatically creates a default organization. -If you have a Self-support level license, you have only the default organization available and must not delete it. -==== -You can use the default organization as it is initially set up and edit it later. -+ -[NOTE] -==== -Only Enterprise or Premium licenses can add new organizations. -==== - -Enterprise and Premium license users who want to add a new organization should see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#assembly-controller-organizations[Organizations] section in _{ControllerUG}_. +. From the navigation panel, select menu:{MenuAMOrganizations}. +. In the Search bar, enter an appropriate keyword for the organization you want to search for and click the arrow icon. +. From the menu bar, you can sort the list of organizations by using the arrows for *Name* to toggle your sorting preference. +. You can also sort the list by selecting *Name*, *Created* or *Modified* from the *Sort* list. +. You can view organization details by clicking an organization *Name* on the Organizations page. diff --git a/downstream/modules/platform/ref-controller-organization-notifications.adoc b/downstream/modules/platform/ref-controller-organization-notifications.adoc index ebeeae3994..011dbb7468 100644 --- a/downstream/modules/platform/ref-controller-organization-notifications.adoc +++ b/downstream/modules/platform/ref-controller-organization-notifications.adoc @@ -1,14 +1,18 @@ -[id="red-controller-oganization-notifications"] +:_mod-docs-content-type: REFERENCE -= Work with Notifications +[id="ref-controller-organization-notifications"] -Selecting the *Notifications* tab on the Organization details page enables you to review any notification integrations you have set up. += Work with notifiers -image:organizations-notifications-samples-list.png[Notifications] +When {ControllerName} is enabled on the platform, you can review any notifier integrations you have set up and manage their settings within the organization resource. -Use the toggles to enable or disable the notifications to use with your particular organization. -For more information, see xref:controller-enable-disable-notifications[Enable and Disable Notifications]. +.Procedure +. From the navigation panel, select Access Management › Organizations. +. From the Organizations list view, select the organization to which you want to manage notifications. +//ddacosta - this might change to Notifiers tab. +. Select the *Notification* tab. +. Use the toggles to enable or disable the notifications to use with your particular organization. For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/using_automation_execution/controller-enable-disable-notifications[Enable and disable notifications]. +. If no notifiers have been set up, select {MenuAEAdminJobNotifications} from the navigation panel. -If no notifications have been set up, select {MenuAEAdminJobNotifications} from the navigation panel. -For information on configuring notification types, see xref:controller-notification-types[Notification Types]. +For information on configuring notification types, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/using_automation_execution/controller-notifications#controller-notification-types[Notification types]. \ No newline at end of file From 5213578b8824ec09f6b4f1462ea6aeb1bd32c9dd Mon Sep 17 00:00:00 2001 From: Jameria Self <73364088+jself-sudoku@users.noreply.github.com> Date: Mon, 5 Aug 2024 17:08:04 -0400 Subject: [PATCH 066/590] AAP-20543 Ensure UI parity for just a couple of sections for EDA controller guide (#1682) (#1687) * AAP-20543 Ensure UI parity for just a couple of sections for EDA controller user guide * AAP-20543 Peer review edit - missing period --- .../modules/eda/con-eda-rulebook-activation-list-view.adoc | 3 ++- .../eda/proc-eda-set-up-new-decision-environment.adoc | 7 ++++--- .../modules/eda/proc-eda-set-up-rulebook-activation.adoc | 7 ++++--- .../modules/eda/proc-eda-view-activation-output.adoc | 1 + .../modules/eda/proc-eda-view-rule-audit-actions.adoc | 2 +- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/downstream/modules/eda/con-eda-rulebook-activation-list-view.adoc b/downstream/modules/eda/con-eda-rulebook-activation-list-view.adoc index c395e506e4..9e275b3f27 100644 --- a/downstream/modules/eda/con-eda-rulebook-activation-list-view.adoc +++ b/downstream/modules/eda/con-eda-rulebook-activation-list-view.adoc @@ -2,12 +2,13 @@ = Rulebook activation list view -On the *Rulebook Activations* page, you can view the rulebook activations that you have created along with the *Activation status*, *Number of rules associated* with the rulebook, the *Fire count*, and *Restart count*. +On the *Rulebook Activations* page, you can view the rulebook activations that you have created along with the *Status*, *Number of rules* with the rulebook, the *Fire count*, and *Restart count*. If the *Activation Status* is *Running*, it means that the rulebook activation is running in the background and executing the required actions according to the rules declared in the rulebook. You can view more details by selecting the activation from the *Rulebook Activations* list view. +//Replace this screen shot with current view image::eda-rulebook-activations-list-view.png[Rulebook activation][width=25px] For all activations that have run, you can view the *Details* and *History* tabs to get more information about what happened. diff --git a/downstream/modules/eda/proc-eda-set-up-new-decision-environment.adoc b/downstream/modules/eda/proc-eda-set-up-new-decision-environment.adoc index 2de25c071e..c1944fb9e9 100644 --- a/downstream/modules/eda/proc-eda-set-up-new-decision-environment.adoc +++ b/downstream/modules/eda/proc-eda-set-up-new-decision-environment.adoc @@ -13,8 +13,9 @@ For more information, see the xref:eda-set-up-credential[Setting up credentials] .Procedure // ddacosta I'm not sure whether there will be an EDA specific dashboard in the gateway. Step 1 might need to change to something like "Log in to AAP". -. Navigate to the {EDAcontroller} Dashboard. -. From the navigation panel, select {MenuADDecisionEnvironments}. +. Log in to the {PlatformNameShort} Dashboard. +. Navigate to {MenuADDecisionEnvironments}. +. Click btn:[Create decision environment]. . Insert the following: + Name:: Insert the name. @@ -23,7 +24,7 @@ Image:: This is the full image location, including the container registry, image Credential:: This field is optional. This is the token needed to utilize the decision environment image. . Select btn:[Create decision environment]. -Your decision environment is now created and can be managed on the *Decision Environments* screen. +Your decision environment is now created and can be managed on the *Decision Environments* page. After saving the new decision environment, the decision environment's details page is displayed. From there or the *Decision Environments* list view, you can edit or delete it. diff --git a/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc b/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc index a0628bd76f..be9eb46dff 100644 --- a/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc +++ b/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc @@ -4,15 +4,16 @@ .Prerequisites // [ddacosta] I'm not sure whether there will be an EDA specific dashboard in the gateway. Step 1 might need to change to something like "Log in to AAP". -* You are logged in to the {EDAcontroller} Dashboard as a Content Consumer. +* You are logged in to the {PlatformNameShort} Dashboard as a Content Consumer. * You have set up a project. * You have set up a decision environment. * You have set up an {ControllerName} token. .Procedure // [ddacosta] I'm not sure whether there will be an EDA specific dashboard in the gateway. Step 1 might need to change to something like "Log in to AAP". -. Navigate to the {EDAcontroller} Dashboard. -. From the navigation panel, select {MenuADRulebookActivations}. +. Log in to the {PlatformNameShort} Dashboard. +. Navigate to the {MenuADRulebookActivations}. +. Click btn:[Create rulebook activation]. . Insert the following: + Name:: Insert the name. diff --git a/downstream/modules/eda/proc-eda-view-activation-output.adoc b/downstream/modules/eda/proc-eda-view-activation-output.adoc index c7e0e54460..2143d3ff74 100644 --- a/downstream/modules/eda/proc-eda-view-activation-output.adoc +++ b/downstream/modules/eda/proc-eda-view-activation-output.adoc @@ -9,6 +9,7 @@ You can view the output of the activations in the *History* tab. An activation instance represents a single execution of the activation. . Then select the activation instance in question, this will show you the *Output* produced by that specific execution. +//Replace this screenshot with current view image::eda-rulebook-activation-history.png[Rulebook activation history] To view events that came in and triggered an action, you can use the xref:eda-rule-audit[Rule Audit] section in the {EDAcontroller} Dashboard. diff --git a/downstream/modules/eda/proc-eda-view-rule-audit-actions.adoc b/downstream/modules/eda/proc-eda-view-rule-audit-actions.adoc index e0f52c1174..08a841c143 100644 --- a/downstream/modules/eda/proc-eda-view-rule-audit-actions.adoc +++ b/downstream/modules/eda/proc-eda-view-rule-audit-actions.adoc @@ -5,7 +5,7 @@ .Procedure . From the navigation panel select *{MenuADRuleAudit}*. -. Select the desired rule, this brings you to the *Actions* tab. +. Select the desired rule, then select the *Actions* tab. From here you can view executed actions that were taken. Some actions are linked out to {ControllerName} where you can view the output. From e24c5a67760c75a55b369068fa65be63b487cd0d Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Mon, 5 Aug 2024 15:08:22 -0600 Subject: [PATCH 067/590] AAP-19133 Update content on Users for 2.5 RBAC changes (#1679) (#1686) --- .../platform/con-controller-create-users.adoc | 2 + .../proc-controller-creating-a-user.adoc | 54 +++++-------------- .../proc-controller-deleting-a-user.adoc | 20 +++---- .../platform/ref-controller-user-roles.adoc | 35 ++++++------ .../platform/ref-controller-user-teams.adoc | 23 ++++---- 5 files changed, 56 insertions(+), 78 deletions(-) diff --git a/downstream/modules/platform/con-controller-create-users.adoc b/downstream/modules/platform/con-controller-create-users.adoc index 695031caa6..ab57210c2d 100644 --- a/downstream/modules/platform/con-controller-create-users.adoc +++ b/downstream/modules/platform/con-controller-create-users.adoc @@ -1,3 +1,5 @@ +:_mod-docs-content-type: CONCEPT + [id="controller-create-users"] Users associated with an organization are shown in the *Access* tab of the organization. diff --git a/downstream/modules/platform/proc-controller-creating-a-user.adoc b/downstream/modules/platform/proc-controller-creating-a-user.adoc index 4ab27f7a18..1cd5683e96 100644 --- a/downstream/modules/platform/proc-controller-creating-a-user.adoc +++ b/downstream/modules/platform/proc-controller-creating-a-user.adoc @@ -1,57 +1,29 @@ +:_mod-docs-content-type: PROCEDURE + [id="proc-controller-creating-a-user"] = Creating a user -To create new users in {ControllerName} and assign them a role. - +You can assign two types of users: +Normal user:: Normal users have read and write access limited to the resources (such as inventory, projects, and job templates) for which that user has been granted the appropriate roles and privileges. +System administrator:: A System administrator (also known as a Superuser) has full system administration privileges — with full read and write privileges over the entire installation. A System administrator is typically responsible for managing all aspects of and delegating responsibilities for day-to-day work to various users. +Select the Organization to be assigned for this user. For information about creating a new organization or team, refer to xref:proc-controller-create-organization[Creating an organization]. .Procedure -. On the *Users* page, click btn:[Add]. -+ -The *Create User* dialog opens. -. Enter the appropriate details about your new user. -Fields marked with an asterisk (*) are required. +. From the navigation panel, select {MenuAMUsers}. +. Click btn:[Create user]. +. Enter the details about your new user in the fields on the Create user page. Fields marked with an asterisk (*) are required. + [NOTE] ==== If you are modifying your own password, log out and log back in again for it to take effect. ==== +. Click btn:[Create user]. + -You can assign three types of users: - -* *Normal User*: Normal Users have read and write access limited to the resources (such as inventory, projects, and job templates) for which that user has been granted the appropriate roles and privileges. -* *System Auditor*: Auditors inherit the read-only capability for all objects within the environment. -* *System Administrator*: A System Administrator (also known as a Superuser) has full system administration privileges -- with full read and write privileges over the entire installation. -A System Administrator is typically responsible for managing all aspects of and delegating responsibilities for day-to-day work to various users. -+ -image:users-create-user-form-types.png[User Types] -+ -[NOTE] -==== -A default administrator with the role of *System Administrator* is automatically created during the installation process and is available to all users of {ControllerName}. -One *System Administrator* must always exist. -To delete the *System Administrator* account, you must first create another *System Administrator* account. -==== - -. Click btn:[Save]. -+ -When the user is successfully created, the *User* dialog opens. +When the user is successfully created, the User dialog opens. From here, you can review and modify the user’s Teams, Roles, Tokens and other membership details. + -image:users-edit-user-form.png[Edit User Form] - -. Click btn:[Delete] to delete the user, or you can delete users from a list of current users. -For more information, see xref:proc-controller-deleting-a-user[Deleting a user]. -+ -The same window opens whether you click the user's name, or the Edit image:leftpencil.png[Edit, 15,15] icon beside the user. You can use this window to review and modify the User's *Organizations*, *Teams*, *Roles*, and other user membership details. - [NOTE] ==== If the user is not newly-created, the details screen displays the last login activity of that user. - -//image:users-last-login-info.png[image] ==== - -If you log in as yourself, and view the details of your user profile, you can manage tokens from your user profile. - -For more information, see xref:proc-controller-user-tokens[Adding a user token]. - -//image:user-with-token-button.png[image] +If you log in as yourself, and view the details of your user profile, you can manage tokens from your user profile by selecting the *Tokens* tab. +For more information, see xref:proc-controller-apps-create-tokens[Adding a token]. diff --git a/downstream/modules/platform/proc-controller-deleting-a-user.adoc b/downstream/modules/platform/proc-controller-deleting-a-user.adoc index 4f65170115..b352ee9e5a 100644 --- a/downstream/modules/platform/proc-controller-deleting-a-user.adoc +++ b/downstream/modules/platform/proc-controller-deleting-a-user.adoc @@ -1,16 +1,16 @@ +:_mod-docs-content-type: PROCEDURE + [id="proc-controller-deleting-a-user"] = Deleting a user -Before you can delete a user, you must have user permissions. -When you delete a user account, the name and email of the user are permanently removed from {ControllerName}. - +Before you can delete a user, you must have normal user or system administrator permissions. When you delete a user account, the name and email of the user are permanently removed from {PlatformNameShort}. .Procedure -. From the navigation panel, select {MenuControllerUsers}. -. Click btn:[Users] to display a list of the current users. -. Select the checkbox for the user that you want to remove. -. Click btn:[Delete]. -//+ -//image:users-home-users-checked-delete.png[image] +. From the navigation panel, select {MenuAMUsers}. +. Select the check box for the user that you want to remove. +. Click the {MoreActionsIcon} icon next to the user you want removed and select *Delete user*. ++ +[NOTE] +==== +You can delete multiple users by selecting the checkbox next to each user you want to remove, and clicking *Delete selected users* from the {MoreActionsIcon} list. -. Click btn:[Delete] in the confirmation warning message to permanently delete the user. diff --git a/downstream/modules/platform/ref-controller-user-roles.adoc b/downstream/modules/platform/ref-controller-user-roles.adoc index a7c6fef5c9..b7c452e9fe 100644 --- a/downstream/modules/platform/ref-controller-user-roles.adoc +++ b/downstream/modules/platform/ref-controller-user-roles.adoc @@ -1,20 +1,21 @@ -[id="ref-controller-user-roles"] - -= Displaying a user's roles +:_mod-docs-content-type: REFERENCE -From the *Users > Details* page, select the *Roles* tab to display the set of roles assigned to this user. -These offer the ability to read, change, and administer projects, inventories, job templates, and other elements. +[id="ref-controller-user-roles"] -image:users-permissions-list-for-example-user.png[Users- permissions list] += Adding roles for a user -//This doesn't seem to fit here. -//[NOTE] -//==== -//The job template administrator may not have access to other resources (inventory, project, credentials, or instance groups) associated with the template. -// -//Without access to these, certain fields in the job template are not editable. -// -//System Administrators can grant individual users permissions to certain resources as necessary. -// -//For more information, see xref:proc-controller-user-permissions[Adding permissions to a user]. -//==== +You can grant access for users to use, read, or write credentials by assigning roles to them. +.Procedure +. From the navigation panel, select {MenuAMUsers}. +. From the Users list view, click on the user to which you want to add roles. +. Select the *Roles* tab to display the set of roles assigned to this user. These provide the ability to read, modify, and administer resources. +. To add new roles, click btn:[Add roles]. ++ +include::snippets/snip-gw-roles-note-multiple-components.adoc ++ +. Select a Resource type and click btn:[Next]. +. Select the resources that will receive new roles and click btn:[Next]. +. Select the roles that will be applied to the resources and click btn:[Next]. +. Review the settings and click btn:[Save]. ++ +A progress bar displays indicating whether the role assignments were successfully applied. diff --git a/downstream/modules/platform/ref-controller-user-teams.adoc b/downstream/modules/platform/ref-controller-user-teams.adoc index 5ca19e8bf2..7b430c1665 100644 --- a/downstream/modules/platform/ref-controller-user-teams.adoc +++ b/downstream/modules/platform/ref-controller-user-teams.adoc @@ -1,15 +1,18 @@ -[id="ref-controller-user-teams"] +:_mod-docs-content-type: REFERENCE -= Displaying a user's teams +[id="ref-controller-user-teams"] -From the *Users > Details* page, select the *Teams* tab to display the list of teams of which that user is a member. += Adding a team for a user -[NOTE] -==== -You cannot modify team membership from this display panel. -For more information, see xref:assembly-controller-teams[Teams]. -==== +You can add a team for a user from the Users list view. -Until you create a team and assign a user to that team, the assigned teams details for that user is displayed as empty. +.Procedure +. From the navigation panel, select {MenuAMUsers}. +. Select the user that you want to which you want to add team membership. +. Select the *Teams* tab to display the list of teams of which that user is a member. +. Click btn:[Add Team(s)]. +. Select the check box for the team to which you want to add the user. +. You can search this list by the team *Name* or *Organization*. ++ +Until a team has been created and a user has been assigned to that team, the assigned team details for that user remain empty. -//image:users-teams-list-for-example-user.png[Users - teams list] From 00eaecfd791143ceeb57990885fed5d2c066d95a Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Tue, 6 Aug 2024 13:54:28 +0100 Subject: [PATCH 068/590] Add description (#1689) (#1691) Add missing description https://issues.redhat.com/browse/AAP-28367 --- downstream/modules/platform/con-controller-settings.adoc | 8 ++++---- .../platform/proc-controller-configure-system.adoc | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/downstream/modules/platform/con-controller-settings.adoc b/downstream/modules/platform/con-controller-settings.adoc index f2f7a983a8..e97afb6d9d 100644 --- a/downstream/modules/platform/con-controller-settings.adoc +++ b/downstream/modules/platform/con-controller-settings.adoc @@ -7,7 +7,7 @@ You can configure some {ControllerName} options using the *Settings* menu of the The *Settings* page enables an administrator to configure the following: -* link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatfromVers}/html/automation_controller_administration_guide/assembly-ag-controller-config#proc-controller-configure-subscriptions[Subscriptions] TBD -* link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/assembly-ag-controller-config#controller-configure-system[System] TBD -* link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/assembly-ag-controller-config#controller-configure-jobs[Jobs]TBD -* link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/assembly-ag-controller-config#proc-controller-configure-analytics[{Analytics}] TBD +* link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatfromVers}/html/automation_controller_administration_guide/assembly-ag-controller-config#proc-controller-configure-subscriptions[Subscriptions] +* link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/assembly-ag-controller-config#controller-configure-system[System] +* link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/assembly-ag-controller-config#controller-configure-jobs[Jobs] +* link:{BaseURL}/documentation/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/assembly-ag-controller-config#proc-controller-configure-analytics[{Analytics}] diff --git a/downstream/modules/platform/proc-controller-configure-system.adoc b/downstream/modules/platform/proc-controller-configure-system.adoc index d18c761a27..d068d09c7d 100644 --- a/downstream/modules/platform/proc-controller-configure-system.adoc +++ b/downstream/modules/platform/proc-controller-configure-system.adoc @@ -29,8 +29,8 @@ If this setting is an empty list (the default), the headers specified by `REMOTE + Enter one path per line. + -* *Last gather date for Automation Analytics.*: Set the date and time. -* *Last gathered entries from the data collection service of {Analytics}*: - +* *Last gather date for Automation Analytics*: Set the date and time. +* *Last gathered entries from the data collection service of {Analytics}*: Do not enter anything in this field. * *{Analytics} Gather Interval*: Interval (in seconds) between data gathering. + If *Gather data for {Analytics}* is set to false, this value is ignored. From c01ec3ccf25a143601ec74523502c98c078333f9 Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Tue, 6 Aug 2024 14:38:17 +0100 Subject: [PATCH 069/590] AAP-27779 Archive deprecated titles for 2.5 (#1630) --- .../analytics/automation-savings-planner/docinfo.xml | 0 .../analytics/automation-savings-planner/master.adoc | 0 .../archived-titles}/analytics/automation-savings/docinfo.xml | 0 .../archived-titles}/analytics/automation-savings/master.adoc | 0 .../archived-titles}/analytics/reports/docinfo.xml | 0 .../archived-titles}/analytics/reports/master.adoc | 0 .../controller/controller-getting-started/docinfo.xml | 0 .../controller/controller-getting-started/master.adoc | 0 .../controller/{ => controller-guide}/docinfo.xml | 0 .../controller/{ => controller-guide}/master.adoc | 0 .../archived-titles}/eda/eda-getting-started-guide/docinfo.xml | 0 .../archived-titles}/eda/eda-getting-started-guide/master.adoc | 0 .../archived-titles}/hub/getting-started/docinfo.xml | 0 .../archived-titles}/hub/getting-started/master.adoc | 0 .../titles/analytics/automation-savings-planner/aap-common | 1 - downstream/titles/analytics/automation-savings-planner/analytics | 1 - .../titles/analytics/automation-savings-planner/attributes | 1 - downstream/titles/analytics/automation-savings-planner/images | 1 - downstream/titles/analytics/automation-savings/aap-common | 1 - downstream/titles/analytics/automation-savings/analytics | 1 - downstream/titles/analytics/automation-savings/attributes | 1 - downstream/titles/analytics/reports/aap-common | 1 - downstream/titles/analytics/reports/analytics | 1 - downstream/titles/analytics/reports/attributes | 1 - .../titles/controller/controller-getting-started/aap-common | 1 - .../titles/controller/controller-getting-started/attributes | 1 - downstream/titles/controller/controller-getting-started/images | 1 - downstream/titles/controller/controller-getting-started/platform | 1 - downstream/titles/eda/eda-getting-started-guide/aap-common | 1 - downstream/titles/eda/eda-getting-started-guide/attributes | 1 - downstream/titles/eda/eda-getting-started-guide/eda | 1 - downstream/titles/eda/eda-getting-started-guide/images | 1 - downstream/titles/hub/getting-started/aap-common | 1 - downstream/titles/hub/getting-started/attributes | 1 - downstream/titles/hub/getting-started/hub | 1 - 35 files changed, 21 deletions(-) rename downstream/{titles => archive/archived-titles}/analytics/automation-savings-planner/docinfo.xml (100%) rename downstream/{titles => archive/archived-titles}/analytics/automation-savings-planner/master.adoc (100%) rename downstream/{titles => archive/archived-titles}/analytics/automation-savings/docinfo.xml (100%) rename downstream/{titles => archive/archived-titles}/analytics/automation-savings/master.adoc (100%) rename downstream/{titles => archive/archived-titles}/analytics/reports/docinfo.xml (100%) rename downstream/{titles => archive/archived-titles}/analytics/reports/master.adoc (100%) rename downstream/{titles => archive/archived-titles}/controller/controller-getting-started/docinfo.xml (100%) rename downstream/{titles => archive/archived-titles}/controller/controller-getting-started/master.adoc (100%) rename downstream/archive/archived-titles/controller/{ => controller-guide}/docinfo.xml (100%) rename downstream/archive/archived-titles/controller/{ => controller-guide}/master.adoc (100%) rename downstream/{titles => archive/archived-titles}/eda/eda-getting-started-guide/docinfo.xml (100%) rename downstream/{titles => archive/archived-titles}/eda/eda-getting-started-guide/master.adoc (100%) rename downstream/{titles => archive/archived-titles}/hub/getting-started/docinfo.xml (100%) rename downstream/{titles => archive/archived-titles}/hub/getting-started/master.adoc (100%) delete mode 120000 downstream/titles/analytics/automation-savings-planner/aap-common delete mode 120000 downstream/titles/analytics/automation-savings-planner/analytics delete mode 120000 downstream/titles/analytics/automation-savings-planner/attributes delete mode 120000 downstream/titles/analytics/automation-savings-planner/images delete mode 120000 downstream/titles/analytics/automation-savings/aap-common delete mode 120000 downstream/titles/analytics/automation-savings/analytics delete mode 120000 downstream/titles/analytics/automation-savings/attributes delete mode 120000 downstream/titles/analytics/reports/aap-common delete mode 120000 downstream/titles/analytics/reports/analytics delete mode 120000 downstream/titles/analytics/reports/attributes delete mode 120000 downstream/titles/controller/controller-getting-started/aap-common delete mode 120000 downstream/titles/controller/controller-getting-started/attributes delete mode 120000 downstream/titles/controller/controller-getting-started/images delete mode 120000 downstream/titles/controller/controller-getting-started/platform delete mode 120000 downstream/titles/eda/eda-getting-started-guide/aap-common delete mode 120000 downstream/titles/eda/eda-getting-started-guide/attributes delete mode 120000 downstream/titles/eda/eda-getting-started-guide/eda delete mode 120000 downstream/titles/eda/eda-getting-started-guide/images delete mode 120000 downstream/titles/hub/getting-started/aap-common delete mode 120000 downstream/titles/hub/getting-started/attributes delete mode 120000 downstream/titles/hub/getting-started/hub diff --git a/downstream/titles/analytics/automation-savings-planner/docinfo.xml b/downstream/archive/archived-titles/analytics/automation-savings-planner/docinfo.xml similarity index 100% rename from downstream/titles/analytics/automation-savings-planner/docinfo.xml rename to downstream/archive/archived-titles/analytics/automation-savings-planner/docinfo.xml diff --git a/downstream/titles/analytics/automation-savings-planner/master.adoc b/downstream/archive/archived-titles/analytics/automation-savings-planner/master.adoc similarity index 100% rename from downstream/titles/analytics/automation-savings-planner/master.adoc rename to downstream/archive/archived-titles/analytics/automation-savings-planner/master.adoc diff --git a/downstream/titles/analytics/automation-savings/docinfo.xml b/downstream/archive/archived-titles/analytics/automation-savings/docinfo.xml similarity index 100% rename from downstream/titles/analytics/automation-savings/docinfo.xml rename to downstream/archive/archived-titles/analytics/automation-savings/docinfo.xml diff --git a/downstream/titles/analytics/automation-savings/master.adoc b/downstream/archive/archived-titles/analytics/automation-savings/master.adoc similarity index 100% rename from downstream/titles/analytics/automation-savings/master.adoc rename to downstream/archive/archived-titles/analytics/automation-savings/master.adoc diff --git a/downstream/titles/analytics/reports/docinfo.xml b/downstream/archive/archived-titles/analytics/reports/docinfo.xml similarity index 100% rename from downstream/titles/analytics/reports/docinfo.xml rename to downstream/archive/archived-titles/analytics/reports/docinfo.xml diff --git a/downstream/titles/analytics/reports/master.adoc b/downstream/archive/archived-titles/analytics/reports/master.adoc similarity index 100% rename from downstream/titles/analytics/reports/master.adoc rename to downstream/archive/archived-titles/analytics/reports/master.adoc diff --git a/downstream/titles/controller/controller-getting-started/docinfo.xml b/downstream/archive/archived-titles/controller/controller-getting-started/docinfo.xml similarity index 100% rename from downstream/titles/controller/controller-getting-started/docinfo.xml rename to downstream/archive/archived-titles/controller/controller-getting-started/docinfo.xml diff --git a/downstream/titles/controller/controller-getting-started/master.adoc b/downstream/archive/archived-titles/controller/controller-getting-started/master.adoc similarity index 100% rename from downstream/titles/controller/controller-getting-started/master.adoc rename to downstream/archive/archived-titles/controller/controller-getting-started/master.adoc diff --git a/downstream/archive/archived-titles/controller/docinfo.xml b/downstream/archive/archived-titles/controller/controller-guide/docinfo.xml similarity index 100% rename from downstream/archive/archived-titles/controller/docinfo.xml rename to downstream/archive/archived-titles/controller/controller-guide/docinfo.xml diff --git a/downstream/archive/archived-titles/controller/master.adoc b/downstream/archive/archived-titles/controller/controller-guide/master.adoc similarity index 100% rename from downstream/archive/archived-titles/controller/master.adoc rename to downstream/archive/archived-titles/controller/controller-guide/master.adoc diff --git a/downstream/titles/eda/eda-getting-started-guide/docinfo.xml b/downstream/archive/archived-titles/eda/eda-getting-started-guide/docinfo.xml similarity index 100% rename from downstream/titles/eda/eda-getting-started-guide/docinfo.xml rename to downstream/archive/archived-titles/eda/eda-getting-started-guide/docinfo.xml diff --git a/downstream/titles/eda/eda-getting-started-guide/master.adoc b/downstream/archive/archived-titles/eda/eda-getting-started-guide/master.adoc similarity index 100% rename from downstream/titles/eda/eda-getting-started-guide/master.adoc rename to downstream/archive/archived-titles/eda/eda-getting-started-guide/master.adoc diff --git a/downstream/titles/hub/getting-started/docinfo.xml b/downstream/archive/archived-titles/hub/getting-started/docinfo.xml similarity index 100% rename from downstream/titles/hub/getting-started/docinfo.xml rename to downstream/archive/archived-titles/hub/getting-started/docinfo.xml diff --git a/downstream/titles/hub/getting-started/master.adoc b/downstream/archive/archived-titles/hub/getting-started/master.adoc similarity index 100% rename from downstream/titles/hub/getting-started/master.adoc rename to downstream/archive/archived-titles/hub/getting-started/master.adoc diff --git a/downstream/titles/analytics/automation-savings-planner/aap-common b/downstream/titles/analytics/automation-savings-planner/aap-common deleted file mode 120000 index ab3cbbd419..0000000000 --- a/downstream/titles/analytics/automation-savings-planner/aap-common +++ /dev/null @@ -1 +0,0 @@ -../../../aap-common/ \ No newline at end of file diff --git a/downstream/titles/analytics/automation-savings-planner/analytics b/downstream/titles/analytics/automation-savings-planner/analytics deleted file mode 120000 index 150b501734..0000000000 --- a/downstream/titles/analytics/automation-savings-planner/analytics +++ /dev/null @@ -1 +0,0 @@ -../../../assemblies/analytics \ No newline at end of file diff --git a/downstream/titles/analytics/automation-savings-planner/attributes b/downstream/titles/analytics/automation-savings-planner/attributes deleted file mode 120000 index 0d100da61c..0000000000 --- a/downstream/titles/analytics/automation-savings-planner/attributes +++ /dev/null @@ -1 +0,0 @@ -../../../attributes \ No newline at end of file diff --git a/downstream/titles/analytics/automation-savings-planner/images b/downstream/titles/analytics/automation-savings-planner/images deleted file mode 120000 index 4dd3347de1..0000000000 --- a/downstream/titles/analytics/automation-savings-planner/images +++ /dev/null @@ -1 +0,0 @@ -../../../images \ No newline at end of file diff --git a/downstream/titles/analytics/automation-savings/aap-common b/downstream/titles/analytics/automation-savings/aap-common deleted file mode 120000 index ab3cbbd419..0000000000 --- a/downstream/titles/analytics/automation-savings/aap-common +++ /dev/null @@ -1 +0,0 @@ -../../../aap-common/ \ No newline at end of file diff --git a/downstream/titles/analytics/automation-savings/analytics b/downstream/titles/analytics/automation-savings/analytics deleted file mode 120000 index 4d9cc94a9d..0000000000 --- a/downstream/titles/analytics/automation-savings/analytics +++ /dev/null @@ -1 +0,0 @@ -../../../assemblies/analytics/ \ No newline at end of file diff --git a/downstream/titles/analytics/automation-savings/attributes b/downstream/titles/analytics/automation-savings/attributes deleted file mode 120000 index 8615cf3107..0000000000 --- a/downstream/titles/analytics/automation-savings/attributes +++ /dev/null @@ -1 +0,0 @@ -../../../attributes/ \ No newline at end of file diff --git a/downstream/titles/analytics/reports/aap-common b/downstream/titles/analytics/reports/aap-common deleted file mode 120000 index ab3cbbd419..0000000000 --- a/downstream/titles/analytics/reports/aap-common +++ /dev/null @@ -1 +0,0 @@ -../../../aap-common/ \ No newline at end of file diff --git a/downstream/titles/analytics/reports/analytics b/downstream/titles/analytics/reports/analytics deleted file mode 120000 index 150b501734..0000000000 --- a/downstream/titles/analytics/reports/analytics +++ /dev/null @@ -1 +0,0 @@ -../../../assemblies/analytics \ No newline at end of file diff --git a/downstream/titles/analytics/reports/attributes b/downstream/titles/analytics/reports/attributes deleted file mode 120000 index 0d100da61c..0000000000 --- a/downstream/titles/analytics/reports/attributes +++ /dev/null @@ -1 +0,0 @@ -../../../attributes \ No newline at end of file diff --git a/downstream/titles/controller/controller-getting-started/aap-common b/downstream/titles/controller/controller-getting-started/aap-common deleted file mode 120000 index fa02a580b8..0000000000 --- a/downstream/titles/controller/controller-getting-started/aap-common +++ /dev/null @@ -1 +0,0 @@ -../../../aap-common \ No newline at end of file diff --git a/downstream/titles/controller/controller-getting-started/attributes b/downstream/titles/controller/controller-getting-started/attributes deleted file mode 120000 index 0d100da61c..0000000000 --- a/downstream/titles/controller/controller-getting-started/attributes +++ /dev/null @@ -1 +0,0 @@ -../../../attributes \ No newline at end of file diff --git a/downstream/titles/controller/controller-getting-started/images b/downstream/titles/controller/controller-getting-started/images deleted file mode 120000 index 4dd3347de1..0000000000 --- a/downstream/titles/controller/controller-getting-started/images +++ /dev/null @@ -1 +0,0 @@ -../../../images \ No newline at end of file diff --git a/downstream/titles/controller/controller-getting-started/platform b/downstream/titles/controller/controller-getting-started/platform deleted file mode 120000 index 9a0b1c924c..0000000000 --- a/downstream/titles/controller/controller-getting-started/platform +++ /dev/null @@ -1 +0,0 @@ -../../../assemblies/platform \ No newline at end of file diff --git a/downstream/titles/eda/eda-getting-started-guide/aap-common b/downstream/titles/eda/eda-getting-started-guide/aap-common deleted file mode 120000 index fa02a580b8..0000000000 --- a/downstream/titles/eda/eda-getting-started-guide/aap-common +++ /dev/null @@ -1 +0,0 @@ -../../../aap-common \ No newline at end of file diff --git a/downstream/titles/eda/eda-getting-started-guide/attributes b/downstream/titles/eda/eda-getting-started-guide/attributes deleted file mode 120000 index 0d100da61c..0000000000 --- a/downstream/titles/eda/eda-getting-started-guide/attributes +++ /dev/null @@ -1 +0,0 @@ -../../../attributes \ No newline at end of file diff --git a/downstream/titles/eda/eda-getting-started-guide/eda b/downstream/titles/eda/eda-getting-started-guide/eda deleted file mode 120000 index 2a8c0ea9aa..0000000000 --- a/downstream/titles/eda/eda-getting-started-guide/eda +++ /dev/null @@ -1 +0,0 @@ -../../../assemblies/eda \ No newline at end of file diff --git a/downstream/titles/eda/eda-getting-started-guide/images b/downstream/titles/eda/eda-getting-started-guide/images deleted file mode 120000 index 4dd3347de1..0000000000 --- a/downstream/titles/eda/eda-getting-started-guide/images +++ /dev/null @@ -1 +0,0 @@ -../../../images \ No newline at end of file diff --git a/downstream/titles/hub/getting-started/aap-common b/downstream/titles/hub/getting-started/aap-common deleted file mode 120000 index fa02a580b8..0000000000 --- a/downstream/titles/hub/getting-started/aap-common +++ /dev/null @@ -1 +0,0 @@ -../../../aap-common \ No newline at end of file diff --git a/downstream/titles/hub/getting-started/attributes b/downstream/titles/hub/getting-started/attributes deleted file mode 120000 index 8615cf3107..0000000000 --- a/downstream/titles/hub/getting-started/attributes +++ /dev/null @@ -1 +0,0 @@ -../../../attributes/ \ No newline at end of file diff --git a/downstream/titles/hub/getting-started/hub b/downstream/titles/hub/getting-started/hub deleted file mode 120000 index 8185591f40..0000000000 --- a/downstream/titles/hub/getting-started/hub +++ /dev/null @@ -1 +0,0 @@ -../../../assemblies/hub \ No newline at end of file From 63862bbbef7930e2c1246e0a9fee533a448329d8 Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Tue, 6 Aug 2024 15:30:29 +0100 Subject: [PATCH 070/590] AAP-27260 Add attributes for docs titles (#1589) (#1692) --- downstream/attributes/attributes.adoc | 89 +++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/downstream/attributes/attributes.adoc b/downstream/attributes/attributes.adoc index ca5f03ab53..46f77547d3 100644 --- a/downstream/attributes/attributes.adoc +++ b/downstream/attributes/attributes.adoc @@ -275,3 +275,92 @@ // Not yet implemented but look to be in the future scope 2.5-next plan //:MenuSetLogin: {MenuAEAdminSettings}[Log In Settings] //:MenuSetUI: {MenuAEAdminSettings}[User Interface Settings] + +// Title attributes +// +// titles/troubleshooting-aap +:TitleTroubleshootingAAP: Troubleshooting Ansible Automation Platform +// +// titles/aap-plugin-rhdh-install +:TitlePluginRHDHInstall: Installing Ansible plug-ins for Red Hat Developer Hub +// +// titles/aap-plugin-rhdh-using +:TitlePluginRHDHUsing: Using Ansible plug-ins for Red Hat Developer Hub +// +// titles/aap-operations-guide +:TitleAAPOperationsGuide: Operating Ansible Automation Platform +// +// titles/eda/eda-user-guide +:TitleEDAUserGuide: Using automation decisions +// +// titles/upgrade +:TitleUpgrade: Upgrade and migration +// +// titles/aap-operator-installation +:TitleOperatorInstallation: Installing on Openshift Container Platform +// +// titles/aap-installation-guide +:TitleInstallationGuide: Installing on virtual machines +// +// titles/aap-planning-guide +:TitlePlanningGuide: Planning your installation +// +// titles/operator-mesh +:TitleOperatorMesh: Automation mesh for managed cloud or operator environments +// +// titles/automation-mesh +:TitleAutomationMesh: Automation mesh for VM environments +// +// titles/ocp_performance_guide +:TitleOCPPerformanceGuide: Performance considerations for operator environments +// +// titles/security-guide +:TitleSecurityGuide: Implementing security automation +// +// titles/playbooks/playbooks-getting-started +:TitlePlaybooksGettingStarted: Getting started with playbooks +// +// titles/playbooks/playbooks-reference +:TitlePlaybooksReference: Reference guide to Ansible Playbooks +// +// titles/release-notes +:TitleReleaseNotes: Release notes +// +// titles/controller/controller-user-guide +:TitleControllerUserGuide: Using automation execution +// +// titles/controller/controller-admin-guide +:TitleControllerAdminGuide: Configuring automation execution +// +// titles/controller/controller-api-overview +:TitleControllerAPIOverview: Automation execution API overview +// +// titles/aap-operator-backup +:TitleOperatorBackup: Backup and recovery for operator environments +// +// titles/central-auth +:TitleCentralAuth: Access management and authentication +// +// titles/getting-started +:TitleGettingStarted: Getting started with Ansible Automation Platform +// +// titles/aap-containerized-install +:TitleContainerizedInstall: Containerized installation +// +// titles/navigator-guide +:TitleNavigatorGuide: Using content creator +// +// titles/aap-hardening +:TitleHardening: Hardening and compliance +// +// titles/builder +:TitleBuilder: Creating and using execution environments +// +// titles/hub/managing-content +:TitleHubManagingContent: Managing content in automation hub +// +// titles/analytics/job-explorer +:TitleAnalyticsJobExplorer: Using automation analytics +// +// titles/develop-automation-content +:TitleDevelopAutomationContent: Developing automation content From d64a068ed8663e13552ac037c10fd1e6279138a7 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Tue, 6 Aug 2024 18:29:15 +0100 Subject: [PATCH 071/590] Fixes #1649 (#1650) (#1693) Co-authored-by: Mancubus <16170560+mancubus77@users.noreply.github.com> Co-authored-by: cerberus --- .../proc-add-operator-execution-nodes.adoc | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/downstream/modules/platform/proc-add-operator-execution-nodes.adoc b/downstream/modules/platform/proc-add-operator-execution-nodes.adoc index befc4f63ab..aa4baf7c54 100644 --- a/downstream/modules/platform/proc-add-operator-execution-nodes.adoc +++ b/downstream/modules/platform/proc-add-operator-execution-nodes.adoc @@ -3,13 +3,13 @@ .Prerequisites * An {ControllerName} instance. * The receptor collection package is installed. -* The `ansible-runner` package is installed. +* AAP Repository `ansible-automation-platform-2.4-for-rhel-{RHEL-RELEASE-NUMBER}-x86_64-rpms` is enabled. .Procedure . Log in to {PlatformName}. . In the navigation panel, select {MenuInfrastructureInstances}. . Click btn:[Add]. -. Input the VM name in the *Host Name* field. +. Input the Execution Node domain name or IP in the *Host Name* field. . Optional: Input the port number in the *Listener Port* field. . Click btn:[Save]. . Click the download icon image:download.png[download,15,15]next to *Install Bundle*. This starts a download, take note of where you save the file @@ -18,7 +18,7 @@ [NOTE] ==== To run the `install_receptor.yml` playbook you need to install the receptor collection from {Galaxy}: -`Ansible-galaxy collection install -r requirements.txt` +`Ansible-galaxy collection install -r requirements.yml` ==== . Update the playbook with your user name and SSH private key file. Note that `ansible_host` pre-populates with the hostname you input earlier. + @@ -26,7 +26,7 @@ To run the `install_receptor.yml` playbook you need to install the receptor col all: hosts: remote-execution: - ansible_host: example_host_name + ansible_host: example_host_name # Same with configured in AAP WebUI ansible_user: #user provided Ansible_ssh_private_key_file: ~/.ssh/id_example ---- @@ -34,11 +34,17 @@ all: . To install the bundle run: + ---- -ansible-playbook install_receptor.yml -i inventory +ansible-playbook install_receptor.yml -i inventory.yml ---- . When installed you can now upgrade your execution node by downloading and re-running the playbook for the instance you created. .Verification +To verify receptor service status run the following command: +---- +sudo systemctl status receptor.service +---- +Make sure the service is in `active (running)` state + To verify if your playbook runs correctly on your new node run the following command: ---- watch podman ps From 69229152cb64e79fdd4b013658a397fcb2a68e4d Mon Sep 17 00:00:00 2001 From: Jameria Self <73364088+jself-sudoku@users.noreply.github.com> Date: Tue, 6 Aug 2024 16:20:50 -0400 Subject: [PATCH 072/590] AAP-28448 Update performance tuning chapter in EDA controller user guide for 2.5 (#1676) (#1695) * AAP-28448 Applied updates relevant to 2.5 and adjusted syntax to adhere to style guides * AAP-28448 Applied updates relevant to 2.5 and adjusted syntax to adhere to style guides * AAP-28448 Applied updates relevant to 2.5 and adjusted syntax to adhere to style guides * AAP-28448 Update the variable in the note for modifying simultaneous activations * AAP-28448 Final tweaks before peer review * AAP-28448 Final tweaks after peer review --- .../eda/con-modifying-simultaneous-activations.adoc | 9 ++++++--- .../eda/proc-modifying-activations-after-install.adoc | 6 +++--- .../modules/eda/proc-modifying-memory-after-install.adoc | 6 +++--- .../modules/eda/ref-performance-troubleshooting.adoc | 8 ++++---- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/downstream/modules/eda/con-modifying-simultaneous-activations.adoc b/downstream/modules/eda/con-modifying-simultaneous-activations.adoc index 823afe2706..073c2d3990 100644 --- a/downstream/modules/eda/con-modifying-simultaneous-activations.adoc +++ b/downstream/modules/eda/con-modifying-simultaneous-activations.adoc @@ -4,11 +4,14 @@ [role="_abstract"] By default, {EDAcontroller} allows 12 rulebook activations to run simultaneously. -If any more than 12 rulebook activations are created, the expected behavior is that subsequent rulebook activations wait in pending until there is an available rulebook activation worker. -In this case, the rulebook activation status will display as “pending” even if there is enough free memory and CPU on your {EDAcontroller} instance. +If more than 12 rulebook activations are created, the expected behavior is that subsequent rulebook activations wait until there is an available rulebook activation worker. +In this case, the rulebook activation status is displayed as *Pending* even if there is enough free memory and CPU on your {EDAcontroller} instance. To change this behavior, you must change the default maximum number of running rulebook activations. -**Note:** The value for `EDA_MAX_RUNNING_ACTIVATIONS` doesn’t change with the change in instance size, so it needs to be adjusted manually. +[NOTE] +==== +The value for `MAX_RUNNING_ACTIVATIONS` does not change when you modify the instance size, so it needs to be adjusted manually. +==== include::proc-modifying-activations-during-install.adoc[leveloffset=+1] include::proc-modifying-activations-after-install.adoc[leveloffset=+1] diff --git a/downstream/modules/eda/proc-modifying-activations-after-install.adoc b/downstream/modules/eda/proc-modifying-activations-after-install.adoc index b6bbab2b38..736e874472 100644 --- a/downstream/modules/eda/proc-modifying-activations-after-install.adoc +++ b/downstream/modules/eda/proc-modifying-activations-after-install.adoc @@ -7,8 +7,8 @@ By default, {EDAcontroller} allows 12 activations to run simultaneously. You can modify this default value after installation by using the following procedure: .Procedure -. Navigate to the environment file at `/etc/ansible-automation-platform/eda`. +. Navigate to the environment file at `/etc/ansible-automation-platform/eda/settings.yaml`. . Choose the number of maximum running activations that you need. -For example, `EDA_MAX_RUNNING_ACTIVATIONS = 16` -. Use the following command to restart EDA services: `systemctl restart automation-eda-controller.target` +For example, `MAX_RUNNING_ACTIVATIONS = 16` +. Use the following command to restart {EDAName} services: `automation-eda-controller-service restart` diff --git a/downstream/modules/eda/proc-modifying-memory-after-install.adoc b/downstream/modules/eda/proc-modifying-memory-after-install.adoc index 398b6b8204..929fad12b9 100644 --- a/downstream/modules/eda/proc-modifying-memory-after-install.adoc +++ b/downstream/modules/eda/proc-modifying-memory-after-install.adoc @@ -7,7 +7,7 @@ By default, each rulebook activation container has a 200MB memory limit. You can modify this default value after installation by using the following procedure: .Procedure -. Navigate to the environment file at `/etc/ansible-automation-platform/eda`. +. Navigate to the environment file at `/etc/ansible-automation-platform/eda/settings.yaml`. . Modify the default container memory limit. -For example, `EDA_PODMAN_MEM_LIMIT = '300m'`. -. Restart the {EDAcontroller} services using `systemctl restart automation-eda-controller.target`. +For example, `PODMAN_MEM_LIMIT = '300m'`. +. Restart the {EDAcontroller} services using `automation-eda-controller-service restart`. diff --git a/downstream/modules/eda/ref-performance-troubleshooting.adoc b/downstream/modules/eda/ref-performance-troubleshooting.adoc index dba80fcff3..8a0cc14af7 100644 --- a/downstream/modules/eda/ref-performance-troubleshooting.adoc +++ b/downstream/modules/eda/ref-performance-troubleshooting.adoc @@ -14,7 +14,7 @@ If the event you are expecting is coming from a source other than what is in the ** Ensure that you have set the correct conditions for matching the event and taking actions in the rulebook activation. * My activation keeps restarting in an infinite loop. -** By default, the reset policy for rulebook activations is set to “on failure”. Change the estart policy using the following procedure: -. Navigate to the Rulebook Activation screen. -. Click the Restart Policy drop down menu. -. Choose the appropriate value: “On Failure”, “Always”, “Never”. +** By default, the reset policy for rulebook activations is set to “on failure”. Change the restart policy using the following procedure: +. Navigate to {MenuADRulebookActivations}. +. Click the *Restart Policy* list to display the options. +. Select the appropriate value: *On Failure*, *Always*, *Never*. From f46a9da78e850e4bce6716539ffd879ed8ebce64 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Wed, 7 Aug 2024 16:00:58 +0100 Subject: [PATCH 073/590] Update inventory file variables for controller and gateway (#1697) (#1698) Updates the following inventory file variables in the VM installer guide: Add: - automationgateway_admin_email - automationgateway_admin_username - admin_username - admin_email Remove: - automationcontroller_password - automationcontroller_username Update: - automationgateway_admin_password - admin_password Affects: VM-install guide - titles/aap-installation-guide AAP 2.5 Update the inventory file variables in the VM Install guide https://issues.redhat.com/browse/AAP-27328 --- .../modules/platform/ref-controller-variables.adoc | 12 +++++++----- .../modules/platform/ref-gateway-variables.adoc | 6 +++++- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/downstream/modules/platform/ref-controller-variables.adoc b/downstream/modules/platform/ref-controller-variables.adoc index f46d75702d..210110031b 100644 --- a/downstream/modules/platform/ref-controller-variables.adoc +++ b/downstream/modules/platform/ref-controller-variables.adoc @@ -5,18 +5,20 @@ [cols="50%,50%",options="header"] |==== | *Variable* | *Description* -| *`admin_password`* | The password for an administration user to access the UI when the installation is complete. +| *`admin_password`* | The admin password used to connect to the {ControllerName} instance. Passwords must be enclosed in quotes when they are provided in plain text in the inventory file. -| *`automation_controller_main_url`* | The full routeable URL used by {EDAName} to connect to a controller host. This URL is required if there is no {ControllerName} configured in inventory. +| *`automation_controller_main_url`* | The full URL used by {EDAName} to connect to a controller host. This URL is required if there is no {ControllerName} configured in the inventory file. Format example: `automation_controller_main_url='https://'` -| *`automationcontroller_password`* | Password for your {ControllerName} instance. +| *`admin_username`* | +The username used to identify and create the admin superuser in {ControllerName}. + +| *`admin_email`* | +The email address used for the admin user for {ControllerName}. -Passwords must be enclosed in quotes when they are provided in plain text in the inventory file. -| *`automationcontroller_username`* | Username for your {ControllerName} instance. | *`nginx_http_port`* | The nginx HTTP server listens for inbound connections. Default = 80 diff --git a/downstream/modules/platform/ref-gateway-variables.adoc b/downstream/modules/platform/ref-gateway-variables.adoc index ccaf33eb62..e41042bae4 100644 --- a/downstream/modules/platform/ref-gateway-variables.adoc +++ b/downstream/modules/platform/ref-gateway-variables.adoc @@ -5,10 +5,14 @@ [cols="50%,50%",options="header"] |==== | *Variable* | *Description* -| *`automationgateway_admin_password`* | The admin password used by the platform gateway instance. +| *`automationgateway_admin_username`* | The username used to identify and create the admin superuser in platform gateway. + +| *`automationgateway_admin_password`* | The admin password used to connect to the platform gateway instance. Passwords must be enclosed in quotes when they are provided in plain text in the inventory file. +| *`automationgateway_admin_email`* | The email address used for the admin user for platform gateway. + | *`automationgateway_pg_host`* | The hostname of the Postgres database used by platform gateway, which can be an externally managed database. | *`automationgateway_pg_port`* | The port number of the Postgres database used by platform gateway. From f9ad8f9a757dfb46f98afda7ea30c13743f7b65c Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Wed, 7 Aug 2024 11:40:02 -0600 Subject: [PATCH 074/590] AAP-18761-A - add assembly for the gateway dashboard (#1700) (#1701) * AAP-18761-A - add assembly for the gateway dashboard * AAP-18761-A - include peer review changes --- .../platform/assembly-gw-dashboard.adoc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 downstream/assemblies/platform/assembly-gw-dashboard.adoc diff --git a/downstream/assemblies/platform/assembly-gw-dashboard.adoc b/downstream/assemblies/platform/assembly-gw-dashboard.adoc new file mode 100644 index 0000000000..bc24dd9f72 --- /dev/null +++ b/downstream/assemblies/platform/assembly-gw-dashboard.adoc @@ -0,0 +1,18 @@ +ifdef::context[:parent-context: {context}] + +:_mod-docs-content-type: ASSEMBLY + +[id="gw-dashboard_{context}"] += {PlatformNameShort} dashboard + +:context: gw-dashboard + +[role="_abstract"] +The {PlatformNameShort} dashboard provides automation management and monitoring capabilities, allowing you to administer and configure automation functions, as well as view recent job activity details and performance statistics related to it. + +include::platform/con-gw-dash-features.adoc[leveloffset=+1] + +include::platform/con-gw-dash-components.adoc[leveloffset=+1] + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] From d5b0c1b435cec79cd1d7a238e1921472086d8518 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Thu, 8 Aug 2024 10:25:52 +0100 Subject: [PATCH 075/590] Update commands (#1703) (#1704) * Update commands Added command for ARM system and corrected sequence. hackfest mesh doc feedback - command updates https://issues.redhat.com/browse/AAP-26999 * Update commands Correction hackfest mesh doc feedback - command updates issues.redhat.com/browse/AAP-26999 --- ...assembly-automation-mesh-operator-aap.adoc | 6 ++--- .../platform/con-about-automation-mesh.adoc | 4 ++-- .../con-automation-mesh-node-types.adoc | 2 +- .../proc-set-up-virtual-machines.adoc | 22 ++++++++++++++----- .../ref-operator-mesh-prerequisites.adoc | 6 ++--- 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/downstream/assemblies/platform/assembly-automation-mesh-operator-aap.adoc b/downstream/assemblies/platform/assembly-automation-mesh-operator-aap.adoc index 189e4da62a..013eea87b4 100644 --- a/downstream/assemblies/platform/assembly-automation-mesh-operator-aap.adoc +++ b/downstream/assemblies/platform/assembly-automation-mesh-operator-aap.adoc @@ -2,17 +2,17 @@ = {AutomationMeshStart} for operator-based {PlatformName} -Scaling your automation mesh is available on OpenShift deployments of {PlatformName} and is possible through adding or removing nodes from your cluster dynamically, using the *Instances* resource of the {ControllerName} UI, without running the installation script. +Scaling your automation mesh is available on OpenShift deployments of {PlatformName} and is possible through adding or removing nodes from your cluster dynamically, using the *Instances* resource of the {PlatformNameShort} UI, without running the installation script. Instances serve as nodes in your mesh topology. {AutomationMeshStart} enables you to extend the footprint of your automation. The location where you launch a job can be different from the location where the ansible-playbook runs. -To manage instances from the {ControllerName} UI, you must have System Administrator or System Auditor permissions. +To manage instances from the {PlatformNameShort} UI, you must have System Administrator or System Auditor permissions. In general, the more processor cores (CPU) and memory (RAM) a node has, the more jobs that can be scheduled to run on that node at once. -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_user_guide/controller-jobs#controller-capacity-determination[Automation controller capacity determination and job impact]. +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/using_automation_execution/controller-jobs#controller-capacity-determination[Automation controller capacity determination and job impact]. include::platform/ref-operator-mesh-prerequisites.adoc[leveloffset=+1] include::platform/proc-set-up-virtual-machines.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/con-about-automation-mesh.adoc b/downstream/modules/platform/con-about-automation-mesh.adoc index d4987af011..33cbaa5f14 100644 --- a/downstream/modules/platform/con-about-automation-mesh.adoc +++ b/downstream/modules/platform/con-about-automation-mesh.adoc @@ -6,8 +6,8 @@ [role="_abstract"] {AutomationMeshStart} is an overlay network intended to ease the distribution of work across a large and dispersed collection of workers through nodes that establish peer-to-peer connections with each other using existing networks. -{PlatformName} 2 replaces Ansible Tower and isolated nodes with {ControllerName} and {HubName}. -{ControllerNameStart} provides the control plane for automation through its UI, RESTful API, RBAC, workflows and CI/CD integration, while {AutomationMesh} can be used for setting up, discovering, changing or modifying the nodes that form the control and execution layers. +{PlatformName} 2 replaces Ansible Tower and isolated nodes with {PlatformNameShort} and {HubName}. +{PlatformNameShort} provides the control plane for automation through its UI, RESTful API, RBAC, workflows and CI/CD integration, while {AutomationMesh} can be used for setting up, discovering, changing or modifying the nodes that form the control and execution layers. ifdef::operator-mesh[] {AutomationMeshStart} is useful for: diff --git a/downstream/modules/platform/con-automation-mesh-node-types.adoc b/downstream/modules/platform/con-automation-mesh-node-types.adoc index 4948f1ef18..1c1cd3543a 100644 --- a/downstream/modules/platform/con-automation-mesh-node-types.adoc +++ b/downstream/modules/platform/con-automation-mesh-node-types.adoc @@ -24,7 +24,7 @@ The *control plane* consists of hybrid and control nodes. Instances in the contr * *Control nodes* - control nodes run project and inventory updates and system jobs, but not regular jobs. Execution capabilities are disabled on these nodes. endif::mesh-VM[] ifdef::operator-mesh[] -Instances in the control plane run persistent {ControllerName} services such as the web server and task dispatcher, in addition to project updates, and management jobs. +Instances in the control plane run persistent {PlatformNameShort} services such as the web server and task dispatcher, in addition to project updates, and management jobs. However, in the operator-based model, there are no hybrid or control nodes. There are container groups, which make up containers running on the Kubernetes cluster. That comprises the control plane. diff --git a/downstream/modules/platform/proc-set-up-virtual-machines.adoc b/downstream/modules/platform/proc-set-up-virtual-machines.adoc index 7ceda4aaec..4007985484 100644 --- a/downstream/modules/platform/proc-set-up-virtual-machines.adoc +++ b/downstream/modules/platform/proc-set-up-virtual-machines.adoc @@ -41,19 +41,31 @@ For more information about Simple Content Access, see link:{BaseURL}/subscriptio . Enable {PlatformNameShort} subscriptions and the proper {PlatformName} channel: + +For RHEL 8 ++ ---- -# subscription-manager repos --enable ansible-automation-platform-2.4-for-rhel-8-x86_64-rpms for RHEL 8 - -# subscription-manager repos --enable ansible-automation-platform-2.4-for-rhel-9-x86_64-rpms for RHEL 9 +# subscription-manager repos --enable ansible-automation-platform-2.4-for-rhel-8-x86_64-rpms ---- - ++ +For RHEL 9 ++ +---- +# subscription-manager repos --enable ansible-automation-platform-2.4-for-rhel-9-x86_64-rpms +---- ++ +For ARM ++ +---- +# subscription-manager repos --enable ansible-automation-platform-2.4-for-rhel-aarch64-rpms +---- ++ . Ensure the packages are up to date: + ---- sudo dnf upgrade -y ---- -. Install the ansible-core packages: +. Install the ansible-core packages on the machine where the downloaded bundle is to run: + ---- sudo dnf install -y ansible-core diff --git a/downstream/modules/platform/ref-operator-mesh-prerequisites.adoc b/downstream/modules/platform/ref-operator-mesh-prerequisites.adoc index 5a3d07c151..f35b7dc4dd 100644 --- a/downstream/modules/platform/ref-operator-mesh-prerequisites.adoc +++ b/downstream/modules/platform/ref-operator-mesh-prerequisites.adoc @@ -2,7 +2,7 @@ = Prerequisites -The automation mesh is dependent on hop and execution nodes running on {RHEL} (RHEL). +The automation mesh is dependent on hop and execution nodes running on _{RHEL}_ (RHEL). Your {PlatformName} subscription grants you ten {RHEL} licenses that can be used for running components of {PlatformNameShort}. For more information about {RHEL} subscriptions, see link:{BaseURL}/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/assembly_registering-the-system-and-managing-subscriptions_configuring-basic-system-settings[Registering the system and managing subscriptions] in the {RHEL} documentation. @@ -10,9 +10,9 @@ For more information about {RHEL} subscriptions, see link:{BaseURL}/red_hat_ente The following steps prepare the RHEL instances for deployment of the automation mesh. . You require a {RHEL} operating system. -Each node in the mesh requires a static IP address, or a resolvable DNS hostname that {ControllerName} can access. +Each node in the mesh requires a static IP address, or a resolvable DNS hostname that {PlatformNameShort} can access. . Ensure that you have the minimum requirements for the RHEL virtual machine before proceeding. -For more information, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_planning_guide/platform-system-requirements[Red Hat Ansible Automation Platform system requirements]. +For more information, see the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/installing_on_virtual_machines/platform-system-requirements[Red Hat Ansible Automation Platform system requirements]. . Deploy the RHEL instances within the remote networks where communication is required. For information about creating virtual machines, see link:{BaseURL}/red_hat_enterprise_linux/9/html/configuring_and_managing_virtualization/assembly_creating-virtual-machines_configuring-and-managing-virtualization[Creating Virtual Machines] in the _{RHEL}_ documentation. Remember to scale the capacity of your virtual machines sufficiently so that your proposed tasks can run on them. From c3d3f1cc9ee6100b4fe03eea7f1df8492eb80252 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Thu, 8 Aug 2024 13:55:27 +0100 Subject: [PATCH 076/590] Add note about execution node (#1705) (#1706) * Add note about execution node hackfest doc feedback - mesh section 2.2 https://issues.redhat.com/browse/AAP-27000 * Add note about execution node Correction hackfest doc feedback - mesh section 2.2 https://issues.redhat.com/browse/AAP-27000 --- .../modules/platform/proc-set-up-virtual-machines.adoc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/downstream/modules/platform/proc-set-up-virtual-machines.adoc b/downstream/modules/platform/proc-set-up-virtual-machines.adoc index 4007985484..7e15f7a784 100644 --- a/downstream/modules/platform/proc-set-up-virtual-machines.adoc +++ b/downstream/modules/platform/proc-set-up-virtual-machines.adoc @@ -70,5 +70,11 @@ sudo dnf upgrade -y ---- sudo dnf install -y ansible-core ---- - ++ +[NOTE] +==== +Ansible core is required on the machine that runs the {AutomationMesh} configuration bundle playbooks. This document assumes that happens on the execution node. +However, this step can be omitted if you run the playbook from a different machine. +You cannot run directly from the control node, this is not currently supported, but future support expects that the control node has direct connectivity to the execution node. +==== From ba8bf6d8bf6c6d7e2f1629bbc3bbb60e7a6a222a Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Fri, 9 Aug 2024 09:32:23 +0100 Subject: [PATCH 077/590] Updated default execution environment setting (#1708) (#1709) [Docs] DEFAULT_EXECUTION_ENVIRONMENT setting is not present at api/v2/settings/jobs/ as mentioned in AAP document https://issues.redhat.com/browse/AAP-28741 --- downstream/modules/builder/con-ee-precedence.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/downstream/modules/builder/con-ee-precedence.adoc b/downstream/modules/builder/con-ee-precedence.adoc index cf24802f1a..9311af6041 100644 --- a/downstream/modules/builder/con-ee-precedence.adoc +++ b/downstream/modules/builder/con-ee-precedence.adoc @@ -8,7 +8,7 @@ Project updates will always use the control plane {ExecEnvName} by default, howe . The `default_environment` defined on the project that the job uses. . The `default_environment` defined on the organization of the job. . The `default_environment` defined on the organization of the inventory the job uses. -. The current `DEFAULT_EXECUTION_ENVIRONMENT` setting (configurable at `api/v2/settings/jobs/`) +. The current `DEFAULT_EXECUTION_ENVIRONMENT` setting (configurable at `api/v2/settings/system/`) . Any image from the `GLOBAL_JOB_EXECUTION_ENVIRONMENTS` setting. . Any other global {ExecEnvShort}. From 24f2b4092de475a4cb85142e16059967bfa75f7a Mon Sep 17 00:00:00 2001 From: EMcWhinn <122449381+EMcWhinn@users.noreply.github.com> Date: Fri, 9 Aug 2024 12:36:30 +0100 Subject: [PATCH 078/590] Convert Getting started with AAP to Asciidoc (#1662) (#1711) * Convert Getting started with AAP to Asciidoc https://issues.redhat.com/browse/AAP-27120 Affects `titles/getting-started` --- .../assembly-controller-job-templates.adoc | 1 + .../platform/assembly-gs-auto-dev.adoc | 60 ++++++ .../platform/assembly-gs-auto-op.adoc | 48 +++++ .../assembly-gs-key-functionality.adoc | 17 ++ .../platform/assembly-gs-platform-admin.adoc | 20 ++ downstream/assemblies/platform/eda | 1 + .../platform/con-gs-ansible-lightspeed.adoc | 6 + .../platform/con-gs-ansible-roles.adoc | 15 ++ .../platform/con-gs-auto-dev-about-inv.adoc | 6 + .../con-gs-auto-dev-job-templates.adoc | 7 + .../platform/con-gs-auto-op-about-inv.adoc | 9 + .../platform/con-gs-auto-op-execute-inv.adoc | 11 ++ .../con-gs-auto-op-job-templates.adoc | 9 + .../platform/con-gs-automation-content.adoc | 19 ++ .../platform/con-gs-automation-decisions.adoc | 4 + .../con-gs-automation-execution-jobs.adoc | 5 + .../platform/con-gs-automation-execution.adoc | 19 ++ .../platform/con-gs-automation-mesh.adoc | 4 + .../platform/con-gs-build-decision-env.adoc | 18 ++ .../con-gs-config-authentication.adoc | 10 + .../con-gs-create-automation-content.adoc | 10 + .../platform/con-gs-dashboard-components.adoc | 15 ++ .../con-gs-define-events-rulebooks.adoc | 14 ++ .../platform/con-gs-developer-tools.adoc | 5 + .../platform/con-gs-execution-env.adoc | 9 + .../modules/platform/con-gs-final-set-up.adoc | 5 + .../con-gs-learn-about-collections.adoc | 32 ++++ .../modules/platform/con-gs-manage-RBAC.adoc | 12 ++ .../platform/con-gs-manage-collections.adoc | 12 ++ .../modules/platform/con-gs-playbooks.adoc | 11 ++ .../platform/con-gs-rulebook-activations.adoc | 5 + .../proc-controller-create-inventory.adoc | 77 ++++++-- .../proc-controller-creating-a-team.adoc | 7 +- ...er-getting-started-with-job-templates.adoc | 2 +- .../proc-gs-add-ee-to-job-template.adoc | 22 +++ ...o-dev-create-automation-decision-proj.adoc | 36 ++++ ...-dev-create-automation-execution-proj.adoc | 33 ++++ .../proc-gs-auto-dev-create-template.adoc | 177 ++++++++++++++++++ .../proc-gs-auto-dev-run-template.adoc | 9 + .../proc-gs-auto-dev-set-up-decision-env.adoc | 31 +++ .../proc-gs-auto-op-launch-template.adoc | 14 ++ .../platform/proc-gs-auto-op-projects.adoc | 12 ++ .../proc-gs-auto-op-review-job-output.adoc | 11 ++ .../proc-gs-auto-op-review-job-status.adoc | 11 ++ .../modules/platform/proc-gs-logging-in.adoc | 31 +++ .../proc-gs-platform-admin-create-user.adoc | 31 +++ .../proc-gs-publish-to-a-collection.adoc | 8 + .../platform/proc-gs-upload-collection.adoc | 5 + .../proc-gs-use-base-execution-env.adoc | 33 ++++ .../platform/proc-gs-write-playbook.adoc | 8 + .../platform/ref-gs-install-config.adoc | 4 + downstream/titles/getting-started/eda | 1 + downstream/titles/getting-started/master.adoc | 13 +- 53 files changed, 979 insertions(+), 16 deletions(-) create mode 100644 downstream/assemblies/platform/assembly-gs-auto-dev.adoc create mode 100644 downstream/assemblies/platform/assembly-gs-auto-op.adoc create mode 100644 downstream/assemblies/platform/assembly-gs-key-functionality.adoc create mode 100644 downstream/assemblies/platform/assembly-gs-platform-admin.adoc create mode 120000 downstream/assemblies/platform/eda create mode 100644 downstream/modules/platform/con-gs-ansible-lightspeed.adoc create mode 100644 downstream/modules/platform/con-gs-ansible-roles.adoc create mode 100644 downstream/modules/platform/con-gs-auto-dev-about-inv.adoc create mode 100644 downstream/modules/platform/con-gs-auto-dev-job-templates.adoc create mode 100644 downstream/modules/platform/con-gs-auto-op-about-inv.adoc create mode 100644 downstream/modules/platform/con-gs-auto-op-execute-inv.adoc create mode 100644 downstream/modules/platform/con-gs-auto-op-job-templates.adoc create mode 100644 downstream/modules/platform/con-gs-automation-content.adoc create mode 100644 downstream/modules/platform/con-gs-automation-decisions.adoc create mode 100644 downstream/modules/platform/con-gs-automation-execution-jobs.adoc create mode 100644 downstream/modules/platform/con-gs-automation-execution.adoc create mode 100644 downstream/modules/platform/con-gs-automation-mesh.adoc create mode 100644 downstream/modules/platform/con-gs-build-decision-env.adoc create mode 100644 downstream/modules/platform/con-gs-config-authentication.adoc create mode 100644 downstream/modules/platform/con-gs-create-automation-content.adoc create mode 100644 downstream/modules/platform/con-gs-dashboard-components.adoc create mode 100644 downstream/modules/platform/con-gs-define-events-rulebooks.adoc create mode 100644 downstream/modules/platform/con-gs-developer-tools.adoc create mode 100644 downstream/modules/platform/con-gs-execution-env.adoc create mode 100644 downstream/modules/platform/con-gs-final-set-up.adoc create mode 100644 downstream/modules/platform/con-gs-learn-about-collections.adoc create mode 100644 downstream/modules/platform/con-gs-manage-RBAC.adoc create mode 100644 downstream/modules/platform/con-gs-manage-collections.adoc create mode 100644 downstream/modules/platform/con-gs-playbooks.adoc create mode 100644 downstream/modules/platform/con-gs-rulebook-activations.adoc create mode 100644 downstream/modules/platform/proc-gs-add-ee-to-job-template.adoc create mode 100644 downstream/modules/platform/proc-gs-auto-dev-create-automation-decision-proj.adoc create mode 100644 downstream/modules/platform/proc-gs-auto-dev-create-automation-execution-proj.adoc create mode 100644 downstream/modules/platform/proc-gs-auto-dev-create-template.adoc create mode 100644 downstream/modules/platform/proc-gs-auto-dev-run-template.adoc create mode 100644 downstream/modules/platform/proc-gs-auto-dev-set-up-decision-env.adoc create mode 100644 downstream/modules/platform/proc-gs-auto-op-launch-template.adoc create mode 100644 downstream/modules/platform/proc-gs-auto-op-projects.adoc create mode 100644 downstream/modules/platform/proc-gs-auto-op-review-job-output.adoc create mode 100644 downstream/modules/platform/proc-gs-auto-op-review-job-status.adoc create mode 100644 downstream/modules/platform/proc-gs-logging-in.adoc create mode 100644 downstream/modules/platform/proc-gs-platform-admin-create-user.adoc create mode 100644 downstream/modules/platform/proc-gs-publish-to-a-collection.adoc create mode 100644 downstream/modules/platform/proc-gs-upload-collection.adoc create mode 100644 downstream/modules/platform/proc-gs-use-base-execution-env.adoc create mode 100644 downstream/modules/platform/proc-gs-write-playbook.adoc create mode 100644 downstream/modules/platform/ref-gs-install-config.adoc create mode 120000 downstream/titles/getting-started/eda diff --git a/downstream/assemblies/platform/assembly-controller-job-templates.adoc b/downstream/assemblies/platform/assembly-controller-job-templates.adoc index c7cf325408..f5b30964ac 100644 --- a/downstream/assemblies/platform/assembly-controller-job-templates.adoc +++ b/downstream/assemblies/platform/assembly-controller-job-templates.adoc @@ -7,5 +7,6 @@ Job templates are useful to run the same job many times. Job templates also enco For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-job-templates[Job Templates] in _{ControllerUG}_. include::platform/proc-controller-getting-started-with-job-templates.adoc[leveloffset=+1] +include::platform/proc-controller-create-job-template.adoc[leveloffset=+1] include::platform/proc-controller-edit-job-template.adoc[leveloffset=+1] include::platform/proc-controller-run-job-template.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-gs-auto-dev.adoc b/downstream/assemblies/platform/assembly-gs-auto-dev.adoc new file mode 100644 index 0000000000..86232fa272 --- /dev/null +++ b/downstream/assemblies/platform/assembly-gs-auto-dev.adoc @@ -0,0 +1,60 @@ +ifdef::context[:parent-context-of-assembly-gs-auto-dev: {context}] + +:_mod-docs-content-type: ASSEMBLY + +ifndef::context[] +[id="assembly-gs-auto-dev"] +endif::[] +ifdef::context[] +[id="assembly-gs-auto-dev_{context}"] +endif::[] + +:context: assembly-gs-auto-dev + += Getting started as an automation developer + +As an automation developer, you can use {PlatformNameShort} to implement your organization's automation strategy. +{PlatformNameShort} can help you write, test, and share automation content, and download and use Red Hat certified collections. +This guide will walk you through the basic steps to get set up as an automation developer on {PlatformNameShort}. +To get started as an automation developer, learn how to: + +* Set up your development environment +* Use playbooks and rulebooks +* Create roles +* Find existing automation content and publish your own custom content +* Use execution environments and decision environments +* Create a project +* Create and run rulebook activations for {EDAName} + +//Add Aine's devtools doc: +//include:: +include::platform/con-gs-create-automation-content.adoc[leveloffset=+1] +include::platform/con-gs-define-events-rulebooks.adoc[leveloffset=+1] +include::platform/con-gs-ansible-roles.adoc[leveloffset=+1] +include::platform/con-gs-learn-about-collections.adoc[leveloffset=+1] +include::platform/proc-gs-publish-to-a-collection.adoc[leveloffset=+1] +include::platform/proc-gs-upload-collection.adoc[leveloffset=+2] +include::platform/con-gs-execution-env.adoc[leveloffset=+1] +include::platform/proc-gs-use-base-execution-env.adoc[leveloffset=+2] +include::platform/proc-gs-add-ee-to-job-template.adoc[leveloffset=+2] +include::platform/con-gs-build-decision-env.adoc[leveloffset=+1] +include::platform/proc-gs-auto-dev-set-up-decision-env.adoc[leveloffset=+2] +include::platform/proc-gs-auto-dev-create-automation-execution-proj.adoc[leveloffset=+1] +include::platform/proc-gs-auto-dev-create-automation-decision-proj.adoc[leveloffset=+1] +include::platform/con-gs-auto-dev-about-inv.adoc[leveloffset=+1] +include::platform/proc-controller-create-inventory.adoc[leveloffset=+2] +include::platform/con-gs-auto-dev-job-templates.adoc[leveloffset=+1] +include::platform/proc-controller-getting-started-with-job-templates.adoc[leveloffset=+2] +include::platform/proc-gs-auto-dev-create-template.adoc[leveloffset=+2] +include::platform/proc-gs-auto-dev-run-template.adoc[leveloffset=+2] +include::platform/proc-controller-edit-job-template.adoc[leveloffset=+2] +include::platform/con-gs-rulebook-activations.adoc[leveloffset=+1] +include::eda/proc-eda-set-up-rulebook-activation.adoc[leveloffset=+2] +include::eda/con-eda-rulebook-activation-list-view.adoc[leveloffset=+3] +include::eda/proc-eda-enable-rulebook-activations.adoc[leveloffset=+2] +include::eda/proc-eda-restart-rulebook-activations.adoc[leveloffset=+2] +include::eda/proc-eda-delete-rulebook-activations.adoc[leveloffset=+2] +include::eda/proc-eda-activate-webhook.adoc[leveloffset=+2] + +ifdef::parent-context-of-assembly-gs-auto-dev[:context: {parent-context-of-assembly-gs-auto-dev}}] +ifndef::parent-context-of-assembly-gs-auto-dev[:!context:] diff --git a/downstream/assemblies/platform/assembly-gs-auto-op.adoc b/downstream/assemblies/platform/assembly-gs-auto-op.adoc new file mode 100644 index 0000000000..00a1764c52 --- /dev/null +++ b/downstream/assemblies/platform/assembly-gs-auto-op.adoc @@ -0,0 +1,48 @@ +ifdef::context[:parent-context-of-assembly-gs-auto-op: {context}] + +:_mod-docs-content-type: ASSEMBLY + +ifndef::context[] +[id="assembly-gs-auto-op"] +endif::[] +ifdef::context[] +[id="assembly-gs-auto-op_{context}"] +endif::[] + +:context: assembly-gs-auto-op + += Getting started as an automation operator + +As an automation operator, {PlatformNameShort} can help you organize and manage automation projects using Red Hat certified collections or custom content for your organization. + +To get started as a platform operator, see the following sections: + +* xref:con-gs-playbooks[Get started with playbooks] +* xref:proc-gs-publish-to-a-collection_{context}[Publishing to a collection in a source code manager] +* xref:proc-gs-auto-op-projects[Automation execution projects] +* xref:con-gs-execution-env_{context}[Build and use an execution environment] +* xref:con-gs-auto-op-job-templates[Job templates] +* xref:con-gs-auto-op-about-inv[About inventories] +* xref:con-gs-automation-execution-jobs[Automation execution jobs] + +include::platform/con-gs-playbooks.adoc[leveloffset=+1] +include::platform/proc-gs-write-playbook.adoc[leveloffset=+1] +include::platform/con-gs-ansible-roles.adoc[leveloffset=+1] +include::platform/con-gs-learn-about-collections.adoc[leveloffset=+1] +include::platform/proc-gs-publish-to-a-collection.adoc[leveloffset=+1] +include::platform/con-gs-manage-collections.adoc[leveloffset=+2] +include::platform/proc-gs-upload-collection.adoc[leveloffset=+2] +include::platform/con-gs-execution-env.adoc[leveloffset=+1] +include::platform/proc-gs-use-base-execution-env.adoc[leveloffset=+2] +include::platform/proc-gs-add-ee-to-job-template.adoc[leveloffset=+2] +include::platform/proc-gs-auto-op-projects.adoc[leveloffset=+1] +include::platform/con-gs-auto-op-job-templates.adoc[leveloffset=+1] +include::platform/proc-gs-auto-op-launch-template.adoc[leveloffset=+2] +include::platform/con-gs-auto-op-about-inv.adoc[leveloffset=+1] +include::platform/con-gs-auto-op-execute-inv.adoc[leveloffset=+2] +include::platform/con-gs-automation-execution-jobs.adoc[leveloffset=+1] +include::platform/proc-gs-auto-op-review-job-status.adoc[leveloffset=+2] +include::platform/proc-gs-auto-op-review-job-output.adoc[leveloffset=+2] + +ifdef::parent-context-of-assembly-gs-auto-op[:context: {parent-context-of-assembly-gs-auto-op}] +ifndef::parent-context-of-assembly-gs-auto-op[:!context:] diff --git a/downstream/assemblies/platform/assembly-gs-key-functionality.adoc b/downstream/assemblies/platform/assembly-gs-key-functionality.adoc new file mode 100644 index 0000000000..4b851833f0 --- /dev/null +++ b/downstream/assemblies/platform/assembly-gs-key-functionality.adoc @@ -0,0 +1,17 @@ +[id="assembly-gs-key-functionality"] + += Key functionality and concepts + +With {PlatformNameShort}, you can create, manage, and scale automation for your organization across users, teams, and regions. + +See the following functionality and concepts of {PlatformNameShort} for more details. + +include::platform/con-gs-automation-execution.adoc[leveloffset=+1] +include::platform/con-gs-automation-content.adoc[leveloffset=+1] +include::platform/con-gs-automation-decisions.adoc[leveloffset=+1] +include::platform/con-gs-automation-mesh.adoc[leveloffset=+1] +include::platform/con-gs-ansible-lightspeed.adoc[leveloffset=+1] +include::platform/con-gs-developer-tools.adoc[leveloffset=+1] +include::platform/ref-gs-install-config.adoc[leveloffset=+1] +include::platform/con-gs-dashboard-components.adoc[leveloffset=+1] +include::platform/con-gs-final-set-up.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-gs-platform-admin.adoc b/downstream/assemblies/platform/assembly-gs-platform-admin.adoc new file mode 100644 index 0000000000..786e72180b --- /dev/null +++ b/downstream/assemblies/platform/assembly-gs-platform-admin.adoc @@ -0,0 +1,20 @@ +[id="assembly-gs-platform-admin"] + += Getting started as a platform administrator + +As a platform administrator, {PlatformNameShort} can help you enable your users and teams to develop and run automation. + +This guide walks you through the basic steps to get set up as an administrator for {PlatformNameShort}, including configuring and maintaining the platform for users. + +To get started as an administrator, learn how to: + +* Log in to the platform as an administrator. +* Configure authentication for users by manually creating users, teams, and organizations +* Configuring user access with role-based access control + +include::platform/proc-gs-logging-in.adoc[leveloffset=+1] +include::platform/con-gs-config-authentication.adoc[leveloffset=+1] +include::platform/con-gs-manage-RBAC.adoc[leveloffset=+1] +include::platform/proc-controller-create-organization.adoc[leveloffset=+1] +include::platform/proc-controller-creating-a-team.adoc[leveloffset=+1] +include::platform/proc-gs-platform-admin-create-user.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/eda b/downstream/assemblies/platform/eda new file mode 120000 index 0000000000..cca4c84ae0 --- /dev/null +++ b/downstream/assemblies/platform/eda @@ -0,0 +1 @@ +../../modules/eda \ No newline at end of file diff --git a/downstream/modules/platform/con-gs-ansible-lightspeed.adoc b/downstream/modules/platform/con-gs-ansible-lightspeed.adoc new file mode 100644 index 0000000000..2177ddccd2 --- /dev/null +++ b/downstream/modules/platform/con-gs-ansible-lightspeed.adoc @@ -0,0 +1,6 @@ +[id="con-gs-ansible-lightspeed"] + += Ansible Lightspeed + + + diff --git a/downstream/modules/platform/con-gs-ansible-roles.adoc b/downstream/modules/platform/con-gs-ansible-roles.adoc new file mode 100644 index 0000000000..ba5cf50f25 --- /dev/null +++ b/downstream/modules/platform/con-gs-ansible-roles.adoc @@ -0,0 +1,15 @@ +[id="con-gs-ansible-roles_{context}"] + += Bundle content with Ansible roles + +A role is like a customized piece of automation content that bundles together relevant bits from automation playbooks to fit your system's specific needs. Roles are self-contained and portable, and can include groupings of tasks, variables, configuration templates, handlers, and other supporting files to orchestrate complicated automation flows. + +Instead of creating huge playbooks with hundreds of tasks, you can use roles to break the tasks apart into smaller, more discrete units of work. + +To learn more about roles, see link:https://www.redhat.com/en/topics/automation/what-is-an-ansible-role#why-use-a-role-instead-of-a-playbook[What is an Ansible Role-and how is it used?]. + +== Creating a role + +You can create roles using the Ansible Galaxy CLI tool, which is included with your Ansible Automation Platform bundle. Access role-specific commands from the roles subcommand: + +//ADD CONTENT diff --git a/downstream/modules/platform/con-gs-auto-dev-about-inv.adoc b/downstream/modules/platform/con-gs-auto-dev-about-inv.adoc new file mode 100644 index 0000000000..6f3815d58f --- /dev/null +++ b/downstream/modules/platform/con-gs-auto-dev-about-inv.adoc @@ -0,0 +1,6 @@ +[id="con-gs-auto-dev-about-inv"] + += About inventories + +An inventory is a file listing the collection of hosts managed by automation controller. +Organizations are assigned to inventories, while permissions to launch playbooks against inventories are controlled at the user or team level. diff --git a/downstream/modules/platform/con-gs-auto-dev-job-templates.adoc b/downstream/modules/platform/con-gs-auto-dev-job-templates.adoc new file mode 100644 index 0000000000..bcb03ea859 --- /dev/null +++ b/downstream/modules/platform/con-gs-auto-dev-job-templates.adoc @@ -0,0 +1,7 @@ +[id="con-gs-auto-dev-job-templates"] + += Work with job templates + +A job template is a definition and set of parameters for running an Ansible job. + +A job template combines an Ansible playbook from a project and the settings required to launch it, including information about the target host against which the playbook will run, authentication information to access the host, and any other relevant variables . Job templates are useful to run the same job many times. Job templates also encourage the reuse of Ansible playbook content and collaboration between teams. For more information, see Job Templates in the Automation controller User Guide. diff --git a/downstream/modules/platform/con-gs-auto-op-about-inv.adoc b/downstream/modules/platform/con-gs-auto-op-about-inv.adoc new file mode 100644 index 0000000000..660f50155c --- /dev/null +++ b/downstream/modules/platform/con-gs-auto-op-about-inv.adoc @@ -0,0 +1,9 @@ +[id="con-gs-auto-op-about-inv"] + += About inventories + +An inventory is a file listing the collection of hosts managed by automation controller. +Organizations are assigned to inventories, while permissions to launch playbooks against inventories are controlled at the user or team level. + +Platform administrators and automation developers have the permissions to create inventories. +As an automation operator you can view inventories and their details. diff --git a/downstream/modules/platform/con-gs-auto-op-execute-inv.adoc b/downstream/modules/platform/con-gs-auto-op-execute-inv.adoc new file mode 100644 index 0000000000..f985d709ad --- /dev/null +++ b/downstream/modules/platform/con-gs-auto-op-execute-inv.adoc @@ -0,0 +1,11 @@ +[id="con-gs-auto-op-execute-inv"] + += Executing an inventory + +.Procedure + +. From the navigation panel, select {MenuInfrastructureInventories}. +The *Inventories* window displays a list of inventories that are currently available, along with the following information: + +//ADD CONTENT + diff --git a/downstream/modules/platform/con-gs-auto-op-job-templates.adoc b/downstream/modules/platform/con-gs-auto-op-job-templates.adoc new file mode 100644 index 0000000000..cb13c19290 --- /dev/null +++ b/downstream/modules/platform/con-gs-auto-op-job-templates.adoc @@ -0,0 +1,9 @@ +[id="con-gs-auto-op-job-templates"] + += Work with job templates + +A job template is a definition and set of parameters for running an Ansible job. + +A job template combines an Ansible Playbook from a project and the settings required to launch it. Job templates are useful to run the same job many times. Job templates also encourage the reuse of Ansible Playbook content and collaboration between teams. For more information, see [ADD2.5 LINK][Job Templates] in the Automation controller User Guide. + +Platform administrators and automation developers have the permissions to create job templates. As an automation operator you can launch job templates and view their details. diff --git a/downstream/modules/platform/con-gs-automation-content.adoc b/downstream/modules/platform/con-gs-automation-content.adoc new file mode 100644 index 0000000000..7309f6cd53 --- /dev/null +++ b/downstream/modules/platform/con-gs-automation-content.adoc @@ -0,0 +1,19 @@ +[id="con-gs-automation-content"] + += Automation content + +{HubNameStart} is the central location for your {PlatformNameShort}content. +In {HubName} you can also find content collections that you can download and integrate into your automation environment. + +Content collections might include modules, playbooks, plugins, roles, and related documentation. + + + + + +== Ansible playbooks + + + +== Ansible roles + diff --git a/downstream/modules/platform/con-gs-automation-decisions.adoc b/downstream/modules/platform/con-gs-automation-decisions.adoc new file mode 100644 index 0000000000..a4f37e439f --- /dev/null +++ b/downstream/modules/platform/con-gs-automation-decisions.adoc @@ -0,0 +1,4 @@ +[id="con-gs-automation-decisions"] + += Automation decisions + diff --git a/downstream/modules/platform/con-gs-automation-execution-jobs.adoc b/downstream/modules/platform/con-gs-automation-execution-jobs.adoc new file mode 100644 index 0000000000..25a25c6992 --- /dev/null +++ b/downstream/modules/platform/con-gs-automation-execution-jobs.adoc @@ -0,0 +1,5 @@ +[id="con-gs-automation-execution-jobs"] + += Automation execution jobs + +A job is an instance of {ControllerName} launching an Ansible Playbook against an inventory of hosts. diff --git a/downstream/modules/platform/con-gs-automation-execution.adoc b/downstream/modules/platform/con-gs-automation-execution.adoc new file mode 100644 index 0000000000..2a0d11bf8d --- /dev/null +++ b/downstream/modules/platform/con-gs-automation-execution.adoc @@ -0,0 +1,19 @@ +[id="con-gs-automation-execution"] + += Automation execution + +The centerpiece of {PlatformNameShort} is its automation execution command and control center, where you can deploy, define, operate, scale and delegate automation across your enterprise. +With this functionality, you can perform a variety of tasks, such as the ability to run playbooks using a simple, straightforward web UI, dashboards, and centralized logging to manage and track job execution from a single location. +In the automation execution environment, you can use {ControllerName} tasks to build job templates, which standardize how automation is deployed, initiated, and delegated, making it more reusable and consistent. + +== Inventory files + +An inventory file is a single file with a list of hosts and groups that can be acted on using Ansible commands and playbooks. +You can use an inventory file to specify your installation scenario and describe host deployments to Ansible. +Also, you can use an inventory file to organize managed nodes in centralized files that give Ansible with system information and network locations. + +Depending on the inventory plugins, you can use many formats for your inventory files, but the most common formats are INI and YAML. +The location of your inventory file depends on installation program you use. + +.ADDITIONAL RESOURCES +For more details on inventory files, see [ADD 2.5 LINK]About the installer inventory in the _Red Hat Ansible Automation Platform planning guide_. diff --git a/downstream/modules/platform/con-gs-automation-mesh.adoc b/downstream/modules/platform/con-gs-automation-mesh.adoc new file mode 100644 index 0000000000..42e36617ae --- /dev/null +++ b/downstream/modules/platform/con-gs-automation-mesh.adoc @@ -0,0 +1,4 @@ +[id="con-gs-automation-mesh"] + += Automation mesh + diff --git a/downstream/modules/platform/con-gs-build-decision-env.adoc b/downstream/modules/platform/con-gs-build-decision-env.adoc new file mode 100644 index 0000000000..d6ece6b515 --- /dev/null +++ b/downstream/modules/platform/con-gs-build-decision-env.adoc @@ -0,0 +1,18 @@ +[id="con-gs-build-decision-env"] + += Build and use a decision environment + +{EDAName} includes an ansible.eda collection, which contains sample sources, event filters and rulebooks. +All the collections, ansible rulebooks and their dependencies use a decision environment, which is an image that can be run on either Podman or Kubernetes. + +In decision environments, sources, which are typically Python code, are distributed through ansible-collections. +They inject external events into a rulebook for processing. +The rulebook consists of the following: + +* The python interpreter +* Java Runtime Environment for Drools rule engine +* ansible-rulebook python package +* ansible.eda collection + +You can use the base decision environment and build your own customized Decision Environments with additional collections and collection dependencies. +You can build a decision environment using a Dockerfile or optionally you can deploy your CA certificate into the image. diff --git a/downstream/modules/platform/con-gs-config-authentication.adoc b/downstream/modules/platform/con-gs-config-authentication.adoc new file mode 100644 index 0000000000..d19cfb4100 --- /dev/null +++ b/downstream/modules/platform/con-gs-config-authentication.adoc @@ -0,0 +1,10 @@ +[id="con-gs-config-authentication"] + += Configure authentication + +After your first login as administrator you must configure authentication for your users. +Depending on your organization's needs and resources, you can either: + +* Set up local authentication by creating users, teams, and organizations manually. +* Use an external source such as GitHub to configure authentication for your system. + diff --git a/downstream/modules/platform/con-gs-create-automation-content.adoc b/downstream/modules/platform/con-gs-create-automation-content.adoc new file mode 100644 index 0000000000..5c766203af --- /dev/null +++ b/downstream/modules/platform/con-gs-create-automation-content.adoc @@ -0,0 +1,10 @@ +[id="con-gs-create-automation-content"] + += Create automation content with playbooks + +Ansible playbooks are blueprints that tell {PlatformNameShort} what tasks to perform with which devices. +You can use a playbook to define the automation tasks that you want the platform to run. + +== Create a playbook + +A playbook contains one or more plays. \ No newline at end of file diff --git a/downstream/modules/platform/con-gs-dashboard-components.adoc b/downstream/modules/platform/con-gs-dashboard-components.adoc new file mode 100644 index 0000000000..9820f6d00c --- /dev/null +++ b/downstream/modules/platform/con-gs-dashboard-components.adoc @@ -0,0 +1,15 @@ +[id="con-gs-dashboard-components"] + += Dashboard components + +//ADD SCREENSHOT?? + +After you install {PlatformNameShort} on your system and log in for the first time, familiarize yourself with the platform dashboard. + +.Quick starts +You can learn about Ansible automation functions with guided tutorials called quick starts. In the dashboard, you can access quick starts by selecting a quick start card. +From the panel displayed, click btn:[Start] and complete the onscreen instructions. +You can also filter quick starts by keyword and status. + +//ADD CONTENT + diff --git a/downstream/modules/platform/con-gs-define-events-rulebooks.adoc b/downstream/modules/platform/con-gs-define-events-rulebooks.adoc new file mode 100644 index 0000000000..2515221e58 --- /dev/null +++ b/downstream/modules/platform/con-gs-define-events-rulebooks.adoc @@ -0,0 +1,14 @@ +[id="con-gs-define-events-rulebooks"] + += Define events with rulebooks + +An Ansible rulebook is a collection of rulesets that references one or more sources, rules, and conditions. + +Rulebooks are to Event-Driven Ansible what playbooks are to {PlatformNameShort} as a whole. +Like a playbook, a rulebook defines automation tasks for the platform, along with when they should be triggered. + +== Rulebook actions + +Rulebooks use an "if-this-then-that” logic that tells {EDAName} what actions to activate when a rule is triggered. + + diff --git a/downstream/modules/platform/con-gs-developer-tools.adoc b/downstream/modules/platform/con-gs-developer-tools.adoc new file mode 100644 index 0000000000..3bce28d82f --- /dev/null +++ b/downstream/modules/platform/con-gs-developer-tools.adoc @@ -0,0 +1,5 @@ +[id="con-gs-developer-tools"] + += Ansible developer tools + + diff --git a/downstream/modules/platform/con-gs-execution-env.adoc b/downstream/modules/platform/con-gs-execution-env.adoc new file mode 100644 index 0000000000..ad529efc67 --- /dev/null +++ b/downstream/modules/platform/con-gs-execution-env.adoc @@ -0,0 +1,9 @@ +[id="con-gs-execution-env_{context}"] + += Build and use an {ExecEnvShort} + +{ExecEnvNameStart} are consistent and shareable container images that serve as Ansible control nodes. +{ExecEnvNameStart} reduce the challenge of sharing Ansible content that has external dependencies. +If automation content is like a script that a developer has written, an automation {ExecEnvShort} is like a replica of that developer's environment, thereby enabling you to reproduce and scale the automation content that the developer has written. + +{ExecEnvNameStart}s make it easier for you to implement automation in a range of environments. diff --git a/downstream/modules/platform/con-gs-final-set-up.adoc b/downstream/modules/platform/con-gs-final-set-up.adoc new file mode 100644 index 0000000000..e91135557b --- /dev/null +++ b/downstream/modules/platform/con-gs-final-set-up.adoc @@ -0,0 +1,5 @@ +[id="con-gs-final-set-up"] + += Final setup and usage + + diff --git a/downstream/modules/platform/con-gs-learn-about-collections.adoc b/downstream/modules/platform/con-gs-learn-about-collections.adoc new file mode 100644 index 0000000000..411fa5b381 --- /dev/null +++ b/downstream/modules/platform/con-gs-learn-about-collections.adoc @@ -0,0 +1,32 @@ +[id="con-gs-learn-about-collections_{context}"] + += Learn about content collections + +Ansible content collections are assemblages of automation content. + +You can find Ansible Certified Collections in {HubName}. + +== Browse content + +If you are not using the bundle installer, you can use a Red Hat-supplied Ansible Playbook to install validated content. For further information, see Ansible validated content. + +You can update validated collections manually by downloading their updated packages in {HubName}. + +== Downloading content + +After collections are finalized, you can import them to a location where they can be distributed to others across your organization. + +.Procedure + +. Log in to {PlatformName}. +. From the navigation panel, select *Full Experience*. +The {HubName} UI is displayed. +. From the navigation panel, select {MenuACCollections}. +The *Collections* page displays all collections across all repositories. +You can search for a specific collection. +. Select the collection that you want to export. +The collection details page opens. +. From the *Install* tab, select *Download tarball*. +The .tar file is downloaded to your default browser downloads folder. +You can now import it to the location of your choosing. + diff --git a/downstream/modules/platform/con-gs-manage-RBAC.adoc b/downstream/modules/platform/con-gs-manage-RBAC.adoc new file mode 100644 index 0000000000..ccbedcaf72 --- /dev/null +++ b/downstream/modules/platform/con-gs-manage-RBAC.adoc @@ -0,0 +1,12 @@ +[id="con-gs-manage-RBAC"] + += Managing access with role-based access control + +Role-based access control (RBAC) restricts user access based on their role within an organization. +The roles in RBAC refer to the levels of access that users have to the network. + +You can control what users can do with the components of Ansible Automation Platform at a broad or granular level depending on your RBAC policy. +You can select whether the user is a system administrator or normal user and align roles and access permissions with their positions within the organization. + +You can define roles can with many permissions that can then be assigned to resources, teams, and users. The permissions that make up a role dictate what the assigned role allows. +Permissions are allocated with only the access needed for a user to perform the tasks appropriate for their role. diff --git a/downstream/modules/platform/con-gs-manage-collections.adoc b/downstream/modules/platform/con-gs-manage-collections.adoc new file mode 100644 index 0000000000..1957a1436c --- /dev/null +++ b/downstream/modules/platform/con-gs-manage-collections.adoc @@ -0,0 +1,12 @@ +[id="con-gs-manage-collections"] + += Manage collections in {HubName} + +As a platform operator, you can use namespaces in {HubName} to curate and manage collections for the following purposes: + +* Create groups with permissions to curate namespaces and upload collections to private {HubName}. +* Add information and resources to the namespace to help end users of the collection in their automation tasks. +* Upload collections to the namespace. +* Review the namespace import logs to decide the success or failure of uploading the collection and its current approval status. + +For more information about collections, see ADD 2.5 LINK[Managing collections in automation hub]. diff --git a/downstream/modules/platform/con-gs-playbooks.adoc b/downstream/modules/platform/con-gs-playbooks.adoc new file mode 100644 index 0000000000..fef3807406 --- /dev/null +++ b/downstream/modules/platform/con-gs-playbooks.adoc @@ -0,0 +1,11 @@ +[id="con-gs-playbooks"] + += Get started with playbooks + +A playbook runs tasks in order from top to bottom. Within each play, tasks also run in order from top to bottom. + +== Learn about playbooks + +Playbooks with multiple “plays” can orchestrate multi-machine deployments, running one play on your web servers, another play on your database servers, and a third play on your network infrastructure. + +For more information, see [ADD 2.5 LINK]Getting started with Ansible Playbooks. diff --git a/downstream/modules/platform/con-gs-rulebook-activations.adoc b/downstream/modules/platform/con-gs-rulebook-activations.adoc new file mode 100644 index 0000000000..d0aa36768d --- /dev/null +++ b/downstream/modules/platform/con-gs-rulebook-activations.adoc @@ -0,0 +1,5 @@ +[id="con-gs-rulebook-activations"] + += Create and run a rulebook activation + +In {EDAName}, a rulebook activation is a process running in the background defined by a decision environment executing a specific rulebook. diff --git a/downstream/modules/platform/proc-controller-create-inventory.adoc b/downstream/modules/platform/proc-controller-create-inventory.adoc index c7f2af0016..98eb4ce497 100644 --- a/downstream/modules/platform/proc-controller-create-inventory.adoc +++ b/downstream/modules/platform/proc-controller-create-inventory.adoc @@ -1,21 +1,76 @@ [id="controller-creating-inventory"] -= Creating a new Inventory += Browsing and creating inventories The Inventories window displays a list of the inventories that are currently available. You can sort the inventory list by name and searched type, organization, description, owners and modifiers of the inventory, or additional criteria. .Procedure -. To view existing inventories, select {MenuInfrastructureInventories} from the navigation panel. -** {ControllerNameStart} provides a demonstration inventory for you to use as you learn how the controller works. -You can use it as it is or edit it later. -You can create another inventory, if necessary. -. To add another inventory, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#proc-controller-adding-new-inventory[Add a new inventory] in _{ControllerUG}_ for more information. -. Click btn:[Demo Inventory] to view its details. +. From the navigational panel, select {MenuInfrastructureInventories}. +. Click btn:[Create inventory], and select the type of inventory to create. +. Enter the appropriate details into the following fields: -image::controller-inventories-demo-details.png[Demo inventory] +* *Name*: Enter a name appropriate for this inventory. +* Optional: *Description*: Enter an arbitrary description as appropriate. +* *Organization*: Required. Choose among the available organizations. +* Only applicable to Smart Inventories: *Smart Host Filter*: Populate the hosts for this inventory by using a search filter. ++ +_Example_ ++ +name__icontains=RedHat. ++ +These options are based on the organization you chose. ++ +Filters are similar to tags in that tags are used to filter certain hosts that contain those names. +Therefore, to populate the *Smart Host Filter* field, specify a tag that contains the hosts you want, not the hosts themselves. ++ +Filters are case-sensitive. +* *Instance Groups*: Select the instance group or groups for this inventory to run on. ++ +You can select many instance groups and sort them in the order that you want them run. ++ +//image:select-instance-groups-modal.png[image] -As with organizations, inventories also have associated users and teams that you can view through the *Access* tab. -For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-inventories[Inventories] in _{ControllerUG}_. +* Optional: *Labels*: Supply labels that describe this inventory, so they can be used to group and filter inventories and jobs. +* Only applicable to constructed inventories: *Input inventories*: Specify the source inventories to include in this constructed inventory. +//Click the image:search.png[Search,15,15] icon to select from available inventories. +Empty groups from input inventories are copied into the constructed inventory. +* Optional:(Only applicable to constructed inventories): *Cached timeout (seconds)*: Set the length of time you want the cache plugin data to timeout. +* Only applicable to constructed inventories: *Verbosity*: Control the level of output that Ansible produces as the playbook executes related to inventory sources associated with constructed inventories. ++ +Select the verbosity from: -A user with the role of *System Administrator* has been automatically populated for this. +* *Normal* +* *Verbose* +* *More verbose* +* *Debug* +* *Connection Debug* +* *WinRM Debug* + +** *Verbose* logging includes the output of all commands. +** *More verbose* provides more detail than *Verbose*. +** *Debug* logging is exceedingly verbose and includes information about SSH operations that can be useful in certain support instances. Most users do not need to see debug mode output. +//Not sure of this +** *Connection Debug* enables you to run ssh in verbose mode, providing debugging information about the SSH connection progress. +//Not sure of this. +** *WinRM Debug* used for verbosity specific to windows remote management ++ +Click the image:arrow.png[Expand,15,15] icon for information on *How to use the constructed inventory plugin*. +* Only applicable to constructed inventories: *Limit*: Restricts the number of returned hosts for the inventory source associated with the constructed inventory. +You can paste a group name into the limit field to only include hosts in that group. +For more information, see the *Source vars* setting. +* Only applicable to standard inventories: *Options*: Check the *Prevent Instance Group Fallback* option to enable only the instance groups listed in the *Instance Groups* field to execute the job. +If unchecked, all available instances in the execution pool are used based on the hierarchy. + +* *Variables* (*Source vars* for constructed inventories): + +** *Variables* Variable definitions and values to apply to all hosts in this inventory. +Enter variables by using either JSON or YAML syntax. +Use the radio button to toggle between the two. +** *Source vars* for constructed inventories creates groups, specifically under the `groups` key of the data. +It accepts Jinja2 template syntax, renders it for every host, makes a `true` or `false` evaluation, and includes the host in the group (from the key of the entry) if the result is `true`. +This is particularly useful because you can paste that group name into the limit field to only include hosts in that group. +//See Example 1 in xref:ref-controller-smart-host-filter[Smart host filters]. +. Click btn:[Create inventory]. + +After saving the new inventory, you can proceed with configuring permissions, groups, hosts, sources, and view completed jobs, if applicable to the type of inventory. diff --git a/downstream/modules/platform/proc-controller-creating-a-team.adoc b/downstream/modules/platform/proc-controller-creating-a-team.adoc index 5e90cd8883..c4e611ce98 100644 --- a/downstream/modules/platform/proc-controller-creating-a-team.adoc +++ b/downstream/modules/platform/proc-controller-creating-a-team.adoc @@ -4,12 +4,15 @@ = Creating a team -You can create new teams, assign an organization to the team, and manage the users and administrators associated with each team. Users associated with a team inherit the permissions associated with the team and any organization permissions to which the team has membership. +You can create new teams, assign an organization to the team, and manage the users and administrators associated with each team. +Users associated with a team inherit the permissions associated with the team and any organization permissions to which the team has membership. To add a user or administrator to a team, the user must have already been created. + .Procedure + . From the navigation panel, select {MenuAMTeams}. . Click btn:[Create team]. -. Enter a *Name* and optionally provide a *Description* for the team. +. Enter a *Name* and optionally give a *Description* for the team. . Select an organization from the *Organization* list to which you want to associate this team. + [NOTE] diff --git a/downstream/modules/platform/proc-controller-getting-started-with-job-templates.adoc b/downstream/modules/platform/proc-controller-getting-started-with-job-templates.adoc index c317777688..fce2ade197 100644 --- a/downstream/modules/platform/proc-controller-getting-started-with-job-templates.adoc +++ b/downstream/modules/platform/proc-controller-getting-started-with-job-templates.adoc @@ -9,4 +9,4 @@ As part of the initial setup, a *Demo Job Template* is created for you. . To review existing templates, select {MenuAETemplates} from the navigation panel. . Click btn:[Demo Job Template] to view its details. -image::controller-job-template-demo-details.png[Job templates] +//image::controller-job-template-demo-details.png[Job templates] diff --git a/downstream/modules/platform/proc-gs-add-ee-to-job-template.adoc b/downstream/modules/platform/proc-gs-add-ee-to-job-template.adoc new file mode 100644 index 0000000000..517923bb73 --- /dev/null +++ b/downstream/modules/platform/proc-gs-add-ee-to-job-template.adoc @@ -0,0 +1,22 @@ +[id="proc-gs-add-ee-to-job-template_{context}"] + += Adding an {ExecEnvShort} to a job template + +.Prerequisites + +* An {ExecEnvShort} must have been created using ansible-builder as described in [ADD 2.5 LINK]:Build an execution environment. +When an {ExecEnvShort} has been created, you can use it to run jobs. +Use the {ControllerName} UI to specify the execution environment to use in your job templates. +* Depending on whether an {ExecEnvShort} is made available for global use or tied to an organization, you must have the appropriate level of administrator privileges to use an {ExecEnvShort} in a job. +Execution environments tied to an organization require Organization administrators to be able to run jobs with those {ExecEnvShort}. +* Before running a job or job template that uses an {ExecEnvShort} that has a credential assigned to it, ensure that the credential has a username, host, and password. + +.Procedure + +(ADD CONTENT) + +== About container registries + +If you have many {ExecEnvShort} that you want to maintain, you can store them in a container registry linked to your {PrivateHubName}. + +For more information, see [ADD 2.5 LINK]:Populating your private automation hub container registry from the Creating and consuming execution environments guide. diff --git a/downstream/modules/platform/proc-gs-auto-dev-create-automation-decision-proj.adoc b/downstream/modules/platform/proc-gs-auto-dev-create-automation-decision-proj.adoc new file mode 100644 index 0000000000..54c6820ae3 --- /dev/null +++ b/downstream/modules/platform/proc-gs-auto-dev-create-automation-decision-proj.adoc @@ -0,0 +1,36 @@ +[id="proc-gs-auto-dev-create-automation-decision-proj"] + += Creating an automation decision project + +Like automation execution projects, automation decision projects are logical collections of automation decision content. +You can use the project function to organize your automation decision content in a way that makes sense to you. + +.Prerequisites +// [ddacosta] I'm not sure whether there will be an EDA specific dashboard in the gateway. Step 1 might need to change to something like "Log in to AAP". +* You are logged in to the {EDAcontroller} Dashboard as a Content Consumer. +* You have set up a credential, if necessary. +For more information, see the [ADD 2.5 LINK][Setting up credentials] section. +* You have an existing repository containing rulebooks that are integrated with playbooks contained in a repository to be used by {ControllerName}. + +.Procedure +// [ddacosta] I'm not sure whether there will be an EDA specific dashboard in the gateway. Step 1 might need to change to something like "Log in to AAP". +. Log in to the {EDAcontroller} Dashboard. +. From the navigation panel, select *{MenuADProjects}*. +. Insert the following: ++ +Name:: Enter project name. +Description:: This field is optional. +SCM type:: Git is the only SCM type available for use. +SCM URL:: HTTP[S] protocol address of a repository, such as GitHub or GitLab. ++ +[NOTE] +==== +You cannot edit the SCM URL after you create the project. +==== +Credential:: This field is optional. This is the token needed to use the SCM URL. +. Select btn:[Create project]. + +Your project is now created and can be managed in the *Projects* screen. + +After saving the new project, the project's details page is displayed. +From there or the *Projects* list view, you can edit or delete it. diff --git a/downstream/modules/platform/proc-gs-auto-dev-create-automation-execution-proj.adoc b/downstream/modules/platform/proc-gs-auto-dev-create-automation-execution-proj.adoc new file mode 100644 index 0000000000..52bd664f58 --- /dev/null +++ b/downstream/modules/platform/proc-gs-auto-dev-create-automation-execution-proj.adoc @@ -0,0 +1,33 @@ +[id="proc-gs-auto-dev-create-automation-execution-proj"] + += Creating an automation execution project + +A project is a logical collection of playbooks. +Projects are useful as a way to group your automation content according to the organizing principle of your choice. + +You can set up an automation execution project in the platform UI. + +.Procedure + +Procedure +. From the navigation panel, select {MenuAEProjects}. +. On the *Projects* page, click btn:[Create project] to launch the *Create Project* window. ++ +//image:projects-create-new-project.png[Projects- create new project] + +. Enter the appropriate details into the following required fields: + +* *Name* (required) +* Optional: *Description* +* *Organization* (required): A project must have at least one organization. Select one organization now to create the project. When the project is created you can add additional organizations. +* Optional: *Execution Environment*: Enter the name of the {ExecEnvShort} or search from a list of existing ones to run this project. +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_upgrade_and_migration_guide/upgrading-to-ees[Migrating to automation execution environments] in the _Red Hat Ansible Automation Platform Upgrade and Migration Guide_. +* *Source Control Type* (required): Select an SCM type associated with this project from the menu. +Options in the following sections become available depending on the type chosen. +For more information, see [ADD 2.5 LINK][Managing playbooks manually] or [ADD 2.5 LINK]][Managing playbooks using source control]. +* Optional: *Content Signature Validation Credential*: Use this field to enable content verification. +Specify the GPG key to use for validating content signature during project synchronization. +If the content has been tampered with, the job will not run. +For more information, see [ADD 2.5 LINK][Project signing and verification]. +. Click btn:[Create project]. + diff --git a/downstream/modules/platform/proc-gs-auto-dev-create-template.adoc b/downstream/modules/platform/proc-gs-auto-dev-create-template.adoc new file mode 100644 index 0000000000..da3069fa58 --- /dev/null +++ b/downstream/modules/platform/proc-gs-auto-dev-create-template.adoc @@ -0,0 +1,177 @@ +[id="proc-gs-auto-dev-create-template"] + += Creating a job template + +.Procedure + +. From the navigation panel, select {MenuAETemplates}. +. On the *Templates* page, select *Create job template* from the *Create template* list. +. Enter the appropriate details in the following fields: ++ +[NOTE] +==== +If a field has the *Prompt on launch* checkbox selected, launching the job prompts you for the value for that field when launching. + +Most prompted values override any values set in the job template. + +Exceptions are noted in the following table. +==== ++ +[cols="33%,33%,33%",options="header"] +|=== +| *Field* | *Options* | *Prompt on Launch* +| Name | Enter a name for the job.| N/A +| Description| Enter an arbitrary description as appropriate (optional). | N/A +| Job Type a| Choose a job type: + +- Run: Start the playbook when launched, running Ansible tasks on the selected hosts. + +- Check: Perform a "dry run" of the playbook and report changes that would be made without actually making them. +Tasks that do not support check mode are missed and do not report potential changes. + +For more information about job types see the link:https://docs.ansible.com/ansible/latest/playbook_guide/index.html[Playbooks] section of the Ansible documentation.| Yes +| Inventory | Choose the inventory to use with this job template from the inventories available to the logged in user. + +A System Administrator must grant you or your team permissions to be able to use certain inventories in a job template. | Yes. + +Inventory prompts show up as its own step in a later prompt window. +| Project | Select the project to use with this job template from the projects available to the user that is logged in. | N/A +| Source control branch | This field is only present if you chose a project that allows branch override. +Specify the overriding branch to use in your job run. +If left blank, the specified SCM branch (or commit hash or tag) from the project is used. + +For more information, see [ADD 2.5 LINK][Job branch overriding]. | Yes +| Execution Environment | Select the container image to be used to run this job. +You must select a project before you can select an {ExecEnvShort}. | Yes. + +Execution environment prompts show up as its own step in a later prompt window. +| Playbook | Choose the playbook to be launched with this job template from the available playbooks. +This field automatically populates with the names of the playbooks found in the project base path for the selected project. +Alternatively, you can enter the name of the playbook if it is not listed, such as the name of a file (such as foo.yml) you want to use to run with that playbook. +If you enter a filename that is not valid, the template displays an error, or causes the job to fail. | N/A +| Credentials | Select the image:examine.png[examine,15,15] icon to open a separate window. + +Choose the credential from the available options to use with this job template. + +Use the drop-down menu list to filter by credential type if the list is extensive. +Some credential types are not listed because they do not apply to certain job templates. a| +- If selected, when launching a job template that has a default credential and supplying another credential replaces the default credential if it is the same type. +The following is an example this message: + +`Job Template default credentials must be replaced +with one of the same type. Please select a credential +for the following types in order to proceed: Machine.` + +- You can add more credentials as you see fit. + +- Credential prompts show up as its own step in a later prompt window. +| Labels a| - Optionally supply labels that describe this job template, such as `dev` or `test`. + +- Use labels to group and filter job templates and completed jobs in the display. + +- Labels are created when they are added to the job template. +Labels are associated with a single Organization by using the Project that is provided in the job template. +Members of the Organization can create labels on a job template if they have edit permissions (such as the admin role). + +- Once you save the job template, the labels appear in the *Job Templates* overview in the Expanded view. + +- Select image:disassociate.png[Disassociate,10,10] beside a label to remove it. +When a label is removed, it is no longer associated with that particular Job or Job Template, but it remains associated with any other jobs that reference it. + +- Jobs inherit labels from the Job Template at the time of launch. +If you delete a label from a Job Template, it is also deleted from the Job. a| - If selected, even if a default value is supplied, you are prompted when launching to supply additional labels, if needed. +- You cannot delete existing labels, selecting image:disassociate.png[Disassociate,10,10] only removes the newly added labels, not existing default labels. +| Forks | The number of parallel or simultaneous processes to use while executing the playbook. +A value of zero uses the Ansible default setting, which is five parallel processes unless overridden in `/etc/ansible/ansible.cfg`. | Yes +| Limit a| A host pattern to further constrain the list of hosts managed or affected by the playbook. You can separate many patterns by colons (:). +As with core Ansible: + +* a:b means "in group a or b" +* a:b:&c means "in a or b but must be in c" +* a:!b means "in a, and definitely not in b" + +For more information, see link:https://docs.ansible.com/ansible/latest/inventory_guide/intro_patterns.html[Patterns: targeting hosts and groups] in the Ansible documentation. | Yes + +If not selected, the job template executes against all nodes in the inventory or only the nodes predefined on the *Limit* field. +When running as part of a workflow, the workflow job template limit is used instead. +| Verbosity | Control the level of output Ansible produces as the playbook executes. +Choose the verbosity from Normal to various Verbose or Debug settings. +This only appears in the *details* report view. +Verbose logging includes the output of all commands. +Debug logging is exceedingly verbose and includes information about SSH operations that can be useful in certain support instances. + +Verbosity `5` causes {ControllerName} to block heavily when jobs are running, which could delay reporting that the job has finished (even though it has) and can cause the browser tab to lock up.| Yes +| Job Slicing | Specify the number of slices you want this job template to run. +Each slice runs the same tasks against a part of the inventory. +For more information about job slices, see [ADD 2.5 LINK][Job Slicing]. | Yes +| Timeout a| This enables you to specify the length of time (in seconds) that the job can run before it is canceled. Consider the following for setting the timeout value: + +- There is a global timeout defined in the settings which defaults to 0, indicating no timeout. +- A negative timeout (<0) on a job template is a true "no timeout" on the job. +- A timeout of 0 on a job template defaults the job to the global timeout (which is no timeout by default). +- A positive timeout sets the timeout for that job template. | Yes +| Show Changes | Enables you to see the changes made by Ansible tasks. | Yes +| Instance Groups | Choose link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/controller-instance-and-container-groups[Instance and Container Groups] to associate with this job template. +If the list is extensive, use the image:examine.png[examine,15,15] icon to narrow the options. +Job template instance groups contribute to the job scheduling criteria, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/controller-instance-and-container-groups#controller-job-runtime-behavior[Job Runtime Behavior] and link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_controller_administration_guide/controller-instance-and-container-groups#controller-control-job-run[Control where a job runs] for rules. +A System Administrator must grant you or your team permissions to be able to use an instance group in a job template. +Use of a container group requires admin rights. a| - Yes. + +If selected, you are providing the jobs preferred instance groups in order of preference. If the first group is out of capacity, later groups in the list are considered until one with capacity is available, at which point that is selected to run the job. + +- If you prompt for an instance group, what you enter replaces the normal instance group hierarchy and overrides all of the organizations' and inventories' instance groups. + +- The Instance Groups prompt shows up as its own step in a later prompt window. +| Job Tags | Type and select the *Create* menu to specify which parts of the playbook should be executed. +For more information and examples see link:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_tags.html[Tags] in the Ansible documentation. | Yes +| Skip Tags | Type and select the *Create* menu to specify certain tasks or parts of the playbook to skip. +For more information and examples see link:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_tags.html[Tags] in the Ansible documentation. | Yes +| Extra Variables a| - Pass extra command line variables to the playbook. +This is the "-e" or "-extra-vars" command line parameter for ansible-playbook that is documented in the Ansible documentation at link:https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#defining-variables-at-runtime[Defining variables at runtime]. +- Provide key or value pairs by using either YAML or JSON. +These variables have a maximum value of precedence and overrides other variables specified elsewhere. +The following is an example value: +`git_branch: production +release_version: 1.5` | Yes. + +If you want to be able to specify `extra_vars` on a schedule, you must select *Prompt on launch* for Variables on the job template, or enable a survey on the job template. Those answered survey questions become `extra_vars`. +|=== ++ +. You can set the following options for launching this template, if necessary: +* *Privilege escalation*: If checked, you enable this playbook to run as an administrator. +This is the equal of passing the `--become` option to the `ansible-playbook` command. +* *Provisioning callback*: If checked, you enable a host to call back to {ControllerName} through the REST API and start a job from this job template. +For more information, see [ADD 2.5 LINK][Provisioning Callbacks]. +* *Enable webhook*: If checked, you turn on the ability to interface with a predefined SCM system web service that is used to launch a job template. +GitHub and GitLab are the supported SCM systems. +** If you enable webhooks, other fields display, prompting for additional information: ++ +//image::ug-job-templates-options-webhooks.png[Job templates webhooks] ++ +** *Webhook service*: Select which service to listen for webhooks from. +** *Webhook URL*: Automatically populated with the URL for the webhook service to POST requests to. +** *Webhook key*: Generated shared secret to be used by the webhook service to sign payloads sent to {ControllerName}. +You must configure this in the settings on the webhook service in order for {ControllerName} to accept webhooks from this service. +** *Webhook credential*: Optionally, give a GitHub or GitLab personal access token (PAT) as a credential to use to send status updates back to the webhook service. ++ +Before you can select it, the credential must exist. ++ +See [ADD 2.5 LINK][Credential Types] to create one. +** For additional information about setting up webhooks, see [ADD 2.5 LINK][Working with Webhooks]. +* *Concurrent jobs*: If checked, you are allowing jobs in the queue to run simultaneously if not dependent on one another. Check this box if you want to run job slices simultaneously. For more information, see [ADD 2.5 LINK][{ControllerNameStart} capacity determination and job impact]. +* *Enable fact storage*: If checked, {ControllerName} stores gathered facts for all hosts in an inventory related to the job running. +* *Prevent instance group fallback*: Check this option to allow only the instance groups listed in the *Instance Groups* field to run the job. +If clear, all available instances in the execution pool are used based on the hierarchy described in link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_administration_guide/index[Control where a job runs]. +. Click btn:[Create job template], when you have completed configuring the details of the job template. + +Creating the template does not exit the job template page but advances to the Job Template *Details* tab. +After saving the template, you can click btn:[Launch template] to start the job. +You can also click btn:[Edit] to add or change the attributes of the template, such as permissions, notifications, view completed jobs, and add a survey (if the job type is not a scan). +You must first save the template before launching, otherwise, btn:[Launch template] remains disabled. + +//image::ug-job-template-details.png[Job template details] + +.Verification + +. From the navigation panel, select {MenuAETemplates}. +. Verify that the newly created template appears on the *Templates* page. diff --git a/downstream/modules/platform/proc-gs-auto-dev-run-template.adoc b/downstream/modules/platform/proc-gs-auto-dev-run-template.adoc new file mode 100644 index 0000000000..a249c15553 --- /dev/null +++ b/downstream/modules/platform/proc-gs-auto-dev-run-template.adoc @@ -0,0 +1,9 @@ +[id="proc-gs-auto-dev-run-template"] + += Running a job template + +One benefit of {ControllerName} is the push-button deployment of Ansible playbooks. +You can configure a template to store all the parameters that you would normally pass to the Ansible playbook on the command line. +In addition to the playbooks, the template passes the inventory, credentials, extra variables, and all options and settings that you can specify on the command line. + +//ADD CONTENT \ No newline at end of file diff --git a/downstream/modules/platform/proc-gs-auto-dev-set-up-decision-env.adoc b/downstream/modules/platform/proc-gs-auto-dev-set-up-decision-env.adoc new file mode 100644 index 0000000000..3617369627 --- /dev/null +++ b/downstream/modules/platform/proc-gs-auto-dev-set-up-decision-env.adoc @@ -0,0 +1,31 @@ +[id="proc-gs-auto-dev-set-up-decision-env"] + += Setting up a new decision environment +// [ddacosta] I don't think there will be an EDA specific dashboard in the gateway. This might need to be changed to reflect the changes for 2.5. +The following steps describe how to import a decision environment into your {EDAcontroller} Dashboard. + +.Prerequisites + +* You are logged in to the {EDAcontroller} Dashboard as a Content Consumer. +* You have set up a credential, if necessary. +For more information, see the [ADD 2.5 LINK][Setting up credentials] section. +* You have pushed a decision environment image to an image repository or you chose to use the image `de-supported` provided at link:http://registry.redhat.io/[registry.redhat.io]. + +.Procedure + +. Log in to the {PlatformNameShort} Dashboard. +. Navigate to {MenuADDecisionEnvironments}. +. Click btn:[Create decision environment]. +. Insert the following: ++ +Name:: Insert the name. +Description:: This field is optional. +Image:: This is the full image location, including the container registry, image name, and version tag. +Credential:: This field is optional. This is the token needed to use the decision environment image. ++ +. Select btn:[Create decision environment]. + +Your decision environment is now created and can be managed on the *Decision Environments* page. + +After saving the new decision environment, the decision environment's details page is displayed. +From there or the *Decision Environments* list view, you can edit or delete it. diff --git a/downstream/modules/platform/proc-gs-auto-op-launch-template.adoc b/downstream/modules/platform/proc-gs-auto-op-launch-template.adoc new file mode 100644 index 0000000000..8b940dddf5 --- /dev/null +++ b/downstream/modules/platform/proc-gs-auto-op-launch-template.adoc @@ -0,0 +1,14 @@ +[id="proc-gs-auto-op-launch-template"] + += Launching a job template + +{PlatformNameShort} offers push-button deployment of Ansible playbooks. +You can configure a template to store all the parameters that you would normally pass to the Ansible playbook on the command line. +In addition to the playbooks, the template passes the inventory, credentials, extra variables, and all options and settings that you can specify on the command line. + +.Procedure + +From the navigation panel, select {MenuAETemplates}. + +//ADD CONTENT + diff --git a/downstream/modules/platform/proc-gs-auto-op-projects.adoc b/downstream/modules/platform/proc-gs-auto-op-projects.adoc new file mode 100644 index 0000000000..b22ecde720 --- /dev/null +++ b/downstream/modules/platform/proc-gs-auto-op-projects.adoc @@ -0,0 +1,12 @@ +[id="proc-gs-auto-op-projects"] + += Automation execution projects + +A project is a logical collection of Ansible playbooks, represented in {ControllerName}. + +Platform administrators and automation developers have the permissions to create projects. +As an automation operator you can view and sync projects. + +== Executing a project + +//ADD CONTENT diff --git a/downstream/modules/platform/proc-gs-auto-op-review-job-output.adoc b/downstream/modules/platform/proc-gs-auto-op-review-job-output.adoc new file mode 100644 index 0000000000..2071f44a08 --- /dev/null +++ b/downstream/modules/platform/proc-gs-auto-op-review-job-output.adoc @@ -0,0 +1,11 @@ +[id="proc-gs-auto-op-review-job-output"] + += Reviewing a job output + +When you relaunch a job, the jobs *Output* view is displayed. + +.Procedure + +. From the navigation panel, select {MenuAEJobs}. + +//ADD CONTENT \ No newline at end of file diff --git a/downstream/modules/platform/proc-gs-auto-op-review-job-status.adoc b/downstream/modules/platform/proc-gs-auto-op-review-job-status.adoc new file mode 100644 index 0000000000..7c46555a77 --- /dev/null +++ b/downstream/modules/platform/proc-gs-auto-op-review-job-status.adoc @@ -0,0 +1,11 @@ +[id="proc-gs-auto-op-review-job-status"] + += Reviewing a job status + +The *Jobs* list view displays a list of jobs and their statuses, shown as completed successfully, failed, or as an active (running) job. + +.Procedure + +. From the navigation panel, select {MenuAEJobs}. + +/ADD CONTENT \ No newline at end of file diff --git a/downstream/modules/platform/proc-gs-logging-in.adoc b/downstream/modules/platform/proc-gs-logging-in.adoc new file mode 100644 index 0000000000..12d2cc79e5 --- /dev/null +++ b/downstream/modules/platform/proc-gs-logging-in.adoc @@ -0,0 +1,31 @@ +[id="proc-aap-gs-logging-in"] + += Logging in for the first time + +Log in to the {PlatformNameShort} as an administrator and enter your subscription information. +You can then create user profiles and assign roles. + +.Procedure + +. With the login information provided after your installation completed, open a web browser and log in to Ansible Automation Platform by navigating to its server URL at: https:/// +. Use the credentials specified during the installation process to login: +** The default username is *admin*. +** The password for *admin* is the value specified during installation. + +After your first login, you are prompted to add your subscription manifest. +Complete the following procedure to do this. + +.Procedure + +. You can select between uploading a copy of your subscription manifest or entering your login credentials to find the subscription associated with your profile: +.. To upload a subscription manifest, drag the file to the field beneath *Red Hat subscription manifest* or browse for the file on your local machine. +.. To find your subscription, click the tab labeled *Username / password* and enter your credentials. Your subscription will appear in the list menu labeled Subscription. Select your subscription. +. After you have added your subscription, click *Next*. +. On the screen labeled *Analytics*, check the box if you want to share data with Red Hat and click *Next*. +. Check the box indicating that you agree to the *End User License Agreement*. +. Review your information and click *Finish*. + +[NOTE] +==== +After logging in, review the quick starts section for useful guidance. +==== diff --git a/downstream/modules/platform/proc-gs-platform-admin-create-user.adoc b/downstream/modules/platform/proc-gs-platform-admin-create-user.adoc new file mode 100644 index 0000000000..c6d1adfed6 --- /dev/null +++ b/downstream/modules/platform/proc-gs-platform-admin-create-user.adoc @@ -0,0 +1,31 @@ +[id="proc-gs-platform-admin-create-user"] + += Creating a user + +You can assign two types of users: + +Normal user:: Normal users have read and write access limited to the resources (such as inventory, projects, and job templates) for which that user has been granted the appropriate roles and privileges. +System administrator:: A System administrator (also known as a Superuser) has full system administration privileges — with full read and write privileges over the entire installation. A System administrator is typically responsible for managing all aspects of and delegating responsibilities for day-to-day work to various users. +Select the Organization to be assigned for this user. For information about creating a new organization or team, see [ADD 2.5 LINK][Creating an organization]. + +.Procedure + +. From the navigation panel, select {MenuAMUsers}. +. Click btn:[Create user]. +. Enter the details about your new user in the fields on the Create user page. Fields marked with an asterisk (*) are required. ++ +[NOTE] +==== +If you are modifying your own password, log out and log back in again for it to take effect. +==== +. Click btn:[Create user]. ++ +When the user is successfully created, the User dialog opens. +From here, you can review and change the user's Teams, Roles, Tokens and other membership details. ++ +[NOTE] +==== +If the user is not newly-created, the details screen displays the last login activity of that user. +==== +If you log in as yourself, and view the details of your user profile, you can manage tokens from your user profile by selecting the *Tokens* tab. +For more information, see [ADD 2.5 LINK][Adding a token]. diff --git a/downstream/modules/platform/proc-gs-publish-to-a-collection.adoc b/downstream/modules/platform/proc-gs-publish-to-a-collection.adoc new file mode 100644 index 0000000000..d083f6a7ef --- /dev/null +++ b/downstream/modules/platform/proc-gs-publish-to-a-collection.adoc @@ -0,0 +1,8 @@ +[id="proc-gs-publish-to-a-collection_{context}"] + += Publishing to a collection + +You can configure your projects to be uploaded to the source control manager of your choice. + +.Procedure + diff --git a/downstream/modules/platform/proc-gs-upload-collection.adoc b/downstream/modules/platform/proc-gs-upload-collection.adoc new file mode 100644 index 0000000000..96fa46b70a --- /dev/null +++ b/downstream/modules/platform/proc-gs-upload-collection.adoc @@ -0,0 +1,5 @@ +[id="proc-gs-upload-collection_{context}"] + += Uploading a collection to {HubName} + +If you want to share a collection that you have created with the rest of the Ansible community, you can upload it to {HubName}. diff --git a/downstream/modules/platform/proc-gs-use-base-execution-env.adoc b/downstream/modules/platform/proc-gs-use-base-execution-env.adoc new file mode 100644 index 0000000000..757c167265 --- /dev/null +++ b/downstream/modules/platform/proc-gs-use-base-execution-env.adoc @@ -0,0 +1,33 @@ +[id="proc-gs-use-base-execution-env_{context}"] + += Using the base automation {ExecEnvShort} + +Your subscription with Ansible Automation Platform gives you access to some base automation execution environments. You can use a base automation execution environment as a starting point for creating a customized automation execution environment. + +(ADD CONTENT) + + + +== Customize the base execution environment image + +{PlatformNameShort} includes the following default execution environments: + +* `Minimal` - Includes the latest Ansible-core 2.15 release along with Ansible Runner, but does not include collections or other content +* `EE Supported` - Minimal, plus all Red Hat-supported collections and dependencies + +While these environments cover many automation use cases, you can add additional items to customize these containers for your specific needs. For more information about customizing your execution environment, see Customizing an existing automation {ExecEnvShort} image in the Creating and consuming execution environments guide. + +== About Ansible Builder + +You also have the option of creating an entirely new {ExecEnvShort} with Ansible Builder. +Ansible Builder is a command line tool you can use to create an e{ExecEnvShort} for Ansible. +You must create {ExecEnvShort} with Ansible Builder. + +To build your own execution environment, you must: + +* Download Ansible Builder +* Create a definition file that defines your {ExecEnvShort} +* Create an execution environment image based on the definition file + +For more information about building an {ExecEnvShort}, see [ADD 2.5 LINK]: Creating and consuming execution environments. + \ No newline at end of file diff --git a/downstream/modules/platform/proc-gs-write-playbook.adoc b/downstream/modules/platform/proc-gs-write-playbook.adoc new file mode 100644 index 0000000000..997f34f83c --- /dev/null +++ b/downstream/modules/platform/proc-gs-write-playbook.adoc @@ -0,0 +1,8 @@ +[id="proc-gs-write-playbook"] + += Writing a playbook + +Create a playbook that pings your hosts and prints a “Hello world” message: + +//ADD PROCEDURE + diff --git a/downstream/modules/platform/ref-gs-install-config.adoc b/downstream/modules/platform/ref-gs-install-config.adoc new file mode 100644 index 0000000000..136922c463 --- /dev/null +++ b/downstream/modules/platform/ref-gs-install-config.adoc @@ -0,0 +1,4 @@ +[id="ref-gs-install-config"] + += {PlatformNameShort} installation and configuration + diff --git a/downstream/titles/getting-started/eda b/downstream/titles/getting-started/eda new file mode 120000 index 0000000000..4f3e9af334 --- /dev/null +++ b/downstream/titles/getting-started/eda @@ -0,0 +1 @@ +../../assemblies/eda \ No newline at end of file diff --git a/downstream/titles/getting-started/master.adoc b/downstream/titles/getting-started/master.adoc index 8d41cc8a0c..233d5ba920 100644 --- a/downstream/titles/getting-started/master.adoc +++ b/downstream/titles/getting-started/master.adoc @@ -10,8 +10,17 @@ include::attributes/attributes.adoc[] // Book Title -= Getting started with Ansible Automation Platform += Getting started with {PlatformName} -Getting started with Ansible Automation Platform +{PlatformName} is a unified automation solution that automates a variety of IT processes, including provisioning, configuration management, application deployment, orchestration, and security and compliance changes (including patching systems). + +{PlatformNameShort} features a platform interface where you can set up centralized authentication, configure access management, and execute automation tasks from a single location. + +This guide will help you get started with {PlatformNameShort} by introducing three central concepts: automation execution, automation decisions, and automation content. include::{Boilerplate}[] + +include::platform/assembly-gs-key-functionality.adoc[leveloffset=+1] +include::platform/assembly-gs-platform-admin.adoc[leveloffset=+1] +include::platform/assembly-gs-auto-dev.adoc[leveloffset=+1] +include::platform/assembly-gs-auto-op.adoc[leveloffset=+1] \ No newline at end of file From 520dad1453bb3cdbc191c455c1edcc15ac07d0da Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Fri, 9 Aug 2024 14:27:41 +0100 Subject: [PATCH 079/590] Modified instructions for VM-based mesh (#1696) (#1713) * Modified instructions for VM-based mesh Included modules from installation doc hackfest doc updates for mesh - install https://issues.redhat.com/browse/AAP-26993 * Modified instructions for VM-based mesh Correction hackfest doc updates for mesh - install https://issues.redhat.com/browse/AAP-26993 * Modified instructions for VM-based mesh Corrections hackfest doc updates for mesh - install https://issues.redhat.com/browse/AAP-26993 --- .../platform/assembly-setting-up-automation-mesh.adoc | 2 ++ downstream/modules/platform/con-install-mesh.adoc | 4 ++-- .../modules/platform/proc-editing-inventory-file.adoc | 9 ++++++++- .../modules/platform/proc-running-setup-script.adoc | 4 ++++ downstream/titles/aap-installation-guide/master.adoc | 1 + 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/downstream/assemblies/platform/assembly-setting-up-automation-mesh.adoc b/downstream/assemblies/platform/assembly-setting-up-automation-mesh.adoc index f73e98cff7..70f48acc55 100644 --- a/downstream/assemblies/platform/assembly-setting-up-automation-mesh.adoc +++ b/downstream/assemblies/platform/assembly-setting-up-automation-mesh.adoc @@ -13,6 +13,8 @@ ifdef::context[:parent-context: {context}] Configure the {PlatformNameShort} installer to set up {AutomationMesh} for your Ansible environment. Perform additional tasks to customize your installation, such as importing a Certificate Authority (CA) certificate. include::platform/con-install-mesh.adoc[leveloffset=+1] +include::platform/proc-editing-inventory-file.adoc[leveloffset=+1] +include::platform/proc-running-setup-script.adoc[leveloffset=+1] include::platform/proc-import-mesh-ca.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/con-install-mesh.adoc b/downstream/modules/platform/con-install-mesh.adoc index e8b17a463d..7eb6c4e75b 100644 --- a/downstream/modules/platform/con-install-mesh.adoc +++ b/downstream/modules/platform/con-install-mesh.adoc @@ -2,8 +2,8 @@ = {AutomationMesh} Installation -You use the {PlatformNameShort} installation program to set up {AutomationMesh} or to upgrade to {AutomationMesh}. -To provide {PlatformNameShort} with details about the nodes, groups, and peer relationships in your mesh network, you define them in an the `inventory` file in the installer bundle. +For a VM-based install of {PlatformNameShort} you use the installation program to set up {AutomationMesh} or to upgrade to {AutomationMesh}. +To provide {PlatformNameShort} with details about the nodes, groups, and peer relationships in your mesh network, you define them in an the `inventory` file in the installer bundle. For managed cloud, OpenShift, or operator environments, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_mesh_for_managed_cloud_or_operator_environments/index[{AutomationMeshStart} for managed cloud or operator environments]. [role="_additional-resources"] .Additional Resources diff --git a/downstream/modules/platform/proc-editing-inventory-file.adoc b/downstream/modules/platform/proc-editing-inventory-file.adoc index 4c59f9d082..0a1d45df13 100644 --- a/downstream/modules/platform/proc-editing-inventory-file.adoc +++ b/downstream/modules/platform/proc-editing-inventory-file.adoc @@ -29,8 +29,15 @@ $ cd ansible-automation-platform-setup- ----- + . Open the `inventory` file with a text editor. -. Edit `inventory` file parameters to specify your installation scenario. You can use one of the supported xref:con-install-scenario-examples[Installation scenario examples] as the basis for your `inventory` file. +. Edit `inventory` file parameters to specify your installation scenario. +ifdef::mesh-VM[] +For further information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/installing_on_virtual_machines/assembly-platform-install-scenario[Installing {PlatformName}] +endif::mesh-VM[] +ifdef::aap-install[] +You can use one of the supported xref:con-install-scenario-examples[Installation scenario examples] as the basis for your `inventory` file. [role="_additional-resources"] .Additional resources * For a comprehensive list of pre-defined variables used in Ansible installation inventory files, see xref:appendix-inventory-files-vars[Inventory file variables]. +endif::aap-install[] + diff --git a/downstream/modules/platform/proc-running-setup-script.adoc b/downstream/modules/platform/proc-running-setup-script.adoc index 22f813c9cf..a3e2e397ed 100644 --- a/downstream/modules/platform/proc-running-setup-script.adoc +++ b/downstream/modules/platform/proc-running-setup-script.adoc @@ -14,3 +14,7 @@ $ sudo ./setup.sh ----- Installation of {PlatformName} will begin. + +ifdef::mesh-VM[] +If you want to add additional nodes to your {AutomationMesh} after the initial setup, edit the inventory file to add the new node, then rerun the `setup.sh` script. +endif::mesh-VM[] \ No newline at end of file diff --git a/downstream/titles/aap-installation-guide/master.adoc b/downstream/titles/aap-installation-guide/master.adoc index b49dc6e6ab..d14949c817 100644 --- a/downstream/titles/aap-installation-guide/master.adoc +++ b/downstream/titles/aap-installation-guide/master.adoc @@ -3,6 +3,7 @@ :toclevels: 1 :experimental: +:aap-install: include::attributes/attributes.adoc[] From 15665deafdf23dc75e7bf95ee8b8cbc415aefc82 Mon Sep 17 00:00:00 2001 From: Jameria Self <73364088+jself-sudoku@users.noreply.github.com> Date: Fri, 9 Aug 2024 12:10:24 -0400 Subject: [PATCH 080/590] AAP-22930 Update the Projects chapter in the EDA controller user guide (#1648) (#1715) * AAP-22930 Updates to the Projects chapter in the EDA controller user guide * AAP-22930 Updates to the Projects chapter in the EDA controller user guide * AAP-22930 Removed the image b/c it needs to be replaced with current 2.5 version * AAP-22930 Grammatical correction * AAP-22930 Final tweaks for performance tuning chapter --- .../eda/con-eda-projects-list-view.adoc | 2 +- .../modules/eda/proc-eda-delete-project.adoc | 8 +++-- .../eda/proc-eda-editing-a-project.adoc | 7 ++--- .../eda/proc-eda-set-up-new-project.adoc | 30 ++++++++++++++----- .../eda/ref-performance-troubleshooting.adoc | 4 +-- 5 files changed, 34 insertions(+), 17 deletions(-) diff --git a/downstream/modules/eda/con-eda-projects-list-view.adoc b/downstream/modules/eda/con-eda-projects-list-view.adoc index 64887ae029..bb6c6ac36b 100644 --- a/downstream/modules/eda/con-eda-projects-list-view.adoc +++ b/downstream/modules/eda/con-eda-projects-list-view.adoc @@ -6,7 +6,7 @@ On the *Projects* page, you can view the projects that you have created along wi [NOTE] ==== -If a rulebook changes in source control you can re-sync a project by selecting the sync icon next to the project from the *Projects* list view. +If a rulebook changes in source control, you can re-sync a project by selecting the sync icon next to the project from the *Projects* list view. The *Git hash* updates represent the latest commit on that repository. An activation must be restarted or recreated if you want to use the updated project. ==== diff --git a/downstream/modules/eda/proc-eda-delete-project.adoc b/downstream/modules/eda/proc-eda-delete-project.adoc index 3bf025b256..ef0a7ba5d5 100644 --- a/downstream/modules/eda/proc-eda-delete-project.adoc +++ b/downstream/modules/eda/proc-eda-delete-project.adoc @@ -2,8 +2,12 @@ = Deleting a project +If you need to delete a project, the {EDAcontroller} interface provides multiple options. + .Procedure -. From the *Projects* list view, select the btn:[More Actions] icon *{MoreActionsIcon}* next to the desired project. +. To delete a project, complete one of the following: +* From the *Projects* list view, select the checkbox next to the desired project, and click the btn:[More Actions] icon *{MoreActionsIcon}* from the page menu. +* From the *Projects* list view, click the btn:[More Actions] icon *{MoreActionsIcon}* next to the desired project. . Select btn:[Delete project]. -. In the popup window, select btn:[Yes, I confirm that I want to delete this project]. +. In the *Permanently delete projects* window, select btn:[Yes, I confirm that I want to delete this project]. . Select btn:[Delete project]. \ No newline at end of file diff --git a/downstream/modules/eda/proc-eda-editing-a-project.adoc b/downstream/modules/eda/proc-eda-editing-a-project.adoc index c09adc25f8..79edf34ba2 100644 --- a/downstream/modules/eda/proc-eda-editing-a-project.adoc +++ b/downstream/modules/eda/proc-eda-editing-a-project.adoc @@ -4,8 +4,7 @@ .Procedure -. From the *Projects* list view, select the btn:[More Actions] icon *{MoreActionsIcon}* next to the desired project. -. Select btn:[Edit project]. +. From the *Projects* list view, select the btn:[More Actions] icon *{MoreActionsIcon}* next to the desired project. The Edit page is displayed. . Enter the required changes and select btn:[Save project]. - -image::eda-edit-project.png[Edit project] +//[J. Self]replace the following image, if possible +//::eda-edit-project.png[Edit project] \ No newline at end of file diff --git a/downstream/modules/eda/proc-eda-set-up-new-project.adoc b/downstream/modules/eda/proc-eda-set-up-new-project.adoc index a933cfec2c..84ccb95c6b 100644 --- a/downstream/modules/eda/proc-eda-set-up-new-project.adoc +++ b/downstream/modules/eda/proc-eda-set-up-new-project.adoc @@ -2,32 +2,46 @@ = Setting up a new project +You can set up projects to manage and store your rulebooks in {EDAcontroller}. + .Prerequisites // [ddacosta] I'm not sure whether there will be an EDA specific dashboard in the gateway. Step 1 might need to change to something like "Log in to AAP". -* You are logged in to the {EDAcontroller} Dashboard as a Content Consumer. +* You are logged in to the {PlatformNameShort} Dashboard as a Content Consumer. * You have set up a credential, if necessary. For more information, see the xref:eda-set-up-credential[Setting up credentials] section. * You have an existing repository containing rulebooks that are integrated with playbooks contained in a repository to be used by {ControllerName}. .Procedure // [ddacosta] I'm not sure whether there will be an EDA specific dashboard in the gateway. Step 1 might need to change to something like "Log in to AAP". -. Log in to the {EDAcontroller} Dashboard. -. From the navigation panel, select *{MenuADProjects}*. +. Log in to the {PlatformNameShort} Dashboard. +. Navigate to *{MenuADProjects}*. +. Click btn:[Create project]. . Insert the following: + Name:: Enter project name. Description:: This field is optional. -SCM type:: Git is the only SCM type available for use. -SCM URL:: HTTP[S] protocol address of a repository, such as GitHub or GitLab. +Source control type:: Git is the only source control type available for use. This field is optional. +Source control URL:: Enter Git, SSH, or HTTP[S] protocol address of a repository, such as GitHub or GitLab. This field is not editable. ++ +[NOTE] +==== +This field accepts SSH private key or private key phrase. To enable the use of these private keys, your project URL must begin with `git@`. +==== +Proxy:: This is used to access access HTTP or HTTPS servers. This field is optional. +Source control branch/tag/commit:: This is the branch to checkout. In addition to branches, you can input tags, commit hashes, and arbitrary refs. Some commit hashes and refs may not be available unless you also provide a custom refspec. This field is optional. +Source control refspec:: A refspec to fetch (passed to the Ansible git module). This parameter allows access to references via the branch field not otherwise available. This field is optional. +For more information, see link:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/git_module.html#examples[Examples]. +Source control credential:: You must have this credential to utilize the source control URL. This field is optional. +Content signature validation credential:: Enable content signing to verify that the content has remained secure when a project is synced. If the content has been tampered with, the job will not run. This field is optional. +Options:: The Verify SSL option is enabled by default. Enabling this option verifies the SSL with HTTPS when the project is imported. + [NOTE] ==== -You cannot edit the SCM URL after you create the project. +You can disable this option if you have a local repository that uses self-signed certificates. ==== -Credential:: This field is optional. This is the token needed to utilize the SCM URL. . Select btn:[Create project]. -Your project is now created and can be managed in the *Projects* screen. +Your project is now created and can be managed in the *Projects* page. After saving the new project, the project's details page is displayed. From there or the *Projects* list view, you can edit or delete it. diff --git a/downstream/modules/eda/ref-performance-troubleshooting.adoc b/downstream/modules/eda/ref-performance-troubleshooting.adoc index 8a0cc14af7..275dff5418 100644 --- a/downstream/modules/eda/ref-performance-troubleshooting.adoc +++ b/downstream/modules/eda/ref-performance-troubleshooting.adoc @@ -14,7 +14,7 @@ If the event you are expecting is coming from a source other than what is in the ** Ensure that you have set the correct conditions for matching the event and taking actions in the rulebook activation. * My activation keeps restarting in an infinite loop. -** By default, the reset policy for rulebook activations is set to “on failure”. Change the restart policy using the following procedure: +** By default, the reset policy for rulebook activations is set to *On Failure*. Change the restart policy using the following procedure: . Navigate to {MenuADRulebookActivations}. -. Click the *Restart Policy* list to display the options. +. Select the *Restart Policy* list to display the options. . Select the appropriate value: *On Failure*, *Always*, *Never*. From de55c5cb3b74af274587b935e5ce38f7230574ba Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Mon, 12 Aug 2024 10:55:50 +0100 Subject: [PATCH 081/590] Add admonition to use of installer setup script (#1718) (#1719) Update text in docs to tell users ansible-core 2.16 must be installed before running setup.sh https://issues.redhat.com/browse/AAP-29119 --- downstream/modules/platform/proc-running-setup-script.adoc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/downstream/modules/platform/proc-running-setup-script.adoc b/downstream/modules/platform/proc-running-setup-script.adoc index a3e2e397ed..14db6a5fdb 100644 --- a/downstream/modules/platform/proc-running-setup-script.adoc +++ b/downstream/modules/platform/proc-running-setup-script.adoc @@ -5,6 +5,11 @@ [role="_abstract"] After you update the inventory file with required parameters, run the installer setup script. +[IMPORTANT] +==== +You must have installed ansible-core {CoreUseVers} before using the installer setup script. +==== + .Procedure * Run the `setup.sh` script From eafc56c2aa7c732c1255bde0e0ad0fca5fd3ced1 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Tue, 13 Aug 2024 10:16:30 +0100 Subject: [PATCH 082/590] Fixed broken link to Backup recommendations section (#1723) (#1727) Fixed broken link...URL missing forward-slash between ``documentation/red_hat_ansible``: https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.4/html-single/red_hat_ansible_automation_platform_operator_backup_and_recovery_guide/index#aap-backup-recommendations Co-authored-by: TVo --- downstream/modules/platform/con-operator-upgrade-prereq.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/downstream/modules/platform/con-operator-upgrade-prereq.adoc b/downstream/modules/platform/con-operator-upgrade-prereq.adoc index 60e7b3b0a4..577c96155a 100644 --- a/downstream/modules/platform/con-operator-upgrade-prereq.adoc +++ b/downstream/modules/platform/con-operator-upgrade-prereq.adoc @@ -6,6 +6,6 @@ [role="_abstract"] To upgrade to a newer version of {OperatorPlatform}, it is recommended that you do the following: -* Create AutomationControllerBackup and AutomationHubBackup objects. For help with this see link:{BaseURL}red_hat_ansible_automation_platform/{PlatformVers}/html-single/red_hat_ansible_automation_platform_operator_backup_and_recovery_guide/index#aap-backup-recommendations[Creating Red Hat Ansible Automation Platform backup resources] +* Create AutomationControllerBackup and AutomationHubBackup objects. For help with this see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/red_hat_ansible_automation_platform_operator_backup_and_recovery_guide/index#aap-backup-recommendations[Creating Red Hat Ansible Automation Platform backup resources] //See (Backup and Restore) for information on creating backup objects. [add link to new backup and restore doc when complete] * Review the release notes for the new {PlatformNameShort} version to which you are upgrading and any intermediate versions. From 3e3d245988e71fb330dca1da52c8cacf147c5a99 Mon Sep 17 00:00:00 2001 From: EMcWhinn <122449381+EMcWhinn@users.noreply.github.com> Date: Tue, 13 Aug 2024 12:11:50 +0100 Subject: [PATCH 083/590] Removing EDA 2.5 with controller 2.4 install steps (#1728) (#1729) Remove EDA 2.5 w/controller 2.4 install steps from 2.5 doc https://issues.redhat.com/browse/AAP-29246 Affects 'titles/aap-installation-guide' --- .../platform/assembly-platform-install-scenario.adoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/downstream/assemblies/platform/assembly-platform-install-scenario.adoc b/downstream/assemblies/platform/assembly-platform-install-scenario.adoc index 1bd9f89a25..bb9345d7cf 100644 --- a/downstream/assemblies/platform/assembly-platform-install-scenario.adoc +++ b/downstream/assemblies/platform/assembly-platform-install-scenario.adoc @@ -37,7 +37,8 @@ There are several supported installation scenarios for {PlatformName}. To instal include::platform/proc-editing-inventory-file.adoc[leveloffset=+1] include::platform/con-install-scenario-examples.adoc[leveloffset=+1] include::platform/con-install-scenario-recommendations.adoc[leveloffset=+2] -include::platform/con-eda-2-5-with-controller-2-4.adoc[leveloffset=+3] +//[emcwhinn] Removing for AAP-29246 as content is being moved to one guide in 2.4 customer portal +//include::platform/con-eda-2-5-with-controller-2-4.adoc[leveloffset=+3] //[ifowler] Removed for AAP-18700 Install Guide Scenario Consolidation //include::platform/ref-platform-non-inst-database-inventory.adoc[leveloffset=+3] //include::platform/ref-single-controller-ext-customer-managed-db.adoc[leveloffset=+3] From 779370cabebb621f3d1a4132d1067f623712d53e Mon Sep 17 00:00:00 2001 From: EMcWhinn <122449381+EMcWhinn@users.noreply.github.com> Date: Tue, 13 Aug 2024 13:32:45 +0100 Subject: [PATCH 084/590] Adding conceptual overview to asciidoc (#1720) (#1730) * Adding conceptual overview to asciidoc Create Conceptual overview section of Getting started with AAP https://issues.redhat.com/browse/AAP-29066 Affects `titles/getting-started` * Second commit * Third commit --- .../assembly-gs-key-functionality.adoc | 14 ++++++++ .../platform/con-gs-ansible-lightspeed.adoc | 6 ++-- .../platform/con-gs-automation-content.adoc | 35 +++++++++++++++++-- .../platform/con-gs-automation-decisions.adoc | 7 ++++ .../platform/con-gs-automation-execution.adoc | 9 ++--- .../platform/con-gs-automation-mesh.adoc | 7 +++- .../platform/con-gs-dashboard-components.adoc | 30 ++++++++++++++-- .../platform/con-gs-developer-tools.adoc | 12 +++++++ .../modules/platform/con-gs-final-set-up.adoc | 8 +++++ .../platform/ref-gs-install-config.adoc | 7 ++++ downstream/titles/getting-started/docinfo.xml | 2 +- downstream/titles/getting-started/master.adoc | 2 +- 12 files changed, 125 insertions(+), 14 deletions(-) diff --git a/downstream/assemblies/platform/assembly-gs-key-functionality.adoc b/downstream/assemblies/platform/assembly-gs-key-functionality.adoc index 4b851833f0..0f4e95a5ae 100644 --- a/downstream/assemblies/platform/assembly-gs-key-functionality.adoc +++ b/downstream/assemblies/platform/assembly-gs-key-functionality.adoc @@ -1,4 +1,15 @@ +ifdef::context[:parent-context-of-assembly-gs-key-functionality: {context}] + +:_mod-docs-content-type: ASSEMBLY + +ifndef::context[] [id="assembly-gs-key-functionality"] +endif::[] +ifdef::context[] +[id="assembly-gs-key-functionality_{context}"] +endif::[] + +:context: assembly-gs-key-functionality = Key functionality and concepts @@ -15,3 +26,6 @@ include::platform/con-gs-developer-tools.adoc[leveloffset=+1] include::platform/ref-gs-install-config.adoc[leveloffset=+1] include::platform/con-gs-dashboard-components.adoc[leveloffset=+1] include::platform/con-gs-final-set-up.adoc[leveloffset=+1] + +ifdef::parent-context-of-assembly-gs-key-functionality[:context: {parent-context-of-assembly-gs-key-functionality}] +ifndef::parent-context-of-assembly-gs-key-functionality[:!context:] diff --git a/downstream/modules/platform/con-gs-ansible-lightspeed.adoc b/downstream/modules/platform/con-gs-ansible-lightspeed.adoc index 2177ddccd2..8913dc0693 100644 --- a/downstream/modules/platform/con-gs-ansible-lightspeed.adoc +++ b/downstream/modules/platform/con-gs-ansible-lightspeed.adoc @@ -1,6 +1,8 @@ [id="con-gs-ansible-lightspeed"] -= Ansible Lightspeed - += {LightspeedShortName} +{LightspeedFullName} is a generative AI service designed by and for Ansible platform engineers and developers. +It accepts natural-language prompts entered by a user and then interacts with IBM watsonx foundation models to produce code recommendations built on Ansible best practices. +{LightspeedFullName} helps automation teams learn, create, and maintain {PlatformName} content more efficiently. diff --git a/downstream/modules/platform/con-gs-automation-content.adoc b/downstream/modules/platform/con-gs-automation-content.adoc index 7309f6cd53..69b2258312 100644 --- a/downstream/modules/platform/con-gs-automation-content.adoc +++ b/downstream/modules/platform/con-gs-automation-content.adoc @@ -2,18 +2,49 @@ = Automation content -{HubNameStart} is the central location for your {PlatformNameShort}content. +{HubNameStart} is the central location for your {PlatformNameShort} content. In {HubName} you can also find content collections that you can download and integrate into your automation environment. -Content collections might include modules, playbooks, plugins, roles, and related documentation. +An Ansible Content Collection is a ready-to-use toolkit for automation and can include multiple types of content, including playbooks, roles, modules, and plugins all in one place. +You can access {HubName} in one of two ways: +* On the Red Hat-hosted link:https://console.redhat.com/[Hybrid Cloud Console], where you can find Red Hat validated or certified content that you can sync to your platform environment. +* On a self-hosted, on-premise private {HubName}, where you can curate content for your automation users and manage access to collections. +Depending on the way you access {HubName}, you might have access to different types of content collections. +There are two types of Red Hat Ansible content: + +* Ansible Certified Content Collections, which Red Hat builds, supports, and maintains. +Certified collections are included in your subscription to {PlatformName} and you can find in {HubName}. +* Ansible validated content collections, which are customizable and therefore do not have a support guarantee, but have been tested in the Ansible Automation Platform environment. +Ansible validated collections are available in your {PrivateHubName} through the Platform Installer. +When you download Red Hat Ansible Automation Platform with the bundled installer, validated content is pre-populated into the {PrivateHubName} by default, but only if you enable {PrivateHubName} as part of the inventory. == Ansible playbooks +Ansible Content Collections often include playbooks. +Playbooks are YAML files that contain specific sets of human-readable instructions, or “plays”, that you send to run on a single target or groups of targets. +Ansible playbooks are repeatable, reusable, configuration management tools designed to deploy complex applications. + +You can use playbooks to manage configurations of and deployments to remote machines and sequence multitiered rollouts involving rolling updates. +Use playbooks to delegate actions to other hosts, interacting with monitoring servers and load balancers along the way. + +Once written, you can use and re-use playbooks for automation across your enterprise. +For example, if you need to run a task more than once, write a playbook and put it under source control. +Then you can use the playbook to push out new configuration or confirm the configuration of remote systems. +Ansible playbooks can declare configurations, orchestrate steps of any manually ordered process on many machines in a defined order, or start tasks synchronously or asynchronously. + +.Additional resources + +See link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/html-single/getting_started_with_playbooks/index[Getting started with Ansible Playbooks] for more information. == Ansible roles +Similar to a playbook, use Ansible roles to create reusable automation content that helps teams to work more efficiently and avoid duplicate efforts. +With roles, you can group together a broader range of existing automation content. +This includes playbooks, configuration files, templates, tasks, and handlers to create customized automation content that can be reused and shared with others. + +You can also make roles configurable by exposing variables that users can set when calling the role, allowing them to configure their system according to their organization's requirements. diff --git a/downstream/modules/platform/con-gs-automation-decisions.adoc b/downstream/modules/platform/con-gs-automation-decisions.adoc index a4f37e439f..4ece552567 100644 --- a/downstream/modules/platform/con-gs-automation-decisions.adoc +++ b/downstream/modules/platform/con-gs-automation-decisions.adoc @@ -2,3 +2,10 @@ = Automation decisions +{PlatformName} includes {EDAName}, an automation engine that listens to your system's event stream and reacts to events that you have specified with targeted automation tasks. +In this way, {EDAName} manages routine automation tasks and responses, freeing you up to work on more complex tasks. + +Managed through {EDAcontroller}, Ansible rulebooks are the framework for automation decisions. Ansible rulebooks are collections of rulesets, which in turn consist of one or more sources, rules, and conditions. Rulebooks tell the system what events to flag and how to respond to them. From the Automation Decisions section of the platform user interface, you can use rulebooks to connect and listen to event sources, and define actions that are triggered in response to certain events. + +.Additional resources +For more information about rulebook actions rulebooks, events, and sources, see xref:con-gs-define-events-rulebooks[Rulebook actions]. \ No newline at end of file diff --git a/downstream/modules/platform/con-gs-automation-execution.adoc b/downstream/modules/platform/con-gs-automation-execution.adoc index 2a0d11bf8d..344c027b1b 100644 --- a/downstream/modules/platform/con-gs-automation-execution.adoc +++ b/downstream/modules/platform/con-gs-automation-execution.adoc @@ -4,16 +4,17 @@ The centerpiece of {PlatformNameShort} is its automation execution command and control center, where you can deploy, define, operate, scale and delegate automation across your enterprise. With this functionality, you can perform a variety of tasks, such as the ability to run playbooks using a simple, straightforward web UI, dashboards, and centralized logging to manage and track job execution from a single location. + In the automation execution environment, you can use {ControllerName} tasks to build job templates, which standardize how automation is deployed, initiated, and delegated, making it more reusable and consistent. == Inventory files An inventory file is a single file with a list of hosts and groups that can be acted on using Ansible commands and playbooks. You can use an inventory file to specify your installation scenario and describe host deployments to Ansible. -Also, you can use an inventory file to organize managed nodes in centralized files that give Ansible with system information and network locations. +You can also use an inventory file to organize managed nodes in centralized files that give Ansible with system information and network locations. Depending on the inventory plugins, you can use many formats for your inventory files, but the most common formats are INI and YAML. -The location of your inventory file depends on installation program you use. +The location of your inventory file depends on the installation program you use. -.ADDITIONAL RESOURCES -For more details on inventory files, see [ADD 2.5 LINK]About the installer inventory in the _Red Hat Ansible Automation Platform planning guide_. +.Additional resources +For more details on inventory files, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/html-single/planning_your_installation/index#about_the_installer_inventory_file[About the installer inventory] in the _Red Hat Ansible Automation Platform planning guide_. diff --git a/downstream/modules/platform/con-gs-automation-mesh.adoc b/downstream/modules/platform/con-gs-automation-mesh.adoc index 42e36617ae..decfca7511 100644 --- a/downstream/modules/platform/con-gs-automation-mesh.adoc +++ b/downstream/modules/platform/con-gs-automation-mesh.adoc @@ -1,4 +1,9 @@ [id="con-gs-automation-mesh"] -= Automation mesh += {AutomationMeshStart} +{AutomationMeshStart} is an overlay network intended to ease the distribution of automation across a collection of execution nodes using existing connectivity. +Execution nodes are where Ansible Playbooks are actually executed. +A node runs an {ExecEnvNameSing} which, in turn, runs the Ansible Playbook. +{AutomationMeshStart} creates peer-to-peer connections between these execution nodes, increasing the resiliency of your automation workloads to network latency and connection disruptions. +This also permits more flexible architectures and provides rapid, independent scaling of control and execution capacity. diff --git a/downstream/modules/platform/con-gs-dashboard-components.adoc b/downstream/modules/platform/con-gs-dashboard-components.adoc index 9820f6d00c..9df0ed5e1c 100644 --- a/downstream/modules/platform/con-gs-dashboard-components.adoc +++ b/downstream/modules/platform/con-gs-dashboard-components.adoc @@ -6,10 +6,34 @@ After you install {PlatformNameShort} on your system and log in for the first time, familiarize yourself with the platform dashboard. -.Quick starts -You can learn about Ansible automation functions with guided tutorials called quick starts. In the dashboard, you can access quick starts by selecting a quick start card. +Quick starts:: +You can learn about Ansible automation functions with guided tutorials called quick starts. +In the dashboard, you can access quick starts by selecting a quick start card. From the panel displayed, click btn:[Start] and complete the onscreen instructions. You can also filter quick starts by keyword and status. -//ADD CONTENT +Resource status:: +Indicates the status of your hosts, projects, and inventories. +The status indicator links to your configured hosts, projects and inventories where you can search, filter, add and change these resources. +Job Activity:: +You can view a summary of your current job status. +Filter the job status within a period of time or by job type, or click btn:[View all jobs] to view a complete list of jobs that are currently available. + +Jobs:: +You can view recent jobs that have run, or click btn:[View all Jobs] to view a complete list of jobs that are currently available, or create a new job. + +Projects:: +You can view recently updated projects or click btn:[View all Projects] to view a complete list of the projects that are currently available, or create a new project. + +Inventories:: +You can view recently updated inventories or click btn:[View all Inventories] to view a complete list of available inventories, or create a new inventory. + +Rulebook Activations:: +You can view the list of recent rulebook activations and their status, display the complete list of rulebook activations that are currently available, or create a new rulebook activation. + +Rule Audit:: +You view recently fired rule audits, view rule audit records, and view rule audit data based on corresponding rulebook activation runs. + +Decision Environments:: +You can view recently updated decision environments, or click btn:[View all Decision Environments] to view a complete list of available inventories, or create a new decision environment. diff --git a/downstream/modules/platform/con-gs-developer-tools.adoc b/downstream/modules/platform/con-gs-developer-tools.adoc index 3bce28d82f..76783b89d2 100644 --- a/downstream/modules/platform/con-gs-developer-tools.adoc +++ b/downstream/modules/platform/con-gs-developer-tools.adoc @@ -2,4 +2,16 @@ = Ansible developer tools +Ansible development tools are an integrated and supported suite of capabilities that help IT practitioners at any skill level accurately create automation content faster than with manual coding. +This includes building, testing, and deploying modules and playbooks without requiring hard coding skills. +These tools include: + +* Ansible Molecule - creates test environments that mimic real ones, allowing you to test playbooks, roles, and collections across many instances, operating systems, virtualization providers, and more. +* Ansible Lint - analyzes your playbooks, roles, and collections—looking at the markup syntax and how you are using the modules. +It goes beyond regular YAML linters by checking Ansible tasks themselves. +* Execution environment builder - removes the risk of dependency issues when creating automation content by installing your collections and all of their dependencies in a containerized image (known as an {ExecEnvShort}). +* Content testing suite - run checks to enforce coding standards and requirements, unit tests against Ansible modules, and integration tests to ensure workflows connect to your source code repositories. +* Automation content navigator - reviews and explores collections, configurations, documentation, images, inventories, and playbooks. +Complete tasks such as watching jobs, sharing playbooks, browsing {ExecEnvShort} and inventories, and extracting reusable examples. +* Ansible content development kit - is a bundled collection of tools that expands Ansible content creation from IT practitioners performing manual tasks to self-enabled automation content developers. diff --git a/downstream/modules/platform/con-gs-final-set-up.adoc b/downstream/modules/platform/con-gs-final-set-up.adoc index e91135557b..98fe24fa4d 100644 --- a/downstream/modules/platform/con-gs-final-set-up.adoc +++ b/downstream/modules/platform/con-gs-final-set-up.adoc @@ -2,4 +2,12 @@ = Final setup and usage +After you have installed {PlatformNameShort} 2.5 and have become familiar with the dashboard, use this document to explore further options for setup and daily use. +This guide is structured so that you can select the path that is most appropriate to you and your role within your organization. +You can also use the navigation panel to learn how Ansible empowers users with different roles and objectives to build and customize automation tasks. +Select one of the following paths to continue getting started: + +* If you are a systems administrator configuring authentication and setting up teams and organizations, see xref:assembly-gs-platform-admin[Getting started as a platform administrator]. +* If you are a developer setting up development environments, creating playbooks, rulebooks, roles, or projects, see xref:assembly-gs-auto-dev[Getting started as an automation developer]. +* If you are an operator using playbooks, publishing custom content, creating projects, and creating and using inventories, see xref:assembly-gs-auto-op[Getting started as an automation operator]. diff --git a/downstream/modules/platform/ref-gs-install-config.adoc b/downstream/modules/platform/ref-gs-install-config.adoc index 136922c463..ba1a8c1750 100644 --- a/downstream/modules/platform/ref-gs-install-config.adoc +++ b/downstream/modules/platform/ref-gs-install-config.adoc @@ -2,3 +2,10 @@ = {PlatformNameShort} installation and configuration +{PlatformName} offers flexible installation and configuration options. +Depending on your organization's needs, you can install {PlatformName} using one of the following methods, based on your environment: + +* link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/installing_on_virtual_machines/index[Traditional virtual machine] +* link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/installing_on_openshift_container_platform/index[Red Hat Ansible Automation Platform operator on OpenShift Container Platform] +* link:{BaseURL}/ansible_on_clouds/2.x[Cloud environments] +* link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/containerized_installation/index[Containerized environments] diff --git a/downstream/titles/getting-started/docinfo.xml b/downstream/titles/getting-started/docinfo.xml index 9c4753f28a..e1b8436be6 100644 --- a/downstream/titles/getting-started/docinfo.xml +++ b/downstream/titles/getting-started/docinfo.xml @@ -3,7 +3,7 @@ 2.5 Get started with Ansible Automation Platform - This guide shows how to get started with Ansible Automation Platform + This guide shows how to get started with Ansible Automation Platform. Red Hat Customer Content Services diff --git a/downstream/titles/getting-started/master.adoc b/downstream/titles/getting-started/master.adoc index 233d5ba920..0631d3023c 100644 --- a/downstream/titles/getting-started/master.adoc +++ b/downstream/titles/getting-started/master.adoc @@ -10,7 +10,7 @@ include::attributes/attributes.adoc[] // Book Title -= Getting started with {PlatformName} += Getting started with Ansible Automation Platform {PlatformName} is a unified automation solution that automates a variety of IT processes, including provisioning, configuration management, application deployment, orchestration, and security and compliance changes (including patching systems). From 193da8c8c4fed7fe8a9f0454d626a0007093f607 Mon Sep 17 00:00:00 2001 From: Jameria Self <73364088+jself-sudoku@users.noreply.github.com> Date: Tue, 13 Aug 2024 10:23:15 -0400 Subject: [PATCH 085/590] AAP-21827 Add new field for new field for the k8s_service_name (#1722) (#1732) * AAP-21827 Added new Service name field to rulebook activation content * AAP-21827 Added new Service name field to rulebook activation content --- downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc | 1 + 1 file changed, 1 insertion(+) diff --git a/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc b/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc index be9eb46dff..aa00d4c5f1 100644 --- a/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc +++ b/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc @@ -33,6 +33,7 @@ Restart policy:: This is a policy to decide when to restart a rulebook. ... Always: Restarts when a rulebook finishes ... Never: Never restarts a rulebook when it finishes ... On failure: Only restarts when it fails +Service Name:: This defines a service name for Kubernetes to configure inbound connections if the activation exposes a port. This field is optional. Rulebook activation enabled?:: This automatically enables the rulebook activation to run. Variables:: The variables for the rulebook are in a JSON/YAML format. The content would be equivalent to the file passed through the `--vars` flag of ansible-rulebook command. From 85dcce3fe81eca40785d5dd50cdb7386e49bba8d Mon Sep 17 00:00:00 2001 From: Jameria Self <73364088+jself-sudoku@users.noreply.github.com> Date: Tue, 13 Aug 2024 10:23:35 -0400 Subject: [PATCH 086/590] AAP-24389 Added Credential field and multi-credential capability (#1726) (#1733) --- .../eda/proc-eda-set-up-rulebook-activation.adoc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc b/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc index aa00d4c5f1..00c5d01c40 100644 --- a/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc +++ b/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc @@ -18,8 +18,16 @@ + Name:: Insert the name. Description:: This field is optional. -Project:: Projects are a logical collection of rulebooks. -Rulebook:: Rulebooks are shown according to the project selected. +Organization:: This field is optional. +Project:: Projects are a logical collection of rulebooks. This field is optional. +Rulebook:: Rulebooks are displayed according to the project selected. +Credential:: Select 0 or more credentials for this rulebook activation. This field is optional. ++ +[NOTE] +==== +The credentials that display in this field are customized based on your rulebook activation and will only include the following credential types: Vault, {PlatformName}, or any custom credential types that you have created. For more information on credentials, see link:https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.4/html/event-driven_ansible_controller_user_guide/eda-credentials#eda-credentials[Setting up credentials for {EDAcontroller}]. +==== +//[J. Self] Might need to update the link above for the updated Credentials section. Decision environment:: Decision environments are a container image to run Ansible rulebooks. + [NOTE] From 65725a7c2f3bc36de87b88d27976b3a7bb57f9d9 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Tue, 13 Aug 2024 16:20:57 -0600 Subject: [PATCH 087/590] AAP-29215 - Convert overview and auth wizard content (#1725) (#1737) --- .../con-gw-create-authentication.adoc | 21 ++++++++++ .../platform/con-gw-overview-access-auth.adoc | 17 ++++++++ .../con-gw-pluggable-authentication.adoc | 17 ++++++++ .../proc-gw-adjust-mapping-order.adoc | 22 ++++++++++ .../proc-gw-configure-auth-details.adoc | 39 ++++++++++++++++++ .../proc-gw-define-rules-triggers.adoc | 40 +++++++++++++++++++ .../proc-gw-review-auth-settings.adoc | 12 ++++++ .../platform/proc-gw-select-auth-type.adoc | 35 ++++++++++++++++ 8 files changed, 203 insertions(+) create mode 100644 downstream/modules/platform/con-gw-create-authentication.adoc create mode 100644 downstream/modules/platform/con-gw-overview-access-auth.adoc create mode 100644 downstream/modules/platform/con-gw-pluggable-authentication.adoc create mode 100644 downstream/modules/platform/proc-gw-adjust-mapping-order.adoc create mode 100644 downstream/modules/platform/proc-gw-configure-auth-details.adoc create mode 100644 downstream/modules/platform/proc-gw-define-rules-triggers.adoc create mode 100644 downstream/modules/platform/proc-gw-review-auth-settings.adoc create mode 100644 downstream/modules/platform/proc-gw-select-auth-type.adoc diff --git a/downstream/modules/platform/con-gw-create-authentication.adoc b/downstream/modules/platform/con-gw-create-authentication.adoc new file mode 100644 index 0000000000..9841cda25e --- /dev/null +++ b/downstream/modules/platform/con-gw-create-authentication.adoc @@ -0,0 +1,21 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-create-authentication_{context}"] + += Creating an authentication method + +The *Create Authentication* wizard guides you through the steps to create a new authentication method for your organization. The wizard is launched during the create authentication process. + +There are 5 procedures involved in creating an authenticator, including: + +. xref:gw-select-auth-type_gw-auth-wizard[Authentication type], where you will select the type of authenticator plugin you want to configure. +. xref:gw-configure-auth-details_gw-auth-wizard[Authentication details], where you will configure the authentication details for the plugin you selected. +. xref:gw-define-rules-triggers_gw-auth-wizard[Mapping], where you will define mapping rule types and triggers to control access to the system. +. xref:gw-adjust-mapping-order_gw-auth-wizard[Mapping order], where you can define the mapping precedence. ++ +[NOTE] +==== +Mapping order is only available if there are one or more authenticator maps defined. +==== ++ +. xref:gw-review-auth-settings_gw-auth-wizard[Review], where you can review and confirm the authentication settings before creating the authentication method. \ No newline at end of file diff --git a/downstream/modules/platform/con-gw-overview-access-auth.adoc b/downstream/modules/platform/con-gw-overview-access-auth.adoc new file mode 100644 index 0000000000..2a168e0e1e --- /dev/null +++ b/downstream/modules/platform/con-gw-overview-access-auth.adoc @@ -0,0 +1,17 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-overview-access-auth_{context}"] + += Overview of access management and authentication + +Ansible Automation Platform features a platform interface where you can set up centralized authentication, configure access management, and configure global and system level settings from a single location. + +A system administrator can configure access, permissions and system settings through the following tasks: + +xref:gw-configure-authentication[Configuring authentication in the Ansible Automation Platform], where you set up simplified login for users by selecting from several authentication methods available and define permissions and assign them to users with authenticator maps. + +[XREF TBD]Configuring token-based authentication, where you can configure authentication of third-party tools and services with the platform through integrated OAuth 2 token support. + +xref:gw-managing-access[Managing access with role based access control], where you configure user access based on their role within a platform organization. + +[XREF TBD]Configuring Ansible Automation Platform, where you can configure global and system level settings for the platform and services. \ No newline at end of file diff --git a/downstream/modules/platform/con-gw-pluggable-authentication.adoc b/downstream/modules/platform/con-gw-pluggable-authentication.adoc new file mode 100644 index 0000000000..a4e66a79ca --- /dev/null +++ b/downstream/modules/platform/con-gw-pluggable-authentication.adoc @@ -0,0 +1,17 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-pluggable-authentication_{context}"] + += Pluggable authentication + +Authentication is the process of verifying a user's identity to Ansible Automation Platform, which means establishing that a user is who they say they are. This can be done in a number of ways but would traditionally be associated with a username and password. + +In Ansible Automation Platform 2.4, you could configure external authentication sources such as LDAP or SAML, in automation controller. Ansible Automation Platform 2.5 uses a pluggable authentication system with a configuration wizard that provides a common, simplified method of configuring different types of authenticators, such as LDAP and SAML. The pluggable system also allows you to configure multiple authenticators of the same type. + +In the pluggable system we have three concepts: + +Authenticator plugin:: A plugin allows Ansible Automation Platform to connect to a source system, such as LDAP or SAML. Ansible Automation Platform is shipped with a variety of authenticator plugins and more can be added. Authenticator plugins are similar to Ansible collections, in that all of the required code is in a package and can be versioned independently if needed. You can write and add new custom plugins to the system + +Authenticator:: An authenticator is an instantiation of an authenticator plugin and allows users to form the specified source to login. For example, the LDAP authenticator plugin defines a required LDAP server setting. When you instantiate an authenticator from the LDAP authentication plugin, you must provide the authenticator the LDAP server URL it needs to connect to. + +Authenticator map:: Authenticator maps are applied to authenticators and tell Ansible Automation Platform what permissions to give a user logging in to the system. the authentication settings before creating the authentication method. \ No newline at end of file diff --git a/downstream/modules/platform/proc-gw-adjust-mapping-order.adoc b/downstream/modules/platform/proc-gw-adjust-mapping-order.adoc new file mode 100644 index 0000000000..3095c5a62f --- /dev/null +++ b/downstream/modules/platform/proc-gw-adjust-mapping-order.adoc @@ -0,0 +1,22 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-adjust-mapping-order_{context}"] + += Adjusting the Mapping order + +If you have one or more authenticator maps defined, you can manage the order of the maps. Authenticator maps are run in order when logging in lowest order to highest. If one authenticator map determines a user should be a member of a team but a subsequent map determines the user should not be a member of the same team the ruling form the second map will take precedence over the result of the first map. Authenticator maps with the same order are executed in an undefined order. + +For example, if the first authenticator map is of type `is_superuser` and the trigger is set to never, any user logging into the system would never be granted the `is_superuser` flag. + +And, if the second map is of type `is_superuser` and the trigger is based on the user having a specific group, any user logging in would initially be denied the `is_superuser` permission. However, any user with the specified group would subsequently be granted the `is_superuser` permission by the second rule. + +.Procedure + +. Adjust the mapping order by dragging and dropping the mappings up or down in the list using the draggable icon. ++ +[NOTE] +==== +The mapping precedence is determined by the order in which the mappings are listed. +==== ++ +. After your authenticator maps are in the correct order, click btn:[Next] to xref:gw-review-auth-settings_gw-auth-wizard[Review the authentication settings]. diff --git a/downstream/modules/platform/proc-gw-configure-auth-details.adoc b/downstream/modules/platform/proc-gw-configure-auth-details.adoc new file mode 100644 index 0000000000..3529f3dfa9 --- /dev/null +++ b/downstream/modules/platform/proc-gw-configure-auth-details.adoc @@ -0,0 +1,39 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-configure-auth-details_{context}"] + += Configure Authentication details + +Different authenticator plugins require different types of information, see the respective sections in Authenticator plugins for the required details. +For all authentication types you can enter a *Name*, *Additional Authenticator Fields* and *Create Objects*. + +.Procedure + +. Enter a unique *Name* for the authenticator. The name is required, must be unique across all authenticators, and must not be longer than 512 characters. This becomes the unique identifier generated for the authenticator. ++ +[NOTE] +==== +Changing the name does not update the unique identifier of the authenticator. For example, if you create an authenticator with the name “My Authenticator” and later change it to “My LDAP Authenticator” you will not be able to create another authenticator with the name “My Authenticator” because the unique identifier is still in use. +==== ++ +. Use the *Additional Authenticator Fields* to send arbitrary data back to the libraries behind the authenticators. This is an advanced feature and any values provided in this field are not validated. ++ +[NOTE] +==== +Values defined in this field override the dedicated fields provided in the UI. For example, if you enter a URL in a dedicated field on this page and then add a URL entry into the Additional Authentication Fields, the URL defined in Additional Authentication Fields overrides the definition in the dedicated field. +==== ++ +. Enable or disable *Create Object* to specify whether the authenticator should create teams and organizations in the system when a user logs in. ++ +Enabled:: Teams and organizations defined in the authenticator maps are created and the users added to them. +Disabled:: Organizations and teams defined in the authenticator maps will not be created automatically in the system. However, if they already exist (i.e. created by a superuser), users who trigger the maps are granted access to them. ++ +. Enable or disable *Enabled* to specify if the authenticator should be enabled or disabled. If enabled, users are able to login from the authenticator. If disabled, users will not be allowed to login from the authenticator +. Enable or disable *Remove Users* if enabled any access previously granted to a user is removed when they authenticate from this source. If disabled, permissions are only added or removed from the user based on the results of this authenticator's authenticator mappings. ++ +For example, assume a user has been granted the `is_superuser` permission in the system. And that user will log into an authenticator whose maps will not formulate an opinion as to whether or not the user should be a superuser. +If *Remove Users* is enabled, the `is_superuser` permission will be removed from the user, the authenticator maps will not have an opinion as to whether it should be there or not so, after login the user will not have the `is_superuser` permission. ++ +If *Remove Users* is disabled, the `is_superuser` permission will not be removed from the user, the authenticator maps will not have an opinion as to whether it should be there or not so after login the user will have the `is_superuser` permission. ++ +. Click btn:[Next] to xref:gw-define-rules-triggers_gw-auth-wizard[Define authenticator mappings]. diff --git a/downstream/modules/platform/proc-gw-define-rules-triggers.adoc b/downstream/modules/platform/proc-gw-define-rules-triggers.adoc new file mode 100644 index 0000000000..84e57c43de --- /dev/null +++ b/downstream/modules/platform/proc-gw-define-rules-triggers.adoc @@ -0,0 +1,40 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-define-rules-triggers_{context}"] + += Define authentication mapping rules and triggers + +{PlatformNameShort} supports the following rule types: + +Allow:: Determine if the user is allowed to log into the system +Organization:: Determine if a user should be put into an organization +Team:: Determine if the user should be a member of a team +Role:: Determine if the user is a member of a role (for example System Auditor) +Is Superuser:: Determine if the user is a superuser in the system + +These authentication map types can be used with any type of authenticator. Each map has a trigger that defines when the map should be evaluated as true. Trigger types include: + +Always:: The trigger should always be fired. +Never:: The trigger should never be fired. +Group:: The trigger should fire based on a user having, not having or having multiple groups in the source system. +Attribute:: The trigger should fire based on a user having some combination of attributes from the source system whose value might match, contain, end with, etc. some value. + +.Procedure + +. Click btn:[Add authentication mapping]: to see the list of available map types and select the map type you want to create. Options include: ++ +* Allow +* Organization +* Team +* Role +* Superuser ++ +. Enter a unique rule *Name* to identify the rule. +. Select a *Trigger* from the list. See Triggers for more details. +. Repeat steps 1-3 to add additional triggers to the authenticator. +. Click btn:[Next] to optionally xref:gw-adjust-mapping-order_gw-auth-wizard[Adjust the Mapping order]. ++ +[NOTE] +==== +The mapping order setting is only available if there are one or more authenticator maps defined. +==== diff --git a/downstream/modules/platform/proc-gw-review-auth-settings.adoc b/downstream/modules/platform/proc-gw-review-auth-settings.adoc new file mode 100644 index 0000000000..58c7f6fd76 --- /dev/null +++ b/downstream/modules/platform/proc-gw-review-auth-settings.adoc @@ -0,0 +1,12 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-review-auth-settings_{context}"] + +After you have defined the authentication details, configured the authentication maps, and specified the mapping order precedence, you can review and verify, or modify the settings before creating the authenticator. + +.Procedure + +. Review and verify the authentication settings. +. Click btn:[Finish] to create the authenticator. ++ +A notification is displayed if there are any issues with the authenticator or the map. If you encounter issues, click btn:[Back] or select a wizard section from the wizard menu to go back and add missing data or correct inaccurate data. \ No newline at end of file diff --git a/downstream/modules/platform/proc-gw-select-auth-type.adoc b/downstream/modules/platform/proc-gw-select-auth-type.adoc new file mode 100644 index 0000000000..b370f24358 --- /dev/null +++ b/downstream/modules/platform/proc-gw-select-auth-type.adoc @@ -0,0 +1,35 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-select-auth-type_{context}"] + += Select an Authentication type + +On the first screen of the wizard you can select the type of authenticator plugin you want to configure. + +.Procedure + +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. ++ +The *Create Authentication* wizard is displayed, where you can follow the prompts to configure your preferred authentication method. ++ +. Select the authenticator type from the *Authentication type* list. Options include: ++ +//ddacosta - TBD links to the sections for each config below. +* Local +* LDAP +* SAML +* TACACS+ +* Radius +* Azure +* Google OAuth +* Generic OIDC +* Keycloak +* GitHub +* GitHub organization +* GitHub team +* GitHub enterprise +* GitHub enterprise organization +* GitHub enterprise team ++ +. Click btn:[Next] to xref:gw-configure-auth-details[Configure authentication details]. From 698321b90ac009e7f89908ba304acbf16bbe179a Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Wed, 14 Aug 2024 11:43:29 +0100 Subject: [PATCH 088/590] AAP-29095 Update devtools guide (#1717) (#1740) (#1742) * AAP-29095 Update Devtools guide (#1717) * AAP-29095 Update Devtools guide * requirements - python * AAP-29276a Devtools doc fixes (#1740) --- .../devtools/assembly-devtools-install.adoc | 16 ++- .../devtools/assembly-devtools-intro.adoc | 3 + .../devtools/assembly-devtools-setup.adoc | 6 +- ...ly-publishing-playbook-collection-aap.adoc | 17 ++++ .../assembly-writing-running-playbook.adoc | 9 +- .../devtools-extension-navigator-output.png | Bin 0 -> 83327 bytes .../devtools-extension-navigator-tasks.png | Bin 0 -> 89354 bytes .../images/devtools-reopen-in-container.png | Bin 0 -> 17795 bytes downstream/images/vscode-extensions-icon.png | Bin 0 -> 390 bytes .../proc-configure-extension-settings.adoc | 35 ------- .../proc-create-molecule-scenario.adoc | 2 +- .../devtools/proc-create-python-venv.adoc | 2 +- .../devtools/proc-debugging-playbook.adoc | 23 +---- .../proc-devtools-create-aap-job.adoc | 17 ++++ ...tools-extension-run-ansible-navigator.adoc | 28 ++++++ ...vtools-extension-run-ansible-playbook.adoc | 15 +++ .../proc-devtools-extension-settings.adoc | 37 +++++++ .../proc-devtools-inspect-playbook.adoc | 26 +++++ .../proc-devtools-install-container.adoc | 95 ++++++++++++++++++ ...ll.adoc => proc-devtools-install-rpm.adoc} | 27 ++--- .../devtools/proc-devtools-install-vsc.adoc | 8 ++ ...roc-devtools-install-vscode-extension.adoc | 28 ++++++ .../proc-devtools-run-playbook-extension.adoc | 12 +++ .../devtools/proc-devtools-save-scm.adoc | 11 ++ .../proc-devtools-testing-playbook.adoc | 31 ++++++ .../proc-devtools-working-with-ee.adoc | 25 +++++ ...proc-devtools-writing-first-playbook.adoc} | 15 ++- .../devtools/proc-directory-setup.adoc | 2 +- .../proc-install-vscode-extension.adoc | 30 ------ .../devtools/proc-installing-vscode.adoc | 10 -- .../devtools/proc-running-playbook.adoc | 36 ------- .../proc-scaffolding-playbook-project.adoc | 56 ++++++++--- .../devtools/proc-setup-vscode-workspace.adoc | 2 +- .../devtools/ref-devtools-components.adoc | 16 +-- .../devtools/ref-devtools-workflow.adoc | 31 +++--- .../develop-automation-content/master.adoc | 3 +- 36 files changed, 476 insertions(+), 198 deletions(-) create mode 100644 downstream/assemblies/devtools/assembly-publishing-playbook-collection-aap.adoc create mode 100644 downstream/images/devtools-extension-navigator-output.png create mode 100644 downstream/images/devtools-extension-navigator-tasks.png create mode 100644 downstream/images/devtools-reopen-in-container.png create mode 100644 downstream/images/vscode-extensions-icon.png delete mode 100644 downstream/modules/devtools/proc-configure-extension-settings.adoc create mode 100644 downstream/modules/devtools/proc-devtools-create-aap-job.adoc create mode 100644 downstream/modules/devtools/proc-devtools-extension-run-ansible-navigator.adoc create mode 100644 downstream/modules/devtools/proc-devtools-extension-run-ansible-playbook.adoc create mode 100644 downstream/modules/devtools/proc-devtools-extension-settings.adoc create mode 100644 downstream/modules/devtools/proc-devtools-inspect-playbook.adoc create mode 100644 downstream/modules/devtools/proc-devtools-install-container.adoc rename downstream/modules/devtools/{proc-devtools-install.adoc => proc-devtools-install-rpm.adoc} (72%) create mode 100644 downstream/modules/devtools/proc-devtools-install-vsc.adoc create mode 100644 downstream/modules/devtools/proc-devtools-install-vscode-extension.adoc create mode 100644 downstream/modules/devtools/proc-devtools-run-playbook-extension.adoc create mode 100644 downstream/modules/devtools/proc-devtools-save-scm.adoc create mode 100644 downstream/modules/devtools/proc-devtools-testing-playbook.adoc create mode 100644 downstream/modules/devtools/proc-devtools-working-with-ee.adoc rename downstream/modules/devtools/{proc-writing-playbook.adoc => proc-devtools-writing-first-playbook.adoc} (56%) delete mode 100644 downstream/modules/devtools/proc-install-vscode-extension.adoc delete mode 100644 downstream/modules/devtools/proc-installing-vscode.adoc delete mode 100644 downstream/modules/devtools/proc-running-playbook.adoc diff --git a/downstream/assemblies/devtools/assembly-devtools-install.adoc b/downstream/assemblies/devtools/assembly-devtools-install.adoc index 4f6fcd5e83..a0c257285a 100644 --- a/downstream/assemblies/devtools/assembly-devtools-install.adoc +++ b/downstream/assemblies/devtools/assembly-devtools-install.adoc @@ -5,8 +5,22 @@ ifdef::context[:parent-context: {context}] :context: installing-devtools [role="_abstract"] +Red Hat provides two options for installing {ToolsName}. +Both options require {VSCode} (Visual Studio Code) with the Ansible extension added. -include::devtools/proc-devtools-install.adoc[leveloffset=+1] +* Installation on a RHEL container running inside {VSCode}. +You can install this option on MacOS, Windows, and Linux systems. +* Installation on your local RHEL system using an RPM (Red Hat Package Manager) package. + +== Requirements + +Ansible developer tools require Python 3.10 or later. + +include::devtools/proc-devtools-install-vsc.adoc[leveloffset=+1] +include::devtools/proc-devtools-install-vscode-extension.adoc[leveloffset=+1] +include::devtools/proc-devtools-extension-settings.adoc[leveloffset=+1] +include::devtools/proc-devtools-install-container.adoc[leveloffset=+1] +include::devtools/proc-devtools-install-rpm.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/devtools/assembly-devtools-intro.adoc b/downstream/assemblies/devtools/assembly-devtools-intro.adoc index 917ef299d5..177c798c2b 100644 --- a/downstream/assemblies/devtools/assembly-devtools-intro.adoc +++ b/downstream/assemblies/devtools/assembly-devtools-intro.adoc @@ -14,6 +14,9 @@ you can use these tools from the {VSCode} user interface. Use {ToolsName} during local development of playbooks, local testing, and in a CI pipeline (linting and testing). +This document describes how to use {ToolsName} to create a playbook project that contains playbooks and roles that you can reuse within the project. +It also describes how to test the playbooks and deploy the project on your {AAP} instance so that you can use the playbooks in automation jobs. + include::devtools/ref-devtools-components.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] diff --git a/downstream/assemblies/devtools/assembly-devtools-setup.adoc b/downstream/assemblies/devtools/assembly-devtools-setup.adoc index b5d054f0a8..2f3c1e4da9 100644 --- a/downstream/assemblies/devtools/assembly-devtools-setup.adoc +++ b/downstream/assemblies/devtools/assembly-devtools-setup.adoc @@ -7,12 +7,8 @@ ifdef::context[:parent-context: {context}] :context: devtools-setup [role="_abstract"] -include::devtools/proc-installing-vscode.adoc[leveloffset=+1] -// include::devtools/proc-directory-setup.adoc[leveloffset=+1] include::devtools/proc-setup-vscode-workspace.adoc[leveloffset=+1] -include::devtools/proc-install-vscode-extension.adoc[leveloffset=+1] -include::devtools/proc-configure-extension-settings.adoc[leveloffset=+1] -include::devtools/proc-create-python-venv.adoc[leveloffset=+1] +// include::devtools/proc-create-python-venv.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/devtools/assembly-publishing-playbook-collection-aap.adoc b/downstream/assemblies/devtools/assembly-publishing-playbook-collection-aap.adoc new file mode 100644 index 0000000000..a3753afbdc --- /dev/null +++ b/downstream/assemblies/devtools/assembly-publishing-playbook-collection-aap.adoc @@ -0,0 +1,17 @@ +ifdef::context[:parent-context: {context}] +[id="publishing-playbook-collection-aap"] + += Publishing and running your playbooks in {PlatformNameShort} + +:context: publishing-playbook-collection-aap-intro +[role="_abstract"] + +[role="_abstract"] +The following procedures describe how to deploy your new playbooks in your instance of {PlatformNameShort} so that you can use them to run automation jobs. + +include::devtools/proc-devtools-save-scm.adoc[leveloffset=+1] +include::devtools/proc-devtools-create-aap-job.adoc[leveloffset=+1] + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] + diff --git a/downstream/assemblies/devtools/assembly-writing-running-playbook.adoc b/downstream/assemblies/devtools/assembly-writing-running-playbook.adoc index 6a4faa71aa..1ff7be2f6c 100644 --- a/downstream/assemblies/devtools/assembly-writing-running-playbook.adoc +++ b/downstream/assemblies/devtools/assembly-writing-running-playbook.adoc @@ -6,9 +6,14 @@ ifdef::context[:parent-context: {context}] :context: writing-running-playbook [role="_abstract"] -include::devtools/proc-writing-playbook.adoc[leveloffset=+1] +include::devtools/proc-devtools-writing-first-playbook.adoc[leveloffset=+1] +include::devtools/proc-devtools-inspect-playbook.adoc[leveloffset=+1] +include::devtools/proc-devtools-run-playbook-extension.adoc[leveloffset=+1] +include::devtools/proc-devtools-extension-run-ansible-playbook.adoc[leveloffset=+2] +include::devtools/proc-devtools-extension-run-ansible-navigator.adoc[leveloffset=+2] +include::devtools/proc-devtools-working-with-ee.adoc[leveloffset=+2] include::devtools/proc-debugging-playbook.adoc[leveloffset=+1] -include::devtools/proc-running-playbook.adoc[leveloffset=+1] +include::devtools/proc-devtools-testing-playbook.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] diff --git a/downstream/images/devtools-extension-navigator-output.png b/downstream/images/devtools-extension-navigator-output.png new file mode 100644 index 0000000000000000000000000000000000000000..789fc805fe3321c69078667bab0835210a4fce8e GIT binary patch literal 83327 zcma&O2RPeb`#)~9I#idUcDJIaU0bWwq9|$;)E1-mh*53P)@rq=5u;X#Bv$O8)tVJE z2?;@ssED*kQn7yN^L(G@`af+y*Y$T@$vesWyzg`FbKmD)uX8-VXLOtEu)tv!78WkO zJ2y>PSoYhou&_Ni$ie(Y&GOJH^THZvdiw?o3?=l9`6bNNO3%&EkVS&|`5?p&J3-iyCpta_#wzO%4sv*_Ktem{(LW$HkrB^9~% z!LKqi}kHG_NDLy_(q>m5O2L29H!K2*Ady19y zI*pLS!tdg@rj@@wmzz6%=cnt=nn769*1`7L_UU!?_ApU8n6eqIBPTBpDdx%O>AABG z(>E}%ot^SGIC$m}3tQ}|nZ43|ra8^WwOL{_&UWnic<>KCw>URr(81W@;^Lwra(tK# zwV&+&2{(9hsELK`UyuFqHgocz_?0W(=^A$79e>`la9{M0sGX(#Eyf)|YMh=@?#-Ba^ z8b|^9@bSia-0lA4e;{A5|DYYalu^{*nH%zA-nJzdEp+{z{Fx!PeXv;GGR?m*&g|X; z!MqKn4F@>?o&0eRRyM45qM7L5XTQ!S_Mt9v+^ykWB>CFh}X6$m;q?GO9wR6%`V_gM*omAG3Ml z>!Ec(EKE<#Xr%XJ(25QCl(>>oJ!XrJFdIZ4%2N$mnn4>OGgnr;hX;+os^MgMum&*4 z=&>sp;`~gh%c?X2US^!HgfGG-B_-8W0M`aTe!S5;FrWw)bY_!KM1#a-WR!gb<%D$Y zecOtQZw5tTmzF%9r>4@kvMQngfV>I7ju9yoKmBfczeYo2|6Q}SO73ylXleEX^Tc)>lMp?nb8~b{Rgqhp~2HvvHV9@ImM9l-{qO6F-jv zbUs%*cV`np;GmEvyTeYsX%_+0`*)DRZwrsorepSY-p#ha z<$#zgDi3EKHIcTa_u8w&eJMFTm?IT?(t&Eeakz08&L zW!hRpo8k~720GpO*5f$5-piW@33uv@&!T(y%yIu_VwqnLTEv!;-`NbdX_r7qV?>_&Oc~KLY?FrfGjMZTY?7X%N0*H< zs3cd~%7m{I1aL>kH_FYn-uuT^b3_5hld<7leE+$aZ##n~@8tF}n1A8D>uJ|9;@{x8G=g*Z{9K=1ln7U*Q#8c6mrI#TV z&@>->eO4yMl7b-S$2;Hzjp?2q@3(@dnJPUnr<*F`LsLaxH2^*F8tlr`0A+7wNZWfQ zXk+aHlRtg>^cGJQC0~ck=JGa3Ta}R92m3L3!5Ar-%7932%45*_vQ+=^%xw%)) z>n6Q?^XAmBwtHwXaT#do`95u%@ zHeTkKCG$Z$kNPywy2ji~sLNMbyh^TT^KuPypFH_xO9Shw*jVdLwL+i?uTa2cS;l0Y zCi!|foIna3p*$nN36T13YlWWr$gxSwVM-kDRDNEb@6pc%*wGwcm75%e73|rD7h^- zj773??9tsPXGn^kTvk-Yhh+Z>xFwKsi;D~TL)EWwmLvSfXTE{sdQZx3i-dm?Vjqb} zcK}^e)w$}EkaD8@Lpp~VBO>PJ&8HLUQBWK9OHmp&Itt`hmS)3Osm!I*Fo+IWR>9#- z662%jlYyxkx)mwZavc$?*|hlgZEThrmhdPdI21>JkHzFYk!jzqQCWEuA1u)PZRh|| z0{6sJM?*?gC|3TefuW%yyB?P;qPslaQNUXAk)*5p#KHU2z8c$ba!mmRrl1_MW5T&aUU_@)+--cfpep zBIdHsa`% z)Bdt$lhN^3ro~oD=&M>DIja`5Z4V*BIr;)%ZtL6h`RLsN?xYxn9>imHa^ZX4wihX*Ui%T4XyF*NLl

oM@~v0UZvB56h;pAG&Cwc>+8(N#RGPN1V?f4 zK|97b)uB6Wnu_`2Z1Ot5#Vm#*dm(_tBiBPJGBFa3w<1jC76b4nnNXeORO( zw|+k{dav@4IaUh9bq5NVXr7X2w(qV+zjLZuSDW1i4^_KsB+~8$`-X~8!YhyR{pb?( zdmD3nh%z5VpCVe0d)arZpkTx*HXFDiN6q>*k{!tmR0-mB|4xRuSL19xdpiH!@mylf z*RZ1tk5hOVV~7t^$$4RV&x0v(i$@YSc*4kWOV)Lv5OamQfwVO9C{Fk@cOz9P#Hv1-g5NfqBQ^x-SjJryL+31G1=29Q*@|b z6aK^RRDA|7`XGWl?Fg@8$#atdZa~zFU_c zRw`W^wChzJ5rkPR>-M|`*Krx!h{|u_lwGn7MsI}} zUBSGJ0247GS_pC=pwk8uvV5%=l~*ZnX1R8hMp}n>TJ7U9qn;*zs5}d4L%}q0k~WDv zK{mk%%%F9xTb48D7WZRSE`_T4Xm^E14533{&8G9vPl1yi;hOz_2?Bt8OpmbKSm-qH zkf>T;js}`Lgu{$w)WKxJ#GL=$?#??TB`Dym`>=E6%pK7DRM4p5qSZUpcRywr`A)t_ z`L;hzpIYhQ0I3IpaaM!o`{aRw&*7z}OSvJcc^dY|gswR{Scu7uRI4xz->Q1p_kyUq1$-NbXvv%Fm3YrN9Nq$KNHHjbFBHXB-ZmDb`4I*X|1O4rsNwB z;tV3HjWstvLCY%4W7`-zlYxU-S^`xzx5Os0nUPpiMPU{yUNedj6lmZ1exlahHX%D7 z)f*bQ-&!CK46!W4@6U0()onu+I;t&3XE2i#GH&~j9o4bl0(5-q@Wj{>xnWw#J~*JH zOIqNmT7D+eVeC{Ej7)H2aSr&h`iaro4d33jB6xP9tzIja$MMW8lh%k546qe40)cf( zI4YdR%*wLx&_b@tCzW|f)vo0Vb4cX?t<2Y(MpB4%M-O_ z_Hd3m0Zq^00&@_~)2d|lC9PvrxaC^Ol?nbSp-+!MKJSv<(y(^oIEyPj+rRRTirh&m2L-zatnQ%w`Hida71H( zWM(8mBc=sw>gKGdqn4Fcvq~oB zhS*O(0BW4;eXq5NZlkJ#<3E=2(yVYleEXX~3{{}!;W z-|ujr!6{xePvd^QeQB7bw7Tz&xY-vLJ$4DM{fa^x=0RV~Apo+q2eJk>TU=XK93O_O zHGR@`E0Om(2bA%mAw{_yZcSWQ?MxeA_X#6=Efu)ZjO@@!l>A_nDjVCFESy!S1pCFhXcdluYJG}4@dY1BnOx=XWf-7C?*i8nixGj z2H1O4KvM)mbZo6+j#r_udF2h$(JfzcRYteZKjo-nHs08JKwY9u5`p%eu3X=-a0fpQ zi0X3;l1`9hBplgsP6!lo;R*rALIB2~TGdXkhz5qKo8TV>x!hDX&4g1!S53P?8}#l7 z`=)9Zc>8WdZ5afvSF3P(^bn#_q(W7w<6|7>K!xHXbY3p%9bVzf=sPDYvmUWB)okB+ z3+doK{7{cw&YfaH9Dk!IWs4me>XSe@Lw!(#*)(7arG=tdD^|Q7W{=5(h7!WdEL*_c zo6WEk$%<**98>@P zXmIPaMnv5by;}kWw8C$gb($0R86)<`qktY1o2ZM^0;1#1r6NU65Skm+d?S^`iv&D) zP;r>zV|cwmU@91E54aA)6j8n2LVW`2M{Bv-+Kw&zCM!a84n#83m_<)j*$hG%FIS=l zyUP@;uzsChTMrm+TgCvbK2P{MbgMR~WJ1@ewWVZ~vz6|j5jfk~)v~fEjpelk$U{+ohfqM}e!5GUmv^B~1j+NVlN0h)D z?84R$91z~y`&w*Z=KFK8y!WF`5u%LTjji%Qo&3c1U?9Z=eB3Z9_%i3tj|LAoAj&s_ zOE}ehXB�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 literal 0 HcmV?d00001 diff --git a/downstream/images/devtools-reopen-in-container.png b/downstream/images/devtools-reopen-in-container.png new file mode 100644 index 0000000000000000000000000000000000000000..3047f23bdf3a1fa8dad42daa95f1bd4cd9f473f5 GIT binary patch literal 17795 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%0AI)4i%tp>MPeMFNg^<0_dvF9GWn?`&&Tlhz3h1 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 literal 0 HcmV?d00001 diff --git a/downstream/images/vscode-extensions-icon.png b/downstream/images/vscode-extensions-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2e693328ede53d9f6cb0ee2335e5beb04d09d5a4 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uv49!D1}S`GTDlfUeeiT~4DsN7 zJH?T&$w0vMU&J7? z$tlN&S89VtQt!Stca?mF>`tDPuy+cZzZqDieNXttra$?3-7cT|j^Z;bJaQMvZf(4k zxq!FOCwIXvU5OoryV-BeiaM?x^B~xSW24N^MN6eyqmdK II;Vst00(e~jQ{`u literal 0 HcmV?d00001 diff --git a/downstream/modules/devtools/proc-configure-extension-settings.adoc b/downstream/modules/devtools/proc-configure-extension-settings.adoc deleted file mode 100644 index 7cb5f8d153..0000000000 --- a/downstream/modules/devtools/proc-configure-extension-settings.adoc +++ /dev/null @@ -1,35 +0,0 @@ -[id="configure-extension-settings"] - -= Configuring Ansible extension settings - -[role="_abstract"] - -The Ansible {VSCode} extension supports multiple configuration options. -You can configure the settings for the extension on a user level, on a workspace level, or for a particular directory. -Workspace settings are stored within your workspace and only apply when the current workspace is opened. - -It is useful to configure settings at the workspace level for the following reasons: - -* If you define and maintain configurations specific to your playbook project, you can customize your Ansible development environment for individual projects without altering your preferred setup for other work. -* You can have different settings for a Python project, an Ansible project, and a C++ project, each optimized for the respective stack without the need to manually reconfigure settings each time you switch projects. -* If you include workspace settings when setting up version control for a project you want to share with your team, everyone uses the same configuration for that project. - -.Procedure - -. To open the Ansible extension settings, click the *Extensions* icon in the activity bar. -. Select the Ansible extension, and click the *Manage* icon ({SettingsIcon}) and then btn:[Extension Settings] to display the extension settings. -+ -Alternatively, select menu:Code[Settings > Settings] to open the *Settings* page. -Enter `Ansible` in the search bar to display the extension settings. -. Select the *Workspace* tab to configure your settings for the current {VSCode} workspace. - -The Ansible extension settings are pre-populated. - -* Check the *Ansible > Validation > Lint: Enabled* box to enable ansible-lint. -* Check the *Ansible Execution Environment: Enabled* box to use an execution environment. -* Specify the execution environment image you want to use in the *Ansible > Execution Environment: image* field. -* To use Ansible Lightspeed, check the *Ansible > Lightspeed: Enabled* box, and enter the URL for Lightspeed. - -// The settings are documented on the link:https://marketplace.visualstudio.com/items?itemName=redhat.ansible[Ansible VS Code Extension by Red Hat page] in the VisualStudio marketplace documentation. - - diff --git a/downstream/modules/devtools/proc-create-molecule-scenario.adoc b/downstream/modules/devtools/proc-create-molecule-scenario.adoc index ca32ca2e62..30243c5b2b 100644 --- a/downstream/modules/devtools/proc-create-molecule-scenario.adoc +++ b/downstream/modules/devtools/proc-create-molecule-scenario.adoc @@ -1,4 +1,4 @@ -[id="create-molcule-scenario"] +[id="create-molcule-scenario_{context}"] = Creating a molecule scenario diff --git a/downstream/modules/devtools/proc-create-python-venv.adoc b/downstream/modules/devtools/proc-create-python-venv.adoc index 7198090501..1b5a1759c6 100644 --- a/downstream/modules/devtools/proc-create-python-venv.adoc +++ b/downstream/modules/devtools/proc-create-python-venv.adoc @@ -1,4 +1,4 @@ -[id="create-python-venv"] +[id="create-python-venv_{context}"] = Creating a Python virtual environment diff --git a/downstream/modules/devtools/proc-debugging-playbook.adoc b/downstream/modules/devtools/proc-debugging-playbook.adoc index 1a4fa2d9c3..3d43e9e28e 100644 --- a/downstream/modules/devtools/proc-debugging-playbook.adoc +++ b/downstream/modules/devtools/proc-debugging-playbook.adoc @@ -1,26 +1,7 @@ -[id="debugging-playbook"] +[id="debugging-playbook_{context}"] = Debugging your playbook -[role="_abstract"] -The Ansible extension provides syntax highlighting and assists you with indentation in `.yml` files. - -The following rules apply for playbook files: - -* Every playbook file must finish with a blank line. -* Trailing spaces at the end of lines are not allowed. -* Every playbook and every play require an identifier (name). - -== Inline help - -* If you hover your mouse over a keyword or a module name, the Ansible extension provides documentation: -+ -image::ansible-lint-keyword-help.png[Ansible-lint showing no errors in a playbook] -* If you begin to type the name of a module, for example `ansible.builtin.ping`, the extension provides a list of suggestions. -Select one of the suggestions to autocomplete the line. -+ -image::ansible-lint-module-completion.png[Ansible-lint showing no errors in a playbook] - == Error messages The following playbook contains multiple errors: @@ -39,7 +20,7 @@ Hover your mouse over an error to view the details: image::ansible-lint-errors.png[Popup message explaining a playbook error] The errors are listed in the *Problems* tab of the {VSCode} terminal. -Playbook files that contain errors are indicated with a number in the Explorer pane: +Playbook files that contain errors are indicated with a number in the *Explorer* pane: image::ansible-lint-errors-explorer.png[Playbook errors shown in Problems tab and explorer list] diff --git a/downstream/modules/devtools/proc-devtools-create-aap-job.adoc b/downstream/modules/devtools/proc-devtools-create-aap-job.adoc new file mode 100644 index 0000000000..207bb1cf6f --- /dev/null +++ b/downstream/modules/devtools/proc-devtools-create-aap-job.adoc @@ -0,0 +1,17 @@ +[id="create-aap-job_{context}"] + += Running your playbook in {PlatformNameShort} + +To run your playbook in {PlatformNameShort}, you must create a project in {ControllerName} for the repository where you stored your playbook project. +You can then create a job template for each playbook from the project. + +.Procedure + +. In a browser, log in to {controllername}. +. Configure a Source Control credential type for your source control system if necessary. See the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-getting-started-create-credential[Creating new credentials] section of the _Automation controller user guide_ for more details. +. In {controllername}, create a project for the GitHub repository where you stored your playbook project. +Refer to the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-projects[Projects] chapter of the _Automation controller user guide_. +. Create a job template that uses a playbook from the project that you created. +Refer to the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-create-job-template[Job Templates] chapter of the _Automation controller user guide_. +. Run your playbook from {ControllerName} by launching the job template. Refer to the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/automation_controller_user_guide/index#controller-launch-job-template[Launching a job template] section of the _Automation controller user guide_. + diff --git a/downstream/modules/devtools/proc-devtools-extension-run-ansible-navigator.adoc b/downstream/modules/devtools/proc-devtools-extension-run-ansible-navigator.adoc new file mode 100644 index 0000000000..4e12ae7d4b --- /dev/null +++ b/downstream/modules/devtools/proc-devtools-extension-run-ansible-navigator.adoc @@ -0,0 +1,28 @@ +[id="extension-run-ansible-navigator_{context}"] + += Running your playbook with `ansible-navigator` + +.Prerequisites + +* In the Ansible extension settings, enable the use of an execution environment in *Ansible Execution Environment > Enabled*. +* Enter the path or URL for the execution environment image in *Ansible > Execution Environment: Image*. + +.Procedure + +. To run a playbook, right-click the playbook name in the Explorer pane, then select menu:Run Ansible Playbook via[Run playbook via ansible-navigator run]. ++ +The output is displayed in the *Terminal* tab of the {VSCode} terminal. +The *Successful* status indicates that the playbook ran successfully. ++ +image:devtools-extension-navigator-output.png[Output for ansible-navigator execution] +. Enter the number next to a play to step into the play results. +The example playbook only contains one play. +Enter `0` to view the status of the tasks executed in the play. ++ +image:devtools-extension-navigator-tasks.png[Tasks in ansible-navigator output] ++ +Type the number next to a task to review the task results. + +For more information on running playbooks with {Navigator}, see +link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/automation_content_navigator_creator_guide/assembly-execute-playbooks-navigator_ansible-navigator#proc-execute-playbook-tui_execute-playbooks-navigator[Executing a playbook from automation content navigator]. + diff --git a/downstream/modules/devtools/proc-devtools-extension-run-ansible-playbook.adoc b/downstream/modules/devtools/proc-devtools-extension-run-ansible-playbook.adoc new file mode 100644 index 0000000000..ed06f34572 --- /dev/null +++ b/downstream/modules/devtools/proc-devtools-extension-run-ansible-playbook.adoc @@ -0,0 +1,15 @@ +[id="extension-run-ansible-playbook_{context}"] + += Running your playbook with `ansible-playbook` + +.Procedure + +* To run a playbook, right-click the playbook name in the *Explorer* pane, then select menu:Run Ansible Playbook via[Run playbook via `ansible-playbook`]. ++ +image:ansible-playbook-run.png[Run playbook via ansible-playbook] + +The output is displayed in the *Terminal* tab of the {VSCode} terminal. +The `ok=2` and `failed=0` messages indicate that the playbook ran successfully. + +image:ansible-playbook-success.png[Success message for ansible-playbook execution] + diff --git a/downstream/modules/devtools/proc-devtools-extension-settings.adoc b/downstream/modules/devtools/proc-devtools-extension-settings.adoc new file mode 100644 index 0000000000..ec157d0953 --- /dev/null +++ b/downstream/modules/devtools/proc-devtools-extension-settings.adoc @@ -0,0 +1,37 @@ +[id="devtools-extension-settings_{context}"] + += Configuring Ansible extension settings + +[role="_abstract"] + +The Ansible extension supports multiple configuration options. + +You can configure the settings for the extension on a user level, on a workspace level, or for a particular directory. +User-based settings are applied globally for any instance of VS Code that is opened. +Workspace settings are stored within your workspace and only apply when the current workspace is opened. + +It is useful to configure settings for your workspace for the following reasons: + +* If you define and maintain configurations specific to your playbook project, +you can customize your Ansible development environment for individual projects without altering your preferred setup for other work. +You can have different settings for a Python project, an Ansible project, and a C++ project, each optimized for the respective stack without the need to manually reconfigure settings each time you switch projects. +* If you include workspace settings when setting up version control for a project you want to share with your team, everyone uses the same configuration for that project. + +.Procedure + +. Open the Ansible extension settings: +.. Click the 'Extensions' icon in the activity bar. +.. Select the Ansible extension, and click the 'gear' icon and then *Extension Settings* to display the extension settings. ++ +Alternatively, click menu:Code[Settings>Settings] to open the *Settings* page. +.. Enter `Ansible` in the search bar to display the settings for the extension. +. Select the *Workspace* tab to configure your settings for the current {VSCode} workspace. +. The Ansible extension settings are pre-populated. +Modify the settings to suit your requirements: +** Check the menu:Ansible[Validation > Lint: Enabled] box to enable ansible-lint. +** Check the `Ansible Execution Environment: Enabled` box to use an {ExecEnvShort}. +** Specify the {ExecEnvShort} image you want to use in the *Ansible > Execution Environment: image* field. +** To use {LightspeedShortName}, check the *Ansible > Lightspeed: Enabled* box, and enter the URL for Lightspeed. + +The settings are documented on the link:https://marketplace.visualstudio.com/items?itemName=redhat.ansible[Ansible {VSCode} Extension by Red Hat page] in the VisualStudio marketplace documentation. + diff --git a/downstream/modules/devtools/proc-devtools-inspect-playbook.adoc b/downstream/modules/devtools/proc-devtools-inspect-playbook.adoc new file mode 100644 index 0000000000..e030590516 --- /dev/null +++ b/downstream/modules/devtools/proc-devtools-inspect-playbook.adoc @@ -0,0 +1,26 @@ +[id="inspect-playbook_context_{context}"] + += Inspecting your playbook + +[role="_abstract"] +The Ansible {VSCode} extension provides syntax highlighting and assists you with indentation in `.yml` files. + +The following rules apply for playbook files: + +* Every playbook file must finish with a blank line. +* Trailing spaces at the end of lines are not allowed. +* Every playbook and every play require an identifier (name). + +== Inline help + +The Ansible extension also provides inline help when you are editing your playbook file. + +* If you hover your mouse over a keyword or a module name, the Ansible extension provides documentation: ++ +image::ansible-lint-keyword-help.png[Ansible-lint showing no errors in a playbook] +* If you begin to type the name of a module, for example `ansible.builtin.ping`, the extension provides a list of suggestions. ++ +Select one of the suggestions to autocomplete the line. ++ +image::ansible-lint-module-completion.png[Ansible-lint showing no errors in a playbook] + diff --git a/downstream/modules/devtools/proc-devtools-install-container.adoc b/downstream/modules/devtools/proc-devtools-install-container.adoc new file mode 100644 index 0000000000..c2295974d2 --- /dev/null +++ b/downstream/modules/devtools/proc-devtools-install-container.adoc @@ -0,0 +1,95 @@ +[id="devtools-install-container_{context}"] + += Installing {ToolsName} on a container inside {VSCode} + + +The Dev Containers {VSCode} extension requires a config file to store settings for your dev containers. +After you have created a config file for your dev container, reopen your directory in a container in {VSCode}. + +.Prerequisites + +. You have installed a containerization platform, for example Podman, Podman Desktop, Docker, or Docker Desktop. +. You have a Red Hat login and you can login to the Red Hat registry at registry.redhat.io. +. You have installed {VSCode}. +. You have installed the Ansible extension in {VSCode}. +. You have installed the link:https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers[Microsoft Dev Containers] extension in {VSCode}. + +.Procedure + +. In {VSCode}, open the directory where you want to store the configuration files for your development container. +. Create a subdirectory called `.devcontainer`. +. In the `.devcontainer` directory, create a file called `devcontainer.json`. ++ +You must use different settings depending on whether you are using Podman or Docker. + +** If you are using Podman or Podman desktop, add the following text to `devcontainer.json`: ++ +---- +{ + "name": "ansible-dev-container-podman", + "image": "registry.redhat.io/ansible-automation-platform-25/ansible-dev-tools-rhel8:latest", + "containerUser": "root", + "runArgs": [ + "--cap-add=SYS_ADMIN", + "--cap-add=SYS_RESOURCE", + "--device", + "/dev/fuse", + "--security-opt", + "seccomp=unconfined", + "--security-opt", + "label=disable", + "--security-opt", + "apparmor=unconfined", + "--userns=host", + "--hostname=ansible-dev-container", + "--volume", + "ansible-dev-tools-container-storage:/var/lib/containers" + ], + "customizations": { + "VS Codevscode": { + "extensions": ["redhat.ansible"] + } + } +} +---- +** If you are using Docker or Docker desktop, add the following text to `devcontainer.json`: ++ +---- +{ + "name": "ansible-dev-container-docker", + "image": "registry.redhat.io/ansible-automation-platform-25/ansible-dev-tools-rhel8:latest", + "containerUser": "podman", + "runArgs": [ + "--security-opt", + "seccomp=unconfined", + "--security-opt", + "label=disable", + "--cap-add=SYS_ADMIN", + "--cap-add=SYS_RESOURCE", + "--device", + "/dev/fuse", + "--security-opt", + "apparmor=unconfined", + "--hostname=ansible-dev-container" + ], + "updateRemoteUserUID": true, + "customizations": { + "VS Codevscode": { + "extensions": ["redhat.ansible"] + } + } +} +---- +. Reopen the directory in a container. +** If {VSCode} detects that your directory contains the `devcontainer.json` file, the following notification appears: ++ +image::devtools-reopen-in-container.png[Reopen in container] ++ +Click *Reopen in Container*. +** If the notification does not appear, click the `Remote` (image:vscode-remote-icon.png[Remote,15,15]) icon. In the dropdown menu that appears, select *Reopen in Container*. + +The *Remote ()* status in the {VSCode} Status bar displays `opening Remote` and a notification indicates the progress in opening the container. + +.Verification +When the directory reopens in a container, the *Remote ()* status displays `Dev Container: ansible-dev-container`. + diff --git a/downstream/modules/devtools/proc-devtools-install.adoc b/downstream/modules/devtools/proc-devtools-install-rpm.adoc similarity index 72% rename from downstream/modules/devtools/proc-devtools-install.adoc rename to downstream/modules/devtools/proc-devtools-install-rpm.adoc index 5548275f93..a55e26b082 100644 --- a/downstream/modules/devtools/proc-devtools-install.adoc +++ b/downstream/modules/devtools/proc-devtools-install-rpm.adoc @@ -1,15 +1,15 @@ -[id="devtools-install_context"] +[id="devtools-install_{context}"] -= Installing {ToolsName} from an RPM package += Installing {ToolsName} from a package on RHEL [role="_abstract"] {ToolsName} is bundled in the {PlatformNameShort} RPM (Red Hat Package Manager) package. -// As an {PlatformNameShort} administrator, you can install {ToolsName} when you are installing {PlatformNameShort}. -Refer to the {PlatformNameShort} guide for more information on installing {PlatformNameShort}. +Refer to the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_installation_guide[_{PlatformName} Installation guide_] documentation for information on installing {PlatformNameShort}. .Prerequisites -* You have installed RHEL + +* You have installed RHEL. * You have registered your system with Red Hat Subscription Manager. .Procedure @@ -73,15 +73,16 @@ On successful installation, you can view the help documentation for ansible-crea ---- $ ansible-creator --help -usage: ansible-creator [-h] [--version] {init} ... +usage: ansible-creator [-h] [--version] command ... -Tool to scaffold Ansible Content. Get started by looking at the help text. +The fastest way to generate all your ansible content. -options: - -h, --help show this help message and exit - --version Print ansible-creator version and exit. +Positional arguments: + command + add Add resources to an existing Ansible project. + init Initialize a new Ansible project. -Commands: - {init} The subcommand to invoke. - init Initialize an Ansible Collection. +Options: + --version Print ansible-creator version and exit. + -h --help Show this help message and exit ---- diff --git a/downstream/modules/devtools/proc-devtools-install-vsc.adoc b/downstream/modules/devtools/proc-devtools-install-vsc.adoc new file mode 100644 index 0000000000..708dda26af --- /dev/null +++ b/downstream/modules/devtools/proc-devtools-install-vsc.adoc @@ -0,0 +1,8 @@ +[id="devtools-install-vsc_{context}"] + += Installing {VScode} + +[role="_abstract"] + +To install {VScode}, follow the instructions on the link:https://code.visualstudio.com/download[Download Visual Studio Code page] in the Visual Studio Code documentation. + diff --git a/downstream/modules/devtools/proc-devtools-install-vscode-extension.adoc b/downstream/modules/devtools/proc-devtools-install-vscode-extension.adoc new file mode 100644 index 0000000000..dd98e482f8 --- /dev/null +++ b/downstream/modules/devtools/proc-devtools-install-vscode-extension.adoc @@ -0,0 +1,28 @@ +[id="devtools-install-extension_{context}"] + += Installing the {VSCode} Ansible extension + +[role="_abstract"] + +The Ansible extension adds language support for Ansible to {VSCode}. +It incorporates {ToolsName} to facilitate creating and running automation content. + +For a full description of the Ansible extension, see the link:https://marketplace.visualstudio.com/items?itemName=redhat.ansible[Visual Studio Code Marketplace]. + +See link:https://red.ht/aap-lp-vscode-essentials[Learning path - Getting Started with the Ansible {VSCode} Extension] for tutorials on working with the extension. + +To install the Ansible {VSCode} extension: + +. Open {VSCode}. +. Click the *Extensions* (image:vscode-extensions-icon.png[Extensions,15,15]) icon in the Activity Bar, or click menu:View[Extensions], to display the *Extensions* view. +. In the search field in the *Extensions* view, type `Ansible Red Hat`. +. Select the Ansible extension and click btn:[Install]. + +.Verification + +When the Ansible extension is enabled, create or open a `.yml` file in VS Code. It can be an empty file. +The language identified for the .yml file is Ansible. +It is displayed in the Status bar. + +When the language for a file is recognized as Ansible, the Ansible extension provides features such as auto-completion, hover, diagnostics, and goto. + diff --git a/downstream/modules/devtools/proc-devtools-run-playbook-extension.adoc b/downstream/modules/devtools/proc-devtools-run-playbook-extension.adoc new file mode 100644 index 0000000000..14b60a3d7b --- /dev/null +++ b/downstream/modules/devtools/proc-devtools-run-playbook-extension.adoc @@ -0,0 +1,12 @@ +[id="running-playbook-extension_{context}"] + += Running your playbook + +[role="_abstract"] + +The Ansible {VSCode} extension provides two options to run your playbook: + +* `ansible-playbook` runs the playbook on your local machine using Ansible Core. +* `ansible-navigator` runs the playbook in an execution environment in the same manner that {PlatformNameShort} runs an automation job. +You specify the base image for the execution environment in the Ansible extension settings. + diff --git a/downstream/modules/devtools/proc-devtools-save-scm.adoc b/downstream/modules/devtools/proc-devtools-save-scm.adoc new file mode 100644 index 0000000000..77df62e906 --- /dev/null +++ b/downstream/modules/devtools/proc-devtools-save-scm.adoc @@ -0,0 +1,11 @@ +[id="devtools-save-scm_{context}"] + += Saving your project in SCM + +Save your playbook project as a repository in your source control management system, for example GitHub. + +.Procedure + +. Initialize your project directory as a git repository. +. Push your project up to a source control system such as GitHub. + diff --git a/downstream/modules/devtools/proc-devtools-testing-playbook.adoc b/downstream/modules/devtools/proc-devtools-testing-playbook.adoc new file mode 100644 index 0000000000..5e9229e8ec --- /dev/null +++ b/downstream/modules/devtools/proc-devtools-testing-playbook.adoc @@ -0,0 +1,31 @@ +[id="test-playbook_{context}"] + += Testing your playbooks + +[role="_abstract"] + +To test your playbooks in your project, run them in a non-production environment such as a lab setup or a virtual machine. + +{NavigatorStart} (`ansible-navigator`) is a text-based user interface (TUI) for developing and troubleshooting Ansible content with execution environments. + +Running a playbook using `ansible-navigator` generates verbose output that you can inspect to check whether the playbook is running the way you expected. +You can specify the execution environment that you want to run your playbooks on, so that your tests replicate the production setup on {PlatformNameShort}: + +* To run a playbook on an execution environment, run the following command from the terminal in {VsCode}: ++ +---- +$ ansible-navigator run -eei +---- +For example, to execute a playbook called `site.yml` on the {PlatformNameShort} RHEL 9 minimum execution environment, run the following command from the terminal in VS Code. ++ +---- +ansible-navigator run site.yml --eei ee-minimal-rhel8 +---- + +The output is displayed in the terminal. +You can inspect the results and step into each play and task that was executed. + +For more information about running playbooks, refer to +link:https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.4/html/automation_content_navigator_creator_guide/assembly-execute-playbooks-navigator_ansible-navigator[Running Ansible playbooks with automation content navigator] +in the _Automation content navigator creator guide_. + diff --git a/downstream/modules/devtools/proc-devtools-working-with-ee.adoc b/downstream/modules/devtools/proc-devtools-working-with-ee.adoc new file mode 100644 index 0000000000..bc0dd8cab8 --- /dev/null +++ b/downstream/modules/devtools/proc-devtools-working-with-ee.adoc @@ -0,0 +1,25 @@ +[id="working-with-ee_{context}"] + += Working with execution environments + +[role="_abstract"] + +You can view the automation execution environments provided by Red Hat in the +link:https://catalog.redhat.com/search?searchType=containers&build_categories_list=Automation%20execution%20environment&p=1[Red Hat Ecosystem Catalog]. + +Click on an execution environment for information on how to download it. + +For example, to download the minimal RHEL 8 base image, run the following command: +---- +$ podman pull registry.redhat.io/ansible-automation-platform-25/ee-minimal-rhel9 +---- + +You can build and create custom execution environments with `ansible-builder`. +For more information about working with execution environments locally, see +link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/creating_and_consuming_execution_environments/index[_Creating and consuming execution environments_]. + +After customizing your execution environment, you can push your new image to the container registry in automation hub. See +link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/creating_and_consuming_execution_environments/index#assembly-publishing-exec-env[Publishing an automation execution environment] +in the _Creating and consuming execution environments_ documentation. +link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/creating_and_consuming_execution_environments/index[Creating and consuming execution environments]. + diff --git a/downstream/modules/devtools/proc-writing-playbook.adoc b/downstream/modules/devtools/proc-devtools-writing-first-playbook.adoc similarity index 56% rename from downstream/modules/devtools/proc-writing-playbook.adoc rename to downstream/modules/devtools/proc-devtools-writing-first-playbook.adoc index 1374505b45..4b1f4625ca 100644 --- a/downstream/modules/devtools/proc-writing-playbook.adoc +++ b/downstream/modules/devtools/proc-devtools-writing-first-playbook.adoc @@ -7,17 +7,15 @@ The instructions below describe how {ToolsName} help you to create and run your .Prerequisites -.You have installed and opened the Ansible {VSCode} extension. -.You have installed `ansible-devtools`. -.You have set up and activated a Python virtual environment in {VSCode}. -.You have opened a terminal in {VSCode}. +* You have installed and opened the Ansible {VSCode} extension. +* You have opened a terminal in {VSCode}. +* You have installed `ansible-devtools`. .Procedure -. Open a YAML file in {VSCode} for your playbook. -You can create a new file or use the empty placeholder YAML file that you set up when you created the directory and playbook. +. Create a new .yml file in {VSCode} for your playbook, for example `example_playbook.yml`. Put it in the same directory level as the example `site.yml` file. . Add the following example code into the playbook file and save the file. -The playbook consists of a single play that executes a ping to your local machine. +The playbook consists of a single play that executes a `ping` to your local machine. + ---- - name: My first play @@ -30,5 +28,6 @@ The playbook consists of a single play that executes a ping to your local machin + `Ansible-lint` runs in the background and displays errors in the *Problems* tab of the terminal. There are no errors in this playbook: - ++ image::ansible-lint-no-errors.png[Ansible-lint showing no errors in a playbook] +. Save your playbook file. diff --git a/downstream/modules/devtools/proc-directory-setup.adoc b/downstream/modules/devtools/proc-directory-setup.adoc index 6bf73ecd20..3deaa52afc 100644 --- a/downstream/modules/devtools/proc-directory-setup.adoc +++ b/downstream/modules/devtools/proc-directory-setup.adoc @@ -1,4 +1,4 @@ -[id="directory-setup"] +[id="directory-setup_{context}"] = Setting up a directory for your playbooks diff --git a/downstream/modules/devtools/proc-install-vscode-extension.adoc b/downstream/modules/devtools/proc-install-vscode-extension.adoc deleted file mode 100644 index 1c40f624fe..0000000000 --- a/downstream/modules/devtools/proc-install-vscode-extension.adoc +++ /dev/null @@ -1,30 +0,0 @@ -[id="install-vscode-extension"] - -= Installing the Ansible {VSCode} extension - -[role="_abstract"] - -The Ansible extension adds language support for Ansible to {VSCode}. -It incorporates {ToolsName} to facilitate creating and running automation content. - -For a full description of the Ansible extension, see the link:https://marketplace.visualstudio.com/items?itemName=redhat.ansible[Visual Studio Code Marketplace]. - -// See link:URL[Learning path - Getting Started with the Ansible {VSCode} Extension] for interactive training on working with the extension. - -To install the Ansible {VSCode} extension: - -. Click the *Extensions* icon in the {VSCode} Activity Bar, or select menu:View[Extensions], to display the *Extensions* view. -. In the search field in the *Extensions* view, type "Ansible Red Hat". -. Select the Ansible extension and click btn:[Install]. - -The Ansible extension becomes active when you open a workspace or directory that contains one of the following files: - -* Files with a `.yml`, `.yaml`, `.ansible.yml` or `.ansible.yaml` extension. -* Common YAML filenames recognized by Ansible, such as `site.yml` -* YAML files whose names contain "playbook". - -Open a `.yml` file in your workspace. The language identified for the file is displayed in the Status bar. - -When the language for a file is recognized as Ansible, the Ansible extension provides features for creating Ansible Playbooks and task files, such as auto-completion, hover, diagnostics, and goto. - - diff --git a/downstream/modules/devtools/proc-installing-vscode.adoc b/downstream/modules/devtools/proc-installing-vscode.adoc deleted file mode 100644 index a1b40b85a5..0000000000 --- a/downstream/modules/devtools/proc-installing-vscode.adoc +++ /dev/null @@ -1,10 +0,0 @@ -[id="installing-vscode_context"] - -= Installing {VSCode} - -[role="_abstract"] - -VS Code is a free open-source code editor available on Linux, Mac, and Windows. - -To install VS Code, follow the instructions on the link:https://code.visualstudio.com/download[Download Visual Studio Code page] in the Visual Studio Code documentation. - diff --git a/downstream/modules/devtools/proc-running-playbook.adoc b/downstream/modules/devtools/proc-running-playbook.adoc deleted file mode 100644 index 303b180a20..0000000000 --- a/downstream/modules/devtools/proc-running-playbook.adoc +++ /dev/null @@ -1,36 +0,0 @@ -[id="running-playbook"] - -= Running your playbook - -[role="_abstract"] - -The Ansible {VSCode} extension provides two options to run your playbook: - -* `ansible-playbook` runs the playbook on your local machine using Ansible Core. -* `ansible-navigator` runs the playbook in an execution environment in the same manner that {PlatformNameShort} runs an automation job. -You specify the base image for the execution environment in the Ansible extension settings. - -== Running your playbook with `ansible-playbook` - -.Procedure - -* To run a playbook, right-click the playbook name in the Explorer pane, then select menu:Run Ansible Playbook via[Run playbook via `ansible-playbook`]. - -image:ansible-playbook-run.png[Run playbook via ansible-playbook] - -The output is displayed in the *Terminal* tab of the {VSCode} terminal. -The `ok=2` and `failed=0` messages indicate that the playbook ran successfully. - -image:ansible-playbook-success.png[Success message for ansible-playbook execution] - -== Running your playbook with `ansible-navigator` - -.Prerequisites - -* In the Ansible extension settings, enable the use of an execution environment in Ansible Execution Environment > Enabled. -* Enter the path or URL for the execution environment image in Ansible > Execution Environment: Image. - -.Procedure - -* To run a playbook, right-click the playbook name in the Explorer pane, then select menu:Run Ansible Playbook via[Run playbook via ansible-navigator run]. - diff --git a/downstream/modules/devtools/proc-scaffolding-playbook-project.adoc b/downstream/modules/devtools/proc-scaffolding-playbook-project.adoc index 57e07294fb..47bf3c4139 100644 --- a/downstream/modules/devtools/proc-scaffolding-playbook-project.adoc +++ b/downstream/modules/devtools/proc-scaffolding-playbook-project.adoc @@ -1,4 +1,4 @@ -[id="scaffolding-playbook-project"] +[id="scaffolding-playbook-project_context"] = Scaffolding a playbook project @@ -15,19 +15,32 @@ The following steps describe the process for scaffolding a new playbook project .Procedure +. Open {VSCode}. . Click the Ansible icon in the {VSCode} activity bar to open the Ansible extension. -. Type kbd:[Ctrl+Shift+P] to display the VSCode command palette. -. In the input field, enter `Create new Ansible project`. The **Create Ansible Project** tab opens. -. Enter a name for the directory where you want to scaffold your new playbook project. +. Select *Get started* in the *Ansible content creator* section. ++ +The *Ansible content creator* tab opens. +. In the *Create* section, click *Ansible playbook project*. ++ +The *Create Ansible project* tab opens. +. In the form in the *Create Ansible project* tab, enter the following: ++ +* *Destination directory*: Enter the path to the directory where you want to scaffold your new playbook project. + [NOTE] ==== -If you enter a current directory name, the scaffolding process will overwrite the contents of that directory. +If you enter an existing directory name, the scaffolding process overwrites the contents of that directory. +The scaffold process only allows you to use an existing directory if you enable the `Force` option. ==== -. Add an organization name and a project name. -. Click btn:[Create] to begin creating your project. +** If you are using the containerized version of Ansible Dev tools, the destination directory path is relative to the container, not a path in your local system. To discover the current directory name in the container, run the `pwd` command in a terminal in VS Code. If the current directory in the container is `workspaces`, enter `workspaces/`. +** If you are using a locally installed version of Ansible Dev tools, enter the full path to the directory, for example `/user//projects/`. +* *SCM organization and SCM project*: Enter a name for the directory and subdirectory where you can store roles that you create for your playbooks. +. Enter a name for the directory where you want to scaffold your new playbook project. -After the project directory has been created, the following message appears in the Logs pane of the Create Ansible Project tab: +.Verification + +After the project directory has been created, the following message appears in the *Logs* pane of the *Create Ansible Project* tab. +In this example, the destination directory name is `destination_directory_name`. ---- ------------------ ansible-creator logs ------------------ @@ -37,17 +50,34 @@ After the project directory has been created, the following message appears in t The following directories and files are created in your project directory: ---- +$ tree -a -L 5 . +├── .devcontainer +│   ├── devcontainer.json +│   ├── docker +│   │   └── devcontainer.json +│   └── podman +│   └── devcontainer.json +├── .gitignore ├── README.md ├── ansible-navigator.yml ├── ansible.cfg ├── collections -│ ├── ansible_collections -│ └── requirements.yml +│   ├── ansible_collections +│   │   └── scm_organization_name +│   │   └── scm_project_name +│   └── requirements.yml ├── devfile.yaml ├── inventory -│ ├── group_vars -│ ├── host_vars -│ └── hosts.yml +│   ├── group_vars +│   │   ├── all.yml +│   │   └── web_servers.yml +│   ├── host_vars +│   │   ├── server1.yml +│   │   ├── server2.yml +│   │   ├── server3.yml +│   │   ├── switch1.yml +│   │   └── switch2.yml +│   └── hosts.yml ├── linux_playbook.yml ├── network_playbook.yml └── site.yml diff --git a/downstream/modules/devtools/proc-setup-vscode-workspace.adoc b/downstream/modules/devtools/proc-setup-vscode-workspace.adoc index ddd87b26be..9f238252ed 100644 --- a/downstream/modules/devtools/proc-setup-vscode-workspace.adoc +++ b/downstream/modules/devtools/proc-setup-vscode-workspace.adoc @@ -1,4 +1,4 @@ -[id="setup-vscode-workspace"] +[id="setup-vscode-workspace_{context}"] = Setting up a {VSCode} workspace diff --git a/downstream/modules/devtools/ref-devtools-components.adoc b/downstream/modules/devtools/ref-devtools-components.adoc index a086e4f822..2de31c17e5 100644 --- a/downstream/modules/devtools/ref-devtools-components.adoc +++ b/downstream/modules/devtools/ref-devtools-components.adoc @@ -1,26 +1,28 @@ -[id="devtools-components_context"] +[id="devtools-components_{context}"] = {ToolsName} components [role="_abstract"] -You can access most {ToolsName} from the Ansible {VSCode} extension, and others from the command line. +You can operate some {ToolsName} from the {VSCode} UI when you have installed the Ansible extension, +and the remainder from the command line. +{VSCode} is a free open-source code editor available on Linux, Mac, and Windows. -* Ansible {VSCode} extension: -This is not packaged with the {PlatformNameShort} RPM package, but it is an integral part of the automation creation process. -From the Ansible {VSCode} extension, you can use the {ToolsName} for the following tasks: +Ansible {VSCode} extension:: +This is not packaged with the {PlatformNameShort} RPM package, but it is an integral part of the automation creation workflow. +From the {VSCode} UI, you can use the {ToolsName} for the following tasks: + -- ** Scaffold directories for a playbook project or a collection. ** Write playbooks with the help of syntax highlighting and auto-completion. ** Debug your playbooks with a linter. -** Execute playbooks with Ansible Core with `ansible-playbook`. +** Execute playbooks with Ansible Core using `ansible-playbook`. ** Execute playbooks in an execution environment with `ansible-navigator`. -- + From the {VSCode} extension, you can also connect to {LightspeedFullName}. -* Command-line {ToolsName}: you can perform the following tasks with {ToolsName} from the command line, +Command-line {ToolsName}:: You can perform the following tasks with {ToolsName} from the command line, including the terminal in {VSCode}: ** Create an execution environment. ** Test your playbooks, roles, modules, plugins and collections. diff --git a/downstream/modules/devtools/ref-devtools-workflow.adoc b/downstream/modules/devtools/ref-devtools-workflow.adoc index 5e1e51c94d..fd84607110 100644 --- a/downstream/modules/devtools/ref-devtools-workflow.adoc +++ b/downstream/modules/devtools/ref-devtools-workflow.adoc @@ -1,21 +1,28 @@ -[id="devtools-workflow_context"] +[id="devtools-workflow_{context}"] = Workflow [role="_abstract"] -In the build stage, you create a new playbook project within a virtual environment, using {VSCode}. The following is a typical workflow: +== Create + +In the create stage, you create a new playbook project locally, using {VSCode}. The following is a typical workflow: . Install and run the Ansible extension in {VSCode}. -. Create or open a workspace for your playbooks directory in {VSCode}. -. Create and activate a Python virtual environment for your workspace and select it in {VSCode}. . Scaffold a playbook project from {VSCode}. -. Add the collection names that your playbook uses to the requirements file. -// . Use ansible-dev-environment to create a virtual environment for your project. This installs any dependencies from the requirements file. -. Edit your playbook. Ansible-lint suggests corrections. -. Add roles in the roles directory. -. Create an execution environment that reflects the environment that {PlatformNameShort} uses. -. Run your playbooks from the Ansible extension. -// . As you develop your playbooks and roles, you can incorporate new dependencies into your virtual environment by re-running ansible-dev-environment. -// . Use `molecule` to test your playbooks. Create one scenario for every playbook in your project. +. Add playbook files to your project and edit them in {VSCode}. + +== Test + +. Debug your playbook with the help of `ansible-lint`. +. Select or create an {ExecEnvNameSing} so that your local environment replicates the environment on {PlatformNameShort}. +. Run your playbooks from {VSCode}, using `ansible-playbook` or using `ansible-navigator` with an {ExecEnvShort}. +. Test your playbooks by running them on an {ExecEnvShort} that replicates your production environment. + +== Deploy + +. Push your playbooks project to a source control repository. +. Set up credentials on {PlatformNameShort} to pull from your source control repository and create a project for your playbook repository. +. If you have created an {ExecEnvShort}, push it to {PrivateHubName}. +. Create a job template on {PlatformNameShort} that runs a playbook from your project, and specify the {ExecEnvShort} that you want to use. diff --git a/downstream/titles/develop-automation-content/master.adoc b/downstream/titles/develop-automation-content/master.adoc index b737db04d7..e04f9e2baf 100644 --- a/downstream/titles/develop-automation-content/master.adoc +++ b/downstream/titles/develop-automation-content/master.adoc @@ -19,8 +19,9 @@ include::{Boilerplate}[] include::devtools/assembly-devtools-intro.adoc[leveloffset=+1] include::devtools/assembly-developer-workflow.adoc[leveloffset=+1] include::devtools/assembly-devtools-install.adoc[leveloffset=+1] -include::devtools/assembly-devtools-setup.adoc[leveloffset=+1] +// include::devtools/assembly-devtools-setup.adoc[leveloffset=+1] include::devtools/assembly-creating-playbook-project.adoc[leveloffset=+1] include::devtools/assembly-writing-running-playbook.adoc[leveloffset=+1] // include::devtools/assembly-testing-playbooks.adoc[leveloffset=+1] +include::devtools/assembly-publishing-playbook-collection-aap.adoc[leveloffset=+1] From 9a56a6f468731294e87b1dde1d98e93f34a1da71 Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Wed, 14 Aug 2024 18:21:29 +0100 Subject: [PATCH 089/590] AAP-29276 Add minimum Python 3.10 requirement to navigator doc (#1738) (#1744) --- .../modules/navigator/proc-installing-navigator-rhel-rpm.adoc | 1 + 1 file changed, 1 insertion(+) diff --git a/downstream/modules/navigator/proc-installing-navigator-rhel-rpm.adoc b/downstream/modules/navigator/proc-installing-navigator-rhel-rpm.adoc index 884dcd464d..d6b8ddadd1 100644 --- a/downstream/modules/navigator/proc-installing-navigator-rhel-rpm.adoc +++ b/downstream/modules/navigator/proc-installing-navigator-rhel-rpm.adoc @@ -11,6 +11,7 @@ You can install {Navigator} on Red Hat Enterprise Linux (RHEL) from an RPM. .Prerequisites +* You have installed Python 3.10 or later. * You have installed RHEL 8.6 or later. * You registered your system with Red Hat Subscription Manager. From 641734e01913e3a7fb7dba41d12820a90256c3a7 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Wed, 14 Aug 2024 14:04:45 -0600 Subject: [PATCH 090/590] AAP-29215 - implement peer review and other fixes from PR1725 (#1745) (#1746) * AAP-29215 - implement peer review and other fixes from PR1725 * AAP-29215 - changed procedure headings to gerunds * AAP-29215 - fix cross reference formatting * AAP-29215 - include peer review corrections --- .../con-gw-pluggable-authentication.adoc | 12 +++++------ .../proc-gw-configure-auth-details.adoc | 9 ++++---- .../proc-gw-define-rules-triggers.adoc | 2 +- .../proc-gw-review-auth-settings.adoc | 2 ++ .../platform/proc-gw-select-auth-type.adoc | 21 ++----------------- 5 files changed, 16 insertions(+), 30 deletions(-) diff --git a/downstream/modules/platform/con-gw-pluggable-authentication.adoc b/downstream/modules/platform/con-gw-pluggable-authentication.adoc index a4e66a79ca..1b056c7dd5 100644 --- a/downstream/modules/platform/con-gw-pluggable-authentication.adoc +++ b/downstream/modules/platform/con-gw-pluggable-authentication.adoc @@ -4,14 +4,14 @@ = Pluggable authentication -Authentication is the process of verifying a user's identity to Ansible Automation Platform, which means establishing that a user is who they say they are. This can be done in a number of ways but would traditionally be associated with a username and password. +Authentication is the process of verifying a user's identity to the {PlatformNameShort} (that is, to establish that a user is who they say they are). This can be done in a number of ways but would traditionally be associated with a `username` and `password`. -In Ansible Automation Platform 2.4, you could configure external authentication sources such as LDAP or SAML, in automation controller. Ansible Automation Platform 2.5 uses a pluggable authentication system with a configuration wizard that provides a common, simplified method of configuring different types of authenticators, such as LDAP and SAML. The pluggable system also allows you to configure multiple authenticators of the same type. +In {PlatformNameShort} 2.4, you could configure external authentication sources in {ControllerName}. {PlatformNameShort} {PlatformVers} uses a pluggable authentication system with a configuration wizard that provides a common, simplified method of configuring different types of authenticators such as LDAP and SAML. The pluggable system also allows you to configure multiple authenticators of the same type. -In the pluggable system we have three concepts: +In the pluggable system we have a couple of concepts: -Authenticator plugin:: A plugin allows Ansible Automation Platform to connect to a source system, such as LDAP or SAML. Ansible Automation Platform is shipped with a variety of authenticator plugins and more can be added. Authenticator plugins are similar to Ansible collections, in that all of the required code is in a package and can be versioned independently if needed. You can write and add new custom plugins to the system +Authenticator Plugin:: A plugin allows {PlatformNameShort} to connect to a source system, such as, LDAP or SAML. {PlatformNameShort} includes a variety of authenticator plugins and more can be added. Authenticator plugins are similar to Ansible collections, in that all of the required code is in a package and can be versioned independently if needed. -Authenticator:: An authenticator is an instantiation of an authenticator plugin and allows users to form the specified source to login. For example, the LDAP authenticator plugin defines a required LDAP server setting. When you instantiate an authenticator from the LDAP authentication plugin, you must provide the authenticator the LDAP server URL it needs to connect to. +Authenticator:: An authenticator is an instantiation of an authenticator plugin and allows users from the specified source to log in. For example, the LDAP authenticator plugin defines a required LDAP server setting. When you instantiate an authenticator from the LDAP authentication plugin you must provide the authenticator the LDAP server URL it needs to connect to. -Authenticator map:: Authenticator maps are applied to authenticators and tell Ansible Automation Platform what permissions to give a user logging in to the system. the authentication settings before creating the authentication method. \ No newline at end of file +Authenticator Map:: Authenticator maps are applied to authenticators and tell {PlatformNameShort} what permissions to give a user logging into the system. \ No newline at end of file diff --git a/downstream/modules/platform/proc-gw-configure-auth-details.adoc b/downstream/modules/platform/proc-gw-configure-auth-details.adoc index 3529f3dfa9..e4bb9118f5 100644 --- a/downstream/modules/platform/proc-gw-configure-auth-details.adoc +++ b/downstream/modules/platform/proc-gw-configure-auth-details.adoc @@ -2,9 +2,10 @@ [id="gw-configure-auth-details_{context}"] -= Configure Authentication details += Configuring authentication details + +Different authenticator plugins require different types of information. See the respective sections in xref:gw-config-authentication-type_gw-auth-type[Configuring an authentication type] for the required details. -Different authenticator plugins require different types of information, see the respective sections in Authenticator plugins for the required details. For all authentication types you can enter a *Name*, *Additional Authenticator Fields* and *Create Objects*. .Procedure @@ -26,9 +27,9 @@ Values defined in this field override the dedicated fields provided in the UI. F . Enable or disable *Create Object* to specify whether the authenticator should create teams and organizations in the system when a user logs in. + Enabled:: Teams and organizations defined in the authenticator maps are created and the users added to them. -Disabled:: Organizations and teams defined in the authenticator maps will not be created automatically in the system. However, if they already exist (i.e. created by a superuser), users who trigger the maps are granted access to them. +Disabled:: Organizations and teams defined in the authenticator maps will not be created automatically in the system. However, if they already exist (i.e. created by a superuser), users who trigger the maps are granted access to them. + -. Enable or disable *Enabled* to specify if the authenticator should be enabled or disabled. If enabled, users are able to login from the authenticator. If disabled, users will not be allowed to login from the authenticator +. Enable or disable *Enabled* to specify if the authenticator should be enabled or disabled. If enabled, users are able to login from the authenticator. If disabled, users will not be allowed to login from the authenticator. . Enable or disable *Remove Users* if enabled any access previously granted to a user is removed when they authenticate from this source. If disabled, permissions are only added or removed from the user based on the results of this authenticator's authenticator mappings. + For example, assume a user has been granted the `is_superuser` permission in the system. And that user will log into an authenticator whose maps will not formulate an opinion as to whether or not the user should be a superuser. diff --git a/downstream/modules/platform/proc-gw-define-rules-triggers.adoc b/downstream/modules/platform/proc-gw-define-rules-triggers.adoc index 84e57c43de..b0a35e87df 100644 --- a/downstream/modules/platform/proc-gw-define-rules-triggers.adoc +++ b/downstream/modules/platform/proc-gw-define-rules-triggers.adoc @@ -2,7 +2,7 @@ [id="gw-define-rules-triggers_{context}"] -= Define authentication mapping rules and triggers += Defining authentication mapping rules and triggers {PlatformNameShort} supports the following rule types: diff --git a/downstream/modules/platform/proc-gw-review-auth-settings.adoc b/downstream/modules/platform/proc-gw-review-auth-settings.adoc index 58c7f6fd76..c02a6d468c 100644 --- a/downstream/modules/platform/proc-gw-review-auth-settings.adoc +++ b/downstream/modules/platform/proc-gw-review-auth-settings.adoc @@ -2,6 +2,8 @@ [id="gw-review-auth-settings_{context}"] += Reviewing the authentication settings + After you have defined the authentication details, configured the authentication maps, and specified the mapping order precedence, you can review and verify, or modify the settings before creating the authenticator. .Procedure diff --git a/downstream/modules/platform/proc-gw-select-auth-type.adoc b/downstream/modules/platform/proc-gw-select-auth-type.adoc index b370f24358..a78b4630bc 100644 --- a/downstream/modules/platform/proc-gw-select-auth-type.adoc +++ b/downstream/modules/platform/proc-gw-select-auth-type.adoc @@ -2,7 +2,7 @@ [id="gw-select-auth-type_{context}"] -= Select an Authentication type += Selecting an authentication type On the first screen of the wizard you can select the type of authenticator plugin you want to configure. @@ -13,23 +13,6 @@ On the first screen of the wizard you can select the type of authenticator plugi + The *Create Authentication* wizard is displayed, where you can follow the prompts to configure your preferred authentication method. + -. Select the authenticator type from the *Authentication type* list. Options include: -+ -//ddacosta - TBD links to the sections for each config below. -* Local -* LDAP -* SAML -* TACACS+ -* Radius -* Azure -* Google OAuth -* Generic OIDC -* Keycloak -* GitHub -* GitHub organization -* GitHub team -* GitHub enterprise -* GitHub enterprise organization -* GitHub enterprise team +. Select the authenticator type from the *Authentication type* list. See xref:gw-config-authentication-type_gw-auth-type[Configuring an authentication type] for the complete list of authentication plugins available. + . Click btn:[Next] to xref:gw-configure-auth-details[Configure authentication details]. From 95123ba352d88eb2642da3b7af45bba30fc76af8 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Thu, 15 Aug 2024 12:42:41 +0100 Subject: [PATCH 091/590] Document the requirement that upgrade from 2.4 containerized TP is not supported (#1747) (#1749) Document the requirement that upgrade from 2.4 containerized TP is not supported Created a snippet for this text /snippets/container-upgrades.adoc https://issues.redhat.com/browse/AAP-28343 --- .../platform/assembly-aap-containerized-installation.adoc | 5 +++++ downstream/snippets/container-upgrades.adoc | 1 + 2 files changed, 6 insertions(+) create mode 100644 downstream/snippets/container-upgrades.adoc diff --git a/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc b/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc index 71b6ae17b2..b93234912e 100644 --- a/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc +++ b/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc @@ -19,6 +19,11 @@ endif::[] This guide helps you to understand the installation requirements and processes behind the containerized version of {PlatformNameShort}. +[NOTE] +==== +include::snippets/container-upgrades.adoc[] +==== + .Prerequisites * A RHEL 9.2 based host. Minimal operating system (OS) base install is recommended. diff --git a/downstream/snippets/container-upgrades.adoc b/downstream/snippets/container-upgrades.adoc new file mode 100644 index 0000000000..4a1a38feeb --- /dev/null +++ b/downstream/snippets/container-upgrades.adoc @@ -0,0 +1 @@ +Upgrades from 2.4 Containerized {PlatformNameShort} Tech Preview to 2.5 Containerized {PlatformNameShort} are unsupported at this time. \ No newline at end of file From a0768158fa228deb6ab2d871ce4945de2171c080 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Fri, 16 Aug 2024 13:18:41 -0600 Subject: [PATCH 092/590] AAP-29217 - Convert authentication mapping content (#1751) (#1754) * AAP-29217 - Add/update modules for authentication mapping * Update downstream/modules/platform/con-gw-authenticator-map-examples.adoc * Update downstream/modules/platform/con-gw-authenticator-map-examples.adoc * Update downstream/modules/platform/con-gw-authenticator-map-triggers.adoc * Update downstream/modules/platform/ref-controller-organization-mapping.adoc --------- Co-authored-by: EMcWhinn <122449381+EMcWhinn@users.noreply.github.com> --- .../con-gw-authenticator-map-examples.adoc | 15 ++++ .../con-gw-authenticator-map-triggers.adoc | 12 +++ .../con-gw-authenticator-map-types.adoc | 15 ++++ .../platform/proc-gw-allow-mapping.adoc | 26 ++++++ .../platform/proc-gw-role-mapping.adoc | 31 +++++++ .../platform/proc-gw-superuser-mapping.adoc | 30 +++++++ .../ref-controller-organization-mapping.adoc | 77 ++++++---------- .../platform/ref-controller-team-mapping.adoc | 87 +++++++------------ 8 files changed, 186 insertions(+), 107 deletions(-) create mode 100644 downstream/modules/platform/con-gw-authenticator-map-examples.adoc create mode 100644 downstream/modules/platform/con-gw-authenticator-map-triggers.adoc create mode 100644 downstream/modules/platform/con-gw-authenticator-map-types.adoc create mode 100644 downstream/modules/platform/proc-gw-allow-mapping.adoc create mode 100644 downstream/modules/platform/proc-gw-role-mapping.adoc create mode 100644 downstream/modules/platform/proc-gw-superuser-mapping.adoc diff --git a/downstream/modules/platform/con-gw-authenticator-map-examples.adoc b/downstream/modules/platform/con-gw-authenticator-map-examples.adoc new file mode 100644 index 0000000000..97724af276 --- /dev/null +++ b/downstream/modules/platform/con-gw-authenticator-map-examples.adoc @@ -0,0 +1,15 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-authenticator-map-examples"] + += Authenticator map examples + +* Make this user a superuser if they have an attribute called `aap_superuser` with a value of `True`. +* Add this user to a team if they have the group `cn=Administrators,ou=AAP,ou=example,o=com` or `cn=Operators,ou=AAP,ou=example,o=com`. +* Never allow access to the system if the user has an attribute called `disabled` with a value of `True`, `Yes` or `Until Further Notice`. + +Since maps are executed in order, it is possible to create exceptions. Expanding on the previous example for “Never allow access to the system if the user has an attribute called disabled with a value of `True`, `Yes` or `Until Further Notice`. + +You can add another rule with a higher order, such as, “Allow access to the system for a `disabled` user if they are in the group `Emergency Contacts`.” + +The first rule prevents the disabled user from accessing the system, but the second rule alters that decision to grant access to the system for the disabled user if they are in the `Emergency Contacts` group. \ No newline at end of file diff --git a/downstream/modules/platform/con-gw-authenticator-map-triggers.adoc b/downstream/modules/platform/con-gw-authenticator-map-triggers.adoc new file mode 100644 index 0000000000..ccd4cd3b8c --- /dev/null +++ b/downstream/modules/platform/con-gw-authenticator-map-triggers.adoc @@ -0,0 +1,12 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-authenticator-map-triggers"] + += Authenticator map triggers + +Each map has a trigger that defines when the map should be evaluated as true. Trigger types include the following: + +Always:: The trigger should always be invoked. +Never:: The trigger should never be invoked. +Group:: The trigger should be invoked based on a user having, not having, or having multiple groups in the source system. +Attribute:: The trigger should be invoked based on a user having some combination of attributes from the source system whose value might match, container, end with, etc. some value. \ No newline at end of file diff --git a/downstream/modules/platform/con-gw-authenticator-map-types.adoc b/downstream/modules/platform/con-gw-authenticator-map-types.adoc new file mode 100644 index 0000000000..db84f077a5 --- /dev/null +++ b/downstream/modules/platform/con-gw-authenticator-map-types.adoc @@ -0,0 +1,15 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-authenticator-map-types"] + += Authenticator map types + +{PlatformNameShort} supports the following rule types: + +Allow:: Determine if the user is allowed to log into the system +Organization:: Determine if a user should be put into an organization +Team:: Determine if the user should be a member of a team +Role:: Determine if the user is a member of a role (for example System Auditor) +Is Superuser:: Determine if the user is a superuser in the system + +These authentication map types can be used with any type of authenticator. diff --git a/downstream/modules/platform/proc-gw-allow-mapping.adoc b/downstream/modules/platform/proc-gw-allow-mapping.adoc new file mode 100644 index 0000000000..5862050da7 --- /dev/null +++ b/downstream/modules/platform/proc-gw-allow-mapping.adoc @@ -0,0 +1,26 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-allow-mapping"] + += Allow mapping + +With allow mapping, you can control which users have access to the system by defining the conditions that must be met. + +.Procedure + +. After configuring the authentication details for your authentication method, select *Allow* from the *Add authentication mapping* list. +. Enter a unique rule *Name* to identify the rule. +. Select a *Trigger* from the list. See xref:gw-authenticator-map-triggers[Authenticator map triggers] for more information about map triggers. +. Select *Revoke* to deny user access to the system when none of the trigger conditions are matched. +. Click btn:[Next]. +. You can manage the authentication mappings order by dragging and dropping the mapping up or down in the list. ++ +[NOTE] +==== +The mapping precedence is determined by the order in which the mappings are listed. +==== ++ +. Click btn:[Next] to review and verify the mapping configurations. +. Click btn:[Finish]. + + diff --git a/downstream/modules/platform/proc-gw-role-mapping.adoc b/downstream/modules/platform/proc-gw-role-mapping.adoc new file mode 100644 index 0000000000..5afc5e1223 --- /dev/null +++ b/downstream/modules/platform/proc-gw-role-mapping.adoc @@ -0,0 +1,31 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-role-mapping"] + += Role mapping + +Role mapping is the mapping of a user either to a global role, such as Platform Auditor, or team or organization role. + +When a Team and/or Organization is specified together with the appropriate Role, the behavior is identical with Organization mapping or Team mapping. + +Role mapping can be specified separately for each account authentication. + +.Procedure + +. After configuring the authentication details for your authentication type, select *Team* from the *Add authentication mapping* list. +. Enter a unique rule *Name* to identify the rule. +. Select a *Trigger* from the list. See xref:gw-authenticator-map-triggers[Authenticator map triggers] for more information about map triggers. +. Select *Revoke* to remove the role for the user when none of the trigger conditions are matched. +. Select a *Role* to be applied or removed for matching users. +. Click btn:[Next]. ++ +[NOTE] +==== +The mapping precedence is determined by the order in which the mappings are listed. +==== ++ +. Click btn:[Next] to review and verify the mapping configurations. +. Click btn:[Finish]. + + + diff --git a/downstream/modules/platform/proc-gw-superuser-mapping.adoc b/downstream/modules/platform/proc-gw-superuser-mapping.adoc new file mode 100644 index 0000000000..47635c9b18 --- /dev/null +++ b/downstream/modules/platform/proc-gw-superuser-mapping.adoc @@ -0,0 +1,30 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-superuser-mapping"] + += Superuser mapping + +Role mapping is the mapping of a user either to a global role, such as Platform Auditor, or team or organization role. + +When a Team and/or Organization is specified together with the appropriate Role, the behavior is identical with Organization mapping or Team mapping. + +Role mapping can be specified separately for each account authentication. + +.Procedure + +. After configuring the authentication details for your authentication type, select *Team* from the *Add authentication mapping* list. +. Enter a unique rule *Name* to identify the rule. +. Select a *Trigger* from the list. See xref:gw-authenticator-map-triggers[Authenticator map triggers] for more information about map triggers. +. Select *Revoke* to remove the superuser role from the user when none of the trigger conditions are matched. +. Click btn:[Next]. ++ +[NOTE] +==== +The mapping precedence is determined by the order in which the mappings are listed. +==== ++ +. Click btn:[Next] to review and verify the mapping configurations. +. Click btn:[Finish]. + + + diff --git a/downstream/modules/platform/ref-controller-organization-mapping.adoc b/downstream/modules/platform/ref-controller-organization-mapping.adoc index f6b8092068..f61f849925 100644 --- a/downstream/modules/platform/ref-controller-organization-mapping.adoc +++ b/downstream/modules/platform/ref-controller-organization-mapping.adoc @@ -1,55 +1,30 @@ +:_mod-docs-content-type: PROCEDURE + [id="ref-controller-organization-mapping"] = Organization mapping -You must control which users are placed into which {ControllerName} organizations based on their username and email address (distinguishing your organization administrators and users from social or enterprise-level authentication accounts). - -Dictionary keys are organization names. -Organizations are created, if not already present, and if the license permits multiple organizations. -Otherwise, the single default organization is used regardless of the key. - -Values are dictionaries defining the options for each organization's membership. -For each organization, you can specify which users are automatically users of the organization and also which users can administer the organization. - -*admins*: None, True/False, string or list/tuple of strings: - -* If *None*, organization administrators are not updated. -* If *True*, all users using account authentication are automatically added as administrators of the organization. -* If *False*, no account authentication users are automatically added as administrators of the organization. -* If a string or list of strings, specifies the usernames and emails for users to be added to the organization, strings beginning and ending with `/` are compiled into regular expressions. -The modifiers `i` (case-insensitive) and `m` (multi-line) can be specified after the ending `/`. - -*remove_admins*: True/False. Defaults to *True*: - -* When *True*, a user who does not match is removed from the organization's administrative list. -* *users*: None, True/False, string or list/tuple of strings. The same rules apply as for *admins*. -* *remove_users*: True/False. Defaults to *True*. The same rules apply as for *remove_admins*. - -[literal, options="nowrap" subs="+attributes"] ----- -{ - "Default": { - "users": true - }, - "Test Org": { - "admins": ["admin@example.com"], - "users": true - }, - "Test Org 2": { - "admins": ["admin@example.com", "/^controller-[^@]+?@.*$/i"], - "users": "/^[^@].*?@example\\.com$/" - } -} ----- - -Organization mappings can be specified separately for each account authentication backend. -If defined, these configurations take precedence over the global configuration above. - -[literal, options="nowrap" subs="+attributes"] ----- -SOCIAL_AUTH_GOOGLE_OAUTH2_ORGANIZATION_MAP = {} -SOCIAL_AUTH_GITHUB_ORGANIZATION_MAP = {} -SOCIAL_AUTH_GITHUB_ORG_ORGANIZATION_MAP = {} -SOCIAL_AUTH_GITHUB_TEAM_ORGANIZATION_MAP = {} -SOCIAL_AUTH_SAML_ORGANIZATION_MAP = {} ----- \ No newline at end of file +You can control which users are placed into which {PlatformNameShort} organizations based on attributes like their username and email address or based on groups provided from an authenticator. + +When organization mapping is positively evaluated, a specified organization is created, if it does not exist if the authenticator tied to the map is allowed to create objects. + +.Procedure + +. After configuring the authentication details for your authentication type, select *Organization* from the *Add authentication mapping* list. +. Enter a unique rule *Name* to identify the rule. +. Select a *Trigger* from the list. See xref:gw-authenticator-map-triggers[Authenticator map triggers] for more information about map triggers. +. Select *Revoke* to deny user access to the system when none of the trigger conditions are matched. +. Select the *Organization* to which matching users are added or blocked. +. Select a *Role* to be applied or removed for matching users (for example, *Organization Admin* or *Organization Member*). +. Click btn:[Next]. ++ +[NOTE] +==== +The mapping precedence is determined by the order in which the mappings are listed. +==== ++ +. Click btn:[Next] to review and verify the mapping configurations. +. Click btn:[Finish]. + + + diff --git a/downstream/modules/platform/ref-controller-team-mapping.adoc b/downstream/modules/platform/ref-controller-team-mapping.adoc index 1f32a5dc4b..eca5b4979b 100644 --- a/downstream/modules/platform/ref-controller-team-mapping.adoc +++ b/downstream/modules/platform/ref-controller-team-mapping.adoc @@ -1,60 +1,35 @@ +:_mod-docs-content-type: PROCEDURE + [id="ref-controller-team-mapping"] = Team mapping -Team mapping is the mapping of team members (users) from social authentication accounts. -Keys are team names (which are created if not present). -Values are dictionaries of options for each team's membership, where each can contain the following parameters: - -* *organization*: String. The name of the organization to which the team belongs. -The team is created if the combination of organization and team name does not exist. -The organization is created first if it does not exist. -If the license does not permit multiple organizations, the team is always assigned to the single default organization. - -* *users*: None, True/False, string or list/tuple of strings. - -*** If *None*, team members are not updated. -*** If *True*, all social authentication users are added as team members. -*** If *False*, all social authentication users are removed as team members. -* If a string or list of strings, specifies expressions used to match users, the user is added as a team member if the username or email matches. -Strings beginning and ending with `/` are compiled into regular expressions. -The modifiers `i` (case-insensitive) and `m` (multi-line) can be specified after the ending `/`. - -*remove*: True/False. Defaults to *True*. When *True*, a user who does not match the preceding rules is removed from the team. - -[literal, options="nowrap" subs="+attributes"] ----- -{ - "My Team": { - "organization": "Test Org", - "users": ["/^[^@]+?@test\\.example\\.com$/"], - "remove": true - }, - "Other Team": { - "organization": "Test Org 2", - "users": ["/^[^@]+?@test\\.example\\.com$/"], - "remove": false - } -} ----- - -Team mappings can be specified separately for each account authentication backend, based on which of these you set up. -When defined, these configurations take precedence over the preceding global configuration. - -[literal, options="nowrap" subs="+attributes"] ----- -SOCIAL_AUTH_GOOGLE_OAUTH2_TEAM_MAP = {} -SOCIAL_AUTH_GITHUB_TEAM_MAP = {} -SOCIAL_AUTH_GITHUB_ORG_TEAM_MAP = {} -SOCIAL_AUTH_GITHUB_TEAM_TEAM_MAP = {} -SOCIAL_AUTH_SAML_TEAM_MAP = {} ----- - -Uncomment the following line, that is, set `SOCIAL_AUTH_USER_FIELDS` to an empty list, to prevent new user accounts from being created. - -[literal, options="nowrap" subs="+attributes"] ----- -SOCIAL_AUTH_USER_FIELDS = [] ----- - -Only users who have previously logged in to {ControllerName} using social or enterprise-level authentication, or have a user account with a matching email address can then login. +Team mapping is the mapping of team members (users) from authenticators. + +You can define the options for each team’s membership. For each team, you can specify which users are automatically added as members of the team and also which users can administer the team. + +Team mappings can be specified separately for each account authentication. + +When Team mapping is positively evaluated, a specified team and its organization are created, if they don’t exist if the related authenticator is allowed to create objects. + + +.Procedure + +. After configuring the authentication details for your authentication type, select *Team* from the *Add authentication mapping* list. +. Enter a unique rule *Name* to identify the rule. +. Select a *Trigger* from the list. See xref:gw-authenticator-map-triggers[Authenticator map triggers] for more information about map triggers. +. Select *Revoke* to deny user access to the system when none of the trigger conditions are matched. +. Select the *Team* and *Organization* to which matching users are added or blocked. +. Select a *Role* to be applied or removed for matching users (for example, *Team Admin* or *Team Member*). +. Click btn:[Next]. ++ +[NOTE] +==== +The mapping precedence is determined by the order in which the mappings are listed. +==== ++ +. Click btn:[Next] to review and verify the mapping configurations. +. Click btn:[Finish]. + + + From 7122f34549523e279dd6169c6cc3d26b9c03248a Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Tue, 20 Aug 2024 01:24:08 -0600 Subject: [PATCH 093/590] AAP-29218 - Convert managing authentication content (#1759) (#1762) * AAP-29218 - Convert managing authentication content * AAP-29218 include peer review changes --- .../proc-gw-authentication-list-view.adoc | 17 +++++++++++++++++ .../platform/proc-gw-delete-authenticator.adoc | 18 ++++++++++++++++++ .../platform/proc-gw-display-auth-details.adoc | 16 ++++++++++++++++ .../platform/proc-gw-edit-authenticator.adoc | 18 ++++++++++++++++++ .../proc-gw-searching-authenticator.adoc | 14 ++++++++++++++ 5 files changed, 83 insertions(+) create mode 100644 downstream/modules/platform/proc-gw-authentication-list-view.adoc create mode 100644 downstream/modules/platform/proc-gw-delete-authenticator.adoc create mode 100644 downstream/modules/platform/proc-gw-display-auth-details.adoc create mode 100644 downstream/modules/platform/proc-gw-edit-authenticator.adoc create mode 100644 downstream/modules/platform/proc-gw-searching-authenticator.adoc diff --git a/downstream/modules/platform/proc-gw-authentication-list-view.adoc b/downstream/modules/platform/proc-gw-authentication-list-view.adoc new file mode 100644 index 0000000000..044614ea95 --- /dev/null +++ b/downstream/modules/platform/proc-gw-authentication-list-view.adoc @@ -0,0 +1,17 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-authentication-list-view"] + += Authentication list view + +On the *Authentication Methods* page, you can view and manage the configured authentication methods for your organization. + +.Procedure + +. From the navigation panel, select {MenuAMAuthentication}. ++ +The *Authentication Methods* page is displayed. ++ +. Click btn:[Create authentication] and follow the steps for creating an authentication method in xref:gw-config-authentication-type[Configuring an authentication type]. Otherwise, proceed to step 3. +. From the menu bar, you can sort the list of authentication methods by using the arrows in the menu bar for *Order*, *Name* and *Authentication type*. +. Click the toggles to *Enable* or *Disable* authenticators. \ No newline at end of file diff --git a/downstream/modules/platform/proc-gw-delete-authenticator.adoc b/downstream/modules/platform/proc-gw-delete-authenticator.adoc new file mode 100644 index 0000000000..859cc93144 --- /dev/null +++ b/downstream/modules/platform/proc-gw-delete-authenticator.adoc @@ -0,0 +1,18 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-delete-authenticator"] + += Deleting an authenticator + +You can modify the settings of previously configured authenticators from the *Authentication* list view. + +.Procedure + +. From the navigation panel, select {MenuAMAuthentication}. +. In the list view, select the checkbox next to the authenticator you want to delete. +. Select *Delete authentication* from the *{MoreActionsIcon}* list. ++ +[NOTE] +==== +You can delete multiple authenticators by selecting the checkbox next to each authenticator you want to remove, and clicking *Delete selected authentication* from the *{MoreActionsIcon}* list on the menu bar. +==== \ No newline at end of file diff --git a/downstream/modules/platform/proc-gw-display-auth-details.adoc b/downstream/modules/platform/proc-gw-display-auth-details.adoc new file mode 100644 index 0000000000..44e24c5055 --- /dev/null +++ b/downstream/modules/platform/proc-gw-display-auth-details.adoc @@ -0,0 +1,16 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-display-auth-details"] + += Displaying authenticator details + +After you locate the authenticator you want to review, you can display the configuration details: + +.Procedure + +. From the navigation panel, select {MenuAMAuthentication}. +. In the list view, select the authenticator name displayed in the *Name* column. ++ +The authenticator *Details* page is displayed. ++ +. From the *Details* page, you can review the configuration settings applied to the authenticator. diff --git a/downstream/modules/platform/proc-gw-edit-authenticator.adoc b/downstream/modules/platform/proc-gw-edit-authenticator.adoc new file mode 100644 index 0000000000..b64f14db79 --- /dev/null +++ b/downstream/modules/platform/proc-gw-edit-authenticator.adoc @@ -0,0 +1,18 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-edit-authenticator"] + += Editing an authenticator + +You can modify the settings of previously configured authenticators from the *Authentication* list view. + +.Procedure + +. From the navigation panel, select {MenuAMAuthentication}. +. In the list view, you can either: ++ +.. Select the btn:image:leftpencil.png[Edit,15,15][Edit] icon next to authenticator you want to modify, or +.. Select the authenticator name displayed in the *Name* column and click btn:[Edit authenticator] from the *Details* page. ++ +. Modify the authentication details or mapping configurations as required. +. Click btn:[Save]. \ No newline at end of file diff --git a/downstream/modules/platform/proc-gw-searching-authenticator.adoc b/downstream/modules/platform/proc-gw-searching-authenticator.adoc new file mode 100644 index 0000000000..2c55f04d05 --- /dev/null +++ b/downstream/modules/platform/proc-gw-searching-authenticator.adoc @@ -0,0 +1,14 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-searching-authenticator"] + += Searching for an authenticator + +You can search for a previously configured authenticator from the Authentication list view. + +.Procedure + +. From the navigation panel, select {MenuAMAuthentication}. +. In the search bar, enter an appropriate keyword for the authentication method you want to search for and click the arrow icon. +. If you don’t find what you’re looking for, you can narrow your search. From the filter list, select *Name* or *Authentication type* depending on the search term you want to use. +. Scroll through the list of search results and select the authenticator you want to review. From ca8dec0786f29753fc030c141d0e1b706aa508f3 Mon Sep 17 00:00:00 2001 From: EMcWhinn <122449381+EMcWhinn@users.noreply.github.com> Date: Wed, 21 Aug 2024 16:16:39 +0100 Subject: [PATCH 094/590] Adding platform admin section to asciidoc (#1734) (#1767) * Adding platform admin section to asciidoc Create Platform admin section of Getting started with AAP https://issues.redhat.com/browse/AAP-29067 Affects `titles/getting-started` * Second commit * Adding final content to admin section * Adding Github section to platform admin --- .../platform/assembly-gs-platform-admin.adoc | 9 +++--- .../platform/con-gs-automation-content.adoc | 6 +++- .../platform/con-gs-automation-decisions.adoc | 2 +- .../platform/con-gs-automation-execution.adoc | 2 +- .../con-gs-config-authentication.adoc | 5 ++- .../modules/platform/con-gs-manage-RBAC.adoc | 7 ++-- .../modules/platform/proc-gs-logging-in.adoc | 17 +++++----- .../proc-gs-platform-admin-create-user.adoc | 10 ++++-- .../platform/proc-gs-social-auth-github.adoc | 32 +++++++++++++++++++ 9 files changed, 66 insertions(+), 24 deletions(-) create mode 100644 downstream/modules/platform/proc-gs-social-auth-github.adoc diff --git a/downstream/assemblies/platform/assembly-gs-platform-admin.adoc b/downstream/assemblies/platform/assembly-gs-platform-admin.adoc index 786e72180b..08337dba71 100644 --- a/downstream/assemblies/platform/assembly-gs-platform-admin.adoc +++ b/downstream/assemblies/platform/assembly-gs-platform-admin.adoc @@ -6,11 +6,11 @@ As a platform administrator, {PlatformNameShort} can help you enable your users This guide walks you through the basic steps to get set up as an administrator for {PlatformNameShort}, including configuring and maintaining the platform for users. -To get started as an administrator, learn how to: +To get started as an administrator, see the following: -* Log in to the platform as an administrator. -* Configure authentication for users by manually creating users, teams, and organizations -* Configuring user access with role-based access control +* xref:proc-gs-logging-in[Logging in for the first time] +* xref:con-gs-config-authentication[Configure authentication] +* xref:con-gs-manage-RBAC[Managing user access with role-based access control] include::platform/proc-gs-logging-in.adoc[leveloffset=+1] include::platform/con-gs-config-authentication.adoc[leveloffset=+1] @@ -18,3 +18,4 @@ include::platform/con-gs-manage-RBAC.adoc[leveloffset=+1] include::platform/proc-controller-create-organization.adoc[leveloffset=+1] include::platform/proc-controller-creating-a-team.adoc[leveloffset=+1] include::platform/proc-gs-platform-admin-create-user.adoc[leveloffset=+1] +include::platform/proc-gs-social-auth-github.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/con-gs-automation-content.adoc b/downstream/modules/platform/con-gs-automation-content.adoc index 69b2258312..e7466e1936 100644 --- a/downstream/modules/platform/con-gs-automation-content.adoc +++ b/downstream/modules/platform/con-gs-automation-content.adoc @@ -39,7 +39,7 @@ Ansible playbooks can declare configurations, orchestrate steps of any manually .Additional resources -See link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/html-single/getting_started_with_playbooks/index[Getting started with Ansible Playbooks] for more information. +For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/getting_started_with_playbooks/index[Getting started with Ansible Playbooks]. == Ansible roles @@ -48,3 +48,7 @@ With roles, you can group together a broader range of existing automation conten This includes playbooks, configuration files, templates, tasks, and handlers to create customized automation content that can be reused and shared with others. You can also make roles configurable by exposing variables that users can set when calling the role, allowing them to configure their system according to their organization's requirements. + +.Additional resources + +For more information, see xref:con-gs-ansible-roles_assembly-gs-auto-dev[Bundle content with Ansible roles]. diff --git a/downstream/modules/platform/con-gs-automation-decisions.adoc b/downstream/modules/platform/con-gs-automation-decisions.adoc index 4ece552567..808c20e0da 100644 --- a/downstream/modules/platform/con-gs-automation-decisions.adoc +++ b/downstream/modules/platform/con-gs-automation-decisions.adoc @@ -8,4 +8,4 @@ In this way, {EDAName} manages routine automation tasks and responses, freeing y Managed through {EDAcontroller}, Ansible rulebooks are the framework for automation decisions. Ansible rulebooks are collections of rulesets, which in turn consist of one or more sources, rules, and conditions. Rulebooks tell the system what events to flag and how to respond to them. From the Automation Decisions section of the platform user interface, you can use rulebooks to connect and listen to event sources, and define actions that are triggered in response to certain events. .Additional resources -For more information about rulebook actions rulebooks, events, and sources, see xref:con-gs-define-events-rulebooks[Rulebook actions]. \ No newline at end of file +For more information about rulebook, events, and sources, see xref:con-gs-define-events-rulebooks[Rulebook actions]. diff --git a/downstream/modules/platform/con-gs-automation-execution.adoc b/downstream/modules/platform/con-gs-automation-execution.adoc index 344c027b1b..c3540c2b9e 100644 --- a/downstream/modules/platform/con-gs-automation-execution.adoc +++ b/downstream/modules/platform/con-gs-automation-execution.adoc @@ -17,4 +17,4 @@ Depending on the inventory plugins, you can use many formats for your inventory The location of your inventory file depends on the installation program you use. .Additional resources -For more details on inventory files, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/html-single/planning_your_installation/index#about_the_installer_inventory_file[About the installer inventory] in the _Red Hat Ansible Automation Platform planning guide_. +For more details on inventory files, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/planning_your_installation/index#about_the_installer_inventory_file[About the installer inventory] in the _Red Hat Ansible Automation Platform planning guide_. diff --git a/downstream/modules/platform/con-gs-config-authentication.adoc b/downstream/modules/platform/con-gs-config-authentication.adoc index d19cfb4100..ee3e2f11dd 100644 --- a/downstream/modules/platform/con-gs-config-authentication.adoc +++ b/downstream/modules/platform/con-gs-config-authentication.adoc @@ -2,9 +2,8 @@ = Configure authentication -After your first login as administrator you must configure authentication for your users. +After your first login as an administrator you must configure authentication for your users. Depending on your organization's needs and resources, you can either: -* Set up local authentication by creating users, teams, and organizations manually. +* Set up Basic authentication by creating users, teams, and organizations manually. * Use an external source such as GitHub to configure authentication for your system. - diff --git a/downstream/modules/platform/con-gs-manage-RBAC.adoc b/downstream/modules/platform/con-gs-manage-RBAC.adoc index ccbedcaf72..c243a203a7 100644 --- a/downstream/modules/platform/con-gs-manage-RBAC.adoc +++ b/downstream/modules/platform/con-gs-manage-RBAC.adoc @@ -1,12 +1,13 @@ [id="con-gs-manage-RBAC"] -= Managing access with role-based access control += Managing user access with role-based access control Role-based access control (RBAC) restricts user access based on their role within an organization. The roles in RBAC refer to the levels of access that users have to the network. -You can control what users can do with the components of Ansible Automation Platform at a broad or granular level depending on your RBAC policy. +You can control what users can do with the components of {PlatformNameShort} at a broad or granular level depending on your RBAC policy. You can select whether the user is a system administrator or normal user and align roles and access permissions with their positions within the organization. -You can define roles can with many permissions that can then be assigned to resources, teams, and users. The permissions that make up a role dictate what the assigned role allows. +You can define roles with many permissions that can then be assigned to resources, teams, and users. +The permissions that make up a role dictate what the assigned role allows. Permissions are allocated with only the access needed for a user to perform the tasks appropriate for their role. diff --git a/downstream/modules/platform/proc-gs-logging-in.adoc b/downstream/modules/platform/proc-gs-logging-in.adoc index 12d2cc79e5..67462257d4 100644 --- a/downstream/modules/platform/proc-gs-logging-in.adoc +++ b/downstream/modules/platform/proc-gs-logging-in.adoc @@ -1,4 +1,4 @@ -[id="proc-aap-gs-logging-in"] +[id="proc-gs-logging-in"] = Logging in for the first time @@ -7,25 +7,26 @@ You can then create user profiles and assign roles. .Procedure -. With the login information provided after your installation completed, open a web browser and log in to Ansible Automation Platform by navigating to its server URL at: https:/// +. With the login information provided after your installation completed, open a web browser and log in to {PlatformName} by navigating to its server URL at: https:/// . Use the credentials specified during the installation process to login: ** The default username is *admin*. ** The password for *admin* is the value specified during installation. After your first login, you are prompted to add your subscription manifest. -Complete the following procedure to do this. .Procedure . You can select between uploading a copy of your subscription manifest or entering your login credentials to find the subscription associated with your profile: .. To upload a subscription manifest, drag the file to the field beneath *Red Hat subscription manifest* or browse for the file on your local machine. -.. To find your subscription, click the tab labeled *Username / password* and enter your credentials. Your subscription will appear in the list menu labeled Subscription. Select your subscription. -. After you have added your subscription, click *Next*. -. On the screen labeled *Analytics*, check the box if you want to share data with Red Hat and click *Next*. +.. To find your subscription, click the tab labeled *Username / password* and enter your credentials. +Your subscription appears in the list menu labeled *Subscription*. +Select your subscription. +. After you have added your subscription, click btn:[Next]. +. On the screen labeled *Analytics*, check the box if you want to share data with Red Hat and click btn:[Next]. . Check the box indicating that you agree to the *End User License Agreement*. -. Review your information and click *Finish*. +. Review your information and click btn:[Finish]. -[NOTE] +[TIP] ==== After logging in, review the quick starts section for useful guidance. ==== diff --git a/downstream/modules/platform/proc-gs-platform-admin-create-user.adoc b/downstream/modules/platform/proc-gs-platform-admin-create-user.adoc index c6d1adfed6..73c0b631ae 100644 --- a/downstream/modules/platform/proc-gs-platform-admin-create-user.adoc +++ b/downstream/modules/platform/proc-gs-platform-admin-create-user.adoc @@ -6,13 +6,16 @@ You can assign two types of users: Normal user:: Normal users have read and write access limited to the resources (such as inventory, projects, and job templates) for which that user has been granted the appropriate roles and privileges. System administrator:: A System administrator (also known as a Superuser) has full system administration privileges — with full read and write privileges over the entire installation. A System administrator is typically responsible for managing all aspects of and delegating responsibilities for day-to-day work to various users. -Select the Organization to be assigned for this user. For information about creating a new organization or team, see [ADD 2.5 LINK][Creating an organization]. +Select the Organization to be assigned for this user. +//[emcwhinn] Removing until 2.5 Link is confirmed. +// For information about creating a new organization or team, see [ADD 2.5 LINK][Creating an organization]. .Procedure . From the navigation panel, select {MenuAMUsers}. . Click btn:[Create user]. -. Enter the details about your new user in the fields on the Create user page. Fields marked with an asterisk (*) are required. +. Enter the details about your new user in the fields on the *Create user page*. +Fields marked with an asterisk (*) are required. + [NOTE] ==== @@ -28,4 +31,5 @@ From here, you can review and change the user's Teams, Roles, Tokens and other m If the user is not newly-created, the details screen displays the last login activity of that user. ==== If you log in as yourself, and view the details of your user profile, you can manage tokens from your user profile by selecting the *Tokens* tab. -For more information, see [ADD 2.5 LINK][Adding a token]. +//[emcwhinn] Removing until 2.5 Link is confirmed. +// For more information, see [ADD 2.5 LINK][Adding a user token]. diff --git a/downstream/modules/platform/proc-gs-social-auth-github.adoc b/downstream/modules/platform/proc-gs-social-auth-github.adoc new file mode 100644 index 0000000000..63180bb626 --- /dev/null +++ b/downstream/modules/platform/proc-gs-social-auth-github.adoc @@ -0,0 +1,32 @@ +[id="proc-gs-social-auth-github"] + += Configuring GitHub authentication + +You can connect GitHub identities to {PlatformNameShort} using OAuth. +To set up GitHub authentication, you need to obtain an OAuth2 key and secret by registering your organization-owned application from GitHub using the link:https://docs.github.com/en/apps/using-github-apps/installing-your-own-github-app[Installing your own GitHub App]. + +The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. +To register the application, you must supply it with your webpage URL, which is the Callback URL shown in the Authenticator details for your authenticator configuration. +For more information about accessing this, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/access_management_and_authentication/proc-gw-display-auth-details[Displaying authenticator details]. + +.Procedure + +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *GitHub* from the *Authentication type* list. +. Enter a *Name* for this authentication setting. +. When the application is registered, GitHub displays the *Client ID* and *Client Secret*: +** Copy and paste the *GitHub Client ID* into the *GitHub OAuth2 Key* field. +** Copy and paste the *GitHub Client Secret* into the *GitHub OAuth2 Secret* field. +. Optional: Enter any *Additional Authenticator Fields* that this authenticator can take. +These fields are not validated and are passed directly back to the authenticator. ++ +[NOTE] +==== +Values defined in this field override the dedicated fields provided in the UI. +==== ++ +. To automatically create organizations, users and teams upon successful login, select *Create objects*. +. To enable this authentication method upon creation, select *Enabled*. +. To remove a user for any groups they were previously added to when they authenticate from this source, select *Remove users*. +. Click btn:[Next]. From 610191e13589c9c0f8456109054dc6d9bee95ccd Mon Sep 17 00:00:00 2001 From: hherbly Date: Wed, 21 Aug 2024 17:31:42 -0500 Subject: [PATCH 095/590] Document the Metric Collection Utility (#1735) (#1770) https://issues.redhat.com/browse/AAP-19692 AAP-19692 Co-authored-by: KylaF8 <92089627+KylaF8@users.noreply.github.com> --- .../platform/assembly_metrics-utility.adoc | 80 +++++++ .../proc_configuring-the-metrics-utility.adoc | 199 ++++++++++++++++++ .../proc_modifying-the-run-schedule.adoc | 53 +++++ .../ref_fetching-a-monthly-report.adoc | 162 ++++++++++++++ 4 files changed, 494 insertions(+) create mode 100644 downstream/assemblies/platform/assembly_metrics-utility.adoc create mode 100644 downstream/modules/platform/proc_configuring-the-metrics-utility.adoc create mode 100644 downstream/modules/platform/proc_modifying-the-run-schedule.adoc create mode 100644 downstream/modules/platform/ref_fetching-a-monthly-report.adoc diff --git a/downstream/assemblies/platform/assembly_metrics-utility.adoc b/downstream/assemblies/platform/assembly_metrics-utility.adoc new file mode 100644 index 0000000000..75c31d2d21 --- /dev/null +++ b/downstream/assemblies/platform/assembly_metrics-utility.adoc @@ -0,0 +1,80 @@ +:_newdoc-version: 2.18.3 +:_template-generated: 2024-07-12 + +ifdef::context[:parent-context-of-metrics-utility: {context}] + +:_mod-docs-content-type: ASSEMBLY + +[id="metrics-utility_{context}"] + +:context: metrics-utility + += About Ansible automation platform metrics-utility + +The Ansible Automation Platform metrics utility tool (metrics-utility) is a command-line utility that is installed on a system containing an instance of automation controller. + +When installed and configured, metrics-utility gathers billing-related metrics from your system and creates a consumption-based billing report. Metrics-utility is especially suited for users who have multiple managed hosts and want to use consumption-based billing. Once a report is generated, it is deposited in a target location that you specify in the configuration file. + +Metrics-utility collects two types of data from your system: configuration data and reporting data. + +The configuration data includes the following information: + +* version information for automation controller and for the operating system +* subscription information +* the base URL + +The reporting data includes the following information: + +* job name and ID +* host name +* inventory name +* organization name +* project name +* success or failure information +* the date and time the report was generated. + +To ensure that metrics-utility continues to work as configured, be sure to clear your report directories of outdated reports regularly. + + + + + +//Include modules here. + +//==== Configuring the metrics-utility +//include::platform/proc_configuring-the-metrics-utility.adoc[leveloffset=+1] + +//==== Fetching a monthly report +//include::platform/ref_fetching-a-monthly-report.adoc[leveloffset=+1] + +//==== Modifying the run schedule +//include::platform/proc_modifying-the-run-schedule.adoc[leveloffset=+1] + + + + +//This paragraph is the assembly introduction. It explains what the user will accomplish by working through the modules in the assembly and sets the context for the user story the assembly is based on. + + +//* A bulleted list of conditions that must be satisfied before the user starts following this assembly. +//* You can also link to other modules or assemblies the user must follow before starting this assembly. +//* Delete the section title and bullets if the assembly has no prerequisites. +//* X is installed. For information about installing X, see . +//* You can log in to X with administrator privileges. + + + + + + + +//[role="_additional-resources"] +//== Additional resources + +//* This section is optional. +//* Provide a bulleted list of links to other closely-related material. These links can include `link:` and `xref:` macros. +//* Use an unnumbered bullet (*) if the list includes only one step. + +//ifdef::parent-context-of-metrics-utility[:context: {parent-context-of-metrics-utility}] +//ifndef::parent-context-of-metrics-utility[:!context:] + diff --git a/downstream/modules/platform/proc_configuring-the-metrics-utility.adoc b/downstream/modules/platform/proc_configuring-the-metrics-utility.adoc new file mode 100644 index 0000000000..80db46cf55 --- /dev/null +++ b/downstream/modules/platform/proc_configuring-the-metrics-utility.adoc @@ -0,0 +1,199 @@ +:_newdoc-version: 2.18.3 +:_template-generated: 2024-07-15 +:_mod-docs-content-type: PROCEDURE + +[id="configuring-the-metrics-utility_{context}"] += configuring-the-metrics-utility + + +== On RHEL + +=== Prerequisites: + +* An active Ansible Automation Platform subscription + + +Metrics-utility is included with Ansible Automation Platform, so no separate installation is needed. The following commands gather the relevant data and generate a CCSP report containing your usage metrics. You can configure these commands as cronjobs to ensure they run at the beginning of every month. See link:https://www.redhat.com/sysadmin/linux-cron-command[How to schedule jobs using the Linux ‘Cron’ utility] for more on configuring using the cron syntax. + + + +=== *Procedure:* + +. In the cron file, set the following variables to ensure metrics-utility gathers the relevant data. To open the cron file for editing, run: ++ +[source, ] +---- +crontab -e +---- ++ +. Specify the following variables to indicate where the report will be deposited in your file system: ++ +[source, ] +---- +export METRICS_UTILITY_SHIP_TARGET=directory +export METRICS_UTILITY_SHIP_PATH=/awx_devel/awx-dev/metrics-utility/shipped_data/billing +---- ++ +. Set these variables to generate a report: ++ +[source, ] +---- +export METRICS_UTILITY_REPORT_TYPE=CCSP +export METRICS_UTILITY_PRICE_PER_NODE=11.55 # in USD +export METRICS_UTILITY_REPORT_SKU=MCT3752MO +export METRICS_UTILITY_REPORT_SKU_DESCRIPTION="EX: Red Hat Ansible Automation Platform, Full Support (1 Managed Node, Dedicated, Monthly)" +export METRICS_UTILITY_REPORT_H1_HEADING="CCSP Reporting : ANSIBLE Consumption" +export METRICS_UTILITY_REPORT_COMPANY_NAME="Company Name" +export METRICS_UTILITY_REPORT_EMAIL="email@email.com" +export METRICS_UTILITY_REPORT_RHN_LOGIN="test_login" +export METRICS_UTILITY_REPORT_COMPANY_BUSINESS_LEADER="BUSINESS LEADER" +export METRICS_UTILITY_REPORT_COMPANY_PROCUREMENT_LEADER="PROCUREMENT LEADER" +---- ++ +. Add the following parameter to gather and store the data in the provided SHIP_PATH directory in the ./report_data subdirectory: ++ +[source, ] +---- +metrics-utility gather_automation_controller_billing_data --ship --until=10m +---- ++ +. To configure the run schedule, add the following parameters to the end of the file and specify how often you want metrics-utility to gather information and build a report using link:https://www.redhat.com/sysadmin/linux-cron-command[cron syntax]. In the example below, the gather command is configured to run every hour at 00 minutes. The build_report command is configured to run every second day of each month at 4:00 am. ++ +[source, ] +---- +0 */1 * * * metrics-utility gather_automation_controller_billing_data --ship --until=10m +0 4 2 * * metrics-utili +ty build_report +---- ++ +. Save and close the file. +. To verify that your changes are saved, run: ++ +[source, ] +---- +crontab -l +---- ++ +. You can also check the logs to ensure that data is being collected. Run: ++ +[source, ] +---- +cat /var/log/cron +---- ++ +The following is an example of the output. Note that time and date may vary depending on how your configure the run schedule: ++ +[source, ] +---- +May 8 09:45:03 ip-10-0-6-23 CROND[51623]: (root) CMDOUT (No billing data for month: 2024-04) +May 8 09:45:03 ip-10-0-6-23 CROND[51623]: (root) CMDEND (metrics-utility build_report) +May 8 09:45:19 ip-10-0-6-23 crontab[51619]: (root) END EDIT (root) +May 8 09:45:34 ip-10-0-6-23 crontab[51659]: (root) BEGIN EDIT (root) +May 8 09:46:01 ip-10-0-6-23 CROND[51688]: (root) CMD (metrics-utility gather_automation_controller_billing_data --ship --until=10m) +May 8 09:46:03 ip-10-0-6-23 CROND[51669]: (root) CMDOUT (/tmp/9e3f86ee-c92e-4b05-8217-72c496e6ffd9-2024-05-08-093402+0000-2024-05-08-093602+0000-0.tar.gz) +May 8 09:46:03 ip-10-0-6-23 CROND[51669]: (root) CMDEND (metrics-utility gather_automation_controller_billing_data --ship --until=10m) +May 8 09:46:26 ip-10-0-6-23 crontab[51659]: (root) END EDIT (root) +---- ++ +. Run the following command to build a report for the previous month: ++ +[source, ] +---- +metrics-utility build_report +---- ++ +The generated report will have the default name CCSP--.xlsx and will be deposited in the ship path that you specified in step 2. + +== On Openshift Container Platform from the AAP operator + +Metrics-utility is included in the Openshift Container Platform image beginning with version 4.12. If your system does not have metrics-utility installed, update your OpenShift image to the latest version. + +Follow the steps below to configure the run schedule for metrics-utility on Openshift Container Platform using the AAP operator. + +.Prerequisites: +* A running OpenShift cluster +* An operator-based installation of Ansible Automation Platform on OpenShift. + +NOTE: Metrics-utility will run as indicated by the parameters you set in the configuration file. The utility cannot be run manually on Openshift Container Platform. + +=== Create a ConfigMap in the Openshift UI YAML view + +. From the navigation panel on the left side, select *ConfigMaps*, and then click the *Create ConfigMap* button. +. On the next screen, select the *YAML view* tab. +. In the YAML field, enter the following parameters with the appropriate variables set: ++ +[source, ] +---- +apiVersion: v1 +kind: ConfigMap +metadata: + name: automationcontroller-metrics-utility-configmap +data: + METRICS_UTILITY_SHIP_TARGET: directory + METRICS_UTILITY_SHIP_PATH: /metrics-utility + METRICS_UTILITY_REPORT_TYPE: CCSP + METRICS_UTILITY_PRICE_PER_NODE: '11' # in USD + METRICS_UTILITY_REPORT_SKU: MCT3752MO + METRICS_UTILITY_REPORT_SKU_DESCRIPTION: "EX: Red Hat Ansible Automation Platform, Full Support (1 Managed Node, Dedicated, Monthly)" + METRICS_UTILITY_REPORT_H1_HEADING: "CCSP Reporting : ANSIBLE Consumption" + METRICS_UTILITY_REPORT_COMPANY_NAME: "Company Name" + METRICS_UTILITY_REPORT_EMAIL: "email@email.com" + METRICS_UTILITY_REPORT_RHN_LOGIN: "test_login" + METRICS_UTILITY_REPORT_COMPANY_BUSINESS_LEADER: "BUSINESS LEADER" + METRICS_UTILITY_REPORT_COMPANY_PROCUREMENT_LEADER: "PROCUREMENT LEADER" +---- ++ +. Click the *Create* button. +. To verify that the ConfigMap was created and the metric utility is installed, select *ConfigMap* from the navigation panel and look for your ConfigMap in the list. + + +=== Deploy automation controller + +Deploy automation controller and specify variables for how often the metric collection utility gathers usage information and generates a report. + +. From the navigation panel, select *Installed Operators*. +. Click on Ansible Automation Platform +. In the Operator details, select the *Automaton Controller* tab. +. Click the button labeled *Create AutomationController*. +. Select the *YAML view* option. The YAML now shows the default parameters for automation controller. +The relevant parameters for metrics-utility are the following: ++ +---- +[cols="50%,50%",options="header"] +|==== +| *Parameter* | *Variable* +| *`metrics_utility_enabled`* | True. +| *`metrics_utility_cronjob_gather_schedule`* | @hourly or @daily. +| *`metrics_utility_cronjob_report_schedule`* | @daily or @monthly. +|==== +---- ++ +. Find the `metrics_utility_enabled` parameter and change the variable to true. +. Find the `metrics_utility_cronjob_gather_schedule` parameter and enter a variable for how often the utility should gather usage information (for example, @hourly or @daily). +. Find the `metrics_utility_cronjob_report_schedule` parameter and enter a variable for how often the utility generates a report (for example, @daily or @monthly). +. Click the *Create* button. + + + + + + + + + + + + + + + + +== NewDoc + +[role="_additional-resources"] +.Additional resources + +* This section is optional. +* Provide a bulleted list of links to other closely-related material. These links can include `link:` and `xref:` macros. +* Use an unnumbered bullet (*) if the list includes only one step. + diff --git a/downstream/modules/platform/proc_modifying-the-run-schedule.adoc b/downstream/modules/platform/proc_modifying-the-run-schedule.adoc new file mode 100644 index 0000000000..839f1095b9 --- /dev/null +++ b/downstream/modules/platform/proc_modifying-the-run-schedule.adoc @@ -0,0 +1,53 @@ +:_newdoc-version: 2.18.3 +:_template-generated: 2024-07-15 +:_mod-docs-content-type: PROCEDURE + +[id="modifying-the-run-schedule_{context}"] += modifying-the-run-schedule + + +You can configure metrics-utility to run at specified times and intervals. Run frequency is expressed in cronjobs; see link:https://www.redhat.com/sysadmin/linux-cron-command[How to schedule jobs using the Linux ‘Cron’ utility] for more information. + +== On RHEL +=== *Procedure* + +. From the command line, run: ++ +[source, ] +---- +crontab -e +---- ++ +. After the code editor has opened, update the gather and build parameters using cron syntax as shown below: ++ +[source, ] +---- +*/2 * * * * metrics-utility gather_automation_controller_billing_data --ship --until=10m +*/5 * * * * metrics-utili +ty build_report +---- ++ +. Save and close the file. + +== On Openshift Container Platform from the AAP operator +=== *Procedure* + +. From the navigation panel, select *Workloads > Deployments*. +. On the next screen, click *automation-controller-operator-controller-manager*. +. Beneath the heading *Deployment Details*, click the down arrow button to change the number of pods to zero. This will pause the deployment so you can update the running schedule. +. From the navigation panel, click *Installed Operators*. From the list of installed operators, select Ansible Automation Platform. +. On the next screen, select the Automation Controller tab. +. From the list that appears, click your controller instance. +. On the next screen, select the YAML tab. +. In the YAML file, find the following parameters and enter a variable representing how often metrics-utility should gather data and how often it should produce a report: ++ +[source, ] +---- +metrics_utility_cronjob_gather_schedule: +metrics_utility_cronjob_report_schedule: +---- ++ +. Click *Save*. +. From the navigation menu, select *Deployments* and click automation-controller-operator-controller-manager. +. Increase the number of pods to 1. +. To verify that you have changed the utility-metrics running schedule successfully, return to the YAML file and ensure that the parameters described above reflect the correct variables. OR From the navigation menu, select *Workloads > Cronjobs* and ensure that your cronjobs show the updated schedule. diff --git a/downstream/modules/platform/ref_fetching-a-monthly-report.adoc b/downstream/modules/platform/ref_fetching-a-monthly-report.adoc new file mode 100644 index 0000000000..11916eeac5 --- /dev/null +++ b/downstream/modules/platform/ref_fetching-a-monthly-report.adoc @@ -0,0 +1,162 @@ +:_newdoc-version: 2.18.3 +:_template-generated: 2024-07-15 + +:_mod-docs-content-type: REFERENCE + +[id="fetching-a-monthly-report_{context}"] += fetching-a-monthly-report + + +== On RHEL +To fetch a monthly report on RHEL, run: + +[source, ] +---- +scp -r username@controller_host:$METRICS_UTILITY_SHIP_PATH/data/// /local/directory/ +---- + +The generated report will have the default name CCSP--.xlsx and will be deposited in the ship path that you specified. + +== On Openshift Container Platform from the AAP operator + +Use the following playbook to fetch a monthly consumption report for AAP on Openshift Container Platform: + +[source, ] +---- +- name: Copy directory from Kubernetes PVC to local machine + hosts: localhost + + vars: + report_dir_path: "/mnt/metrics/reports/{{ year }}/{{ month }}/" + + tasks: + - name: Create a temporary pod to access PVC data + kubernetes.core.k8s: + definition: + apiVersion: v1 + kind: Pod + metadata: + name: temp-pod + namespace: "{{ namespace_name }}" + spec: + containers: + - name: busybox + image: busybox + command: ["/bin/sh"] + args: ["-c", "sleep 3600"] # Keeps the container alive for 1 hour + volumeMounts: + - name: "{{ pvc }}" + mountPath: "/mnt/metrics" + volumes: + - name: "{{ pvc }}" + persistentVolumeClaim: + claimName: automationcontroller-metrics-utility + restartPolicy: Never + register: pod_creation + + - name: Wait for both initContainer and main container to be ready + kubernetes.core.k8s_info: + kind: Pod + namespace: "{{ namespace_name }}" + name: temp-pod + register: pod_status + until: > + pod_status.resources[0].status.containerStatuses[0].ready + retries: 30 + delay: 10 + + - name: Create a tarball of the directory of the report in the container + kubernetes.core.k8s_exec: + namespace: "{{ namespace_name }}" + pod: temp-pod + container: busybox + command: tar czf /tmp/metrics.tar.gz -C "{{ report_dir_path }}" . + register: tarball_creation + + - name: Copy the report tarball from the container to the local machine + kubernetes.core.k8s_cp: + namespace: "{{ namespace_name }}" + pod: temp-pod + container: busybox + state: from_pod + remote_path: /tmp/metrics.tar.gz + local_path: "{{ local_dir }}/metrics.tar.gz" + when: tarball_creation is succeeded + + - name: Ensure the local directory exists + ansible.builtin.file: + path: "{{ local_dir }}" + state: directory + + - name: Extract the report tarball on the local machine + ansible.builtin.unarchive: + src: "{{ local_dir }}/metrics.tar.gz" + dest: "{{ local_dir }}" + remote_src: yes + extra_opts: "--strip-components=1" + when: tarball_creation is succeeded + + - name: Delete the temporary pod + kubernetes.core.k8s: + api_version: v1 + kind: Pod + namespace: "{{ namespace_name }}" + name: temp-pod + state: absent +---- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +.Labeled list +Term 1:: Definition +Term 2:: Definition + +.Table +[options="header"] +|==== +|Column 1|Column 2|Column 3 +|Row 1, column 1|Row 1, column 2|Row 1, column 3 +|Row 2, column 1|Row 2, column 2|Row 2, column 3 +|==== + + + From d4206c3bb6728d870786771dc1717abf53ae1711 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Wed, 21 Aug 2024 17:42:13 -0600 Subject: [PATCH 096/590] AAP-29223 - Create structure for Access management and authentication (#1769) (#1773) * AAP-29223 - Create structure for Access management and authentication guide * AAP29223 - add symlink to assemblies/platform * AAP-29223 - formatting fixes * AAP-29223 Fixed duplicate ids in assemlies and other corrections --- .../assembly-controller-organizations.adoc | 2 +- ...ssembly-gw-config-authentication-type.adoc | 59 +++++++++++++++++++ .../assembly-gw-configure-authentication.adoc | 37 ++++++++++++ .../platform/assembly-gw-managing-access.adoc | 18 ++++++ .../assembly-gw-managing-authentication.adoc | 24 ++++++++ .../platform/assembly-gw-mapping.adoc | 31 ++++++++++ .../platform/assembly-gw-roles.adoc | 15 +++++ .../platform/assembly-gw-settings.adoc | 24 ++++++++ ...ssembly-gw-token-based-authentication.adoc | 15 +++++ ...controller-organization-notifications.adoc | 5 +- downstream/titles/central-auth/docinfo.xml | 4 +- downstream/titles/central-auth/master.adoc | 14 ++--- downstream/titles/central-auth/platform | 1 + 13 files changed, 235 insertions(+), 14 deletions(-) create mode 100644 downstream/assemblies/platform/assembly-gw-config-authentication-type.adoc create mode 100644 downstream/assemblies/platform/assembly-gw-configure-authentication.adoc create mode 100644 downstream/assemblies/platform/assembly-gw-managing-access.adoc create mode 100644 downstream/assemblies/platform/assembly-gw-managing-authentication.adoc create mode 100644 downstream/assemblies/platform/assembly-gw-mapping.adoc create mode 100644 downstream/assemblies/platform/assembly-gw-roles.adoc create mode 100644 downstream/assemblies/platform/assembly-gw-settings.adoc create mode 100644 downstream/assemblies/platform/assembly-gw-token-based-authentication.adoc create mode 120000 downstream/titles/central-auth/platform diff --git a/downstream/assemblies/platform/assembly-controller-organizations.adoc b/downstream/assemblies/platform/assembly-controller-organizations.adoc index 7468e415e2..d2843f53ce 100644 --- a/downstream/assemblies/platform/assembly-controller-organizations.adoc +++ b/downstream/assemblies/platform/assembly-controller-organizations.adoc @@ -32,7 +32,7 @@ include::platform/proc-gw-add-team-organization.adoc[leveloffset=+2] include::platform/proc-gw-delete-organization.adoc[leveloffset=+2] -include::platform/proc-gw-oganization-notifications.adoc[leveloffset=+1] +include::platform/ref-controller-organization-notifications.adoc[leveloffset=+1] include::platform/proc-gw-organizations-exec-env.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-gw-config-authentication-type.adoc b/downstream/assemblies/platform/assembly-gw-config-authentication-type.adoc new file mode 100644 index 0000000000..e061cad914 --- /dev/null +++ b/downstream/assemblies/platform/assembly-gw-config-authentication-type.adoc @@ -0,0 +1,59 @@ +ifdef::context[:parent-context: {context}] + +:_mod-docs-content-type: ASSEMBLY + +[id="gw-config-authentication-type_{context}"] + += Configuring authentication in the {PlatformNameShort} + +:context: gw-auth-type + +Ansible Automation Platform provides multiple authenticator plugins that you can configure to simplify the login experience for your organization. These are the authenticator plugins that are provided: +* xref:gw-local-authentication[Local] +* xref:controller-set-up-LDAP[LDAP] +* xref:controller-set-up-SAML[SAML] +* xref:controller-set-up-tacacs[TACACS+] +* xref:controller-set-up-radius[Radius] +* xref:controller-set-up-azure[Azure] +* xref:proc-controller-google-oauth2-settings[Google OAuth] +* xref:controller-set-up-generic-oidc[Generic OIDC] +* xref:gw-config-keycloak-settings[Keycloak] +* xref:proc-controller-github-settings[GitHub] +* xref:proc-controller-github-organization-setttings[GitHub organization] +* xref:proc-controller-github-team-settings[GitHub team] +* xref:proc-controller-github-enterprise-settings[GitHub enterprise] +* xref:proc-controller-github-enterprise-org-settings[GitHub enterprise organization] +* xref:proc-controller-github-enterprise-team-settings[GitHub enterprise team] + +include::platform/proc-gw-local-authentication.adoc[leveloffest=+1] + +include::platform/proc-controller-set-up-LDAP.adoc[leveloffset=+1] + +include::platform/proc-controller-set-up-SAML.adoc[leveloffset=+1] + +include::platform/proc-controller-set-up-tacacs+.adoc[leveloffset=+1] + +include::platform/proc-controller-set-up-azure.adoc[leveloffset=+1] + +include::platform/proc-controller-google-oauth2-settings.adoc[leveloffset=+1] + +include::platform/proc-controller-set-up-generic-oidc.adoc[leveloffest=+1] + +include::platform/proc-gw-config-keycloak-settings.adoc[leveloffset=+1] + +include::platform/proc-controller-github-settings.adoc[leveloffset=+1] + +include::platform/proc-controller-github-organization-settings.adoc[leveloffset=+1] + +include::platform/proc-controller-github-team-settings.adoc[leveloffset=+1] + +include::platform/proc-controller-github-enterprise-settings.adoc[leveloffset=+1] + +include::platform/proc-controller-github-enterprise-org-settings.adoc[leveloffset=+1] + +include::platform/proc-controller-github-enterprise-team-settings.adoc[leveloffset=+1] + +include::platform/proc-controller-set-up-radius.adoc[leveloffset=+1] + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/platform/assembly-gw-configure-authentication.adoc b/downstream/assemblies/platform/assembly-gw-configure-authentication.adoc new file mode 100644 index 0000000000..49338e0c94 --- /dev/null +++ b/downstream/assemblies/platform/assembly-gw-configure-authentication.adoc @@ -0,0 +1,37 @@ +ifdef::context[:parent-context: {context}] + +:_mod-docs-content-type: ASSEMBLY + +[id="gw-configure-authentication_{context}"] + += Configuring authentication in the {PlatformNameShort} + +:context: gw-auth-wizard + +Using the authentication settings in {PlatformNameShort}, you can set up a simplified login through several authentication methods, such as LDAP and SAML +Depending on the authentication method you select, you will be required to enter different information to complete the configuration. Be sure to include all the information required for your configuration needs. + +== Prerequisites + +* A running installation of {PlatformNameShort} {PlatformVers} +* A running instance of your authentication source +* Administrator rights to the {PlatformNameShort} +* Any connection information needed to connect {PlatformNameShort} {PlatformVers} to your source (see individual authentication types for details). + +include::platform/con-gw-pluggable-authentication.adoc[leveloffest=+1] + +include::platform/con-gw-create-authentication.adoc[leveloffset=+1] + +include::platform/proc-gw-select-auth-type.adoc[leveloffset=+2] + +include::platform/proc-gw-configure-auth-details.adoc[leveloffset=+2] + +include::platform/proc-gw-define-rules-triggers.adoc[leveloffset=+2] + +include::platform/proc-gw-adjust-mapping-order.adoc[leveloffset=+2] + +include::assembly-gw-config-authentication-type.adoc[leveloffset=+1] + + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/platform/assembly-gw-managing-access.adoc b/downstream/assemblies/platform/assembly-gw-managing-access.adoc new file mode 100644 index 0000000000..0ef43e8d07 --- /dev/null +++ b/downstream/assemblies/platform/assembly-gw-managing-access.adoc @@ -0,0 +1,18 @@ +:_mod-docs-content-type: ASSEMBLY + +[id="gw-managing-access_{context}"] + += Managing access with role based access control + +:context: gw-manage-rbac + +Role-based access control (RBAC) restricts user access based on their role within an organization. The roles in RBAC refer to the levels of access that users have to the network. + +You can control what users can do with the components of {PlatformNameShort} at a broad or granular level depending on your RBAC policy. You can designate whether the user is a system administrator or normal user and align roles and access permissions with their positions within the organization. + +Roles can be defined with multiple permissions that can then be assigned to resources, teams and users. The permissions that make up a role dictate what the assigned role allows. Permissions are allocated with only the access needed for a user to perform the tasks appropriate for their role. + +include::assembly-controller-organizations.adoc[leveloffset=+1] +include::assembly-controller-teams.adoc[leveloffset=+1] +include::assembly-controller-users.adoc[leveloffset=+1] +include::assembly-gw-resources.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-gw-managing-authentication.adoc b/downstream/assemblies/platform/assembly-gw-managing-authentication.adoc new file mode 100644 index 0000000000..347a5731e1 --- /dev/null +++ b/downstream/assemblies/platform/assembly-gw-managing-authentication.adoc @@ -0,0 +1,24 @@ +ifdef::context[:parent-context: {context}] + +:_mod-docs-content-type: ASSEMBLY + +[id="gw-managing-authentication_{context}"] + += Managing authentication in {PlatformNameShort} + +:context: gw-manage-auth + +After you have configured your authentication settings, you can view a list of authenticators, search, sort and view the details for each authenticator configured on the system. + +include::platform/proc-gw-authentication-list-view.adoc[leveloffset=+1] + +include::platform/proc-gw-searching-authenticator.adoc[leveloffset=+1] + +include::platform/proc-gw-display-auth-details.adoc[leveloffset=+1] + +include::platform/proc-gw-edit-authenticator.adoc[leveloffset=+1] + +include::platform/proc-gw-delete-authenticator.adoc[leveloffset=+1] + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/platform/assembly-gw-mapping.adoc b/downstream/assemblies/platform/assembly-gw-mapping.adoc new file mode 100644 index 0000000000..378d62a723 --- /dev/null +++ b/downstream/assemblies/platform/assembly-gw-mapping.adoc @@ -0,0 +1,31 @@ +ifdef::context[:parent-context: {context}] + +:_mod-docs-content-type: ASSEMBLY + +[id="gw-mapping_{context}"] + += Mapping + +:context: gw-mapping + +To control which users are allowed into the {PlatformNameShort} server, and placed into {PlatformNameShort} organizations or teams based on their attributes (like username and email address) or what groups they belong to, you can configure authenticator maps. +Authenticator maps allow you to add conditions that must be met before a user is given or denied access to a resource type. Authenticator maps are associated with an authenticator and are given an order. The maps are processed in order when the user logs in. These can be thought of like firewall rules or mail filters. + +include::platform/con-gw-authenticator-map-types.adoc[leveloffset=+1] + +include::platform/con-gw-authenticator-map-triggers.adoc[leveloffset=+1] + +include::platform/con-gw-authenticator-map-examples.adoc[leveloffset=+1] + +include::platform/proc-gw-allow-mapping.adoc[leveloffset=+1] + +include::platform/ref-controller-organization-mapping.adoc[leveloffset=+1] + +include::platform/ref-controller-team-mapping.adoc[leveloffset=+1] + +include::platform/proc-gw-role-mapping.adoc[leveloffset=+1] + +include::platform/proc-gw-superuser-mapping.adoc[leveloffset=+1] + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/platform/assembly-gw-roles.adoc b/downstream/assemblies/platform/assembly-gw-roles.adoc new file mode 100644 index 0000000000..87db8d593f --- /dev/null +++ b/downstream/assemblies/platform/assembly-gw-roles.adoc @@ -0,0 +1,15 @@ +:_mod-docs-content-type: ASSEMBLY + +[id="assembly-gw-roles_{context}"] + += Roles + +:context: gw-roles + +Roles are units of organization in the {PlatformName}. When you assign a role to a team or user, you are granting access to use, read, or write credentials. Because of the file structure associated with a role, roles become redistributable units that enable you to share behavior among resources, or with other users. All access that is granted to use, read, or write credentials is handled through roles, and roles are defined for a resource. + +include::platform/proc-gw-roles.adoc[leveloffset=+1] +include::platform/proc-gw-create-roles.adoc[leveloffset=+1] +include::platform/proc-gw-edit-roles.adoc[leveloffset=+1] +include::platform/proc-gw-delete-roles.adoc[leveloffset=+1] + diff --git a/downstream/assemblies/platform/assembly-gw-settings.adoc b/downstream/assemblies/platform/assembly-gw-settings.adoc new file mode 100644 index 0000000000..eb67802670 --- /dev/null +++ b/downstream/assemblies/platform/assembly-gw-settings.adoc @@ -0,0 +1,24 @@ +:_mod-docs-content-type: ASSEMBLY + +[id="assembly-gw-settings_{context}"] + += Configuring {PlatformNameShort} + +:context: gw-settings + +You can configure Ansible Automation platform from the *Settings* menu using the following selections: + +* *Subscriptions* +* *Platform gateway* +* *User Preferences* +* *Troubleshooting* + +[NOTE] +==== +The other selections available from the *Settings* menu are specific to automation execution. For more information, refer to the link:https://{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/controller-config[TitleControllerAdminGuide] guide. +==== + +include::/platform/proc-controller-configure-subscriptions.adoc[leveloffset=+1] +include::/platform/proc-settings-platform-gateway.adoc[leveloffset=+1] +include::/platform/proc-settings-user-preferences.adoc[leveloffset=+1] +include::/platform/proc-settings-troubleshooting.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-gw-token-based-authentication.adoc b/downstream/assemblies/platform/assembly-gw-token-based-authentication.adoc new file mode 100644 index 0000000000..6929c65bab --- /dev/null +++ b/downstream/assemblies/platform/assembly-gw-token-based-authentication.adoc @@ -0,0 +1,15 @@ +ifdef::context[:parent-context: {context}] + +:_mod-docs-content-type: ASSEMBLY + +[id="gw-token-based-authentication_{context}"] + += Configuring token-based authentication + +:context: gw-token-auth + +[TBD] The content for this is in progress in separate link:https://docs.google.com/document/d/1GLk5zcD-8hZxU61Ik8wASDofkX7iQo5IJvkCOv5gRMw/edit?usp=sharing[Applications] and link:https://docs.google.com/document/d/1w9KjK8CybZ3w0u0DGNf0rNDC72vomwbdt5rZkUZCaBk/edit#bookmark=id.1rtgxk9mwxi0[Token-based authentication] drafts. Once converted/updated in AsciiDoc and in the repo, update this section to include those modules. + + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] diff --git a/downstream/modules/platform/ref-controller-organization-notifications.adoc b/downstream/modules/platform/ref-controller-organization-notifications.adoc index 011dbb7468..cafaa3e21c 100644 --- a/downstream/modules/platform/ref-controller-organization-notifications.adoc +++ b/downstream/modules/platform/ref-controller-organization-notifications.adoc @@ -7,12 +7,11 @@ When {ControllerName} is enabled on the platform, you can review any notifier integrations you have set up and manage their settings within the organization resource. .Procedure -. From the navigation panel, select Access Management › Organizations. +. From the navigation panel, select {MenuAMOrganizations}. . From the Organizations list view, select the organization to which you want to manage notifications. //ddacosta - this might change to Notifiers tab. . Select the *Notification* tab. . Use the toggles to enable or disable the notifications to use with your particular organization. For more information, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/using_automation_execution/controller-enable-disable-notifications[Enable and disable notifications]. . If no notifiers have been set up, select {MenuAEAdminJobNotifications} from the navigation panel. - -For information on configuring notification types, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/using_automation_execution/controller-notifications#controller-notification-types[Notification types]. \ No newline at end of file +For information on configuring notification types, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/using_automation_execution/controller-notifications#controller-notification-types[Notification types]. diff --git a/downstream/titles/central-auth/docinfo.xml b/downstream/titles/central-auth/docinfo.xml index a4bdbbce14..8a66af0c12 100644 --- a/downstream/titles/central-auth/docinfo.xml +++ b/downstream/titles/central-auth/docinfo.xml @@ -1,10 +1,10 @@ Access management and authentication Red Hat Ansible Automation Platform 2.5 -Enable authentication functions and role based access controls for Ansible Automation Platform +Configure role based access control, authenticators and authenticator maps in Ansible Automation Platform -This guide provides platform administrators with the information and procedures required to enable and configure central authentication on Ansible Automation Platform. +This guide provides requirements, options, and recommendations for controlling access to Red Hat Ansible Automation Platform resources. Red Hat Customer Content Services diff --git a/downstream/titles/central-auth/master.adoc b/downstream/titles/central-auth/master.adoc index 1b931a0936..dc1eebf0be 100644 --- a/downstream/titles/central-auth/master.adoc +++ b/downstream/titles/central-auth/master.adoc @@ -9,13 +9,11 @@ include::attributes/attributes.adoc[] // Book Title = Access management and authentication -{AAPCentralAuth} is a third-party identity provider (idP) solution, allowing for a simplified single sign-on solution that can be used across the {PlatformNameShort}. Platform administrators can utilize {CentralAuth} to test connectivity and authentication, as well as onboard new users and manage user permissions by configuring and assigning them to groups. Along with OpenID Connect-based and LDAP support, {CentralAuth} also provides a supported REST API which can be used to bootstrap customer usage. - include::{Boilerplate}[] -include::central-auth/assembly-central-auth-hub.adoc[leveloffset=+1] -include::central-auth/assembly-central-auth-add-user-storage.adoc[leveloffset=+1] -include::central-auth/assembly-assign-hub-admin-permissions.adoc[leveloffset=+1] -include::central-auth/assembly-central-auth-identity-broker.adoc[leveloffset=+1] -include::central-auth/assembly-central-auth-group-perms.adoc[leveloffset=+1] -include::central-auth/assembly-configuring-central-auth-generic-oidc-settings.adoc[leveloffset=+1] +include::platform/platform/con-gw-overview-access-auth.adoc[leveloffset=+1] +include::platform/assembly-gw-configure-authentication.adoc[leveloffset=+1] +include::platform/assembly-gw-token-based-authentication.adoc[leveloffset=+1] +include::platform/assembly-gw-managing-access.adoc[leveloffset=+1] +include::platform/assembly-gw-roles.adoc[leveloffset=+1] +include::platform/assembly-gw-settings.adoc[leveloffset=+1] diff --git a/downstream/titles/central-auth/platform b/downstream/titles/central-auth/platform new file mode 120000 index 0000000000..06b49528ee --- /dev/null +++ b/downstream/titles/central-auth/platform @@ -0,0 +1 @@ +../../assemblies/platform \ No newline at end of file From 90680e23f72c8f752358545483ed10bb36fc3b4c Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:21:37 +0100 Subject: [PATCH 097/590] Installing on Openshift Container Platform - UI updates (#1775) (#1779) * Editorial review of entire doc ahead of 2.5 EA (#1628) * PR suggestions * test * Updating procedure steps to better orientate the user * PR suggestions --- .../platform/assembly-installing-controller-operator.adoc | 4 ++-- .../modules/platform/proc-access-hub-operator-ui.adoc | 1 + .../platform/proc-add-controller-access-token.adoc | 1 + .../proc-configuring-controller-image-pull-policy.adoc | 6 ++++-- .../proc-configuring-controller-route-options.adoc | 8 +++++--- .../modules/platform/proc-controller-ingress-options.adoc | 8 +++++--- downstream/modules/platform/proc-create-a-user.adoc | 1 + .../modules/platform/proc-create-keycloak-client.adoc | 1 + .../modules/platform/proc-create-keycloak-instance.adoc | 3 ++- .../modules/platform/proc-create-keycloak-realm.adoc | 1 + downstream/modules/platform/proc-determine-hub-route.adoc | 1 + downstream/modules/platform/proc-hub-ingress-options.adoc | 8 +++++--- downstream/modules/platform/proc-hub-route-options.adoc | 8 +++++--- .../modules/platform/proc-install-aap-operator.adoc | 4 ++-- .../platform/proc-installing-hub-using-operator.adoc | 6 ++++-- .../proc-installing-the-ansible-platform-operator.adoc | 6 ++++-- downstream/modules/platform/proc-operator-access-aap.adoc | 1 + .../platform/proc-operator-deploy-central-config.adoc | 3 ++- .../modules/platform/proc-operator-link-components.adoc | 7 ++++++- downstream/modules/platform/proc-update-rhsso-client.adoc | 3 ++- 20 files changed, 55 insertions(+), 26 deletions(-) diff --git a/downstream/assemblies/platform/assembly-installing-controller-operator.adoc b/downstream/assemblies/platform/assembly-installing-controller-operator.adoc index f777a6658d..b20300b072 100644 --- a/downstream/assemblies/platform/assembly-installing-controller-operator.adoc +++ b/downstream/assemblies/platform/assembly-installing-controller-operator.adoc @@ -47,8 +47,8 @@ When an instance of {ControllerName} is removed, the associated PVCs are not aut //include::platform/proc-creating-controller-form-view.adoc[leveloffset=+2] include::platform/proc-configuring-controller-image-pull-policy.adoc[leveloffset=+2] -// removing this section until we add the new guide for gateway specific -//include::platform/proc-configuring-controller-ldap-security.adoc[leveloffset=+2] +// removing this section until we add the new guide for gateway specific - need to add a link to Donna's doc +// include::platform/proc-configuring-controller-ldap-security.adoc[leveloffset=+2] include::platform/proc-configuring-controller-route-options.adoc[leveloffset=+2] include::platform/proc-controller-ingress-options.adoc[leveloffset=+2] include::platform/proc-operator-external-db-controller.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/proc-access-hub-operator-ui.adoc b/downstream/modules/platform/proc-access-hub-operator-ui.adoc index a239b92bc8..0541e7dfaf 100644 --- a/downstream/modules/platform/proc-access-hub-operator-ui.adoc +++ b/downstream/modules/platform/proc-access-hub-operator-ui.adoc @@ -5,6 +5,7 @@ You can access the {HubName} through the platform gateway or through the following procedure. .Procedure +. Log into {OCP}. . Navigate to menu:Networking[Routes]. . Under *Location*, click on the URL for your {HubName} instance. diff --git a/downstream/modules/platform/proc-add-controller-access-token.adoc b/downstream/modules/platform/proc-add-controller-access-token.adoc index 4eba6a0094..a2d8769824 100644 --- a/downstream/modules/platform/proc-add-controller-access-token.adoc +++ b/downstream/modules/platform/proc-add-controller-access-token.adoc @@ -9,6 +9,7 @@ NOTE: You can only create OAuth 2 Tokens for your own user through the API or UI .Procedure To create an OAuth2 token for your user in the platform gateway UI: +. Log in to {OCP}. . In the navigation panel, select menu:Access Management[Users]. . Select the username you want to create a token for. . Select menu:Tokens[Automation Execution] diff --git a/downstream/modules/platform/proc-configuring-controller-image-pull-policy.adoc b/downstream/modules/platform/proc-configuring-controller-image-pull-policy.adoc index a1fb10b224..cd49dce7fb 100644 --- a/downstream/modules/platform/proc-configuring-controller-image-pull-policy.adoc +++ b/downstream/modules/platform/proc-configuring-controller-image-pull-policy.adoc @@ -5,10 +5,12 @@ Use this procedure to configure the image pull policy on your {ControllerName}. .Procedure +. Log in to {OCP}. . Go to menu:Operators[Installed Operators]. -. Locate the *Automation Controller* tab. +. Select your {OperatorPlatform} deployment. +. Select the *Automation Controller* tab. . For new instances, click btn:[Create AutomationController]. -.. For existing instances, you can edit the YAML view by clicking {MoreActionsIcon} and then btn:[Edit AutomationController]. +.. For existing instances, you can edit the YAML view by clicking the {MoreActionsIcon} icon and then btn:[Edit AutomationController]. . Click btn:[advanced Configuration]. Under *Image Pull Policy*, click on the radio button to select * *Always* diff --git a/downstream/modules/platform/proc-configuring-controller-route-options.adoc b/downstream/modules/platform/proc-configuring-controller-route-options.adoc index dcb33174aa..c4ecfd52c4 100644 --- a/downstream/modules/platform/proc-configuring-controller-route-options.adoc +++ b/downstream/modules/platform/proc-configuring-controller-route-options.adoc @@ -5,10 +5,12 @@ The {PlatformName} operator installation form allows you to further configure your {ControllerName} operator route options under *Advanced configuration*. .Procedure -. Go to menu:Operators[Installed Operators]. -. Locate the *Automation Controller* tab. +. Log in to {OCP}. +. Navigate to menu:Operators[Installed Operators]. +. Select your {OperatorPlatform} deployment. +. Select the *Automation Controller* tab. . For new instances, click btn:[Create AutomationController]. -.. For existing instances, you can edit the YAML view by clicking {MoreActionsIcon} and then btn:[Edit AutomationController]. +.. For existing instances, you can edit the YAML view by clicking the {MoreActionsIcon} icon and then btn:[Edit AutomationController]. . Click btn:[Advanced configuration]. . Under *Ingress type*, click the drop-down menu and select *Route*. . Under *Route DNS host*, enter a common host name that the route answers to. diff --git a/downstream/modules/platform/proc-controller-ingress-options.adoc b/downstream/modules/platform/proc-controller-ingress-options.adoc index 66c0a05c78..c87782b07e 100644 --- a/downstream/modules/platform/proc-controller-ingress-options.adoc +++ b/downstream/modules/platform/proc-controller-ingress-options.adoc @@ -6,10 +6,12 @@ The {OperatorPlatform} installation form allows you to further configure your {C .Procedure -. Go to menu:Operators[Installed Operators]. -. Locate the *Automation Controller* tab. +. Log in to {OCP}. +. Navigate to menu:Operators[Installed Operators]. +. Select your {OperatorPlatform} deployment. +. Select the *Automation Controller* tab. . For new instances, click btn:[Create AutomationController]. -.. For existing instances, you can edit the YAML view by clicking {MoreActionsIcon} and then btn:[Edit AutomationController]. +.. For existing instances, you can edit the YAML view by clicking the {MoreActionsIcon} icon and then btn:[Edit AutomationController]. . Click btn:[Advanced configuration]. . Under *Ingress type*, click the drop-down menu and select *Ingress*. . Under *Ingress annotations*, enter any annotations to add to the ingress. diff --git a/downstream/modules/platform/proc-create-a-user.adoc b/downstream/modules/platform/proc-create-a-user.adoc index 09d983dc54..570f26b1a7 100644 --- a/downstream/modules/platform/proc-create-a-user.adoc +++ b/downstream/modules/platform/proc-create-a-user.adoc @@ -6,6 +6,7 @@ This procedure creates a Keycloak user, with the `hubadmin` role, that can log i .Procedure +. Log in to {OCP}. . Navigate to menu:Operator[Installed Operators]. . Select the {OperatorRHSSO} project. . Select the *Keycloak Realm* tab and click btn:[Create Keycloak User]. diff --git a/downstream/modules/platform/proc-create-keycloak-client.adoc b/downstream/modules/platform/proc-create-keycloak-client.adoc index 6b2d6f1b8e..45392299a7 100644 --- a/downstream/modules/platform/proc-create-keycloak-client.adoc +++ b/downstream/modules/platform/proc-create-keycloak-client.adoc @@ -8,6 +8,7 @@ When Single Sign-On validates or issues the `OAuth` token, the client provides t .Procedure +. Log in to {OCP}. . Navigate to menu:Operator[Installed Operators]. . Select the {OperatorRHSSO} project. . Select the *Keycloak Client* tab and click btn:[Create Keycloak Client]. diff --git a/downstream/modules/platform/proc-create-keycloak-instance.adoc b/downstream/modules/platform/proc-create-keycloak-instance.adoc index a9ab571dc6..bcb39b939a 100644 --- a/downstream/modules/platform/proc-create-keycloak-instance.adoc +++ b/downstream/modules/platform/proc-create-keycloak-instance.adoc @@ -8,8 +8,9 @@ From here you provide an external Postgres or one will be created for you. .Procedure +/ Log in to {OCP}. . Navigate to menu:Operator[Installed Operators]. -. Select the `rh-sso` project. +. Select the *RH-SSO* project. . Select the *{OperatorRHSSO}*. . On the {OperatorRHSSO} details page select btn:[Keycloak]. . Click btn:[Create instance]. diff --git a/downstream/modules/platform/proc-create-keycloak-realm.adoc b/downstream/modules/platform/proc-create-keycloak-realm.adoc index 062cb16717..df6dce9a87 100644 --- a/downstream/modules/platform/proc-create-keycloak-realm.adoc +++ b/downstream/modules/platform/proc-create-keycloak-realm.adoc @@ -8,6 +8,7 @@ Realms are isolated from one another and can only manage and authenticate the us .Procedure +. Log in to {OCP}. . Navigate to menu:Operator[Installed Operators]. . Select the *{OperatorRHSSO}* project. . Select the *Keycloak Realm* tab and click btn:[Create Keycloak Realm]. diff --git a/downstream/modules/platform/proc-determine-hub-route.adoc b/downstream/modules/platform/proc-determine-hub-route.adoc index f1ad4e5b19..9d1257d4ec 100644 --- a/downstream/modules/platform/proc-determine-hub-route.adoc +++ b/downstream/modules/platform/proc-determine-hub-route.adoc @@ -6,6 +6,7 @@ Use the following procedure to determine the hub route. .Procedure +. Log in to {OCP}. . Navigate to menu:Networking[Routes]. . Select the project you used for the install. . Copy the location of the `private-ah-web-svc` service. diff --git a/downstream/modules/platform/proc-hub-ingress-options.adoc b/downstream/modules/platform/proc-hub-ingress-options.adoc index a6a9daf1ac..5d1180190e 100644 --- a/downstream/modules/platform/proc-hub-ingress-options.adoc +++ b/downstream/modules/platform/proc-hub-ingress-options.adoc @@ -6,10 +6,12 @@ The {OperatorPlatform} installation form allows you to further configure your {H .Procedure -. Go to menu:Operators[Installed Operators]. -. Locate the *Automation Hub* tab. +. Log in to {OCP}. +. Navigate to menu:Operators[Installed Operators]. +. Select your {OperatorPlatform} deployment. +. Select the *Automation Hub* tab. . For new instances, click btn:[Create AutomationHub]. -.. For existing instances, you can edit the YAML view by clicking {MoreActionsIcon} and then btn:[Edit AutomationHub]. +.. For existing instances, you can edit the YAML view by clicking the {MoreActionsIcon} icon and then btn:[Edit AutomationHub]. . Click btn:[Advanced Configuration]. . Under *Ingress type*, click the drop-down menu and select *Ingress*. . Under *Ingress annotations*, enter any annotations to add to the ingress. diff --git a/downstream/modules/platform/proc-hub-route-options.adoc b/downstream/modules/platform/proc-hub-route-options.adoc index 0cd5cfac5a..069d5431ea 100644 --- a/downstream/modules/platform/proc-hub-route-options.adoc +++ b/downstream/modules/platform/proc-hub-route-options.adoc @@ -6,10 +6,12 @@ The {PlatformName} operator installation form allows you to further configure yo .Procedure -. Go to menu:Operators[Installed Operators]. -. Locate the *Automation Hub* tab. +. Log in to {OCP}. +. Navigate to menu:Operators[Installed Operators]. +. Select your {OperatorPlatform} deployment. +. Select the *Automation Hub* tab. . For new instances, click btn:[Create AutomationHub]. -.. For existing instances, you can edit the YAML view by clicking {MoreActionsIcon} and then btn:[Edit AutomationHub]. +.. For existing instances, you can edit the YAML view by clicking the {MoreActionsIcon} icon and then btn:[Edit AutomationHub]. . Click btn:[Advanced configuration]. . Under *Ingress type*, click the drop-down menu and select *Route*. . Under *Route DNS host*, enter a common host name that the route answers to. diff --git a/downstream/modules/platform/proc-install-aap-operator.adoc b/downstream/modules/platform/proc-install-aap-operator.adoc index f3a226fef1..f41cd6a2ac 100644 --- a/downstream/modules/platform/proc-install-aap-operator.adoc +++ b/downstream/modules/platform/proc-install-aap-operator.adoc @@ -11,6 +11,6 @@ . Select *Installation Mode*, *Installed Namespace*, and *Approval Strategy*. . Click btn:[Install]. -The installation process will begin. When installation is complete, a modal will appear notifying you that the {PlatformName} operator is installed in the specified namespace. +The installation process will begin. When installation is complete, a modal will appear notifying you that the {OperatorPlatform} is installed in the specified namespace. -* Click btn:[View Operator] to view your newly installed {PlatformName} operator. +* Click btn:[View Operator] to view your newly installed {OperatorPlatform}. diff --git a/downstream/modules/platform/proc-installing-hub-using-operator.adoc b/downstream/modules/platform/proc-installing-hub-using-operator.adoc index 6f93318156..c7a30e0d44 100644 --- a/downstream/modules/platform/proc-installing-hub-using-operator.adoc +++ b/downstream/modules/platform/proc-installing-hub-using-operator.adoc @@ -6,9 +6,11 @@ Use the following procedure to install {HubName} using the {OperatorPlatform}. .Procedure +. Log in to {OCP}. . Navigate to menu:Operator[Installed Operators]. -. Select the {PlatformNameShort}. -. Select the {HubNameStart} tab and click btn:[Create {HubNameStart}]. +. Select your {OperatorPlatform} deployment. +. Select the {HubNameStart} tab. +. Click btn:[Create {HubNameStart}]. . Select btn:[YAML view]. The YAML should be similar to: + diff --git a/downstream/modules/platform/proc-installing-the-ansible-platform-operator.adoc b/downstream/modules/platform/proc-installing-the-ansible-platform-operator.adoc index 72d014dadb..adcc608306 100644 --- a/downstream/modules/platform/proc-installing-the-ansible-platform-operator.adoc +++ b/downstream/modules/platform/proc-installing-the-ansible-platform-operator.adoc @@ -4,8 +4,10 @@ .Procedure -. Navigate to menu:Operator[Operator Hub] and search for the {PlatformNameShort} Operator. -. Select the {PlatformNameShort} Operator project. +. Log in to {OCP}. +. Navigate to menu:Operator[Operator Hub]. +. Search for the {OperatorPlatform}. +. Select the {OperatorPlatform} project. . Click on the Operator tile. . Click btn:[Install]. . Select a Project to install the Operator into. diff --git a/downstream/modules/platform/proc-operator-access-aap.adoc b/downstream/modules/platform/proc-operator-access-aap.adoc index ba4ca3000f..63c9a6dfda 100644 --- a/downstream/modules/platform/proc-operator-access-aap.adoc +++ b/downstream/modules/platform/proc-operator-access-aap.adoc @@ -8,6 +8,7 @@ This instance links the {ControllerName}, {HubName}, and {EDAName} deployments t To access your *{PlatformNameShort}* instance: +. Log in to {OCP}. . Navigate to menu:Networking[Routes] . Click the link under *Location* for *{PlatformNameShort}*. . This redirects you to the {PlatformNameShort} login page. Enter "admin" as your username in the *Username* field. diff --git a/downstream/modules/platform/proc-operator-deploy-central-config.adoc b/downstream/modules/platform/proc-operator-deploy-central-config.adoc index 03f6fc66a8..7815ccbd46 100644 --- a/downstream/modules/platform/proc-operator-deploy-central-config.adoc +++ b/downstream/modules/platform/proc-operator-deploy-central-config.adoc @@ -7,7 +7,8 @@ The following procedure simulates a scenario where you have {ControllerName} as .Procedure . Log in to {OCP}. -. Go to to menu:Operators[Installed Operators]. +. Navigate to menu:Operators[Installed Operators]. +. Select your {OperatorPlatform} deployment. . Click btn:[Subscriptions] and edit your *Update channel* to *stable-2.5*. . Click btn:[Details] and on the *{PlatformNameShort}* tile click btn:[Create instance]. . From the *Create {PlatformNameShort}* page enter a name for your instance in the *Name* field. diff --git a/downstream/modules/platform/proc-operator-link-components.adoc b/downstream/modules/platform/proc-operator-link-components.adoc index 00639fbe32..a5b0f7d223 100644 --- a/downstream/modules/platform/proc-operator-link-components.adoc +++ b/downstream/modules/platform/proc-operator-link-components.adoc @@ -6,7 +6,12 @@ After installing the {OperatorPlatform} in your namespace you can set up your *{ Then link all the platform components to a single user interface. .Procedure -. Go to your {OperatorPlatform} and click btn:[Details]. + +. Log in to {OCP}. +. Navigate to menu:Operators[Installed Operators]. +. Select your {OperatorPlatform} deployment. +. Select the *Details* tab. + . On the *{PlatformNameShort}* tile click btn:[Create instance]. . From the *Create {PlatformNameShort}* page enter a name for your instance in the *Name* field. . Click btn:[YAML view] and paste the following: diff --git a/downstream/modules/platform/proc-update-rhsso-client.adoc b/downstream/modules/platform/proc-update-rhsso-client.adoc index db9a4a0286..22dbe193c4 100644 --- a/downstream/modules/platform/proc-update-rhsso-client.adoc +++ b/downstream/modules/platform/proc-update-rhsso-client.adoc @@ -6,8 +6,9 @@ After you install {HubName} and you know the URL of the instance, you must updat .Procedure +. Log in to {OCP}. . Navigate to menu:Operator[Installed Operators]. -. Select the RH-SSO project. +. Select the *RH-SSO* project. . Click btn:[Red Hat Single Sign-On Operator]. . Select btn:[Keycloak Client]. . Click on the automation-hub-client-secret client. From 82080c71e65d92d5d2cdb36d22d9f59e90ce5283 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Thu, 22 Aug 2024 13:35:47 +0100 Subject: [PATCH 098/590] Updated Schedules information (#1776) (#1778) * Updated Schedules information Update procedures for Schedules https://issues.redhat.com/browse/AAP-29720 * Updated schedules information Correction Update procedures for Schedules https://issues.redhat.com/browse/AAP-29720 --- .../assembly-ug-controller-schedules.adoc | 3 ++- .../proc-controller-adding-new-schedule.adoc | 19 +++++++++++++++---- ...proc-controller-define-schedule-rules.adoc | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/downstream/assemblies/platform/assembly-ug-controller-schedules.adoc b/downstream/assemblies/platform/assembly-ug-controller-schedules.adoc index 62da9665f2..e765c62f4d 100644 --- a/downstream/assemblies/platform/assembly-ug-controller-schedules.adoc +++ b/downstream/assemblies/platform/assembly-ug-controller-schedules.adoc @@ -6,7 +6,8 @@ From the navigation panel, click {MenuAESchedules} to access your configured sch The schedules list can be sorted by any of the attributes from each column using the directional arrows. You can also search by name, date, or the name of the month in which a schedule runs. -Each schedule has options to enable or disable that schedule using the *On* or *Off* toggle next to the schedule name. +Use the *On* or *Off* toggle to stop an active schedule or activate a stopped schedule. + Click the Edit image:leftpencil.png[Edit,15,15] icon to edit a schedule. image::ug-schedules-sample-list.png[Schedules sample list] diff --git a/downstream/modules/platform/proc-controller-adding-new-schedule.adoc b/downstream/modules/platform/proc-controller-adding-new-schedule.adoc index d7841d1c99..90bcaf7989 100644 --- a/downstream/modules/platform/proc-controller-adding-new-schedule.adoc +++ b/downstream/modules/platform/proc-controller-adding-new-schedule.adoc @@ -10,9 +10,20 @@ To create a new schedule on the *Schedules* page: . From the navigation panel, select {MenuAESchedules}. . Click btn:[Create schedule]. This opens the *Create Schedule* window. +. Select a *Resource type* onto which this schedule is applied. + -image::ug-generic-create-schedule.png[Create schedule] -+ +Select from: + +* *Job template* +** For *Job template* select a *Job template* from the menu. +* *Workflow job template* +** For *Workflow job template* select a *Workflow job template* from the menu. +* *Inventory source* +** For *Inventory source* select an *Inventory* and an *Inventory source* from the appropriate menu. +* *Project sync* +** For *Project sync* select a *Project* from the menu. +* *Management job template* +** For *Management job template* select a *Workflow job template* from the menu. To create a new schedule from a resource page: @@ -22,7 +33,7 @@ This can be a template, project, or inventory source. . Click btn:[Create schedule]. This opens the *Create Schedule* window. .For both procedures -. Enter the appropriate details into the following fields: +. For *Job template* and *Project sync* enter the appropriate details into the following fields: * *Schedule name*: Enter the name. * Optional: *Description*: Enter a description. @@ -43,4 +54,4 @@ To ensure your schedules are correctly created, set your schedules in UTC time. . Click btn:[Next]. The *Define rules* page is displayed. -//Use the *On* or *Off* toggle to stop an active schedule or activate a stopped schedule. + diff --git a/downstream/modules/platform/proc-controller-define-schedule-rules.adoc b/downstream/modules/platform/proc-controller-define-schedule-rules.adoc index 8e47292635..4a95e27225 100644 --- a/downstream/modules/platform/proc-controller-define-schedule-rules.adoc +++ b/downstream/modules/platform/proc-controller-define-schedule-rules.adoc @@ -5,7 +5,7 @@ Enter the following information: * *Frequency*: Enter how frequently the schedule runs. -//* *Interval*: I don't know what this indicates. +* *Interval*: * *Week Start*: Select the day of the week that you want the week to begin. * *Weekdays*: Select the days of the week on which to run the schedule. * *Months*: Select the months of the year on which to run the schedule From 5c9698dc2ebdc1c579a2aefb2e95f9733802ab0f Mon Sep 17 00:00:00 2001 From: EMcWhinn <122449381+EMcWhinn@users.noreply.github.com> Date: Mon, 26 Aug 2024 16:20:03 +0100 Subject: [PATCH 099/590] Add EDA logging chapter to user guide (#1781) (#1785) * Add EDA logging chapter to user guide [Doc] - EDA logging updates https://issues.redhat.com/browse/AAP-29259 Affects `titles/eda/eda-user-guide` * Tech review edits * Re-adding log samples section * Re-adding logs samples section * Peer review edit --- .../eda/assembly-eda-logging-strategy.adoc | 11 +++ .../modules/eda/ref-eda-logging-samples.adoc | 75 +++++++++++++++++++ .../titles/eda/eda-user-guide/master.adoc | 1 + 3 files changed, 87 insertions(+) create mode 100644 downstream/assemblies/eda/assembly-eda-logging-strategy.adoc create mode 100644 downstream/modules/eda/ref-eda-logging-samples.adoc diff --git a/downstream/assemblies/eda/assembly-eda-logging-strategy.adoc b/downstream/assemblies/eda/assembly-eda-logging-strategy.adoc new file mode 100644 index 0000000000..26e7bffc77 --- /dev/null +++ b/downstream/assemblies/eda/assembly-eda-logging-strategy.adoc @@ -0,0 +1,11 @@ +[id="eda-logging-strategy"] + += {EDAName} logging strategy + +{EDAName} offers an audit logging solution over its resources. +Each supported create, read, update and delete (CRUD) operation is logged against rulebook activations, event streams, decision environments, projects, and activations. +Some of these resources support further operations, such as sync, enable, disable, restart, start, and stop; for these operations, logging is supported as well. +These logs are only retained for the lifecycle of its associated container. +See the following sample logs for each supported logging operation. + +include::eda/ref-eda-logging-samples.adoc[leveloffset=+1] diff --git a/downstream/modules/eda/ref-eda-logging-samples.adoc b/downstream/modules/eda/ref-eda-logging-samples.adoc new file mode 100644 index 0000000000..c91a1ddecf --- /dev/null +++ b/downstream/modules/eda/ref-eda-logging-samples.adoc @@ -0,0 +1,75 @@ +[id="eda-logging-samples"] + += Logging samples + +When the following APIs are called for each operation, you see the following audit logs: + +.Rulebook activation + +---- +1. Create + 1. 2024-08-15 14:13:20,384 aap_eda.api.views.activation INFO Action: Create / ResourceType: RulebookActivation / ResourceName: quick_start_project / ResourceID: 53 / Organization: Default +2. Read + 1. 2024-08-15 14:21:26,844 aap_eda.api.views.activation INFO Action: Read / ResourceType: RulebookActivation / ResourceName: quick_start_activation / ResourceID: 1 / Organization: Default +3. Disable + 1. 2024-08-15 14:23:57,798 aap_eda.api.views.activation INFO Action: Disable / ResourceType: RulebookActivation / ResourceName: quick_start_activation / ResourceID: 1 / Organization: Default +4. Enable + 1. 2024-08-15 14:24:16,472 aap_eda.api.views.activation INFO Action: Enable / ResourceType: RulebookActivation / ResourceName: quick_start_activation / ResourceID: 1 / Organization: Default +5. Delete + 1. 2024-08-15 14:24:53,847 aap_eda.api.views.activation INFO Action: Delete / ResourceType: RulebookActivation / ResourceName: quick_start_activation / ResourceID: 1 / Organization: Default +6. Restart + 2024-08-15 14:24:34,169 aap_eda.api.views.activation INFO Action: Restart / ResourceType: RulebookActivation / ResourceName: quick_start_activation / ResourceID: 1 / Organization: Default +---- + +.EventStream Logs +---- +1. Create + 1. 2024-08-15 13:46:26,903 aap_eda.api.views.webhook INFO Action: Create / ResourceType: EventStream / ResourceName: ZackTest / ResourceID: 1 / Organization: Default +2. Update + 1. 2024-08-15 13:56:17,440 aap_eda.api.views.webhook INFO Action: Update / ResourceType: EventStream / ResourceName: ZackTest / ResourceID: 1 / Organization: Default +3. Read + 1. 2024-08-15 13:56:56,271 aap_eda.api.views.webhook INFO Action: Read / ResourceType: EventStream / ResourceName: ZackTest / ResourceID: 1 / Organization: Default +4. List + 1. 2024-08-15 13:56:17,492 aap_eda.api.views.webhook INFO Action: List / ResourceType: EventStream / ResourceName: * / ResourceID: * / Organization: * +5. Delete + 1. 2024-08-15 13:57:13,124 aap_eda.api.views.webhook INFO Action: Delete / ResourceType: EventStream / ResourceName: ZackTest / ResourceID: None / Organization: Default +---- + +.Decision Environment +---- +1. Create + 1. 2024-08-15 14:10:53,311 aap_eda.api.views.decision_environment INFO Action: Create / ResourceType: DecisionEnvironment / ResourceName: quick_start_de / ResourceID: 86 / Organization: Default +2. Read + 1. 2024-08-15 14:10:53,349 aap_eda.api.views.decision_environment INFO Action: Read / ResourceType: DecisionEnvironment / ResourceName: quick_start_de / ResourceID: 86 / Organization: Default +3. Update + 2024-08-15 14:11:20,970 aap_eda.api.views.decision_environment INFO Action: Update / ResourceType: DecisionEnvironment / ResourceName: quick_start_de / ResourceID: 86 / Organization: Default +4. Delete +2024-08-15 14:11:42,369 aap_eda.api.views.decision_environment INFO Action: Delete / ResourceType: DecisionEnvironment / ResourceName: quick_start_de / ResourceID: None / Organization: Default +---- + +.Project +---- +1. Create + 1. 2024-08-15 14:05:26,874 aap_eda.api.views.project INFO Action: Create / ResourceType: Project / ResourceName: quick_start_project / ResourceID: 86 / Organization: Default +2. Read + 1. 2024-08-15 14:05:26,913 aap_eda.api.views.project INFO Action: Read / ResourceType: Project / ResourceName: quick_start_project / ResourceID: 86 / Organization: Default +3. Update + 1. 2024-08-15 14:06:08,255 aap_eda.api.views.project INFO Action: Update / ResourceType: Project / ResourceName: quick_start_project / ResourceID: 86 / Organization: Default +4. Sync + 1. 2024-08-15 14:06:30,580 aap_eda.api.views.project INFO Action: Sync / ResourceType: Project / ResourceName: quick_start_project / ResourceID: 86 / Organization: Default +5. Delete + 1. 2024-08-15 14:06:49,481 aap_eda.api.views.project INFO Action: Delete / ResourceType: Project / ResourceName: quick_start_project / ResourceID: 86 / Organization: Default +---- + +.Activation Start/Stop +---- +1. Start + 1. 2024-08-15 14:21:29,076 aap_eda.services.activation.activation_manager INFO Requested to start activation 1, starting. + 2024-08-15 14:21:29,093 aap_eda.services.activation.activation_manager INFO Creating a new activation instance for activation: 1 + 2024-08-15 14:21:29,104 aap_eda.services.activation.activation_manager INFO Starting container for activation instance: 1 +2. Stop + 1. eda-activation-worker-1 | 2024-08-15 14:40:52,547 aap_eda.services.activation.activation_manager INFO Stop operation requested for activation id: 2 Stopping activation. + eda-activation-worker-1 | 2024-08-15 14:40:52,550 aap_eda.services.activation.activation_manager INFO Activation 2 is already stopped. + eda-activation-worker-1 | 2024-08-15 14:40:52,550 aap_eda.services.activation.activation_manager INFO Activation manager activation id: 2 Activation restart scheduled for 1 second. + eda-activation-worker-1 | 2024-08-15 14:40:52,562 rq.worker INFO activation: Job OK (activation-2) +---- diff --git a/downstream/titles/eda/eda-user-guide/master.adoc b/downstream/titles/eda/eda-user-guide/master.adoc index ebedade6c3..53f2ca3388 100644 --- a/downstream/titles/eda/eda-user-guide/master.adoc +++ b/downstream/titles/eda/eda-user-guide/master.adoc @@ -20,3 +20,4 @@ include::eda/assembly-eda-decision-environments.adoc[leveloffset=+1] include::eda/assembly-eda-rulebook-activations.adoc[leveloffset=+1] include::eda/assembly-eda-rule-audit.adoc[leveloffset=+1] include::eda/assembly-eda-performance-tuning.adoc[leveloffset=+1] +include::eda/assembly-eda-logging-strategy.adoc[leveloffset=+1] From 851151f48264496a289b39b8669791a569aeb2ba Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Tue, 27 Aug 2024 15:13:57 +0100 Subject: [PATCH 100/590] AAP-29953 Fix YAML indentation in devtools example playbook (#1787) (#1789) --- .../devtools/proc-devtools-writing-first-playbook.adoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/downstream/modules/devtools/proc-devtools-writing-first-playbook.adoc b/downstream/modules/devtools/proc-devtools-writing-first-playbook.adoc index 4b1f4625ca..5313dc9d7c 100644 --- a/downstream/modules/devtools/proc-devtools-writing-first-playbook.adoc +++ b/downstream/modules/devtools/proc-devtools-writing-first-playbook.adoc @@ -19,10 +19,10 @@ The playbook consists of a single play that executes a `ping` to your local mach + ---- - name: My first play - hosts: localhost - tasks: - - name: Ping my hosts - ansible.builtin.ping: + hosts: localhost + tasks: + - name: Ping my hosts + ansible.builtin.ping: ---- + From 645dace61208fa645b6a1aa094252497521e5495 Mon Sep 17 00:00:00 2001 From: Jameria Self <73364088+jself-sudoku@users.noreply.github.com> Date: Tue, 27 Aug 2024 12:20:35 -0400 Subject: [PATCH 101/590] AAP-24694 Added note about rulebook activations shutting down and canceling jobs on controller. (#1385) (#1783) * AAP-24694 Added important admonition about rulebook activation behavior * AAP-24694 Added important admonition about rulebook activation behavior * Removed sentence about expected behavior from the updated note, per SME * Moved the important note to the end of the procedure to avoid breaking up continuity of the procedure * Fixed syntax error with the important admonition * Added more context to the note about source plugins shutting down * Added space between sentences * Changed the admonition from Important to Note --- .../modules/eda/proc-eda-set-up-rulebook-activation.adoc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc b/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc index 00c5d01c40..842301f685 100644 --- a/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc +++ b/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc @@ -48,7 +48,12 @@ The content would be equivalent to the file passed through the `--vars` flag of . Click btn:[Create rulebook activation]. -Your rulebook activation is now created and can be managed in the *Rulebook Activations* screen. +Your rulebook activation is now created and can be managed on the *Rulebook Activations* page. After saving the new rulebook activation, the rulebook activation's details page is displayed. -From there or the *Rulebook Activations* list view you can edit or delete it. +From there or the *Rulebook Activations* list view, you can edit or delete it. + +[NOTE] +==== +Occasionally, when a source plugin shuts down, it causes a rulebook to exit gracefully after a certain amount of time. When a rulebook activation shuts down, any tasks that are waiting to be performed will be canceled, and an info level message will be sent to the activation log. For more information, see link:https://ansible.readthedocs.io/projects/rulebook/en/stable/rulebooks.html#[Rulebooks]. +==== \ No newline at end of file From b0e30a4f2f13a87a2f05eec5b1760525a6f8d849 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Tue, 27 Aug 2024 17:22:38 -0600 Subject: [PATCH 102/590] AAP-28751 - Update Hub menu attributes for UI Parity work (#1790) (#1791) --- downstream/attributes/attributes.adoc | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/downstream/attributes/attributes.adoc b/downstream/attributes/attributes.adoc index 46f77547d3..abf73b5b2c 100644 --- a/downstream/attributes/attributes.adoc +++ b/downstream/attributes/attributes.adoc @@ -216,22 +216,22 @@ // Automation Content (aka automation hub menu selections) // In 2.5EA the Automation Content selection will open a hub ui instance in a new tab/browser so the menu definitions will not change until 2.5-next -:MenuACNamespaces: menu:Collections[Namespaces] -:MenuACCollections: menu:Collections[Collections] -:MenuACExecEnvironments: menu:Execution Environments[Execution Environments] +:MenuACNamespaces: menu:{MenuTopAC}[Namespaces] +:MenuACCollections: menu:{MenuTopAC}[Collections] +:MenuACExecEnvironments: menu:{MenuTopAC}[Execution Environments] // Automation Content > Administration -:MenuACAdminSignatureKeys: menu:Signature Keys[] -:MenuACAdminRepositories: menu:Collections[Repositories] -:MenuACAdminRemoteRegistries: menu:Execution Environments[Remote Registries] -:MenuACAdminTasks: menu:Task Management[] -:MenuACAdminCollectionApproval: menu:Collections[Approval] -:MenuACAdminRemotes: menu:Collections[Remotes] +:MenuACAdminSignatureKeys: menu:MenuTopAC[Signature Keys] +:MenuACAdminRepositories: menu:MenuTopAC[Repositories] +:MenuACAdminRemoteRegistries: menu:{MenuTopAC}[Remote Registries] +:MenuACAdminTasks: menu:{MenuTopAC}[Task Management] +:MenuACAdminCollectionApproval: menu:{MenuTopAC}[Collection Approvals] +:MenuACAdminRemotes: menu:{MenuTopAC}[Remotes] :MenuACAPIToken: menu:Collections[API token] //Each of the services previously had selections for access which will be centralized, ultimately these should be changed to use the attributes in Access Management menu selections once automation hub is provide in the full ui platform experience in 2.5-next -:MenuHubUsers: menu:User Access[Users] +:MenuHubUsers: menu:{MenuAM}[Users] :MenuHubGroups: menu:User Access[Groups] -:MenuHubRoles: menu:User Access[Roles] +:MenuHubRoles: menu:{MenuAM}[Roles] // Automation Analytics menu selections - According to mockups, analytics will be included in the Gateway nav only includes Automation Calculator, Host Metrics and Subscription Usage, other settings are also included on the Ansible dashboard on the Hybrid Cloud Console https://console.redhat.com/ansible/ansible-dashboard :MenuAAReports: menu:{MenuAA}[Reports] From 4ad031ac45fe48083f618e4887543649929f16aa Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Thu, 29 Aug 2024 12:30:26 +0100 Subject: [PATCH 103/590] Adding deploying redis section (#1796) (#1797) * Adding deploying redis section * moving proc * PR suggestions --- .../platform/proc-operator-deploy-redis.adoc | 25 +++++++++++++++++++ .../aap-operator-installation/master.adoc | 1 + 2 files changed, 26 insertions(+) create mode 100644 downstream/modules/platform/proc-operator-deploy-redis.adoc diff --git a/downstream/modules/platform/proc-operator-deploy-redis.adoc b/downstream/modules/platform/proc-operator-deploy-redis.adoc new file mode 100644 index 0000000000..2cd1a0d406 --- /dev/null +++ b/downstream/modules/platform/proc-operator-deploy-redis.adoc @@ -0,0 +1,25 @@ += Deploying clustered Redis on {OperatorPlatform} + +When you create an {PlatformNameShort} instance through the {OperatorPlatform}, standalone Redis is assigned by default. +To deploy clustered Redis, use the following procedure. + +//Add a link to the section when ready +For more information about Redis, refer to Caching and queueing system in the _Planning your installation_ guide. + +.Prerequisites +* You have installed an {OperatorPlatform} deployment. + +.Procedure +. Log in to {OCP}. +. Navigate to menu:Operators[Installed Operators]. +. Select your {OperatorPlatform} deployment. +. Select the *Details* tab. +. On the *{PlatformNameShort}* tile click btn:[Create instance]. +.. For existing instances, you can edit the YAML view by clicking the {MoreActionsIcon} icon and then btn:[Edit AnsibleAutomationPlatform]. +.. Change the *redis_mode* value to "clustered". +.. Click btn:[Reload], then btn:[Save]. +. Click to expand *Advanced configuration*. +. For the *Redis Mode* list, select *Cluster*. +. Configure the rest of your instance as necessary, then click btn:[Create]. + +Your instance will deploy with a cluster Redis with 6 Redis replicas as default. \ No newline at end of file diff --git a/downstream/titles/aap-operator-installation/master.adoc b/downstream/titles/aap-operator-installation/master.adoc index 1f8f75ea37..03094a5081 100644 --- a/downstream/titles/aap-operator-installation/master.adoc +++ b/downstream/titles/aap-operator-installation/master.adoc @@ -36,6 +36,7 @@ include::platform/assembly-installing-hub-operator.adoc[leveloffset=+1] // [gmurray] Commenting out this module as covered in assembly-configure-aap-operator.adoc // include::platform/assembly-deploy-eda-controller-on-aap-operator.adoc[leveloffset=+1] +include::platform/platform/proc-operator-deploy-redis.adoc[leveloffset=+1] include::platform/assembly-using-rhsso-operator-with-automation-hub.adoc[leveloffset=+1] From cfbcdc39149bb042daf65249b6c62cf8dbbcf107 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Thu, 29 Aug 2024 18:02:00 -0600 Subject: [PATCH 104/590] AAP-29213 - Convert authentication type content (#1760) (#1800) * AAP-29213 - Convert authentication type content * AAP-29213 - fixing formatting issues * AAP-29213 - fixed duplicate id and removed duplicate file * AAP-29213 - fix snippets formatting in local auth * AAP-29213 - Fixed formatting issues to get a clean build * AAP-29213 - removing an unused file * AAP-29213 - formatting fixes and UI updates * AAP-29213 - Fixed missing space in a step and replaced erroneous keycloak content * AAP-29213 - incorporating peer review feedback --- ...proc-controller-add-organization-user.adoc | 12 +- .../proc-controller-creating-a-team.adoc | 2 +- .../proc-controller-creating-a-user.adoc | 19 +- .../proc-controller-deleting-a-user.adoc | 4 +- ...roller-github-enterprise-org-settings.adoc | 54 ++- ...controller-github-enterprise-settings.adoc | 55 ++- ...oller-github-enterprise-team-settings.adoc | 58 +-- ...troller-github-organization-setttings.adoc | 50 +-- .../proc-controller-github-settings.adoc | 40 +- .../proc-controller-github-team-settings.adoc | 51 +-- ...roc-controller-google-oauth2-settings.adoc | 55 +-- .../platform/proc-controller-set-up-LDAP.adoc | 183 ++------- .../platform/proc-controller-set-up-SAML.adoc | 378 ++---------------- .../proc-controller-set-up-azure.adoc | 40 +- .../proc-controller-set-up-generic-oidc.adoc | 61 +-- .../proc-controller-set-up-radius.adoc | 26 +- .../proc-controller-set-up-tacacs+.adoc | 38 +- .../proc-controller-user-permissions.adoc | 2 +- .../proc-gw-config-keycloak-settings.adoc | 29 ++ .../proc-gw-local-authentication.adoc | 29 ++ .../platform/proc-gw-remove-roles-team.adoc | 2 +- .../platform/proc-gw-remove-roles-user.adoc | 2 +- .../platform/ref-controller-user-roles.adoc | 3 +- 23 files changed, 436 insertions(+), 757 deletions(-) create mode 100644 downstream/modules/platform/proc-gw-config-keycloak-settings.adoc create mode 100644 downstream/modules/platform/proc-gw-local-authentication.adoc diff --git a/downstream/modules/platform/proc-controller-add-organization-user.adoc b/downstream/modules/platform/proc-controller-add-organization-user.adoc index dedb4e5544..704175a2c0 100644 --- a/downstream/modules/platform/proc-controller-add-organization-user.adoc +++ b/downstream/modules/platform/proc-controller-add-organization-user.adoc @@ -1,23 +1,27 @@ [id="proc-controller-add-organization-user"] -Adding a user to an organization += Adding a user to an organization You can provide a user with access to an organization by adding them to the organization and managing the roles associated with the user. To add a user to an organization, the user must already exist. For more information, see xref:proc-controller-creating-a-user[Creating a user]. To add roles for a user, the role must already exist. See xref:proc-gw-roles_auto-eec[Automation execution roles] and xref:proc-gw-roles_auto-dec[Automation decision] roles for more information about creating new roles. + .Procedure . From the navigation panel, select {MenuAMOrganizations}. -. From the Organizations list view, select the organization to which you want to add a user. +. From the *Organizations* list view, select the organization to which you want to add a user. . Click the *Users* tab to add users. . Click btn:[Add users] and select one or more users from the list by clicking the checkbox next to the name to add them as members. . Click btn:[Next]. . Select the roles you want the selected user to have. Scroll down for a complete list of roles. + -include::snippets/snip-gw-roles-note-multiple-components.adoc +include::snippets/snip-gw-roles-note-multiple-components.adoc[] + . Click btn:[Next] to review the roles settings. . Click btn:[Finish] to apply the roles to the selected users, and to add them as members. The *Add users* dialog displays the updated roles assigned for each user. + -[NOTE] A user with associated roles retains them if they are reassigned to another organization. +[NOTE] +==== +A user with associated roles retains them if they are reassigned to another organization. +==== + . To remove a particular user from the organization, select *Remove user* from the {MoreActionsIcon} list next to the user or team. This launches a confirmation dialog, asking you to confirm the removal. diff --git a/downstream/modules/platform/proc-controller-creating-a-team.adoc b/downstream/modules/platform/proc-controller-creating-a-team.adoc index c4e611ce98..e5aec72ec6 100644 --- a/downstream/modules/platform/proc-controller-creating-a-team.adoc +++ b/downstream/modules/platform/proc-controller-creating-a-team.adoc @@ -13,7 +13,7 @@ To add a user or administrator to a team, the user must have already been create . From the navigation panel, select {MenuAMTeams}. . Click btn:[Create team]. . Enter a *Name* and optionally give a *Description* for the team. -. Select an organization from the *Organization* list to which you want to associate this team. +. Select an *Organization* to be associated with this team. + [NOTE] ==== diff --git a/downstream/modules/platform/proc-controller-creating-a-user.adoc b/downstream/modules/platform/proc-controller-creating-a-user.adoc index 1cd5683e96..432b3e1e74 100644 --- a/downstream/modules/platform/proc-controller-creating-a-user.adoc +++ b/downstream/modules/platform/proc-controller-creating-a-user.adoc @@ -5,25 +5,30 @@ = Creating a user You can assign two types of users: + Normal user:: Normal users have read and write access limited to the resources (such as inventory, projects, and job templates) for which that user has been granted the appropriate roles and privileges. -System administrator:: A System administrator (also known as a Superuser) has full system administration privileges — with full read and write privileges over the entire installation. A System administrator is typically responsible for managing all aspects of and delegating responsibilities for day-to-day work to various users. -Select the Organization to be assigned for this user. For information about creating a new organization or team, refer to xref:proc-controller-create-organization[Creating an organization]. +{PlatformNameShort} Administrator:: An administrator (also known as a Superuser) has full system administration privileges — with full read and write privileges over the entire installation. An administrator is typically responsible for managing all aspects of and delegating responsibilities for day-to-day work to various users. +{PlatformNameShort} Auditor:: Auditors have read-only capability for all objects within the environment. + .Procedure . From the navigation panel, select {MenuAMUsers}. . Click btn:[Create user]. -. Enter the details about your new user in the fields on the Create user page. Fields marked with an asterisk (*) are required. -+ +. Enter the details about your new user in the fields on the *Create* user page. Fields marked with an asterisk (*) are required. +. Normal users are the default when no User type is specified. To define a user as an administrator or auditor, select a *User type*. [NOTE] ==== If you are modifying your own password, log out and log back in again for it to take effect. ==== -. Click btn:[Create user]. -+ -When the user is successfully created, the User dialog opens. From here, you can review and modify the user’s Teams, Roles, Tokens and other membership details. + +. Select the *Organization* to be assigned for this user. For information about creating a new organization, refer to xref:proc-controller-create-organization[Creating an organization]. +. Click btn:[Create user]. + +When the user is successfully created, the *User* dialog opens. From here, you can review and modify the user’s Teams, Roles, Tokens and other membership details. + [NOTE] ==== If the user is not newly-created, the details screen displays the last login activity of that user. ==== + If you log in as yourself, and view the details of your user profile, you can manage tokens from your user profile by selecting the *Tokens* tab. For more information, see xref:proc-controller-apps-create-tokens[Adding a token]. diff --git a/downstream/modules/platform/proc-controller-deleting-a-user.adoc b/downstream/modules/platform/proc-controller-deleting-a-user.adoc index b352ee9e5a..51a7049d8c 100644 --- a/downstream/modules/platform/proc-controller-deleting-a-user.adoc +++ b/downstream/modules/platform/proc-controller-deleting-a-user.adoc @@ -5,12 +5,14 @@ = Deleting a user Before you can delete a user, you must have normal user or system administrator permissions. When you delete a user account, the name and email of the user are permanently removed from {PlatformNameShort}. + .Procedure . From the navigation panel, select {MenuAMUsers}. -. Select the check box for the user that you want to remove. +. Select the checkbox for the user that you want to remove. . Click the {MoreActionsIcon} icon next to the user you want removed and select *Delete user*. + [NOTE] ==== You can delete multiple users by selecting the checkbox next to each user you want to remove, and clicking *Delete selected users* from the {MoreActionsIcon} list. +==== diff --git a/downstream/modules/platform/proc-controller-github-enterprise-org-settings.adoc b/downstream/modules/platform/proc-controller-github-enterprise-org-settings.adoc index 4c42b48c6f..9b3b4b9282 100644 --- a/downstream/modules/platform/proc-controller-github-enterprise-org-settings.adoc +++ b/downstream/modules/platform/proc-controller-github-enterprise-org-settings.adoc @@ -4,36 +4,34 @@ To set up social authentication for a GitHub Enterprise Organization, you must obtain a GitHub Enterprise Organization URL, an Organization API URL, an Organization OAuth2 key and secret for a web application. -To obtain the URLs, refer to the GitHub documentation on link:https://docs.github.com/en/enterprise-server@3.1/rest/reference/enterprise-admin[GitHub Enterprise administration]. +To obtain the URLs, refer to the link:https://docs.github.com/en/enterprise-server@3.1/rest/reference/enterprise-admin[GitHub Enterprise administration documentation]. -To obtain the key and secret, you must first register your enterprise organization-owned application at `https://github.com/organizations//settings/applications` +The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. To register the application, you must supply it with your webpage URL, which is the *Callback URL* shown in the Authenticator details for your authenticator configuration. See xref:gw-display-auth-details[Displaying authenticator details] for instructions on accessing this information. -To register the application, you must supply it with your Authorization callback URL, which is the *Callback URL* shown in the *Details* page. - -Because it is hosted on site and not `github.com`, you must specify which authentication adapter it communicates with. - -Each key and secret must belong to a unique application and cannot be shared or reused between different authentication backends. -The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. +Each key and secret must belong to a unique application and cannot be shared or reused between different authentication backends. The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. .Procedure -. From the navigation panel, select {MenuAEAdminSettings}. -. On the *Settings* page, select *GitHub settings* from the list of *Authentication* options. -. Click the *GitHub Enterprise Organization* tab. +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *GitHub enterprise organization* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this authentication configuration. +. When the application is registered, GitHub displays the *Client ID* and *Client Secret*: ++ +.. Copy and paste the GitHub Client ID into the GitHub OAuth2 Key field. +.. Copy and paste the GitHub Client Secret into the GitHub OAuth2 Secret field. ++ +. In the *Base URL* field, enter the hostname of the GitHub Enterprise instance, for example, `https://github.example.com`. +. In the *Github OAuth2 Enterprise API URL* field, enter the API URL of the GitHub Enterprise instance, for example, `https://github.example.com/api/v3`. +. Enter the name of your GitHub Enterprise organization, as used in your organization’s URL, for example, `https://github.com//` in the *GitHub OAuth2 Enterprise Org Name* field. + -The *GitHub Enterprise Organization OAuth2 Callback URL* field is already pre-populated and non-editable. -When the application is registered, GitHub displays the Client ID and Client Secret. - -. Click btn:[Edit] to configure GitHub Enterprise Organization settings. -. In the *GitHub Enterprise Organization URL* field, enter the hostname of the GitHub Enterprise Organization instance, for example, https://github.orgexample.com. -. In the *GitHub Enterprise Organization API URL* field, enter the API URL of the GitHub Enterprise Organization instance, for example, https://github.orgexample.com/api/v3. -. Copy and paste GitHub's Client ID into the *GitHub Enterprise Organization OAuth2 Key* field. -. Copy and paste GitHub's Client Secret into the *GitHub Enterprise Organization OAuth2 Secret* field. -. Enter the name of your GitHub Enterprise organization, as used in your organization's URL, for example, https://github.com// in the *GitHub Enterprise Organization Name* field. -. For more information on completing the mapping fields, see xref:ref-controller-organization-mapping[Organization mapping] and xref:ref-controller-team-mapping[Team mapping]. -. Click btn:[Save]. - -.Verification -To verify that the authentication was configured correctly, logout of {ControllerName}. -The login screen displays the GitHub Enterprise Organization logo to enable logging in with those credentials. - -image:configure-controller-auth-github-ent-org-logo.png[image] +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] ++ +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +. Click btn:[Next]. + +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] + +include::snippets/snip-gw-authentication-verification.adoc[] \ No newline at end of file diff --git a/downstream/modules/platform/proc-controller-github-enterprise-settings.adoc b/downstream/modules/platform/proc-controller-github-enterprise-settings.adoc index a78b59e8f8..8df84e8b7f 100644 --- a/downstream/modules/platform/proc-controller-github-enterprise-settings.adoc +++ b/downstream/modules/platform/proc-controller-github-enterprise-settings.adoc @@ -1,37 +1,36 @@ [id="proc-controller-github-enterprise-settings"] -= GitHub Enterprise settings += Configuring GitHub enterprise authentication -To set up social authentication for a GitHub Enterprise, you must obtain a GitHub Enterprise URL, an API URL, OAuth2 key and secret for a web application. +To set up social authentication for a GitHub enterprise, you must obtain a GitHub Enterprise URL, an API URL, OAuth2 key and secret for a web application. -To obtain the URLs, refer to the link:https://docs.github.com/en/enterprise-server@3.1/rest/reference/enterprise-admin[GitHub Enterprise administration] documentation. +To obtain the URLs, refer to the link:https://docs.github.com/en/enterprise-server@3.1/rest/reference/enterprise-admin[GitHub Enterprise administration documentation]. -To obtain the key and secret, you must first register your enterprise-owned application at \https://github.com/organizations//settings/applications. +The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. To register the application, you must supply it with your webpage URL, which is the *Callback URL* shown in the Authenticator details for your authenticator configuration. See xref:gw-display-auth-details[Displaying authenticator details] for instructions on accessing this information. -To register the application, you must supply it with your Authorization callback URL, which is the *Callback URL* shown in the *Details* page. -Because it is hosted on site and not `github.com`, you must specify which authentication adapter it communicates with. - -Each key and secret must belong to a unique application and cannot be shared or reused between different authentication backends. -The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. +Each key and secret must belong to a unique application and cannot be shared or reused between different authentication backends. The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. .Procedure -. From the navigation panel, select {MenuAEAdminSettings}. -. On the *Settings* page, select *GitHub settings* from the list of *Authentication* options. -. Click the *GitHub Enterprise* tab. +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *GitHub enterprise* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this authentication configuration. +. When the application is registered, GitHub displays the *Client ID* and *Client Secret*: ++ +.. Copy and paste the GitHub Client ID into the GitHub OAuth2 Key field. +.. Copy and paste the GitHub Client Secret into the GitHub OAuth2 Secret field. ++ +. In the *Base URL* field, enter the hostname of the GitHub Enterprise instance, for example, `https://github.example.com`. +. In the *Github OAuth2 Enterprise API URL* field, enter the API URL of the GitHub Enterprise instance, for example, `https://github.example.com/api/v3`. ++ +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] + -The *GitHub Enterprise OAuth2 Callback URL* field is already pre-populated and non-editable. -When the application is registered, GitHub displays the Client ID and Client Secret. - -. Click btn:[Edit] to configure GitHub Enterprise settings. -. In the *GitHub Enterprise URL* field, enter the hostname of the GitHub Enterprise instance, for example, https://github.example.com. -. In the *GitHub Enterprise API URL* field, enter the API URL of the GitHub Enterprise instance, for example, https://github.example.com/api/v3. -. Copy and paste GitHub's Client ID into the *GitHub Enterprise OAuth2 Key* field. -. Copy and paste GitHub's Client Secret into the *GitHub Enterprise OAuth2 Secret* field. -. For more information on completing the mapping fields, see xref:ref-controller-organization-mapping[Organization mapping] and xref:ref-controller-team-mapping[Team mapping]. -. Click btn:[Save]. - -.Verification -To verify that the authentication was configured correctly, logout of {ControllerName}. -The login screen displays the GitHub Enterprise logo to enable logging in with those credentials. - -image:configure-controller-auth-github-ent-logo.png[image] +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +. Click btn:[Next]. + +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] + +include::snippets/snip-gw-authentication-verification.adoc[] \ No newline at end of file diff --git a/downstream/modules/platform/proc-controller-github-enterprise-team-settings.adoc b/downstream/modules/platform/proc-controller-github-enterprise-team-settings.adoc index 01af48b9b1..bf49b5b31f 100644 --- a/downstream/modules/platform/proc-controller-github-enterprise-team-settings.adoc +++ b/downstream/modules/platform/proc-controller-github-enterprise-team-settings.adoc @@ -1,41 +1,41 @@ [id="proc-controller-github-enterprise-team-settings"] -= GitHub Enterprise Team settings += Configuring GitHub enterprise team authentication -To set up social authentication for a GitHub Enterprise team, you must obtain a GitHub Enterprise Organization URL, an Organization API URL, an Organization OAuth2 key and secret for a web application. +To set up social authentication for a GitHub enterprise team, you must obtain a GitHub Enterprise Organization URL, an Organization API URL, an Organization OAuth2 key and secret for a web application. -To obtain the URLs, refer to the GitHub documentation on link:https://docs.github.com/en/enterprise-server@3.1/rest/reference/enterprise-admin[GitHub Enterprise administration]. +To obtain the URLs, refer to the link:https://docs.github.com/en/enterprise-server@3.1/rest/reference/enterprise-admin[GitHub Enterprise administration documentation]. -To obtain the key and secret, you must first register your enterprise team-owned application at `https://github.com/organizations//settings/applications`. +To obtain the key and secret, you must first register your enterprise organization-owned application at `https://github.com/organizations//settings/applications`. -To register the application, you must supply it with your Authorization callback URL, which is the *Callback URL* shown in the *Details* page. -Because it is hosted on site and not github.com, you must specify which authentication adapter it communicates with. +The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. To register the application, you must supply it with your webpage URL, which is the *Callback URL* shown in the Authenticator details for your authenticator configuration. See xref:gw-display-auth-details[Displaying authenticator details] for instructions on accessing this information. Each key and secret must belong to a unique application and cannot be shared or reused between different authentication backends. The OAuth2key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. .Procedure -. Find the numeric team ID using the link:https://fabian-kostadinov.github.io/2015/01/16/how-to-find-a-github-team-id/[GitHub API]. -The Team ID will be used to supply a required field in the UI. -. From the navigation panel, select {MenuAEAdminSettings}. -. On the *Settings* page, select *GitHub settings* from the list of *Authentication* options. -. Click the *GitHub Enterprise Team* tab. + +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *GitHub enterprise team* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this authentication configuration. +. When the application is registered, GitHub displays the *Client ID* and *Client Secret*: ++ +.. Copy and paste the GitHub Client ID into the GitHub OAuth2 Key field. +.. Copy and paste the GitHub Client Secret into the GitHub OAuth2 Secret field. ++ +. In the *Base URL* field, enter the hostname of the GitHub Enterprise instance, for example, `https://github.orgexample.com`. +. In the *Github OAuth2 Enterprise API URL* field, enter the API URL of the GitHub Enterprise instance, for example, `https://github.example.com/api/v3`. +. Enter the OAuth2 key (Client ID) from your GitHub developer application in the *GitHub OAuth2* team ID field. ++ +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] + -The *GitHub Enterprise Team OAuth2 Callback URL* field is already pre-populated and non-editable. -When the application is registered, GitHub displays the Client ID and Client Secret. - -. Click btn:[Edit] to configure GitHub Enterprise Team settings. -. In the *GitHub Enterprise Team URL* field, enter the hostname of the GitHub Enterprise team instance, for example, https://github.teamexample.com. -. In the *GitHub Enterprise Team API URL* field, enter the API URL of the GitHub Enterprise team instance, for example, -https://github.teamexample.com/api/v3. -. Copy and paste GitHub's Client ID into the *GitHub Enterprise Team OAuth2 Key* field. -. Copy and paste GitHub's Client Secret into the *GitHub Enterprise Team OAuth2 Secret* field. -. Copy and paste GitHub's team ID in the *GitHub Enterprise Team ID* field. -. For more information on completing the mapping fields, see xref:ref-controller-organization-mapping[Organization mapping] and xref:ref-controller-team-mapping[Team mapping]. -. Click btn:[Save]. - -.Verification -To verify that the authentication was configured correctly, logout of {ControllerName}. -The login screen displays the GitHub Enterprise Teams logo to enable logging in with those credentials. - -image:configure-controller-auth-github-ent-teams-logo.png[image] +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +. Click btn:[Next]. + +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] + +include::snippets/snip-gw-authentication-verification.adoc[] \ No newline at end of file diff --git a/downstream/modules/platform/proc-controller-github-organization-setttings.adoc b/downstream/modules/platform/proc-controller-github-organization-setttings.adoc index 3800c32e70..366dbe725f 100644 --- a/downstream/modules/platform/proc-controller-github-organization-setttings.adoc +++ b/downstream/modules/platform/proc-controller-github-organization-setttings.adoc @@ -1,37 +1,37 @@ [id="proc-controller-github-organization-setttings"] -= GitHub Organization settings - -When defining account authentication with either an organization or a team within an organization, you should use the specific organization and team settings. -Account authentication can be limited by an organization and by a team within an organization. += Configuring GitHub organization authentication +When defining account authentication with either an organization or a team within an organization, you should use the specific organization and team settings. Account authentication can be limited by an organization and by a team within an organization. You can also choose to permit all by specifying non-organization or non-team based settings. +You can limit users who can log in to the platform by limiting only those in an organization or on a team within an organization. -You can limit users who can login to the controller by limiting only those in an organization or on a team within an organization. - -To set up social authentication for a GitHub Organization, you must obtain an OAuth2 key and secret for a web application. To do this, you must first register your organization-owned application at \https://github.com/organizations//settings/applications. +To set up social authentication for a GitHub organization, you must obtain an OAuth2 key and secret for a web application using the link:https://docs.github.com/en/apps/using-github-apps/installing-your-own-github-app[registering the new application with GitHub]. -To register the application, you must supply it with your Authorization callback URL, which is the *Callback URL* shown in the *Details* page. -Each key and secret must belong to a unique application and cannot be shared or reused between different authentication backends. -The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. +The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. To register the application, you must supply it with your webpage URL, which is the Callback URL shown in the Authenticator details for your authenticator configuration. See xref:gw-display-auth-details[Displaying authenticator details] for instructions on accessing this information. .Procedure -. From the navigation panel, select {MenuAEAdminSettings}. -. On the *Settings* page, select *GitHub settings* from the list of *Authentication* options. -. Select the *GitHub Organization* tab. +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *GitHub organization* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this authentication configuration. +. When the application is registered, GitHub displays the *Client ID* and *Client Secret*: + -The *GitHub Organization OAuth2 Callback URL* field is already pre-populated and non-editable. +.. Copy and paste the GitHub Client ID into the GitHub OAuth2 Key field. +.. Copy and paste the GitHub Client Secret into the GitHub OAuth2 Secret field. + -When the application is registered, GitHub displays the Client ID and Client Secret. - -. Click btn:[Edit] and copy and paste GitHub's Client ID into the *GitHub Organization OAuth2 Key* field. -. Copy and paste GitHub's Client Secret into the *GitHub Organization OAuth2 Secret* field. -. Enter the name of your GitHub organization, as used in your organization's URL, for example, \https://github.com// in the *GitHub Organization Name* field. -. For more information on completing the mapping fields, see xref:ref-controller-organization-mapping[Organization mapping] and xref:ref-controller-team-mapping[Team mapping]. -. Click btn:[Save]. +. Enter the name of your GitHub organization, as used in your organization’s URL, for example, `https://github.com//` in the *GitHub OAuth Organization Name* field. ++ +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] ++ +. Enter the authorization scope for users in the *GitHub OAuth2 Scope* field. The default is `read:org`. ++ +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +. Click btn:[Next]. -.Verification -To verify that the authentication was configured correctly, logout of {ControllerName}. -The login screen displays the GitHub Organization logo to enable logging in with those credentials. +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] -image:configure-controller-auth-github-orgs-logo.png[image] +include::snippets/snip-gw-authentication-verification.adoc[] \ No newline at end of file diff --git a/downstream/modules/platform/proc-controller-github-settings.adoc b/downstream/modules/platform/proc-controller-github-settings.adoc index 06682efff7..80fea424f5 100644 --- a/downstream/modules/platform/proc-controller-github-settings.adoc +++ b/downstream/modules/platform/proc-controller-github-settings.adoc @@ -1,28 +1,30 @@ [id="proc-controller-github-settings"] -= GitHub settings += Configuring GitHub authentication -To set up social authentication for GitHub, you must obtain an OAuth2 key and secret for a web application. -To do this, you must first register the new application with GitHub at https://github.com/settings/developers. +You can connect GitHub identities to {PlatformNameShort} using OAuth. To set up GitHub authentication, you need to obtain an OAuth2 key and secret by registering your organization-owned application from GitHub using the link:https://docs.github.com/en/apps/using-github-apps/installing-your-own-github-app[registering the new application with GitHub]. -To register the application, you must supply it with your homepage URL, which is the *Callback URL* shown in the *Details* tab of the *GitHub default settings* page. -The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. +The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. To register the application, you must supply it with your webpage URL, which is the Callback URL shown in the Authenticator details for your authenticator configuration. See xref:gw-display-auth-details[Displaying authenticator details] for instructions on accessing this information. .Procedure -. From the navigation panel, select {MenuAEAdminSettings}. -. On the *Settings* page, select *GitHub settings* from the list of *Authentication* options. -. Select the *GitHub Default* tab if not already selected. -+ -The *GitHub OAuth2 Callback URL* field is already pre-populated and non-editable. -When the application is registered, GitHub displays the Client ID and Client Secret. -. Click btn:[Edit] and copy and paste the GitHub Client ID into the *GitHub OAuth2 Key* field. -. Copy and paste the GitHub Client Secret into the *GitHub OAuth2 Secret* field. -. For more information on completing the mapping fields, see xref:ref-controller-organization-mapping[Organization mapping] and xref:ref-controller-team-mapping[Team mapping]. -. Click btn:[Save]. +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *GitHub* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this authentication configuration. +. When the application is registered, GitHub displays the *Client ID* and *Client Secret*: ++ +.. Copy and paste the GitHub Client ID into the GitHub OAuth2 Key field. +.. Copy and paste the GitHub Client Secret into the GitHub OAuth2 Secret field. ++ +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] ++ +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +. Click btn:[Next]. -.Verification -To verify that the authentication was configured correctly, logout of {ControllerName}. -The login screen now displays the GitHub logo to enable logging in with those credentials. +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] -image:configure-controller-auth-github-logo.png[image] +include::snippets/snip-gw-authentication-verification.adoc[] \ No newline at end of file diff --git a/downstream/modules/platform/proc-controller-github-team-settings.adoc b/downstream/modules/platform/proc-controller-github-team-settings.adoc index ce1dc5f830..8a9dd96f92 100644 --- a/downstream/modules/platform/proc-controller-github-team-settings.adoc +++ b/downstream/modules/platform/proc-controller-github-team-settings.adoc @@ -1,32 +1,35 @@ [id="proc-controller-github-team-settings"] -= GitHub Team settings += Configuring GitHub team authentication -To set up social authentication for a GitHub Team, you must obtain an OAuth2 key and secret for a web application. -To do this, you must first register your team-owned application at `https://github.com/organizations//settings/applications`. -To register the application, you must supply it with your Authorization callback URL, which is the *Callback URL* shown in the *Details* page. -Each key and secret must belong to a unique application and cannot be shared or reused between different authentication -backends. -The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. +To set up social authentication for a GitHub team, you must obtain an OAuth2 key and secret for a web application using the instructions provided in link:https://docs.github.com/en/apps/using-github-apps/installing-your-own-github-app[registering the new application with GitHub]. + +The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. To register the application, you must supply it with your webpage URL, which is the *Callback URL* shown in the Authenticator details for your authenticator configuration. See xref:gw-display-auth-details[Displaying authenticator details] for instructions on accessing this information. + +Each key and secret must belong to a unique application and cannot be shared or reused between different authentication backends. The OAuth2 key (Client ID) and secret (Client Secret) are used to supply the required fields in the UI. .Procedure -. Find the numeric team ID using the link:https://fabian-kostadinov.github.io/2015/01/16/how-to-find-a-github-team-id/[GitHub API]. -The Team ID is used to supply a required field in the UI. -. From the navigation panel, select {MenuAEAdminSettings}. -. On the *Settings* page, select *GitHub settings* from the list of *Authentication* options. -. Click the *GitHub Team* tab. -+ -The *GitHub Team OAuth2 Callback URL* field is already pre-populated and non-editable. -When the application is registered, GitHub displays the Client ID and Client Secret. -. Click btn:[Edit] and copy and paste GitHub's Client ID into the *GitHub Team OAuth2 Key* field. -. Copy and paste GitHub's Client Secret into the *GitHub Team OAuth2 Secret* field. -. Copy and paste GitHub's team ID in the *GitHub Team ID* field. -. For more information on completing the mapping fields, see xref:ref-controller-organization-mapping[Organization mapping] and xref:ref-controller-team-mapping[Team mapping]. -. Click btn:[Save] +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *GitHub team* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this authentication configuration. +. When the application is registered, GitHub displays the *Client ID* and *Client Secret*: ++ +.. Copy and paste the GitHub Client ID into the GitHub OAuth2 Key field. +.. Copy and paste the GitHub Client Secret into the GitHub OAuth2 Secret field. ++ +. Copy and paste GitHub’s team ID in the *GitHub OAuth2 Team ID* field. +. Enter the authorization scope for users in the GitHub OAuth2 Scope field. The default is `read:org`. ++ +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] ++ +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +. Click btn:[Next]. -.Verification -To verify that the authentication was configured correctly, logout of {ControllerName}. -The login screen displays the GitHub Team logo to enable logging in with those credentials. +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] -image:configure-controller-auth-github-teams-logo.png[image] +include::snippets/snip-gw-authentication-verification.adoc[] \ No newline at end of file diff --git a/downstream/modules/platform/proc-controller-google-oauth2-settings.adoc b/downstream/modules/platform/proc-controller-google-oauth2-settings.adoc index b6af819555..dea44b5045 100644 --- a/downstream/modules/platform/proc-controller-google-oauth2-settings.adoc +++ b/downstream/modules/platform/proc-controller-google-oauth2-settings.adoc @@ -1,36 +1,43 @@ [id="proc-controller-google-oauth2-settings"] -= Google OAuth2 settings += Configuring Google OAuth2 authentication -To set up social authentication for Google, you must obtain an OAuth2 key and secret for a web application. -To do this, you must first create a project and set it up with Google. +To set up social authentication for Google, you must obtain an OAuth2 key and secret for a web application. To do this, you must first create a project and set it up with Google. For instructions, see link:https://support.google.com/googleapi/answer/6158849[Setting up OAuth 2.0] in the Google API Console Help documentation. -If you have already completed the setup process, you can access those credentials by going to the Credentials section of the -link:https://console.developers.google.com/[Google API Manager Console]. -The OAuth2 key (Client ID) and secret (Client secret) are used to supply the required fields in the UI. +If you have already completed the setup process, you can access those credentials by going to the Credentials section of the link:https://console.cloud.google.com/projectselector2/apis/dashboard?pli=1&supportedpurview=project[Google API Manager Console]. The OAuth2 key (Client ID) and secret (Client secret) are used to supply the required fields in the UI. .Procedure -. From the navigation panel, select {MenuAEAdminSettings}. -. On the *Settings* page, select *Google OAuth 2 settings* from the list of *Authentication* options. -+ -The *Google OAuth2 Callback URL* field is already pre-populated and non-editable. - -. The following fields are also pre-populated. -If not, use the credentials Google supplied during the web application setup process, and look for the values with the same format as the ones shown in the example below: -* Click *Edit* and copy and paste Google's Client ID into the *Google OAuth2 Key* field. -* Copy and paste Google's Client secret into the *Google OAuth2 Secret* field. +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *Google OAuth* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this authentication setting. +. The *Google OAuth2 Key* and *Google OAuth2 Secret* fields are pre-populated. + -image:configure-controller-auth-google.png[image] - -. To complete the remaining optional fields, refer to the tooltips in each of the fields for instructions and required format. -. For more information on completing the mapping fields, see xref:ref-controller-organization-mapping[Organization mapping] and xref:ref-controller-team-mapping[Team mapping]. -. Click btn:[Save]. +If not, use the credentials Google supplied during the web application setup process. Save these settings for use in the following steps. ++ +. Copy and paste Google’s Client ID into the *Google OAuth2 Key* field. +. Copy and paste Google’s Client secret into the *Google OAuth2 Secret* field. +. Optional: Enter information for the following fields using the tooltips provided for instructions and required format: ++ +* *Access Token URL* +* *Access Token Method* +* *Authorization URL* +* *Revoke Token Method* +* *Revoke Token URL* +* *OIDC JWT Algorithm(s)* +* *OIDC JWT* ++ +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] ++ +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +Click btn:[Next]. -.Verification -To verify that the authentication was configured correctly, logout of {ControllerName}. -The login screen displays the Google logo to indicate it as an alternate method of logging into {ControllerName}. +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] -image:configure-controller-auth-google-logo.png[image] +include::snippets/snip-gw-authentication-verification.adoc[] \ No newline at end of file diff --git a/downstream/modules/platform/proc-controller-set-up-LDAP.adoc b/downstream/modules/platform/proc-controller-set-up-LDAP.adoc index 079666dfbb..e3cdfa0f37 100644 --- a/downstream/modules/platform/proc-controller-set-up-LDAP.adoc +++ b/downstream/modules/platform/proc-controller-set-up-LDAP.adoc @@ -1,176 +1,53 @@ -[id="controller-set-up-LDAP"] +:_mod-docs-content-type: PROCEDURE -= Setting up LDAP authentication +[id="controller-set-up-LDAP"] -When configured, a user who logs in with an LDAP username and password automatically has an {ControllerName} account created for them. -They can be automatically placed into organizations as either regular users or organization administrators. += Configuring LDAP authentication -Users created in the user interface (Local) take precedence over those logging into {ControllerName} for their first time with an alternative authentication solution. -You must delete the local user if you want to re-use with another authentication method, such as LDAP. +As a platform administrator, you can configure LDAP as the source for account authentication information for {PlatformNameShort} users. -Users created through an LDAP login cannot change their username, given name, surname, or set a local password for themselves. -You can also configure this to restrict editing of other field names. +When LDAP is configured, an account is created for any user who logs in with an LDAP username and password and they can be automatically placed into organizations as either regular users or organization administrators. -[NOTE] -==== -If the LDAP server you want to connect to has a certificate that is self-signed or signed by a corporate internal certificate authority (CA), -you must add the CA certificate to the system's trusted CAs. -Otherwise, connection to the LDAP server results in an error that the certificate issuer is not recognized. -For more information, see xref:controller-import-CA-cert-LDAP[Importing a certificate authority in {ControllerName} for LDAPS integration]. -If prompted, use your Red Hat customer credentials to login. -==== +Users created through an LDAP login should not change their username, first name, last name, or set a local password for themselves. Any changes made to this information is overwritten the next time the user logs in to the platform. .Procedure -. Create a user in LDAP that has access to read the entire LDAP structure. -. Use the `ldapsearch` command to test if you can make successful queries to the LDAP server. -You can install this tool from {ControllerName}'s system command line, and by using other Linux and OSX systems. -+ -.Example +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *LDAP* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this LDAP configuration. The configuration name is required, must be unique across all authenticators, and must not be longer than 512 characters. +. In the *LDAP Server URI* field, enter or modify the list of LDAP servers to which you want to connect. This field supports multiple addresses. +. In the *LDAP Bind DN text* field, enter the Distinguished Name (DN) to specify the user that the Ansible Automation Platform uses to connect to the LDAP server. For example: + -[literal, options="nowrap" subs="+attributes"] ---- -ldapsearch -x -H ldap://win -D "CN=josie,CN=Users,DC=website,DC=com" -b "dc=website,dc=com" -w Josie4Cloud +CN=josie,CN=users,DC=website,DC=com ---- -In this example, `CN=josie,CN=users,DC=website,DC=com` is the distinguished name of the connecting user. -+ -[NOTE] -==== -The `ldapsearch` utility is not automatically pre-installed with {ControllerName}. -However, you can install it from the `openldap-clients` package. -==== -+ -. From the navigation panel, select {MenuAEAdminSettings} in the {ControllerName} UI. -. Select *LDAP settings* in the list of *Authentication* options. + -You do not need multiple LDAP configurations per LDAP server, but you can configure many LDAP servers from this page, otherwise, leave the server at *Default*. -+ -The equivalent API endpoints show `AUTH_LDAP_*` repeated: `AUTH_LDAP_1_*`, `AUTH_LDAP_2_*`, `AUTH_LDAP_5_*` to denote server designations. -. To enter or change the LDAP server address, click btn:[Edit] and enter in the *LDAP Server URI* field by using the same format as the one pre-populated in the text field. +. In the *LDAP Bind Password* text field, enter the password to use for the binding user. +. Select a group type from the *LDAP Group Type* list. + [NOTE] ==== -You can specify multiple LDAP servers by separating each with spaces or commas. Click the image:question_circle.png[Tooltip,12,12] icon to comply with the correct syntax and rules. +The LDAP group types that are supported by the Ansible Automation Platform use the underlying link:https://django-auth-ldap.readthedocs.io/en/latest/reference.html#django_auth_ldap.config.LDAPGroupType[django-auth-ldap library]. ==== + -. Enter the password to use for the binding user in the *LDAP Bind Password* text field. -For more information about LDAP variables, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_installation_guide/appendix-inventory-files-vars#ref-hub-variables[Ansible automation hub variables]. -. Click to select a group type from the *LDAP Group Type* list. -+ -The LDAP group types that are supported by {ControllerName} use the underlying link:https://django-auth-ldap.readthedocs.io/en/latest/groups.html#types-of-groups[django-auth-ldap library]. -To specify the parameters for the selected group type, see Step 15. -. The *LDAP Start TLS* is disabled by default. -To enable TLS when the LDAP connection is not using SSL/TLS, set the toggle to *On*. -. Enter the distinguished name in the *LDAP Bind DN* text field to specify the user that {ControllerName} uses to connect (Bind) to the LDAP server. -* If that name is stored in key `sAMAccountName`, the *LDAP User DN Template* is populated from `(sAMAccountName=%(user)s)`. -Active Directory stores the username to `sAMAccountName`. -For OpenLDAP, the key is `uid` and the line becomes `(uid=%(user)s)`. -. Enter the distinguished group name to enable users within that group to access {ControllerName} in the *LDAP Require Group* field, using the same format as the one shown in the text field, `CN=controller Users,OU=Users,DC=website,DC=com`. -. Enter the distinguished group name to prevent users within that group from accessing {ControllerName} in the *LDAP Deny Group* field, using the same format as the one shown in the text field. -. Enter where to search for users while authenticating in the *LDAP User Search* field by using the same format as the one shown in the text field. -In this example, use: -+ -[literal, options="nowrap" subs="+attributes"] ----- -[ -"OU=Users,DC=website,DC=com", -"SCOPE_SUBTREE", -"(cn=%(user)s)" -] ----- -+ -The first line specifies where to search for users in the LDAP tree. -In the earlier example, the users are searched recursively starting from `DC=website,DC=com`. -+ -The second line specifies the scope where the users should be searched: -+ -* *SCOPE_BASE*: Use this value to indicate searching only the entry at the base DN, resulting in only that entry being returned. -* *SCOPE_ONELEVEL*: Use this value to indicate searching all entries one level under the base DN, but not including the base DN and not including any entries under that one level under the base DN. -* *SCOPE_SUBTREE*: Use this value to indicate searching of all entries at all levels under and including the specified base DN. -+ -The third line specifies the key name where the user name is stored. -+ -For many search queries, use the following correct syntax: +. To use *LDAP User DN Template* as an alternative to user search, enter the name of the template. This approach is more efficient for user lookups than searching if it is usable in your organizational environment. If this setting has a value it will be used instead of the *LDAP User Search* setting. +. *LDAP Start TLS* is disabled by default. To enable TLS when the LDAP connection is not using SSL, set the switch to *On*. +include::snippets/snip-gw-authentication-additional-auth-fields.adoc + -[literal, options="nowrap" subs="+attributes"] ----- -[ - [ - "OU=Users,DC=northamerica,DC=acme,DC=com", - "SCOPE_SUBTREE", - "(sAMAccountName=%(user)s)" - ], - [ - "OU=Users,DC=apac,DC=corp,DC=com", - "SCOPE_SUBTREE", - "(sAMAccountName=%(user)s)" - ], - [ - "OU=Users,DC=emea,DC=corp,DC=com", - "SCOPE_SUBTREE", - "(sAMAccountName=%(user)s)" - ] -] ----- -+ -. In the *LDAP Group Search* text field, specify which groups to search and how to search them. In this example, use: +. Enter any *LDAP Connection Options* to set for the LDAP connection. +. In the *LDAP Group Type Parameters* field, enter the parameters required for the LDAP Group Type you previously selected to identify LDAP groups and the members that belong to those groups. + -[literal, options="nowrap" subs="+attributes"] ----- -[ -"dc=example,dc=com", -"SCOPE_SUBTREE", -"(objectClass=group)" - ] ----- +To determine the parameters that a specific *LDAP Group Type* requires, refer to the link:https://django-auth-ldap.readthedocs.io/en/latest/reference.html#django_auth_ldap.config.LDAPGroupType[django_auth_ldap documentation] on the classes `init` parameters. + -* The first line specifies the BASE DN where the groups should be searched. -* The second line specifies the scope and is the same as that for the user directive. -* The third line specifies what the `objectClass` of a group object is in the LDAP that you are using. +. In the *LDAP Group Search* field, specify which groups should be searched and how to search them. +. In the *LDAP User Attribute Map* field, enter user attributes to map LDAP fields to your Ansible Automation Platform users for example, email or first_name. +. In the *LDAP User Search* field, enter where to search for users during authentication. + -. Enter the user attributes in the *LDAP User Attribute Map* the text field. -In this example, use: +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] + -[literal, options="nowrap" subs="+attributes"] ----- -{ -"first_name": "givenName", -"last_name": "sn", -"email": "mail" -} ----- -+ -The earlier example retrieves users by surname from the key `sn`. -You can use the same LDAP query for the user to decide what keys they are stored under. -+ -Depending on the selected *LDAP Group Type*, different parameters are available in the *LDAP Group Type Parameters* field to account for this. -`LDAP_GROUP_TYPE_PARAMS` is a dictionary that is converted by {ControllerName} to `kwargs` and passed to the *LDAP Group Type* class selected. -There are two common parameters used by any of the *LDAP Group Type*; `name_attr` and `member_attr`. -Where `name_attr defaults` to cn and `member_attr` defaults to member: -+ -[literal, options="nowrap" subs="+attributes"] ----- -{"name_attr": "cn", "member_attr": "member"} ----- -+ -To find what parameters a specific *LDAP Group Type* expects, see the link:https://django-auth-ldap.readthedocs.io/en/latest/reference.html#django_auth_ldap.config.LDAPGroupType[django_auth_ldap] documentation around the classes `init` parameters. -+ -. Enter the user profile flags in the *LDAP User Flags by Group* text field. -The following example uses the syntax to set LDAP users as "Superusers" and "Auditors": -+ -[literal, options="nowrap" subs="+attributes"] ----- -{ -"is_superuser": "cn=superusers,ou=groups,dc=website,dc=com", -"is_system_auditor": "cn=auditors,ou=groups,dc=website,dc=com" -} ----- -+ -. For more information about completing the mapping fields, *LDAP Organization Map* and *LDAP Team Map*, see the xref:controller-LDAP-organization-team-mapping[LDAP Organization and team mapping] section. -. Click btn:[Save]. +. Click btn:[Next]. -[NOTE] -==== -{ControllerNameStart} does not actively synchronize users, but they are created during their initial login. -To improve performance associated with LDAP authentication, see xref:controller-prevent-LDAP-attributes[Preventing LDAP attributes from updating on each login]. -==== +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] diff --git a/downstream/modules/platform/proc-controller-set-up-SAML.adoc b/downstream/modules/platform/proc-controller-set-up-SAML.adoc index 1ebb738454..4d0be69921 100644 --- a/downstream/modules/platform/proc-controller-set-up-SAML.adoc +++ b/downstream/modules/platform/proc-controller-set-up-SAML.adoc @@ -1,79 +1,28 @@ [id="controller-set-up-SAML"] -= SAML authentication += Configuring SAML authentication -SAML enables the exchange of authentication and authorization data between an Identity Provider (IdP - a system of servers that provide the Single Sign On service) and a service provider, in this case, {ControllerName}. +SAML allows the exchange of authentication and authorization data between an Identity Provider (IdP) and a Service Provider (SP). {PlatformNameShort} is a SAML SP that can be configured to talk with one or more SAML IdPs in order to authenticate users. Based on groups and attributes optionally provided by the IdP users can be placed into teams and organizations in {PlatformNameShort} based on authenticator maps tied to this authenticator. -You can configure {ControllerName} to communicate with SAML to authenticate (create/login/logout) {ControllerName} users. -You can embed User, Team, and Organization membership in the SAML response to {ControllerName}. - -image::ag-configure-auth-saml-topology.png[SAML topology] - -The following instructions describe {ControllerName} as the service provider. -To authenticate users through RHSSO (keycloak), see link:https://www.ansible.com/blog/red-hat-single-sign-on-integration-with-ansible-tower[Red Hat Single Sign On Integration with the Automation Controller]. .Procedure -. From the navigation panel, select {MenuAEAdminSettings}. -. Select *SAML settings* from the list of *Authentication* options. -+ -[NOTE] -==== -The *SAML Assertion Consume Service (ACS) URL* and *SAML Service Provider Metadata URL* fields are pre-populated and are non-editable. Contact the IdP administrator and provide the information contained in these fields. -==== -. Click btn:[Edit] and set the *SAML Service Provider Entity ID* to be the same as the *Base URL* of the {ControllerName} host field, found in the *Miscellaneous System settings* screen. -You can view it through the API in the `/api/v2/settings/system`, under the `CONTROLLER_BASE_URL` variable. -You can set the *Entity ID* to any one of the individual {ControllerName} cluster nodes, but it is good practice to set it to the URL of the service provider. -Ensure that the *Base URL* matches the FQDN of the load balancer, if used. -+ -[NOTE] -==== -The *Base URL* is different for each node in a cluster. -A load balancer often sits in front of {ControllerName} cluster nodes to provide a single entry point, the {ControllerName} Cluster FQDN. -The SAML service provider must be able establish an outbound connection and route to the {ControllerName} Cluster Node or the {ControllerName} Cluster FQDN that you set in the *SAML Service Provider Entity ID*. -==== -+ -In the following example, the service provider is the {ControllerName} cluster, and therefore, the ID is set to the {ControllerName} Cluster FQDN: -+ -image::configure-auth-saml-service-provider.png[SAML service provider] -+ -. Create a server certificate for the Ansible cluster. -Typically when an Ansible cluster is configured, the {ControllerName} nodes are configured to handle HTTP traffic only and the load balancer is an SSL Termination Point. -In this case, an SSL certificate is required for the load balancer, and not for the individual {ControllerName} Cluster Nodes. -You can enable or disable SSL per individual {ControllerName} node, but you must disable it when using an SSL terminated load balancer. -Use a non-expiring self signed certificate to avoid periodically updating certificates. -This way, authentication does not fail in case someone forgets to update the certificate. -+ -[NOTE] -==== -The *SAML Service Provider Public Certificate* field must contain the entire certificate, including the `-----BEGIN CERTIFICATE-----` and `-----END CERTIFICATE-----`. -==== -+ -If you are using a CA bundle with your certificate, include the entire bundle in this field. -+ -.Example -+ -[literal, options="nowrap" subs="+attributes"] ----- ------BEGIN CERTIFICATE----- -... cert text ... ------END CERTIFICATE----- ----- -+ -. Create an optional private key for the controller to use as a service provider and enter it in the *SAML Service Provider Private Key* field. -+ -.Example -+ -[literal, options="nowrap" subs="+attributes"] ----- ------BEGIN PRIVATE KEY----- -... key text ... ------END PRIVATE KEY----- ----- -+ -. Provide the IdP with details about the {ControllerName} cluster during the SSO process in the *SAML Service Provider Organization Info* field: +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *SAML* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this SAML configuration. +. Enter the application-defined unique identifier used as the audience of the SAML service provider configuration in the *SAML Service Provider Entity ID* field. This is usually the URL for the service. +. Include the certificate content in the *SAML Service Provider Public Certificate* field. +. Include the private key content in the *SAML Service Provider Private Key*. +. Enter the URL to redirect the user to for login initiation in the *IdP Login URL* field. +. Enter the public cert used for secrets coming from the *IdP in the IdP Public Cert* field. +. Enter the entity ID returned in the assertion in the *Entity ID*. +.Enter user details in the *Groups*, *User Email*, *Username*, *User Last Name*, *User First Name* and *User Permanent ID* fields. +. The *SAML Assertion Consumer Service (ACS) URL* field registers the service as a service provider (SP) with each identity provider (IdP) you have configured. +include::snippets/snip-gw-authentication-additional-auth-fields.adoc ++ +. In the *SAML Service Provider Organization Info* field, provide the URL, display name, and the name of your app. + -[literal, options="nowrap" subs="+attributes"] ---- { "en-US": { @@ -84,15 +33,8 @@ If you are using a CA bundle with your certificate, include the entire bundle in } ---- + -[IMPORTANT] -==== -You must complete these fields to configure SAML correctly within {ControllerName}. -==== +. In the *SAML Service Provider Technical Contact* field, provide the name and email address of the technical contact for your service provider. + -. Provide the IdP with the technical contact information in the *SAML Service Provider Technical Contact* field. -Do not remove the contents of this field: -+ -[literal, options="nowrap" subs="+attributes"] ---- { "givenName": "Some User", @@ -100,285 +42,33 @@ Do not remove the contents of this field: } ---- + -. Provide the IdP with the support contact information in the *SAML Service Provider Support Contact* field. -Do not remove the contents of this field: +. In the *SAML Service Provider Support Contact* field, provide the name and email address of the support contact for your service provider. + -[literal, options="nowrap" subs="+attributes"] ----- +---- { "givenName": "Some User", "emailAddress": "suser@example.com" } ---- + -. In the *SAML Enabled Identity Providers* field, provide information on how to connect to each IdP listed. -The following example shows what {ControllerName} expects SAML attributes to be: -+ -[literal, options="nowrap" subs="+attributes"] ----- -Username(urn:oid:0.9.2342.19200300.100.1.1) -Email(urn:oid:0.9.2342.19200300.100.1.3) -FirstName(urn:oid:2.5.4.42) -LastName(urn:oid:2.5.4.4) ----- -+ -If these attributes are not known, map existing SAML attributes to `Username`, `Email`, `FirstName`, and `LastName`. -+ -Configure the required keys for each IdP: -+ -* `attr_user_permanent_id` - The unique identifier for the user. -It can be configured to match any of the attributes sent from the IdP. -It is normally set to `name_id` if the `SAML:nameid` attribute is sent to the {ControllerName} node. -It can be the username attribute or a custom unique identifier. -* `entity_id` - The Entity ID provided by the IdP administrator. -The administrator creates a SAML profile for {ControllerName} and it generates a unique URL. -* `url`- The Single Sign On (SSO) URL that {ControllerName} redirects the user to, when SSO is activated. -* `x509_cert` - The certificate provided by the IdP administrator that is generated from the SAML profile created on the IdP. -Remove the `---BEGIN CERTIFICATE---` and `---END CERTIFICATE---` headers, then enter the certificate as one non-breaking string. -+ -Multiple SAML IdPs are supported. -Some IdPs might provide user data using attribute names that differ from the default OIDs. -The SAML NameID is a special attribute used by some IdPs to tell the service provider (the {ControllerName} cluster) what the unique user identifier is. -If it is used, set the `attr_user_permanent_id` to `name_id` as shown in the following example. -Other attribute names can be overridden for each IdP: -+ -[literal, options="nowrap" subs="+attributes"] ----- -"myidp": { - "entity_id": "https://idp.example.com", - "url": "https://myidp.example.com/sso", - "x509cert": "" -}, -"onelogin": { - "entity_id": "https://app.onelogin.com/saml/metadata/123456", - "url": "https://example.onelogin.com/trust/saml2/http-post/sso/123456", -"x509cert": "", - "attr_user_permanent_id": "name_id", - "attr_first_name": "User.FirstName", - "attr_last_name": "User.LastName", - "attr_username": "User.email", - "attr_email": "User.email" - } -} ----- -+ -[WARNING] -==== -Do not create a SAML user that shares the same email with another user (including a non-SAML user). -Doing so results in the accounts being merged. -Note that this same behavior exists for system administrators. -Therefore, a SAML login with the same email address as the system administrator can login with system administrator privileges. -To avoid this, you can remove (or add) administrator privileges based on SAML mappings. -==== -+ -. Optional: Provide the *SAML Organization Map*. -For more information, see xref:ref-controller-organization-mapping[Organization mapping] and xref:ref-controller-team-mapping[Team mapping]. -. You can configure {ControllerName} to look for particular attributes that contain Team and Organization membership to associate with users when they log in to {ControllerName}. -The attribute names are defined in the *SAML Organization Attribute Mapping* and the *SAML Team Attribute Mapping* fields. -+ -.Example SAML Organization Attribute Mapping -+ -The following is an example SAML attribute that embeds user organization membership in the attribute `member-of`: -+ -[literal, options="nowrap" subs="+attributes"] ----- - - - Engineering - IT - HR - Sales - - - Engineering - - ----- -+ -The following is the corresponding {ControllerName} configuration: -+ -[literal, options="nowrap" subs="+attributes"] ----- -{ - "saml_attr": "member-of", - "saml_admin_attr": "admin-of", - "remove": true, - "remove_admins": false -} ----- -+ -* `saml_attr`: The SAML attribute name where the organization array can be found and `remove` is set to `true` to remove a user from all organizations before adding the user to the list of organizations. -To keep the user in the organizations they are in while adding the user to the organizations in the SAML attribute, set `remove` to `false`. -* `saml_admin_attr`: Similar to the `saml_attr` attribute, but instead of conveying organization membership, this attribute conveys administrator organization permissions. -+ -.Example SAML Team Attribute Mapping -+ -The following example is another SAML attribute that contains a team membership in a list: -+ -[literal, options="nowrap" subs="+attributes"] ----- - - - member - staff - - -{ - "saml_attr": "eduPersonAffiliation", - "remove": true, - "team_org_map": [ - { - "team": "member", - "organization": "Default1" - }, - { - "team": "staff", - "organization": "Default2" - } - ] -} ----- -+ -* `saml_attr`: The SAML attribute name where the team array can be found. -* `remove`: Set `remove` to `true` to remove the user from all teams before adding the user to the list of teams. -To keep the user in the teams they are in while adding the user to the teams in the SAML attribute, set `remove` to `false`. -* `team_org_map`: An array of dictionaries of the form `{ "team": "", "organization": "" }` that defines mapping from controller Team -> {ControllerName} organization. -You need this because the same named team can exist in multiple organizations in {ControllerName}. -The organization to which a team listed in a SAML attribute belongs to is ambiguous without this mapping. -+ -You can create an alias to override both teams and organizations in the *SAML Team Attribute Mapping* field. -This option is useful in cases when the SAML backend sends out complex group names, as show in the following example: +. Optional: Provide extra configuration data in the *SAML Service Provider extra configuration data* field. This field is the equivalent to the `SOCIAL_AUTH_SAML_SP_EXTRA` in the API. For more information, see link:https://github.com/SAML-Toolkits/python-saml#settings[OneLogin’s SAML Python Toolkit] to learn about the valid service provider extra (SP_EXTRA) parameters. +. Optional: Provide security settings in the *SAML Security Config* field. This field is the equivalent to the `SOCIAL_AUTH_SAML_SECURITY_CONFIG` field in the API. + -[literal, options="nowrap" subs="+attributes"] ---- -{ - "remove": false, - "team_org_map": [ - { - "team": "internal:unix:domain:admins", - "organization": "Default", - "team_alias": "Administrators" - }, - { - "team": "Domain Users", - "organization_alias": "OrgAlias", - "organization": "Default" - } - ], - "saml_attr": "member-of" -} +// Indicates whether the messages sent by this SP // will be signed. [Metadata of the SP will offer this info] "authnRequestsSigned": false, + +// Indicates a requirement for the , // and elements received by this SP to be signed. "wantMessagesSigned": false, + +// Indicates a requirement for the elements received by // this SP to be signed. [Metadata of the SP will offer this info] "wantAssertionsSigned": false, ---- +For more information and additional options, see link:https://github.com/SAML-Toolkits/python-saml#settings[OneLogin’s SAML Python Toolkit]. + -Once the user authenticates, {ControllerName} creates organization and team aliases. -+ -. Optional: Provide team membership mapping in the *SAML Team Map* field. -For more information, see xref:ref-controller-organization-mapping[Organization mapping] and xref:ref-controller-team-mapping[Team Mapping]. -. Optional: Provide security settings in the *SAML Security Config* field. -This field is the equivalent to the `SOCIAL_AUTH_SAML_SECURITY_CONFIG` field in the API. -For more information, see link:https://github.com/SAML-Toolkits/python-saml#settings[OneLogin's SAML Python Toolkit]. -+ -{ControllerNameStart} uses the `python-social-auth` library when users log in through SAML. -This library relies on the `python-saml` library to make the settings available for the next two optional fields, *SAML Service Provider extra configuration data* and *SAML IDP to extra_data attribute mapping*. -+ -* The *SAML Service Provider extra configuration data* field is equivalent to the `SOCIAL_AUTH_SAML_SP_EXTRA` in the API. -For more information, see link:https://github.com/SAML-Toolkits/python-saml#settings[OneLogin's SAML Python Toolkit] to learn about the valid service provider extra (`SP_EXTRA`) parameters. -* The *SAML IDP to extra_data attribute mapping* field is equivalent to the `SOCIAL_AUTH_SAML_EXTRA_DATA` in the API. -For more information, see Python's SAML link:https://python-social-auth.readthedocs.io/en/latest/backends/saml.html#advanced-settings[Advanced Settings] documentation. -* The *SAML User Flags Attribute Mapping* field enables you to map SAML roles and attributes to special user flags. -The following attributes are valid in this field: -** `is_superuser_role`: Specifies one or more SAML roles which grants a user the superuser flag. -** `is_superuser_attr`: Specifies a SAML attribute which grants a user the superuser flag. -** `is_superuser_value`: Specifies one or more values required for `is_superuser_attr` that is required for the user to be a superuser. -** `remove_superusers`: Boolean indicating if the superuser flag should be removed for users or not. -This defaults to `true`. -** `is_system_auditor_role`: Specifies one or more SAML roles which will grant a user the system auditor flag. -** `is_system_auditor_attr`: Specifies a SAML attribute which will grant a user the system auditor flag. -** `is_system_auditor_value`: Specifies one or more values required for `is_system_auditor_attr` that is required for the user to be a system auditor. -** `remove_system_auditors`: Boolean indicating if the `system_auditor` flag should be removed for users or not. -This defaults to `true`. -+ -The `role` and `value` fields are lists and are 'OR' logic. -If you specify two roles: [ "Role 1", "Role 2" ] and the SAML user has either role, the logic considers them to have the required role for the flag. -This is the same with the `value` field, if you specify: [ "Value 1", "Value 2"] and the SAML user has either value for their attribute the logic considers their attribute value to have matched. +. Optional: In the *SAML IDP to extra_data attribute mapping* field, enter values to map IDP attributes to extra_data attributes. For more information, see link:https://python-social-auth.readthedocs.io/en/latest/backends/saml.html#advanced-settings[advanced SAML settings]. + -If you specify `role` and `attr` for either `superuser` or `system_auditor`, the settings for `attr` take precedence over a role. -System administrators and System auditor roles are evaluated at login for a SAML user. -If you grant a SAML user one of these roles through the UI and not through the SAML settings, the roles are removed on the user's next login unless the `remove` flag is set to `false`. -The `remove` flag, if `false`, never enables the SAML adapter to remove the corresponding flag from a user. -The following table describes how the logic works: +include::snippets/snip-gw-authentication-common-checkboxes.adoc.[] + -[cols="33%,33%,33%,33%,33%,33%",options="header"] -|=== -| *Has one or more roles* | *Has `attr`* | *Has one or more `attr Values`* | *Remove flag* | *Previous Flag* | *Is flagged* -| No | No | N/A | True | False | No -| No | No | N/A | False | False | No -| No | No | N/A | True | True | No -| No | No | N/A | False | True | Yes -| Yes | No | N/A | True | False | Yes -| Yes | No | N/A | False | False | Yes -| Yes | No | N/A | True | True | Yes -| Yes | No | N/A | False | False | Yes -| No | Yes | Yes | True | True | Yes -| No | Yes | Yes | True | False | Yes -| No | Yes | Yes | False | False | Yes -| No | Yes | Yes | True | True | Yes -| No | Yes | Yes | False | True | Yes -| No | Yes | No | True | False | No -| No | Yes | No | False | False | No -| No | Yes | No | True | True | No -| No | Yes | No | False | True | Yes -| No | Yes | Unset | True | False | Yes -| No | Yes | Unset | False | False | Yes -| No | Yes | Unset | True | True | Yes -| No | Yes | Unset | False | True | Yes -| Yes | Yes | Yes | True | False | Yes -| Yes | Yes | Yes | False | False | Yes -| Yes | Yes | Yes | True | True | Yes -| Yes | Yes | Yes | False | True | Yes -| Yes | Yes | No | True | False | No -| Yes | Yes | No | False | False | No -| Yes | Yes | No | True | True | No -| Yes | Yes | No | False | True | Yes -| Yes | Yes | Unset | True | False | Yes -| Yes | Yes | Unset | False | False | Yes -| Yes | Yes | Unset | True | True | Yes -| Yes | Yes | Unset | False | True | Yes -|=== -+ -Each time a SAML user authenticates to {ControllerName}, these checks are performed and the user flags are altered as needed. -If `System Administrator` or `System Auditor` is set for a SAML user within the UI, the SAML adapter overrides the UI setting based on the preceding rules. -If you prefer that the user flags for SAML users do not get removed when a SAML user logs in, you can set the `remove_` flag to `false`. -With the `remove` flag set to `false`, a user flag set to `true` through either the UI, API or SAML adapter is not removed. -However, if a user does not have the flag, and the preceding rules determine the flag should be added, it is added, even if the flag is `false`. -+ -.Example -+ -[literal, options="nowrap" subs="+attributes"] ----- -{ - "is_superuser_attr": "blueGroups", - "is_superuser_role": ["is_superuser"], - "is_superuser_value": ["cn=My-Sys-Admins,ou=memberlist,ou=mygroups,o=myco.com"], - "is_system_auditor_attr": "blueGroups", - "is_system_auditor_role": ["is_system_auditor"], - "is_system_auditor_value": ["cn=My-Auditors,ou=memberlist,ou=mygroups,o=myco.com"] -} ----- -. Click btn:[Save]. - -.Verification -To verify that the authentication is configured correctly, load the auto-generated URL found in the *SAML Service Provider Metadata URL* into a browser. -If you do not get XML output, you have not configured it correctly. - -Alternatively, logout of {ControllerName} and the login screen displays the SAML logo to indicate it as a alternate method of logging into {ControllerName}: +. Click btn:[Next]. -image::ag-configure-auth-saml-logo.png[SAML logo] +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] diff --git a/downstream/modules/platform/proc-controller-set-up-azure.adoc b/downstream/modules/platform/proc-controller-set-up-azure.adoc index 8a58dca61f..ff28951ceb 100644 --- a/downstream/modules/platform/proc-controller-set-up-azure.adoc +++ b/downstream/modules/platform/proc-controller-set-up-azure.adoc @@ -1,35 +1,35 @@ [id="controller-set-up-azure"] -= {Azure} active directory authentication += Configuring {Azure} active directory authentication -To set up enterprise authentication for {Azure} Active Directory (AD), you need to obtain an OAuth2 key and secret by registering your organization-owned application from Azure at: -https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app. +To set up enterprise authentication for {Azure} Active Directory (AD), you need to obtain an OAuth2 key and secret by registering your organization-owned application from Azure using the link:https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app[Quickstart: Register an application with the Microsoft identity platform]. -Each key and secret must belong to a unique application and cannot be shared or reused between different authentication backends. -To register the application, you must supply it with your webpage URL, which is the Callback URL shown in the *Authentication* tab of the *Settings* screen. +Each key and secret must belong to a unique application and cannot be shared or reused between different authentication backends. To register the application, you must supply it with your webpage URL, which is the Callback URL shown in the Authenticator details for your authenticator configuration. See dxref:gw-display-auth-details[Displaying authenticator details] for instructions on accessing this information. .Procedure -. From the navigation panel, select {MenuAEAdminSettings}. -. Select *Azure AD settings* from the list of *Authentication* options. +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *Azuread* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this authentication configuration. +. Click btn:[Edit], copy and paste Microsoft’s *Application (Client) ID* to the *OIDC Key* field. ++ +Following instructions for link:https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app[registering your application with the Microsoft identity platform], supply the key (shown at one time only) to the client for authentication. + -[NOTE] -==== -The *Azure AD OAuth2 Callback URL* field is already pre-populated and non-editable. -Once the application is registered, {Azure} displays the Application ID and Object ID. -==== -. Click btn:[Edit], copy and paste {Azure}'s Application ID to the *Azure AD OAuth2 Key* field. +. Copy and paste the secret key created for your Microsoft Azure AD application to the OIDC Secret field. + -Following {Azure} AD's documentation for connecting your application to {Azure} Active Directory, supply the key (shown at one time only) to the client for authentication. +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] + -. Copy and paste the secret key created for your {Azure} AD application to the *Azure AD OAuth2 Secret* field of the *Settings - Authentication* screen. -. For more information on completing the {Azure} AD OAuth2 Organization Map and {Azure} AD OAuth2 Team Map fields, see xref:ref-controller-organization-mapping[Organization mapping] and xref:ref-controller-team-mapping[Team Mapping]. -. Click btn:[Save]. +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +Click btn:[Next]. -.Verification -To verify that the authentication is configured correctly, log out of {ControllerName} and the login screen displays the {Azure} logo to enable logging in with those credentials: +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] -image::ag-configure-auth-azure-logo.png[Azure AD logo] +include::snippets/snip-gw-authentication-verification.adoc[] +[role="_additional-resources"] .Additional resources For application registering basics in {Azure} AD, see the link:https://learn.microsoft.com/en-us/entra/identity-platform/v2-overview[What is the Microsoft identity platform?] overview. diff --git a/downstream/modules/platform/proc-controller-set-up-generic-oidc.adoc b/downstream/modules/platform/proc-controller-set-up-generic-oidc.adoc index 798c18b5d6..ffc32003f8 100644 --- a/downstream/modules/platform/proc-controller-set-up-generic-oidc.adoc +++ b/downstream/modules/platform/proc-controller-set-up-generic-oidc.adoc @@ -1,34 +1,49 @@ [id="controller-set-up-generic-oidc"] -= Generic OIDC authentication += Configuring generic OIDC authentication -OpenID Connect (OIDC) uses the OAuth 2.0 framework. -It enables third-party applications to verify the identity and obtain basic end-user information. -The main difference between OIDC and SAML is that SAML has a service provider (SP)-to-IdP trust relationship, whereas OIDC establishes the trust with the channel (HTTPS) that is used to obtain the security token. -To obtain the credentials needed to set up OIDC with {ControllerName}, see the documentation from the IdP of your choice that has OIDC support. +OpenID Connect (OIDC) uses the OAuth 2.0 framework. It enables third-party applications to verify the identity and obtain basic end-user information. The main difference between OIDC and SAML is that SAML has a service provider (SP)-to-IdP trust relationship, whereas OIDC establishes the trust with the channel (HTTPS) that is used to obtain the security token. To obtain the credentials needed to set up OIDC with {PlatformNameShort}, see the documentation from the IdP of your choice that has OIDC support. .Procedure -. From the navigation panel, select {MenuAEAdminSettings}. -. Select *Generic OIDC settings* from the list of *Authentication* options. -. Click btn:[Edit] and enter the following information: +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *Generic OIDC* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this authentication configuration. +. Enter the following information: ++ +* *OIDC Provider URL*: The URL for your OIDC provider. * *OIDC Key*: The client ID from your third-party IdP. * *OIDC Secret*: The client secret from your IdP. -* *OIDC Provider URL*: The URL for your OIDC provider. -* *Verify OIDC Provider Certificate*: Use the toggle to enable or disable the OIDC provider SSL certificate verification. -. Click btn:[Save]. + +. Optional: Select the HTTP method to be used when requesting an access token from the *Access Token Method* list. The default method is *POST*. +. Optionally enter information for the following fields using the tooltips provided for instructions and required format: ++ +* *Access Token Method* - The default method is *POST*. +* *Access Token URL* +* *Access Token Method* +* *Authorization URL* +* *ID Key* +* *ID Token Issuer* +* *JWKS URI* +* *OIDC Public Key* +* *Revoke Token Method* - The default method is *GET*. +* *Revoke Token URL* +* *Response Type* +* *Token Endpoint Auth Method* +* *Userinfo URL* +* *Username Key* ++ +. Use the *Verify OIDC Provider Certificate* to enable or disable the OIDC provider SSL certificate verification. +. Use the *Redirect* State to enable or disable the state parameter in the redirect URI. It is recommended that this is enabled to prevent Cross Site Request Forgery (CSRF) attacks. ++ +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] ++ +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +. Click btn:[Next]. + [NOTE] ==== -Team and organization mappings for OIDC are currently not supported. -The OIDC adapter does authentication only and not authorization. -It is only capable of authenticating whether this user is who they say they are. -It does not authorize what this user is enabled to do. -Configuring generic OIDC creates the UserID appended with an ID or key to differentiate the same user ID originating from two different sources and therefore, considered different users. -So you get an ID of just the user name and the second is the username-. -==== - -.Verification -To verify that the authentication is configured correctly, logout of {ControllerName} and the login screen displays the OIDC logo to indicate it as a alternative method of logging into {ControllerName}: - -image:ag-configure-auth-oidc-logo.png[OIDClogo] +Team and organization mappings for OIDC are currently not supported. The OIDC adapter does authentication only and not authorization. It is only capable of authenticating whether this user is who they say they are. It does not authorize what this user is enabled to do. Configuring generic OIDC creates the UserID appended with an ID or key to differentiate the same user ID originating from two different sources and therefore, considered different users. So you get an ID of just the user name and the second is the username-. +==== \ No newline at end of file diff --git a/downstream/modules/platform/proc-controller-set-up-radius.adoc b/downstream/modules/platform/proc-controller-set-up-radius.adoc index 2ebd8d2c57..ed64bfd691 100644 --- a/downstream/modules/platform/proc-controller-set-up-radius.adoc +++ b/downstream/modules/platform/proc-controller-set-up-radius.adoc @@ -1,14 +1,24 @@ [id="controller-set-up-radius"] -= RADIUS authentication += Configuring RADIUS authentication -You can configure {ControllerName} to centrally use RADIUS as a source for authentication information. +You can configure {PlatformNameShort} to centrally use RADIUS as a source for authentication information. .Procedure -. From the navigation panel, select {MenuAEAdminSettings}. -. Select *RADIUS settings* from the list of *Authentication* options. -. Click btn:[Edit] and enter the host or IP of the RADIUS server in the *RADIUS Server* field. -If you leave this field blank, RADIUS authentication is disabled. -. Enter the port and secret information in the next two fields. -. Click btn:[Save]. +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *Radius* from the *Authentication type* list and click btn:[Next]. +. Click btn:[Create authentication]. +. Enter the host or IP of the RADIUS server in the *RADIUS Server* field. If you leave this field blank, RADIUS authentication is disabled. +. Enter the *Shared secret for authenticating to RADIUS server*. ++ +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] ++ +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +. Click btn:[Next]. + +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] diff --git a/downstream/modules/platform/proc-controller-set-up-tacacs+.adoc b/downstream/modules/platform/proc-controller-set-up-tacacs+.adoc index e739aa513e..7b9fdb56b1 100644 --- a/downstream/modules/platform/proc-controller-set-up-tacacs+.adoc +++ b/downstream/modules/platform/proc-controller-set-up-tacacs+.adoc @@ -1,9 +1,8 @@ [id="controller-set-up-tacacs"] -= TACACS Plus authentication += Configuring TACACS+ authentication -Terminal Access Controller Access-Control System Plus (TACACS+) is a protocol that handles remote authentication and related services for networked access control through a centralized server. -TACACS+ provides authentication, authorization and accounting (AAA) services, in which you can configure {ControllerName} to use as a source for authentication. +Terminal Access Controller Access-Control System Plus (TACACS+) is a protocol that handles remote authentication and related services for networked access control through a centralized server. TACACS+ provides authentication, authorization and accounting (AAA) services, in which you can configure Ansible Automation Platform to use as a source for authentication. [NOTE] ==== @@ -11,15 +10,24 @@ This feature is deprecated and will be removed in a future release. ==== .Procedure -. From the navigation panel, select {MenuAEAdminSettings}. -. Select *TACACs+ settings* from the list of *Authentication* options. -. Click btn:[Edit] and enter the following information: -* *TACACS+ Server*: Provide the hostname or IP address of the TACACS+ server with which to authenticate. -If you leave this field blank, TACACS+ authentication is disabled. -* *TACACS+ Port*: TACACS+ uses port 49 by default, which is already pre-populated. -* *TACACS+ Secret*: The secret key for TACACS+ authentication server. -* *TACACS+ Auth Session Timeout*: The session timeout value in seconds. -The default is 5 seconds. -* *TACACS+ Authentication Protocol*: The protocol used by the TACACS+ client. -The options are *ascii* or *pap*. -. Click btn:[Save]. + +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *TACACS+* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this TACACS+ configuration. +. Enter the following information: ++ +* Hostname of TACACS+ Server: Provide the hostname or IP address of the TACACS+ server with which to authenticate. If you leave this field blank, TACACS+ authentication is disabled. +* TACACS+ Authentication Protocol: The protocol used by the TACACS+ client. The options are ascii or pap. +* Shared secret for authenticating to TACACS+ server: The secret key for TACACS+ authentication server. +. The *TACACS+ client address sending enabled* is disabled by default. To enable client address sending, select the checkbox. ++ +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] ++ +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +Click btn:[Next]. + +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] \ No newline at end of file diff --git a/downstream/modules/platform/proc-controller-user-permissions.adoc b/downstream/modules/platform/proc-controller-user-permissions.adoc index 62dc4baf2d..cdd5933bab 100644 --- a/downstream/modules/platform/proc-controller-user-permissions.adoc +++ b/downstream/modules/platform/proc-controller-user-permissions.adoc @@ -12,7 +12,7 @@ You can set permissions through an inventory, project, job template and other re . Select the team *Name* to which you want to add roles. . Select the *Roles* tab and click btn:[Add roles]. + -include::snippets/snip-gw-roles-note-multiple-components.adoc +include::snippets/snip-gw-roles-note-multiple-components.adoc[] + . Select a *Resource type* and click btn:[Next]. . Select the resources to receive the new roles and click btn:[Next]. diff --git a/downstream/modules/platform/proc-gw-config-keycloak-settings.adoc b/downstream/modules/platform/proc-gw-config-keycloak-settings.adoc new file mode 100644 index 0000000000..a16c20d235 --- /dev/null +++ b/downstream/modules/platform/proc-gw-config-keycloak-settings.adoc @@ -0,0 +1,29 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-keycloak-authentication"] + += Configuring keycloak authentication + +You can configure {PlatformNameShort} to integrate Keycloak to manage user authentication. + +.Procedure + +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *Keycloak* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this keycloak configuration. The configuration name is required, must be unique across all authenticators, and must not be longer than 512 characters. +. Enter the location where the user's token can be retrieved in the *Keycloak Access Token URL* field. +. Optional: Enter the redirect location the user is taken to during the login flow in the *Keycloak Provider URL* field. +. Enter the Client ID from your Keycloak installation in the *Keycloak OIDC Key* field. +. Enter the RS256 public key provided by your Keycloak realm in the *Keycloak Public Key* field. +. Enter the OIDC secret (Client Secret) from your Keycloak installation in the *Keycloak OIDC Secret* field. ++ +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] ++ +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +. Click btn:[Next]. + +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] diff --git a/downstream/modules/platform/proc-gw-local-authentication.adoc b/downstream/modules/platform/proc-gw-local-authentication.adoc new file mode 100644 index 0000000000..7708c6feab --- /dev/null +++ b/downstream/modules/platform/proc-gw-local-authentication.adoc @@ -0,0 +1,29 @@ +:_mod-docs-content-type: PROCEDURE + +[id="gw-local-authentication"] + += Configuring local authentication + +As a platform administrator, you can configure local system authentication. With local authentication, users and their passwords are checked against local system accounts. + +[NOTE] +==== +A local authenticator is automatically created by the {PlatformNameShort} installation process, and is configured with the specified admin credentials in the inventory file before installation. After successful installation, you can log in to the {PlatformNameShort} using those credentials. +==== + +.Procedure + +. From the navigation panel, select {MenuAMAuthentication}. +. Click btn:[Create authentication]. +. Select *Local* from the *Authentication type* list and click btn:[Next]. +. Enter a *Name* for this Local configuration. The configuration name is required, must be unique across all authenticators, and must not be longer than 512 characters. ++ +include::snippets/snip-gw-authentication-additional-auth-fields.adoc[] ++ +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] ++ +. Click btn:[Next]. + +[role="_additional-resources"] +.Next steps +include::snippets/snip-gw-authentication-next-steps.adoc[] \ No newline at end of file diff --git a/downstream/modules/platform/proc-gw-remove-roles-team.adoc b/downstream/modules/platform/proc-gw-remove-roles-team.adoc index 9e88f5ac7e..fdbf987dad 100644 --- a/downstream/modules/platform/proc-gw-remove-roles-team.adoc +++ b/downstream/modules/platform/proc-gw-remove-roles-team.adoc @@ -12,7 +12,7 @@ You can remove roles from a team by selecting the - icon next to the resource. T . Select the team *Name* from which you want to remove roles. . Select the *Roles* tab. + -include::snippets/snip-gw-roles-note-multiple-components.adoc +include::snippets/snip-gw-roles-note-multiple-components.adoc[] + . Select the checkbox next to each resource you want to remove and click *Remove selected roles* from the *{MoreActionsIcon}* list on the menu bar. . Select the checkbox to confirm removal of the selected roles and click *Remove role*. diff --git a/downstream/modules/platform/proc-gw-remove-roles-user.adoc b/downstream/modules/platform/proc-gw-remove-roles-user.adoc index 79abf32235..b06465ae9a 100644 --- a/downstream/modules/platform/proc-gw-remove-roles-user.adoc +++ b/downstream/modules/platform/proc-gw-remove-roles-user.adoc @@ -11,7 +11,7 @@ You can remove roles from a user by selecting the *-* icon next to the resource. . Select the user Name from which you want to remove roles. . Select the *Roles* tab. + -include::snippets/snip-gw-roles-note-multiple-components.adoc +include::snippets/snip-gw-roles-note-multiple-components.adoc[] + . Select the checkbox next to each resource you want to remove and click *Remove selected roles* from the {MoreActionsIcon} list on the menu bar. . Select the checkbox to confirm removal of the selected roles and click btn:[Remove role]. diff --git a/downstream/modules/platform/ref-controller-user-roles.adoc b/downstream/modules/platform/ref-controller-user-roles.adoc index b7c452e9fe..38718c950b 100644 --- a/downstream/modules/platform/ref-controller-user-roles.adoc +++ b/downstream/modules/platform/ref-controller-user-roles.adoc @@ -5,13 +5,14 @@ = Adding roles for a user You can grant access for users to use, read, or write credentials by assigning roles to them. + .Procedure . From the navigation panel, select {MenuAMUsers}. . From the Users list view, click on the user to which you want to add roles. . Select the *Roles* tab to display the set of roles assigned to this user. These provide the ability to read, modify, and administer resources. . To add new roles, click btn:[Add roles]. + -include::snippets/snip-gw-roles-note-multiple-components.adoc +include::snippets/snip-gw-roles-note-multiple-components.adoc[] + . Select a Resource type and click btn:[Next]. . Select the resources that will receive new roles and click btn:[Next]. From 2a23b420ab79195aa11e544e5a726a4ab86532e3 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Fri, 30 Aug 2024 13:42:17 +0100 Subject: [PATCH 105/590] 2.5 Add procedure to set registry variables (#1802) (#1803) https://issues.redhat.com/browse/AAP-29120 * Add procedure to set registry variables --- .../assembly-inventory-introduction.adoc | 2 ++ .../assembly-platform-install-scenario.adoc | 2 ++ .../proc-set-registry-username-password.adoc | 23 +++++++++++++++++++ .../ref-general-inventory-variables.adoc | 4 ++++ 4 files changed, 31 insertions(+) create mode 100644 downstream/modules/platform/proc-set-registry-username-password.adoc diff --git a/downstream/assemblies/platform/assembly-inventory-introduction.adoc b/downstream/assemblies/platform/assembly-inventory-introduction.adoc index 82c3b60fb8..ee6aefe265 100644 --- a/downstream/assemblies/platform/assembly-inventory-introduction.adoc +++ b/downstream/assemblies/platform/assembly-inventory-introduction.adoc @@ -61,6 +61,8 @@ registry_password='' The first part of the inventory file specifies the hosts or groups that Ansible can work with. +For more information on `registry_username` and `registry_password`, see {BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/planning_your_installation/about_the_installer_inventory_file#about_the_installer_inventory_file[Setting registry_username and registry_password]. + include::platform/ref-guidelines-hosts-groups.adoc[leveloffset=+1] include::platform/ref-deprovisioning.adoc[leveloffset=+1] include::platform/con-inventory-variables-intro.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-platform-install-scenario.adoc b/downstream/assemblies/platform/assembly-platform-install-scenario.adoc index bb9345d7cf..41284b0cc6 100644 --- a/downstream/assemblies/platform/assembly-platform-install-scenario.adoc +++ b/downstream/assemblies/platform/assembly-platform-install-scenario.adoc @@ -37,6 +37,8 @@ There are several supported installation scenarios for {PlatformName}. To instal include::platform/proc-editing-inventory-file.adoc[leveloffset=+1] include::platform/con-install-scenario-examples.adoc[leveloffset=+1] include::platform/con-install-scenario-recommendations.adoc[leveloffset=+2] +//Added for AAP-29120 +include::platform/proc-set-registry-username-password.adoc[leveloffset=+2] //[emcwhinn] Removing for AAP-29246 as content is being moved to one guide in 2.4 customer portal //include::platform/con-eda-2-5-with-controller-2-4.adoc[leveloffset=+3] //[ifowler] Removed for AAP-18700 Install Guide Scenario Consolidation diff --git a/downstream/modules/platform/proc-set-registry-username-password.adoc b/downstream/modules/platform/proc-set-registry-username-password.adoc new file mode 100644 index 0000000000..fd8a4bca9c --- /dev/null +++ b/downstream/modules/platform/proc-set-registry-username-password.adoc @@ -0,0 +1,23 @@ +[id="proc-set-registry-username-password"] + += Setting registry_username and registry_password + +If you intend to use the `registry_username` and `registry_password` variables in an inventory file you are recommended to use the following method to create a Registry Service Account to set a token with an expiration in the plaintext `inventory/vars.yml` file instead of using a plaintext username and password, for reasons of security. + +Registry service accounts provide named tokens that can be used in environments where credentials are shared, such as deployment systems. + +.Procedure +. Navigate to https://access.redhat.com/terms-based-registry/accounts +. On the *Registry Service Accounts* page click btn:[New Service Account]. +. Enter a name for the account using only the accepted characters +. Optionally enter a description for the account. +. Click btn:[Create account]. +. Find the created account in the list. +The list of accounts is long so you might have to click btn:[Next] multiple times before finding the account you created. +Alternatively, if you know the name of your token, you can go directly to the page by entering the URL \https://access.redhat.com/terms-based-registry/token/ +. Click the name of the account that you created. +. A token page opens, displaying a generated Username (different to the account name) and a token. +If no Username and token are displayed, click btn:[Regenerate token]. You can also click this to generate a new Username and token. +. Copy the service account name and use it to set `registry_username`. +. Copy the token and use it to set `registry_password`. + diff --git a/downstream/modules/platform/ref-general-inventory-variables.adoc b/downstream/modules/platform/ref-general-inventory-variables.adoc index 0b10521d27..4bef169b50 100644 --- a/downstream/modules/platform/ref-general-inventory-variables.adoc +++ b/downstream/modules/platform/ref-general-inventory-variables.adoc @@ -23,6 +23,8 @@ Used for both `[automationcontroller]` and `[automationhub]` groups. Enter your Red Hat Registry Service Account credentials in `registry_username` and `registry_password` to link to the Red Hat container registry. When `registry_url` is `registry.redhat.io`, username and password are required if not using a bundle installer. + +For more information, see xref:proc-set-registry-username-password[Setting registry_username and registry_password]. | *`registry_url`* | Used for both `[automationcontroller]` and `[automationhub]` groups. Default = `registry.redhat.io`. @@ -33,6 +35,8 @@ User credential for access to `registry_url`. Used for both `[automationcontroller]` and `[automationhub]` groups, but only if the value of `registry_url` is `registry.redhat.io`. Enter your Red Hat Registry Service Account credentials in `registry_username` and `registry_password` to link to the Red Hat container registry. + +For more information, see xref:proc-set-registry-username-password[Setting registry_username and registry_password]. | *`routable_hostname`* | `routable hostname` is used if the machine running the installer can only route to the target host through a specific URL, for example, if you use shortnames in your inventory, but the node running the installer can only resolve that host using FQDN. If `routable_hostname` is not set, it should default to `ansible_host`. If you do not set `ansible_host`, `inventory_hostname` is used as a last resort. From f5cae46f749a8835c00bd93d06e3a7fe070c55c2 Mon Sep 17 00:00:00 2001 From: Jameria Self <73364088+jself-sudoku@users.noreply.github.com> Date: Fri, 30 Aug 2024 09:08:24 -0400 Subject: [PATCH 106/590] AAP-25515 EDA Credential requirements for job launches (#1763) (#1804) * AAP-25515 Add setup process for RH AAP credential (new) * AAP-25515 Add setup process for RH AAP credential (new) * AAP-25515 Added new content for RH AAP credential type * AAP-25515 Added new content for RH AAP credential type * AAP-25515 Added new content for RH AAP credential type * AAP-25515 Added new content for RH AAP credential type * AAP-25515 Added new content for RH AAP credential type * AAP-25515 Added new content for RH AAP credential type * AAP-25515 Added new content for RH AAP credential type * AAP-25515 Added new content for RH AAP credential type * AAP-25515 Added new content for RH AAP credential type * AAP-25515 Update new RH AAP credential setup chapter * AAP-25515 Used italics for example controller URL * AAP-25515 Updated URL variable for 2.5 GA * AAP-25515 Updated automation controller URLs for hybrid and 2.5 releases * AAP-25515 Updates to the RH AAP credentials setup * AAP-25515 Final updates to content * AAP-25515 Updated field names capitalization and bolding in step 6 - peer review --- .../assembly-eda-set-up-rhaap-credential.adoc | 7 +++ .../eda/proc-eda-set-up-rhaap-credential.adoc | 45 +++++++++++++++++++ .../titles/eda/eda-user-guide/master.adoc | 1 + 3 files changed, 53 insertions(+) create mode 100644 downstream/assemblies/eda/assembly-eda-set-up-rhaap-credential.adoc create mode 100644 downstream/modules/eda/proc-eda-set-up-rhaap-credential.adoc diff --git a/downstream/assemblies/eda/assembly-eda-set-up-rhaap-credential.adoc b/downstream/assemblies/eda/assembly-eda-set-up-rhaap-credential.adoc new file mode 100644 index 0000000000..877623cf46 --- /dev/null +++ b/downstream/assemblies/eda/assembly-eda-set-up-rhaap-credential.adoc @@ -0,0 +1,7 @@ +[id="eda-set-up-rhaap-credential-type"] + += {PlatformName} credential + +The {PlatformName} credential type can connect to {ControllerName} through the use of an {ControllerName} URL and a username and password. After you have created this credential type, it can be attached to a rulebook and used to run rulebook activations. + +include::eda/proc-eda-set-up-rhaap-credential.adoc[leveloffset=+1] \ No newline at end of file diff --git a/downstream/modules/eda/proc-eda-set-up-rhaap-credential.adoc b/downstream/modules/eda/proc-eda-set-up-rhaap-credential.adoc new file mode 100644 index 0000000000..b013186f06 --- /dev/null +++ b/downstream/modules/eda/proc-eda-set-up-rhaap-credential.adoc @@ -0,0 +1,45 @@ +[id="eda-set-up-rhaap-credential"] + += Setting up a {PlatformName} credential + +You can create a {PlatformName} credential type to run your rulebook activations. + +.Prerequisites + +* You have created a user. +* You have obtained the URL and the credentials to access {ControllerName}. + + +.Procedure + +. Log in to the {PlatformName} Dashboard. +. From the navigation panel, select {MenuADCredentials}. +. Go to *Create Credentials*. +. Insert the following: ++ +Name:: Insert the name. +Description:: This field is optional. +Organization:: Click the list to select an organization or select *Default*. +Credential type:: Click the list and select *{PlatformName}*. ++ +[NOTE] +==== +When you select the credential type, the *Type Details* section is displayed with fields that are applicable for the credential type you chose. +==== +. In the required {PlatformName} field, enter your automation controller URL. ++ +[NOTE] +==== +For {EDAcontroller} 2.5 with {ControllerName} 2.4, use the following example: https:// + +For {PlatformNameShort} {PlatformVers}, use the following example: https:///api/controller/ +==== +. Enter a valid *Username* and *Password* or *Oauth Token*. +. Click btn:[Create controller token]. + +After saving the credential, the credentials Details page is displayed. From there or the Credentials list view, you can edit or delete it. + +[NOTE] +==== +After you have saved the credential type for your credential, it cannot be changed. +==== \ No newline at end of file diff --git a/downstream/titles/eda/eda-user-guide/master.adoc b/downstream/titles/eda/eda-user-guide/master.adoc index 53f2ca3388..b549f64da4 100644 --- a/downstream/titles/eda/eda-user-guide/master.adoc +++ b/downstream/titles/eda/eda-user-guide/master.adoc @@ -16,6 +16,7 @@ include::eda/assembly-eda-user-guide-overview.adoc[leveloffset=+1] include::eda/assembly-eda-credentials.adoc[leveloffset=+1] include::eda/assembly-eda-projects.adoc[leveloffset=+1] include::eda/assembly-eda-decision-environments.adoc[leveloffset=+1] +include::eda/assembly-eda-set-up-rhaap-credential.adoc[leveloffset=+1] //include::eda/assembly-eda-set-up-token.adoc[leveloffset=+1] include::eda/assembly-eda-rulebook-activations.adoc[leveloffset=+1] include::eda/assembly-eda-rule-audit.adoc[leveloffset=+1] From 10d70947f2590bf8fe6a2e4c0a8efb6c551f305f Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Fri, 30 Aug 2024 17:13:36 -0600 Subject: [PATCH 107/590] am-formatting-1 - Fix the formatting for the Access management and authentication guide (#1805) (#1806) * am-formatting-1 - Fixing issues causing build errors * am-formatting-1 - Fixed remaining errors preventing successful builds * am-formatting-1 - Added peer review fixes --- ...ssembly-gw-config-authentication-type.adoc | 8 +++---- .../assembly-gw-configure-authentication.adoc | 8 ++++--- .../platform/assembly-gw-managing-access.adoc | 2 +- .../assembly-gw-managing-authentication.adoc | 4 +--- .../platform/assembly-gw-mapping.adoc | 11 ++------- .../platform/assembly-gw-resources.adoc | 4 +--- .../platform/assembly-gw-roles.adoc | 4 +--- .../platform/assembly-gw-settings.adoc | 12 ++++------ ...ssembly-gw-token-based-authentication.adoc | 4 +--- .../platform/con-gw-activity-stream.adoc | 2 +- .../con-gw-create-authentication.adoc | 12 +++++----- .../platform/con-gw-dash-components.adoc | 2 +- .../platform/con-gw-dash-features.adoc | 2 +- .../platform/con-gw-managing-access.adoc | 2 +- .../platform/con-gw-overview-access-auth.adoc | 2 +- .../con-gw-pluggable-authentication.adoc | 2 +- downstream/modules/platform/con-gw-roles.adoc | 2 +- ...proc-controller-add-organization-user.adoc | 2 +- .../proc-controller-creating-a-user.adoc | 6 ++--- ...troller-github-organization-settings.adoc} | 2 +- .../platform/proc-controller-set-up-SAML.adoc | 2 +- .../platform/proc-custom-logos-images.adoc | 2 +- .../platform/proc-gw-add-admin-team.adoc | 2 +- .../proc-gw-add-team-organization.adoc | 4 ++-- .../proc-gw-adjust-mapping-order.adoc | 4 ++-- .../proc-gw-configure-auth-details.adoc | 6 ++--- .../platform/proc-gw-create-roles.adoc | 20 +++++----------- .../proc-gw-define-rules-triggers.adoc | 4 ++-- .../platform/proc-gw-delete-organization.adoc | 2 +- .../platform/proc-gw-delete-roles.adoc | 12 ++++------ .../modules/platform/proc-gw-delete-team.adoc | 2 +- .../modules/platform/proc-gw-edit-roles.adoc | 12 ++++------ .../proc-gw-organizations-exec-env.adoc | 2 +- .../platform/proc-gw-remove-roles-team.adoc | 2 +- .../platform/proc-gw-remove-roles-user.adoc | 2 +- .../proc-gw-review-auth-settings.adoc | 2 +- .../modules/platform/proc-gw-roles.adoc | 24 ++++++------------- .../platform/proc-gw-select-auth-type.adoc | 4 ++-- .../proc-gw-team-access-resources.adoc | 2 +- .../platform/proc-gw-team-add-user.adoc | 2 +- .../platform/proc-gw-team-list-view.adoc | 2 +- .../platform/proc-gw-team-remove-user.adoc | 2 +- .../proc-gw-user-access-resources.adoc | 2 +- .../platform/proc-gw-users-list-view.adoc | 2 +- .../proc-settings-platform-gateway.adoc | 3 +-- .../snip-gw-authentication-next-steps.adoc | 1 + ...nip-gw-roles-note-multiple-components.adoc | 2 +- downstream/titles/central-auth/images | 1 + downstream/titles/central-auth/snippets | 1 + 49 files changed, 92 insertions(+), 129 deletions(-) rename downstream/modules/platform/{proc-controller-github-organization-setttings.adoc => proc-controller-github-organization-settings.adoc} (97%) create mode 100644 downstream/snippets/snip-gw-authentication-next-steps.adoc create mode 120000 downstream/titles/central-auth/images create mode 120000 downstream/titles/central-auth/snippets diff --git a/downstream/assemblies/platform/assembly-gw-config-authentication-type.adoc b/downstream/assemblies/platform/assembly-gw-config-authentication-type.adoc index e061cad914..066eaf01ba 100644 --- a/downstream/assemblies/platform/assembly-gw-config-authentication-type.adoc +++ b/downstream/assemblies/platform/assembly-gw-config-authentication-type.adoc @@ -2,12 +2,10 @@ ifdef::context[:parent-context: {context}] :_mod-docs-content-type: ASSEMBLY -[id="gw-config-authentication-type_{context}"] +[id="gw-config-authentication-type"] = Configuring authentication in the {PlatformNameShort} -:context: gw-auth-type - Ansible Automation Platform provides multiple authenticator plugins that you can configure to simplify the login experience for your organization. These are the authenticator plugins that are provided: * xref:gw-local-authentication[Local] * xref:controller-set-up-LDAP[LDAP] @@ -17,9 +15,9 @@ Ansible Automation Platform provides multiple authenticator plugins that you can * xref:controller-set-up-azure[Azure] * xref:proc-controller-google-oauth2-settings[Google OAuth] * xref:controller-set-up-generic-oidc[Generic OIDC] -* xref:gw-config-keycloak-settings[Keycloak] +* xref:gw-keycloak-authentication[Keycloak] * xref:proc-controller-github-settings[GitHub] -* xref:proc-controller-github-organization-setttings[GitHub organization] +* xref:proc-controller-github-organization-settings[GitHub organization] * xref:proc-controller-github-team-settings[GitHub team] * xref:proc-controller-github-enterprise-settings[GitHub enterprise] * xref:proc-controller-github-enterprise-org-settings[GitHub enterprise organization] diff --git a/downstream/assemblies/platform/assembly-gw-configure-authentication.adoc b/downstream/assemblies/platform/assembly-gw-configure-authentication.adoc index 49338e0c94..0891c30e61 100644 --- a/downstream/assemblies/platform/assembly-gw-configure-authentication.adoc +++ b/downstream/assemblies/platform/assembly-gw-configure-authentication.adoc @@ -2,12 +2,10 @@ ifdef::context[:parent-context: {context}] :_mod-docs-content-type: ASSEMBLY -[id="gw-configure-authentication_{context}"] +[id="gw-configure-authentication"] = Configuring authentication in the {PlatformNameShort} -:context: gw-auth-wizard - Using the authentication settings in {PlatformNameShort}, you can set up a simplified login through several authentication methods, such as LDAP and SAML Depending on the authentication method you select, you will be required to enter different information to complete the configuration. Be sure to include all the information required for your configuration needs. @@ -30,8 +28,12 @@ include::platform/proc-gw-define-rules-triggers.adoc[leveloffset=+2] include::platform/proc-gw-adjust-mapping-order.adoc[leveloffset=+2] +include::platform/proc-gw-review-auth-settings.adoc[leveloffset=+2] + include::assembly-gw-config-authentication-type.adoc[leveloffset=+1] +include::assembly-gw-managing-authentication.adoc[leveloffset=+1] + ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/platform/assembly-gw-managing-access.adoc b/downstream/assemblies/platform/assembly-gw-managing-access.adoc index 0ef43e8d07..97525b703b 100644 --- a/downstream/assemblies/platform/assembly-gw-managing-access.adoc +++ b/downstream/assemblies/platform/assembly-gw-managing-access.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: ASSEMBLY -[id="gw-managing-access_{context}"] +[id="gw-managing-access"] = Managing access with role based access control diff --git a/downstream/assemblies/platform/assembly-gw-managing-authentication.adoc b/downstream/assemblies/platform/assembly-gw-managing-authentication.adoc index 347a5731e1..d2ee680bea 100644 --- a/downstream/assemblies/platform/assembly-gw-managing-authentication.adoc +++ b/downstream/assemblies/platform/assembly-gw-managing-authentication.adoc @@ -2,12 +2,10 @@ ifdef::context[:parent-context: {context}] :_mod-docs-content-type: ASSEMBLY -[id="gw-managing-authentication_{context}"] +[id="gw-managing-authentication"] = Managing authentication in {PlatformNameShort} -:context: gw-manage-auth - After you have configured your authentication settings, you can view a list of authenticators, search, sort and view the details for each authenticator configured on the system. include::platform/proc-gw-authentication-list-view.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-gw-mapping.adoc b/downstream/assemblies/platform/assembly-gw-mapping.adoc index 378d62a723..14a868c6b5 100644 --- a/downstream/assemblies/platform/assembly-gw-mapping.adoc +++ b/downstream/assemblies/platform/assembly-gw-mapping.adoc @@ -1,13 +1,9 @@ -ifdef::context[:parent-context: {context}] - :_mod-docs-content-type: ASSEMBLY -[id="gw-mapping_{context}"] +[id="gw-mapping"] = Mapping -:context: gw-mapping - To control which users are allowed into the {PlatformNameShort} server, and placed into {PlatformNameShort} organizations or teams based on their attributes (like username and email address) or what groups they belong to, you can configure authenticator maps. Authenticator maps allow you to add conditions that must be met before a user is given or denied access to a resource type. Authenticator maps are associated with an authenticator and are given an order. The maps are processed in order when the user logs in. These can be thought of like firewall rules or mail filters. @@ -25,7 +21,4 @@ include::platform/ref-controller-team-mapping.adoc[leveloffset=+1] include::platform/proc-gw-role-mapping.adoc[leveloffset=+1] -include::platform/proc-gw-superuser-mapping.adoc[leveloffset=+1] - -ifdef::parent-context[:context: {parent-context}] -ifndef::parent-context[:!context:] +include::platform/proc-gw-superuser-mapping.adoc[leveloffset=+1] \ No newline at end of file diff --git a/downstream/assemblies/platform/assembly-gw-resources.adoc b/downstream/assemblies/platform/assembly-gw-resources.adoc index 030b5d1604..5762e69f02 100644 --- a/downstream/assemblies/platform/assembly-gw-resources.adoc +++ b/downstream/assemblies/platform/assembly-gw-resources.adoc @@ -2,12 +2,10 @@ ifdef::context[:parent-context: {context}] :_mod-docs-content-type: ASSEMBLY -[id="assembly-gw-resources_{context}"] +[id="assembly-gw-resources"] = Resources -:context: access-mgmt-resources - You can manage user access to {PlatformNameShort} resources and what users can do with those resources. Users are granted access through the roles to which they are assigned or through roles inherited through the role hierarchy, for example, through the roles they inherit through team membership. {PlatformNameShort} resources differ depending on the functionality you are configuring. For example, resources can be job templates and projects for automation execution or decision environments and rulebook activations for automation decisions. include::platform/proc-gw-team-access-resources.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-gw-roles.adoc b/downstream/assemblies/platform/assembly-gw-roles.adoc index 87db8d593f..50a859b546 100644 --- a/downstream/assemblies/platform/assembly-gw-roles.adoc +++ b/downstream/assemblies/platform/assembly-gw-roles.adoc @@ -1,11 +1,9 @@ :_mod-docs-content-type: ASSEMBLY -[id="assembly-gw-roles_{context}"] +[id="assembly-gw-roles"] = Roles -:context: gw-roles - Roles are units of organization in the {PlatformName}. When you assign a role to a team or user, you are granting access to use, read, or write credentials. Because of the file structure associated with a role, roles become redistributable units that enable you to share behavior among resources, or with other users. All access that is granted to use, read, or write credentials is handled through roles, and roles are defined for a resource. include::platform/proc-gw-roles.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-gw-settings.adoc b/downstream/assemblies/platform/assembly-gw-settings.adoc index eb67802670..b07f863fe8 100644 --- a/downstream/assemblies/platform/assembly-gw-settings.adoc +++ b/downstream/assemblies/platform/assembly-gw-settings.adoc @@ -1,11 +1,9 @@ :_mod-docs-content-type: ASSEMBLY -[id="assembly-gw-settings_{context}"] +[id="assembly-gw-settings"] = Configuring {PlatformNameShort} -:context: gw-settings - You can configure Ansible Automation platform from the *Settings* menu using the following selections: * *Subscriptions* @@ -18,7 +16,7 @@ You can configure Ansible Automation platform from the *Settings* menu using the The other selections available from the *Settings* menu are specific to automation execution. For more information, refer to the link:https://{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/controller-config[TitleControllerAdminGuide] guide. ==== -include::/platform/proc-controller-configure-subscriptions.adoc[leveloffset=+1] -include::/platform/proc-settings-platform-gateway.adoc[leveloffset=+1] -include::/platform/proc-settings-user-preferences.adoc[leveloffset=+1] -include::/platform/proc-settings-troubleshooting.adoc[leveloffset=+1] +include::platform/proc-controller-configure-subscriptions.adoc[leveloffset=+1] +include::platform/proc-settings-platform-gateway.adoc[leveloffset=+1] +include::platform/proc-settings-user-preferences.adoc[leveloffset=+1] +include::platform/proc-settings-troubleshooting.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-gw-token-based-authentication.adoc b/downstream/assemblies/platform/assembly-gw-token-based-authentication.adoc index 6929c65bab..2369df04b1 100644 --- a/downstream/assemblies/platform/assembly-gw-token-based-authentication.adoc +++ b/downstream/assemblies/platform/assembly-gw-token-based-authentication.adoc @@ -2,12 +2,10 @@ ifdef::context[:parent-context: {context}] :_mod-docs-content-type: ASSEMBLY -[id="gw-token-based-authentication_{context}"] +[id="gw-token-based-authentication"] = Configuring token-based authentication -:context: gw-token-auth - [TBD] The content for this is in progress in separate link:https://docs.google.com/document/d/1GLk5zcD-8hZxU61Ik8wASDofkX7iQo5IJvkCOv5gRMw/edit?usp=sharing[Applications] and link:https://docs.google.com/document/d/1w9KjK8CybZ3w0u0DGNf0rNDC72vomwbdt5rZkUZCaBk/edit#bookmark=id.1rtgxk9mwxi0[Token-based authentication] drafts. Once converted/updated in AsciiDoc and in the repo, update this section to include those modules. diff --git a/downstream/modules/platform/con-gw-activity-stream.adoc b/downstream/modules/platform/con-gw-activity-stream.adoc index b3ee507c1d..f86dd8455b 100644 --- a/downstream/modules/platform/con-gw-activity-stream.adoc +++ b/downstream/modules/platform/con-gw-activity-stream.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: CONCEPT -[id="con-gw-activity-stream_{context}"] +[id="con-gw-activity-stream"] = Activity stream The platform gateway includes an activity stream that captures changes to gateway resources, such as the creation or modification of organizations, users, and service clusters, among others. For each change, the activity stream collects information about the time of the change, the user that initiated the change, the action performed, and the actual changes made to the object, when possible. The information gathered varies depending on the type of change. diff --git a/downstream/modules/platform/con-gw-create-authentication.adoc b/downstream/modules/platform/con-gw-create-authentication.adoc index 9841cda25e..da112eeefd 100644 --- a/downstream/modules/platform/con-gw-create-authentication.adoc +++ b/downstream/modules/platform/con-gw-create-authentication.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: CONCEPT -[id="gw-create-authentication_{context}"] +[id="gw-create-authentication"] = Creating an authentication method @@ -8,14 +8,14 @@ The *Create Authentication* wizard guides you through the steps to create a new There are 5 procedures involved in creating an authenticator, including: -. xref:gw-select-auth-type_gw-auth-wizard[Authentication type], where you will select the type of authenticator plugin you want to configure. -. xref:gw-configure-auth-details_gw-auth-wizard[Authentication details], where you will configure the authentication details for the plugin you selected. -. xref:gw-define-rules-triggers_gw-auth-wizard[Mapping], where you will define mapping rule types and triggers to control access to the system. -. xref:gw-adjust-mapping-order_gw-auth-wizard[Mapping order], where you can define the mapping precedence. +. xref:gw-select-auth-type[Authentication type], where you will select the type of authenticator plugin you want to configure. +. xref:gw-configure-auth-details[Authentication details], where you will configure the authentication details for the plugin you selected. +. xref:gw-define-rules-triggers[Mapping], where you will define mapping rule types and triggers to control access to the system. +. xref:gw-adjust-mapping-order[Mapping order], where you can define the mapping precedence. + [NOTE] ==== Mapping order is only available if there are one or more authenticator maps defined. ==== + -. xref:gw-review-auth-settings_gw-auth-wizard[Review], where you can review and confirm the authentication settings before creating the authentication method. \ No newline at end of file +. xref:gw-review-auth-settings[Review], where you can review and confirm the authentication settings before creating the authentication method. \ No newline at end of file diff --git a/downstream/modules/platform/con-gw-dash-components.adoc b/downstream/modules/platform/con-gw-dash-components.adoc index 61de396183..ce6aeb5b5a 100644 --- a/downstream/modules/platform/con-gw-dash-components.adoc +++ b/downstream/modules/platform/con-gw-dash-components.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: CONCEPT -[id="gw-dash-components_{context}"] +[id="gw-dash-components"] = {PlatformNameShort} dashboard components diff --git a/downstream/modules/platform/con-gw-dash-features.adoc b/downstream/modules/platform/con-gw-dash-features.adoc index 734f9520c2..565f17337a 100644 --- a/downstream/modules/platform/con-gw-dash-features.adoc +++ b/downstream/modules/platform/con-gw-dash-features.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: CONCEPT -[id="con-gw-dash-features_{context}"] +[id="con-gw-dash-features"] = {PlatformNameShort} dashboard features diff --git a/downstream/modules/platform/con-gw-managing-access.adoc b/downstream/modules/platform/con-gw-managing-access.adoc index dc4ef85856..91c2473867 100644 --- a/downstream/modules/platform/con-gw-managing-access.adoc +++ b/downstream/modules/platform/con-gw-managing-access.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: CONCEPT -[id="gw-managing-access_{context}"] +[id="gw-managing-access"] = Managing access with role based access control diff --git a/downstream/modules/platform/con-gw-overview-access-auth.adoc b/downstream/modules/platform/con-gw-overview-access-auth.adoc index 2a168e0e1e..1b3a52d5cd 100644 --- a/downstream/modules/platform/con-gw-overview-access-auth.adoc +++ b/downstream/modules/platform/con-gw-overview-access-auth.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: CONCEPT -[id="gw-overview-access-auth_{context}"] +[id="gw-overview-access-auth"] = Overview of access management and authentication diff --git a/downstream/modules/platform/con-gw-pluggable-authentication.adoc b/downstream/modules/platform/con-gw-pluggable-authentication.adoc index 1b056c7dd5..79ee157e3c 100644 --- a/downstream/modules/platform/con-gw-pluggable-authentication.adoc +++ b/downstream/modules/platform/con-gw-pluggable-authentication.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: CONCEPT -[id="gw-pluggable-authentication_{context}"] +[id="gw-pluggable-authentication"] = Pluggable authentication diff --git a/downstream/modules/platform/con-gw-roles.adoc b/downstream/modules/platform/con-gw-roles.adoc index 9a1b5c913d..83ec9df0c2 100644 --- a/downstream/modules/platform/con-gw-roles.adoc +++ b/downstream/modules/platform/con-gw-roles.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: CONCEPT -[id="con-gw-roles_{context}"] +[id="con-gw-roles"] = Roles diff --git a/downstream/modules/platform/proc-controller-add-organization-user.adoc b/downstream/modules/platform/proc-controller-add-organization-user.adoc index 704175a2c0..d074b92dd2 100644 --- a/downstream/modules/platform/proc-controller-add-organization-user.adoc +++ b/downstream/modules/platform/proc-controller-add-organization-user.adoc @@ -3,7 +3,7 @@ = Adding a user to an organization You can provide a user with access to an organization by adding them to the organization and managing the roles associated with the user. To add a user to an organization, the user must already exist. For more information, see xref:proc-controller-creating-a-user[Creating a user]. -To add roles for a user, the role must already exist. See xref:proc-gw-roles_auto-eec[Automation execution roles] and xref:proc-gw-roles_auto-dec[Automation decision] roles for more information about creating new roles. +To add roles for a user, the role must already exist. See xref:proc-gw-create-roles[Creating a role] for more information. .Procedure . From the navigation panel, select {MenuAMOrganizations}. diff --git a/downstream/modules/platform/proc-controller-creating-a-user.adoc b/downstream/modules/platform/proc-controller-creating-a-user.adoc index 432b3e1e74..cc9dbf5753 100644 --- a/downstream/modules/platform/proc-controller-creating-a-user.adoc +++ b/downstream/modules/platform/proc-controller-creating-a-user.adoc @@ -4,9 +4,9 @@ = Creating a user -You can assign two types of users: +There are three types of users in {PlatformNameShort}: -Normal user:: Normal users have read and write access limited to the resources (such as inventory, projects, and job templates) for which that user has been granted the appropriate roles and privileges. +Normal user:: Normal users have read and write access limited to the resources (such as inventory, projects, and job templates) for which that user has been granted the appropriate roles and privileges. Normal users are the default type of user. {PlatformNameShort} Administrator:: An administrator (also known as a Superuser) has full system administration privileges — with full read and write privileges over the entire installation. An administrator is typically responsible for managing all aspects of and delegating responsibilities for day-to-day work to various users. {PlatformNameShort} Auditor:: Auditors have read-only capability for all objects within the environment. @@ -31,4 +31,4 @@ If the user is not newly-created, the details screen displays the last login act ==== If you log in as yourself, and view the details of your user profile, you can manage tokens from your user profile by selecting the *Tokens* tab. -For more information, see xref:proc-controller-apps-create-tokens[Adding a token]. +// [ddacosta - Removing until OAuth and Applications content is completed.] For more information, see xref:proc-controller-apps-create-tokens[Adding a token]. diff --git a/downstream/modules/platform/proc-controller-github-organization-setttings.adoc b/downstream/modules/platform/proc-controller-github-organization-settings.adoc similarity index 97% rename from downstream/modules/platform/proc-controller-github-organization-setttings.adoc rename to downstream/modules/platform/proc-controller-github-organization-settings.adoc index 366dbe725f..9e6d7cf5a6 100644 --- a/downstream/modules/platform/proc-controller-github-organization-setttings.adoc +++ b/downstream/modules/platform/proc-controller-github-organization-settings.adoc @@ -1,4 +1,4 @@ -[id="proc-controller-github-organization-setttings"] +[id="proc-controller-github-organization-settings"] = Configuring GitHub organization authentication diff --git a/downstream/modules/platform/proc-controller-set-up-SAML.adoc b/downstream/modules/platform/proc-controller-set-up-SAML.adoc index 4d0be69921..210ce24a1f 100644 --- a/downstream/modules/platform/proc-controller-set-up-SAML.adoc +++ b/downstream/modules/platform/proc-controller-set-up-SAML.adoc @@ -65,7 +65,7 @@ For more information and additional options, see link:https://github.com/SAML-To + . Optional: In the *SAML IDP to extra_data attribute mapping* field, enter values to map IDP attributes to extra_data attributes. For more information, see link:https://python-social-auth.readthedocs.io/en/latest/backends/saml.html#advanced-settings[advanced SAML settings]. + -include::snippets/snip-gw-authentication-common-checkboxes.adoc.[] +include::snippets/snip-gw-authentication-common-checkboxes.adoc[] + . Click btn:[Next]. diff --git a/downstream/modules/platform/proc-custom-logos-images.adoc b/downstream/modules/platform/proc-custom-logos-images.adoc index 26d48d5f44..d956b09558 100644 --- a/downstream/modules/platform/proc-custom-logos-images.adoc +++ b/downstream/modules/platform/proc-custom-logos-images.adoc @@ -1,6 +1,6 @@ [id="proc-custom-logos-images"] -//To be added to Donna's AAP/UI document for 2.5 +//[ddacosta]Obsolete, this information is provided in the proc-settings-platform-gateway.adoc module now. = Setting a custom logo diff --git a/downstream/modules/platform/proc-gw-add-admin-team.adoc b/downstream/modules/platform/proc-gw-add-admin-team.adoc index ff4b5d3d55..3388b657de 100644 --- a/downstream/modules/platform/proc-gw-add-admin-team.adoc +++ b/downstream/modules/platform/proc-gw-add-admin-team.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-add-admin-team_{context}"] +[id="proc-gw-add-admin-team"] = Adding administrators to a team diff --git a/downstream/modules/platform/proc-gw-add-team-organization.adoc b/downstream/modules/platform/proc-gw-add-team-organization.adoc index 2d2d5288c5..26d67def77 100644 --- a/downstream/modules/platform/proc-gw-add-team-organization.adoc +++ b/downstream/modules/platform/proc-gw-add-team-organization.adoc @@ -1,11 +1,11 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-add-team-organization_{context}"] +[id="proc-gw-add-team-organization"] = Adding a team to an organization You can provide team access to an organization by adding roles to the team. To add roles to a team, the team must already exist in the organization. For more information, see xref:proc-controller-creating-a-team[Creating a team]. -To add roles for a team, the role must already exist. See xref:proc-gw-roles_auto-exec[Automation execution roles] and xref:proc-gw-roles_auto-dec[Automation decision roles] for more information about creating new roles. +To add roles for a team, the role must already exist. See xref:proc-gw-create-roles[Creating a role] for more information. .Procedure diff --git a/downstream/modules/platform/proc-gw-adjust-mapping-order.adoc b/downstream/modules/platform/proc-gw-adjust-mapping-order.adoc index 3095c5a62f..04b71ded59 100644 --- a/downstream/modules/platform/proc-gw-adjust-mapping-order.adoc +++ b/downstream/modules/platform/proc-gw-adjust-mapping-order.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="gw-adjust-mapping-order_{context}"] +[id="gw-adjust-mapping-order"] = Adjusting the Mapping order @@ -19,4 +19,4 @@ And, if the second map is of type `is_superuser` and the trigger is based on the The mapping precedence is determined by the order in which the mappings are listed. ==== + -. After your authenticator maps are in the correct order, click btn:[Next] to xref:gw-review-auth-settings_gw-auth-wizard[Review the authentication settings]. +. After your authenticator maps are in the correct order, click btn:[Next] to xref:gw-review-auth-settings[Review the authentication settings]. diff --git a/downstream/modules/platform/proc-gw-configure-auth-details.adoc b/downstream/modules/platform/proc-gw-configure-auth-details.adoc index e4bb9118f5..e1700feceb 100644 --- a/downstream/modules/platform/proc-gw-configure-auth-details.adoc +++ b/downstream/modules/platform/proc-gw-configure-auth-details.adoc @@ -1,10 +1,10 @@ :_mod-docs-content-type: PROCEDURE -[id="gw-configure-auth-details_{context}"] +[id="gw-configure-auth-details"] = Configuring authentication details -Different authenticator plugins require different types of information. See the respective sections in xref:gw-config-authentication-type_gw-auth-type[Configuring an authentication type] for the required details. +Different authenticator plugins require different types of information. See the respective sections in xref:gw-config-authentication-type[Configuring an authentication type] for the required details. For all authentication types you can enter a *Name*, *Additional Authenticator Fields* and *Create Objects*. @@ -37,4 +37,4 @@ If *Remove Users* is enabled, the `is_superuser` permission will be removed from + If *Remove Users* is disabled, the `is_superuser` permission will not be removed from the user, the authenticator maps will not have an opinion as to whether it should be there or not so after login the user will have the `is_superuser` permission. + -. Click btn:[Next] to xref:gw-define-rules-triggers_gw-auth-wizard[Define authenticator mappings]. +. Click btn:[Next] to xref:gw-define-rules-triggers[Define authenticator mappings]. diff --git a/downstream/modules/platform/proc-gw-create-roles.adoc b/downstream/modules/platform/proc-gw-create-roles.adoc index a707a65d3f..a649d80a36 100644 --- a/downstream/modules/platform/proc-gw-create-roles.adoc +++ b/downstream/modules/platform/proc-gw-create-roles.adoc @@ -1,26 +1,18 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-create-roles_{context}"] +[id="proc-gw-create-roles"] = Creating a role -ifdef::auto-exec[] -{ControllerNameStart} provides a set of predefined roles with permissions sufficient for standard automation execution tasks. It is also possible to configure custom roles, and assign one or more permission filters to them. Permission filters define the actions allowed for a specific resource type. -endif::auto-exec[] - -ifdef::auto-dec[] -{EDAName} provides a set of predefined roles with permissions sufficient for standard automation decision tasks. It is also possible to configure custom roles, and assign one or more permission filters to them. Permission filters define the actions allowed for a specific resource type. -endif::auto-dec[] +{PlatformNameShort} services provide a set of predefined roles with permissions sufficient for standard automation tasks. It is also possible to configure custom roles, and assign one or more permission filters to them. Permission filters define the actions allowed for a specific resource type. .Procedure . From the navigation panel, select {MenuAMRoles}. -ifdef::auto-exec[] -. Select the *Automation Execution* tab. -endif::auto-exec[] -ifdef::auto-dec[] -. Select the *Automation Decisions* tab. -endif::auto-dec[] +. Select a tab for the component resource for which you want to create custom roles. ++ +include::snippets/snip-gw-roles-note-multiple-components.adoc[] ++ . Click btn:[Create role]. . Provide a *Name* and optionally include a *Description* for the role. . Select a *Content type*. diff --git a/downstream/modules/platform/proc-gw-define-rules-triggers.adoc b/downstream/modules/platform/proc-gw-define-rules-triggers.adoc index b0a35e87df..a956f9ee94 100644 --- a/downstream/modules/platform/proc-gw-define-rules-triggers.adoc +++ b/downstream/modules/platform/proc-gw-define-rules-triggers.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="gw-define-rules-triggers_{context}"] +[id="gw-define-rules-triggers"] = Defining authentication mapping rules and triggers @@ -32,7 +32,7 @@ Attribute:: The trigger should fire based on a user having some combination of a . Enter a unique rule *Name* to identify the rule. . Select a *Trigger* from the list. See Triggers for more details. . Repeat steps 1-3 to add additional triggers to the authenticator. -. Click btn:[Next] to optionally xref:gw-adjust-mapping-order_gw-auth-wizard[Adjust the Mapping order]. +. Click btn:[Next] to optionally xref:gw-adjust-mapping-order[Adjust the Mapping order]. + [NOTE] ==== diff --git a/downstream/modules/platform/proc-gw-delete-organization.adoc b/downstream/modules/platform/proc-gw-delete-organization.adoc index aa662fa399..edc72d97cb 100644 --- a/downstream/modules/platform/proc-gw-delete-organization.adoc +++ b/downstream/modules/platform/proc-gw-delete-organization.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-delete-organization_{context}"] +[id="proc-gw-delete-organization"] = Deleting an organization diff --git a/downstream/modules/platform/proc-gw-delete-roles.adoc b/downstream/modules/platform/proc-gw-delete-roles.adoc index 6f93179489..04bc87384b 100644 --- a/downstream/modules/platform/proc-gw-delete-roles.adoc +++ b/downstream/modules/platform/proc-gw-delete-roles.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-delete-roles_{context}"] +[id="proc-gw-delete-roles"] = Deleting a role @@ -9,11 +9,9 @@ Built in roles can not be deleted, however, you can delete custom roles from the .Procedure . From the navigation panel, select {MenuAMRoles}. -ifdef::auto-exec[] -. Select the *Automation Execution* tab. -endif::auto-exec[] -ifdef::auto-dec[] -. Select the *Automation Decisions* tab. -endif::auto-dec[] +. Select a tab for the component resource for which you want to create custom roles. ++ +include::snippets/snip-gw-roles-note-multiple-components.adoc[] ++ . Click the *More Actions* icon *{MoreActionsIcon}* next to the role you want and select *Delete role*. . To delete roles in bulk, select the roles you want to delete from the *Roles* list view, click the *More Actions* icon *{MoreActionsIcon}*, and select *Delete selected roles*. diff --git a/downstream/modules/platform/proc-gw-delete-team.adoc b/downstream/modules/platform/proc-gw-delete-team.adoc index b50cf37170..a2d5b166ff 100644 --- a/downstream/modules/platform/proc-gw-delete-team.adoc +++ b/downstream/modules/platform/proc-gw-delete-team.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-delete-team_{context}"] +[id="proc-gw-delete-team"] = Deleting a team diff --git a/downstream/modules/platform/proc-gw-edit-roles.adoc b/downstream/modules/platform/proc-gw-edit-roles.adoc index 143af0b8d9..70af578258 100644 --- a/downstream/modules/platform/proc-gw-edit-roles.adoc +++ b/downstream/modules/platform/proc-gw-edit-roles.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-edit-roles_{context}"] +[id="proc-gw-edit-roles"] = Editing a role @@ -9,11 +9,9 @@ Built in roles can not be changed, however, you can modify custom roles from the .Procedure . From the navigation panel, select {MenuAMRoles}. -ifdef::auto-exec[] -. Select the *Automation Execution* tab. -endif::auto-exec[] -ifdef::auto-dec[] -. Select the *Automation Decisions* tab. -endif::auto-dec[] +. Select a tab for the component resource for which you want to create custom roles. ++ +include::snippets/snip-gw-roles-note-multiple-components.adoc[] ++ . Click the *Edit role* icon image:leftpencil.png[Edit,15,15] next to the role you want and modify the role settings as needed. . Click btn:[Save role] to save your changes. diff --git a/downstream/modules/platform/proc-gw-organizations-exec-env.adoc b/downstream/modules/platform/proc-gw-organizations-exec-env.adoc index 8d31fca0e3..c0019e1f33 100644 --- a/downstream/modules/platform/proc-gw-organizations-exec-env.adoc +++ b/downstream/modules/platform/proc-gw-organizations-exec-env.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-organizations-exec-env_{context}"] +[id="proc-gw-organizations-exec-env"] = Working with {ExecEnvShort}s diff --git a/downstream/modules/platform/proc-gw-remove-roles-team.adoc b/downstream/modules/platform/proc-gw-remove-roles-team.adoc index fdbf987dad..3eae34284e 100644 --- a/downstream/modules/platform/proc-gw-remove-roles-team.adoc +++ b/downstream/modules/platform/proc-gw-remove-roles-team.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-remove-roles-team_{context}"] +[id="proc-gw-remove-roles-team"] = Removing roles from a team diff --git a/downstream/modules/platform/proc-gw-remove-roles-user.adoc b/downstream/modules/platform/proc-gw-remove-roles-user.adoc index b06465ae9a..669653bc5d 100644 --- a/downstream/modules/platform/proc-gw-remove-roles-user.adoc +++ b/downstream/modules/platform/proc-gw-remove-roles-user.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-remove-roles-user_{context}"] +[id="proc-gw-remove-roles-user"] = Removing roles from a user You can remove roles from a user by selecting the *-* icon next to the resource. This launches a confirmation dialog, asking you to confirm the removal. diff --git a/downstream/modules/platform/proc-gw-review-auth-settings.adoc b/downstream/modules/platform/proc-gw-review-auth-settings.adoc index c02a6d468c..b6118d2430 100644 --- a/downstream/modules/platform/proc-gw-review-auth-settings.adoc +++ b/downstream/modules/platform/proc-gw-review-auth-settings.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="gw-review-auth-settings_{context}"] +[id="gw-review-auth-settings"] = Reviewing the authentication settings diff --git a/downstream/modules/platform/proc-gw-roles.adoc b/downstream/modules/platform/proc-gw-roles.adoc index 4b132d051e..3183abc0fd 100644 --- a/downstream/modules/platform/proc-gw-roles.adoc +++ b/downstream/modules/platform/proc-gw-roles.adoc @@ -1,27 +1,17 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-roles_{context}"] +[id="proc-gw-roles"] -ifdef::auto-exec[] -= Automation execution roles += Displaying roles -You can display the set of roles assigned for automation execution resources by using *Access Management*. From here, you can also sort or search the roles list, and create, edit, or delete automation execution roles. -endif::auto-exec[] - -ifdef::auto-dec[] -= Automation decision roles - -You can display the set of roles assigned for automation decision resources by using *Access Management*. From here, you can also sort or search the roles list, and create, edit, or delete automation decision roles. -endif::auto-dec[] +You can display the roles assigned for component resources from the menu:Access Management[] menu. .Procedure . From the navigation panel, select {MenuAMRoles}. -ifdef::auto-exec[] -. Select the *Automation Execution* tab. -endif::auto-exec[] -ifdef::auto-dec[] -. Select the *Automation Decisions* tab. -endif::auto-dec[] +. Select a tab for the component resource for which you want to create custom roles. ++ +include::snippets/snip-gw-roles-note-multiple-components.adoc[] ++ . From the table header, you can sort the list of roles by using the arrows for *Role*, *Description*, *Created* and *Editable* or by making sort selections in the *Sort* list. . You can filter the list of roles by selecting *Name* or *Editable* from the filter list and clicking the arrow. diff --git a/downstream/modules/platform/proc-gw-select-auth-type.adoc b/downstream/modules/platform/proc-gw-select-auth-type.adoc index a78b4630bc..ce88d59776 100644 --- a/downstream/modules/platform/proc-gw-select-auth-type.adoc +++ b/downstream/modules/platform/proc-gw-select-auth-type.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="gw-select-auth-type_{context}"] +[id="gw-select-auth-type"] = Selecting an authentication type @@ -13,6 +13,6 @@ On the first screen of the wizard you can select the type of authenticator plugi + The *Create Authentication* wizard is displayed, where you can follow the prompts to configure your preferred authentication method. + -. Select the authenticator type from the *Authentication type* list. See xref:gw-config-authentication-type_gw-auth-type[Configuring an authentication type] for the complete list of authentication plugins available. +. Select the authenticator type from the *Authentication type* list. See xref:gw-config-authentication-type[Configuring an authentication type] for the complete list of authentication plugins available. + . Click btn:[Next] to xref:gw-configure-auth-details[Configure authentication details]. diff --git a/downstream/modules/platform/proc-gw-team-access-resources.adoc b/downstream/modules/platform/proc-gw-team-access-resources.adoc index e3a0b82491..78223f899a 100644 --- a/downstream/modules/platform/proc-gw-team-access-resources.adoc +++ b/downstream/modules/platform/proc-gw-team-access-resources.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-team-access_{context}"] +[id="proc-gw-team-access"] = Providing team access to a resource You can grant users access based on their team membership. When you add a user as a member of a team, they inherit access to the roles and resources defined for that team. diff --git a/downstream/modules/platform/proc-gw-team-add-user.adoc b/downstream/modules/platform/proc-gw-team-add-user.adoc index af6085247e..9499969468 100644 --- a/downstream/modules/platform/proc-gw-team-add-user.adoc +++ b/downstream/modules/platform/proc-gw-team-add-user.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-team-add-user_{context}"] +[id="proc-gw-team-add-user"] = Adding users to a team To add a user to a team, the user must already have been created. For more information, see (TBD - Create a user). Adding a user to a team adds them as a member only. Use the *Roles* tab to assign a role for the user on different resources to the selected team. diff --git a/downstream/modules/platform/proc-gw-team-list-view.adoc b/downstream/modules/platform/proc-gw-team-list-view.adoc index 936177fa93..cf5240ead1 100644 --- a/downstream/modules/platform/proc-gw-team-list-view.adoc +++ b/downstream/modules/platform/proc-gw-team-list-view.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-users-list-view_{context}"] +[id="proc-gw-team-list-view"] = Teams list view diff --git a/downstream/modules/platform/proc-gw-team-remove-user.adoc b/downstream/modules/platform/proc-gw-team-remove-user.adoc index 629f9735b3..d1fac0ef92 100644 --- a/downstream/modules/platform/proc-gw-team-remove-user.adoc +++ b/downstream/modules/platform/proc-gw-team-remove-user.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-team-remove-user_{context}"] +[id="proc-gw-team-remove-user"] = Removing users from a team diff --git a/downstream/modules/platform/proc-gw-user-access-resources.adoc b/downstream/modules/platform/proc-gw-user-access-resources.adoc index 41df2bb3dc..6c071a9291 100644 --- a/downstream/modules/platform/proc-gw-user-access-resources.adoc +++ b/downstream/modules/platform/proc-gw-user-access-resources.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-user-access-resources_{context}"] +[id="proc-gw-user-access-resources"] = Providing user access to a resource diff --git a/downstream/modules/platform/proc-gw-users-list-view.adoc b/downstream/modules/platform/proc-gw-users-list-view.adoc index 96d2c935d9..3384b7bac3 100644 --- a/downstream/modules/platform/proc-gw-users-list-view.adoc +++ b/downstream/modules/platform/proc-gw-users-list-view.adoc @@ -1,6 +1,6 @@ :_mod-docs-content-type: PROCEDURE -[id="proc-gw-users-list-view_{context}"] +[id="proc-gw-users-list-view"] = Users list view diff --git a/downstream/modules/platform/proc-settings-platform-gateway.adoc b/downstream/modules/platform/proc-settings-platform-gateway.adoc index 9a048a9b9f..ab10dfd510 100644 --- a/downstream/modules/platform/proc-settings-platform-gateway.adoc +++ b/downstream/modules/platform/proc-settings-platform-gateway.adoc @@ -73,8 +73,7 @@ You can configure the following Custom login options: * *Custom login info*: Provide specific information (such as a legal notice or a disclaimer) to a text box in the login modal. * *Custom logo* : Provide an image file for setting up a custom logo (must be a data URL with a base64-encoded GIF, PNG, or JPEG image). -For more information, see xref:proc-custom-logos-images[Setting a custom logo]. - + You can configure the following additional settings: * *JWT expiration buffer in seconds*: The number of seconds before a JWT token's expiration to revoke from the cache. diff --git a/downstream/snippets/snip-gw-authentication-next-steps.adoc b/downstream/snippets/snip-gw-authentication-next-steps.adoc new file mode 100644 index 0000000000..6805d9bf16 --- /dev/null +++ b/downstream/snippets/snip-gw-authentication-next-steps.adoc @@ -0,0 +1 @@ +To control which users are allowed into the {PlatformNameShort} server, and placed into {PlatformNameShort} organizations or teams based on their attributes (like username and email address) or to what groups they belong, continue to link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/access_management_and_authentication/index#gw-mapping[Mapping]. \ No newline at end of file diff --git a/downstream/snippets/snip-gw-roles-note-multiple-components.adoc b/downstream/snippets/snip-gw-roles-note-multiple-components.adoc index 27f5aefcd2..3c0a4d110b 100644 --- a/downstream/snippets/snip-gw-roles-note-multiple-components.adoc +++ b/downstream/snippets/snip-gw-roles-note-multiple-components.adoc @@ -1,4 +1,4 @@ [NOTE] ==== -If you have multiple {PlatformNameShort} components installed, you will see selections for the roles associated with each component in the *Roles* menu bar. For example, Automation Execution for {ControllerName} roles and Automation Decisions for {EDAName} roles. +If you have multiple {PlatformNameShort} components installed, you will see selections for the roles associated with each component in the *Roles* menu bar. For example, Automation Execution for {ControllerName} roles, Automation Content for {HubName} and Automation Decisions for {EDAName} roles. ==== \ No newline at end of file diff --git a/downstream/titles/central-auth/images b/downstream/titles/central-auth/images new file mode 120000 index 0000000000..5fa6987088 --- /dev/null +++ b/downstream/titles/central-auth/images @@ -0,0 +1 @@ +../../images \ No newline at end of file diff --git a/downstream/titles/central-auth/snippets b/downstream/titles/central-auth/snippets new file mode 120000 index 0000000000..7bf6da9a51 --- /dev/null +++ b/downstream/titles/central-auth/snippets @@ -0,0 +1 @@ +../../snippets \ No newline at end of file From f2c455238410d664af74f113beed7dc0220a1d9d Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Mon, 2 Sep 2024 14:03:38 +0100 Subject: [PATCH 108/590] fixing note adminotions (#1809) (#1811) --- .../platform/assembly-configure-aap-operator.adoc | 5 ++++- downstream/modules/platform/con-ocp-supported-install.adoc | 7 +++++-- .../modules/platform/proc-configure-ldap-hub-ocp.adoc | 3 --- .../platform/proc-operator-deploy-central-config.adoc | 5 ++++- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/downstream/assemblies/platform/assembly-configure-aap-operator.adoc b/downstream/assemblies/platform/assembly-configure-aap-operator.adoc index 65f0236367..05ec963149 100644 --- a/downstream/assemblies/platform/assembly-configure-aap-operator.adoc +++ b/downstream/assemblies/platform/assembly-configure-aap-operator.adoc @@ -16,7 +16,10 @@ The platform gateway for {PlatformNameShort} enables you to manage the following Before you can deploy the platform gateway you must have {OperatorPlatform} installed in a namespace. If you have not installed {OperatorPlatform} see <>. -NOTE: Platform gateway is only available under {OperatorPlatform} version 2.5. Every component deployed under {OperatorPlatform} 2.5 will also default to version 2.5. +[NOTE] +==== +Platform gateway is only available under {OperatorPlatform} version 2.5. Every component deployed under {OperatorPlatform} 2.5 will also default to version 2.5. +==== If you have the {OperatorPlatform} and some or all of the {PlatformNameShort} components installed see <> for how to proceed. diff --git a/downstream/modules/platform/con-ocp-supported-install.adoc b/downstream/modules/platform/con-ocp-supported-install.adoc index c5bfe1d0ab..3ede6e6dba 100644 --- a/downstream/modules/platform/con-ocp-supported-install.adoc +++ b/downstream/modules/platform/con-ocp-supported-install.adoc @@ -32,5 +32,8 @@ If existing components have already been deployed, you must specify these compon * Same with {ControllerName} and {EDAName} |=== -// Commenting out as upgrade is not included in EA [gmurray] -// NOTE: The stand-alone EDA user interface will not work upon upgrade. After you configure {PlatformNameShort}, other stand-alone user interfaces will not work. +//Commenting out as upgrade is not included in EA [gmurray] +//[NOTE] +//==== +//The stand-alone EDA user interface will not work upon upgrade. After you configure {PlatformNameShort}, other stand-alone user interfaces will not work. +//==== diff --git a/downstream/modules/platform/proc-configure-ldap-hub-ocp.adoc b/downstream/modules/platform/proc-configure-ldap-hub-ocp.adoc index 4d44ab753d..80aa683bf5 100644 --- a/downstream/modules/platform/proc-configure-ldap-hub-ocp.adoc +++ b/downstream/modules/platform/proc-configure-ldap-hub-ocp.adoc @@ -34,10 +34,7 @@ spec: ---- [NOTE] - ==== - Do not leave any fields empty. For fields with no variable, enter ```` to indicate a default value. - ==== diff --git a/downstream/modules/platform/proc-operator-deploy-central-config.adoc b/downstream/modules/platform/proc-operator-deploy-central-config.adoc index 7815ccbd46..063d8c00cb 100644 --- a/downstream/modules/platform/proc-operator-deploy-central-config.adoc +++ b/downstream/modules/platform/proc-operator-deploy-central-config.adoc @@ -50,7 +50,10 @@ The following procedure simulates a scenario where you have {ControllerName} as . Click btn:[Create]. . To access your new instance, see <>. -NOTE: If you have an existing controller with a managed Postgres pod, after creating the *{PlatformNameShort}* resource your {ControllerName} instance will continue to use that original Postgres pod. If you were to do a fresh install you would have a single Postgres managed pod for all instances. +[NOTE] +==== +If you have an existing controller with a managed Postgres pod, after creating the *{PlatformNameShort}* resource your {ControllerName} instance will continue to use that original Postgres pod. If you were to do a fresh install you would have a single Postgres managed pod for all instances. +==== From 9e1f32de64b444053ffed41ccb36ed99ad2b1d19 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Tue, 3 Sep 2024 09:08:09 +0100 Subject: [PATCH 109/590] Update node procedure (#1813) (#1814) hackfest doc updates for mesh -- node types https://issues.redhat.com/browse/AAP-27007 --- downstream/modules/platform/proc-define-mesh-node-types.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/downstream/modules/platform/proc-define-mesh-node-types.adoc b/downstream/modules/platform/proc-define-mesh-node-types.adoc index d0df21e3ff..8effd3b55c 100644 --- a/downstream/modules/platform/proc-define-mesh-node-types.adoc +++ b/downstream/modules/platform/proc-define-mesh-node-types.adoc @@ -112,7 +112,7 @@ all: remote-execution: ansible_host: 10.0.0.6 ansible_user: # user provided - ansible_ssh_private_key_file: ~/.ssh/ + ansible_ssh_private_key_file: ~/.ssh/ ---- * Ensure `ansible_host` is set to the IP address or DNS of the node. From e59439b86f64cc96357d71b1aab2db051cda48ab Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Tue, 3 Sep 2024 14:48:39 -0600 Subject: [PATCH 110/590] AAP-29504 - Created snippets for repeated authentication information (#1758) (#1818) * AAP-29504 - Created snippets for repeated authentication information * AAP-29218 corrections from peer review --- .../snip-gw-authentication-additional-auth-fields.adoc | 6 ++++++ .../snippets/snip-gw-authentication-common-checkboxes.adoc | 3 +++ .../snippets/snip-gw-authentication-verification.adoc | 3 +++ 3 files changed, 12 insertions(+) create mode 100644 downstream/snippets/snip-gw-authentication-additional-auth-fields.adoc create mode 100644 downstream/snippets/snip-gw-authentication-common-checkboxes.adoc create mode 100644 downstream/snippets/snip-gw-authentication-verification.adoc diff --git a/downstream/snippets/snip-gw-authentication-additional-auth-fields.adoc b/downstream/snippets/snip-gw-authentication-additional-auth-fields.adoc new file mode 100644 index 0000000000..72af8900fc --- /dev/null +++ b/downstream/snippets/snip-gw-authentication-additional-auth-fields.adoc @@ -0,0 +1,6 @@ +. Optional: Enter any *Additional Authenticator Fields* that this authenticator can take. These fields are not validated and are passed directly back to the authenticator. ++ +[NOTE] +==== +Values defined in this field override the dedicated fields provided in the UI. +==== \ No newline at end of file diff --git a/downstream/snippets/snip-gw-authentication-common-checkboxes.adoc b/downstream/snippets/snip-gw-authentication-common-checkboxes.adoc new file mode 100644 index 0000000000..d1c8921e0f --- /dev/null +++ b/downstream/snippets/snip-gw-authentication-common-checkboxes.adoc @@ -0,0 +1,3 @@ +. To automatically create organizations, users, and teams upon successful login, select *Create objects*. +. To enable this authentication method upon creation, select *Enabled*. +. To remove a user for any groups they were previously added to when they authenticate from this source, select *Remove users*. diff --git a/downstream/snippets/snip-gw-authentication-verification.adoc b/downstream/snippets/snip-gw-authentication-verification.adoc new file mode 100644 index 0000000000..a19b861830 --- /dev/null +++ b/downstream/snippets/snip-gw-authentication-verification.adoc @@ -0,0 +1,3 @@ +.Verification + +To verify that the authentication is configured correctly, log out of {PlatformNameShort} and check that the login screen displays the logo of your authentication chosen method to enable logging in with those credentials. \ No newline at end of file From 8a018b22697962e2e4ef392b13f6606dcee7c878 Mon Sep 17 00:00:00 2001 From: Elizabeth Murtough <114593312+emurtoug@users.noreply.github.com> Date: Wed, 4 Sep 2024 05:48:58 -0400 Subject: [PATCH 111/590] AAP-30336 remove subscription info from operations guide (#1817) (#1821) --- .../platform/assembly-aap-manifest-files.adoc | 2 +- downstream/titles/aap-operations-guide/master.adoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename downstream/{assemblies => archive/archived-assemblies}/platform/assembly-aap-manifest-files.adoc (88%) diff --git a/downstream/assemblies/platform/assembly-aap-manifest-files.adoc b/downstream/archive/archived-assemblies/platform/assembly-aap-manifest-files.adoc similarity index 88% rename from downstream/assemblies/platform/assembly-aap-manifest-files.adoc rename to downstream/archive/archived-assemblies/platform/assembly-aap-manifest-files.adoc index 543c98cce6..ef9d9f40d8 100644 --- a/downstream/assemblies/platform/assembly-aap-manifest-files.adoc +++ b/downstream/archive/archived-assemblies/platform/assembly-aap-manifest-files.adoc @@ -1,5 +1,5 @@ - +// emurtoug archived this file to avoid duplication of subscription content within Access mangement and authentication ifdef::context[:parent-context: {context}] diff --git a/downstream/titles/aap-operations-guide/master.adoc b/downstream/titles/aap-operations-guide/master.adoc index 2acb277866..626eebc2b9 100644 --- a/downstream/titles/aap-operations-guide/master.adoc +++ b/downstream/titles/aap-operations-guide/master.adoc @@ -14,7 +14,7 @@ After installing Red Hat Ansible Automation Platform, your system might need ext include::{Boilerplate}[] include::platform/assembly-aap-activate.adoc[leveloffset=+1] -include::platform/assembly-aap-manifest-files.adoc[leveloffset=+1] +// emurtoug removed this assembly to avoid duplication within Access management and authentication include::platform/assembly-aap-manifest-files.adoc[leveloffset=+1] //ifowler assembly transferred from installation guide as part of AAP-18700 include::platform/assembly-platform-whats-next.adoc[leveloffset=+1] include::platform/assembly-configuring-proxy-support.adoc[leveloffset=+1] From 1a239547f7f78ceeceee4c522a4f817b31128e7c Mon Sep 17 00:00:00 2001 From: Elizabeth Murtough <114593312+emurtoug@users.noreply.github.com> Date: Wed, 4 Sep 2024 07:08:49 -0400 Subject: [PATCH 112/590] AAP-29296 removed subscription info (#1816) (#1822) * AAP-29296 removed subscription info * AAP-29296 removed subscription info * AAP-29296 updated comments * AAP-29296 updated comments --- .../platform/assembly-attaching-subscriptions.adoc | 2 +- downstream/titles/aap-planning-guide/master.adoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename downstream/{assemblies => archive/archived-assemblies}/platform/assembly-attaching-subscriptions.adoc (93%) diff --git a/downstream/assemblies/platform/assembly-attaching-subscriptions.adoc b/downstream/archive/archived-assemblies/platform/assembly-attaching-subscriptions.adoc similarity index 93% rename from downstream/assemblies/platform/assembly-attaching-subscriptions.adoc rename to downstream/archive/archived-assemblies/platform/assembly-attaching-subscriptions.adoc index ac588ac5f1..8a4ebc7d43 100644 --- a/downstream/assemblies/platform/assembly-attaching-subscriptions.adoc +++ b/downstream/archive/archived-assemblies/platform/assembly-attaching-subscriptions.adoc @@ -1,4 +1,4 @@ - +// emurtoug archived this assembly from the Planning guide to avoid duplication of subscription content added to Access management and authentication [id="proc-attaching-subscriptions_{context}"] diff --git a/downstream/titles/aap-planning-guide/master.adoc b/downstream/titles/aap-planning-guide/master.adoc index 6848da7d8d..923e5658a9 100644 --- a/downstream/titles/aap-planning-guide/master.adoc +++ b/downstream/titles/aap-planning-guide/master.adoc @@ -20,7 +20,7 @@ include::platform/assembly-aap-architecture.adoc[leveloffset=+1] include::platform/assembly-aap-platform-components.adoc[leveloffset=+1] include::platform/assembly-system-requirements.adoc[leveloffset=+1] include::platform/assembly-network-ports-protocols.adoc[leveloffset=+1] -include::platform/assembly-attaching-subscriptions.adoc[leveloffset=+1] +// emurtough removed subscription info to avoid duplication within Access management and authentication include::platform/assembly-attaching-subscriptions.adoc[leveloffset=+1] include::platform/assembly-choosing-obtaining-installer.adoc[leveloffset=+1] include::platform/assembly-inventory-introduction.adoc[leveloffset=+1] include::platform/assembly-supported-installation-scenarios.adoc[leveloffset=+1] From 3513468ce8266abfc42c90a623bc5d5e9adf3911 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Wed, 4 Sep 2024 12:58:24 -0600 Subject: [PATCH 113/590] am-formatting-2 - Fixing issues with document structure/chapter breakdown (#1819) (#1825) --- ...ssembly-gw-config-authentication-type.adoc | 9 +++++---- .../assembly-gw-configure-authentication.adoc | 19 +++++++------------ ...roc-controller-google-oauth2-settings.adoc | 2 ++ .../proc-controller-set-up-generic-oidc.adoc | 4 +++- downstream/titles/central-auth/master.adoc | 4 ++++ 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/downstream/assemblies/platform/assembly-gw-config-authentication-type.adoc b/downstream/assemblies/platform/assembly-gw-config-authentication-type.adoc index 066eaf01ba..7dffa7f1dc 100644 --- a/downstream/assemblies/platform/assembly-gw-config-authentication-type.adoc +++ b/downstream/assemblies/platform/assembly-gw-config-authentication-type.adoc @@ -4,9 +4,10 @@ ifdef::context[:parent-context: {context}] [id="gw-config-authentication-type"] -= Configuring authentication in the {PlatformNameShort} += Configuring an authentication type + +{PlatformNameShort} provides multiple authenticator plugins that you can configure to simplify the login experience for your organization. These are the authenticator plugins that are provided: -Ansible Automation Platform provides multiple authenticator plugins that you can configure to simplify the login experience for your organization. These are the authenticator plugins that are provided: * xref:gw-local-authentication[Local] * xref:controller-set-up-LDAP[LDAP] * xref:controller-set-up-SAML[SAML] @@ -23,7 +24,7 @@ Ansible Automation Platform provides multiple authenticator plugins that you can * xref:proc-controller-github-enterprise-org-settings[GitHub enterprise organization] * xref:proc-controller-github-enterprise-team-settings[GitHub enterprise team] -include::platform/proc-gw-local-authentication.adoc[leveloffest=+1] +include::platform/proc-gw-local-authentication.adoc[leveloffset=+1] include::platform/proc-controller-set-up-LDAP.adoc[leveloffset=+1] @@ -35,7 +36,7 @@ include::platform/proc-controller-set-up-azure.adoc[leveloffset=+1] include::platform/proc-controller-google-oauth2-settings.adoc[leveloffset=+1] -include::platform/proc-controller-set-up-generic-oidc.adoc[leveloffest=+1] +include::platform/proc-controller-set-up-generic-oidc.adoc[leveloffset=+1] include::platform/proc-gw-config-keycloak-settings.adoc[leveloffset=+1] diff --git a/downstream/assemblies/platform/assembly-gw-configure-authentication.adoc b/downstream/assemblies/platform/assembly-gw-configure-authentication.adoc index 0891c30e61..c5c4c0a996 100644 --- a/downstream/assemblies/platform/assembly-gw-configure-authentication.adoc +++ b/downstream/assemblies/platform/assembly-gw-configure-authentication.adoc @@ -16,24 +16,19 @@ Depending on the authentication method you select, you will be required to enter * Administrator rights to the {PlatformNameShort} * Any connection information needed to connect {PlatformNameShort} {PlatformVers} to your source (see individual authentication types for details). -include::platform/con-gw-pluggable-authentication.adoc[leveloffest=+1] +include::platform/con-gw-pluggable-authentication.adoc[leveloffset=+1] -include::platform/con-gw-create-authentication.adoc[leveloffset=+1] +include::platform/con-gw-create-authentication.adoc[leveloffset=+2] -include::platform/proc-gw-select-auth-type.adoc[leveloffset=+2] +include::platform/proc-gw-select-auth-type.adoc[leveloffset=+3] -include::platform/proc-gw-configure-auth-details.adoc[leveloffset=+2] +include::platform/proc-gw-configure-auth-details.adoc[leveloffset=+3] -include::platform/proc-gw-define-rules-triggers.adoc[leveloffset=+2] +include::platform/proc-gw-define-rules-triggers.adoc[leveloffset=+3] -include::platform/proc-gw-adjust-mapping-order.adoc[leveloffset=+2] - -include::platform/proc-gw-review-auth-settings.adoc[leveloffset=+2] - -include::assembly-gw-config-authentication-type.adoc[leveloffset=+1] - -include::assembly-gw-managing-authentication.adoc[leveloffset=+1] +include::platform/proc-gw-adjust-mapping-order.adoc[leveloffset=+3] +include::platform/proc-gw-review-auth-settings.adoc[leveloffset=+3] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] diff --git a/downstream/modules/platform/proc-controller-google-oauth2-settings.adoc b/downstream/modules/platform/proc-controller-google-oauth2-settings.adoc index dea44b5045..3b7fbe22cd 100644 --- a/downstream/modules/platform/proc-controller-google-oauth2-settings.adoc +++ b/downstream/modules/platform/proc-controller-google-oauth2-settings.adoc @@ -1,3 +1,5 @@ +:_mod-docs-content-type: PROCEDURE + [id="proc-controller-google-oauth2-settings"] = Configuring Google OAuth2 authentication diff --git a/downstream/modules/platform/proc-controller-set-up-generic-oidc.adoc b/downstream/modules/platform/proc-controller-set-up-generic-oidc.adoc index ffc32003f8..0da47f5bf8 100644 --- a/downstream/modules/platform/proc-controller-set-up-generic-oidc.adoc +++ b/downstream/modules/platform/proc-controller-set-up-generic-oidc.adoc @@ -1,3 +1,5 @@ +:_mod-docs-content-type: PROCEDURE + [id="controller-set-up-generic-oidc"] = Configuring generic OIDC authentication @@ -46,4 +48,4 @@ include::snippets/snip-gw-authentication-common-checkboxes.adoc[] [NOTE] ==== Team and organization mappings for OIDC are currently not supported. The OIDC adapter does authentication only and not authorization. It is only capable of authenticating whether this user is who they say they are. It does not authorize what this user is enabled to do. Configuring generic OIDC creates the UserID appended with an ID or key to differentiate the same user ID originating from two different sources and therefore, considered different users. So you get an ID of just the user name and the second is the username-. -==== \ No newline at end of file +==== diff --git a/downstream/titles/central-auth/master.adoc b/downstream/titles/central-auth/master.adoc index dc1eebf0be..6005517547 100644 --- a/downstream/titles/central-auth/master.adoc +++ b/downstream/titles/central-auth/master.adoc @@ -13,7 +13,11 @@ include::{Boilerplate}[] include::platform/platform/con-gw-overview-access-auth.adoc[leveloffset=+1] include::platform/assembly-gw-configure-authentication.adoc[leveloffset=+1] +include::platform/assembly-gw-config-authentication-type.adoc[leveloffset=+2] +include::platform/assembly-gw-mapping.adoc[leveloffset=+2] +include::platform/assembly-gw-managing-authentication.adoc[leveloffset=+2] include::platform/assembly-gw-token-based-authentication.adoc[leveloffset=+1] include::platform/assembly-gw-managing-access.adoc[leveloffset=+1] include::platform/assembly-gw-roles.adoc[leveloffset=+1] include::platform/assembly-gw-settings.adoc[leveloffset=+1] + \ No newline at end of file From 82af7fc4dc6e7abc9c0ff1229c7bcaf3d76a60bf Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Thu, 5 Sep 2024 10:48:19 +0100 Subject: [PATCH 114/590] improving user orientation and some minor style tweaks (#1826) (#1827) --- .../platform/proc-aap-controller-backup.adoc | 12 ++++++------ .../platform/proc-aap-controller-restore.adoc | 10 +++++----- .../proc-aap-controller-yaml-backup.adoc | 9 ++++++--- .../modules/platform/proc-aap-hub-backup.adoc | 8 ++++---- .../platform/proc-aap-hub-restore.adoc | 6 +++--- .../proc-aap-platform-gateway-backup.adoc | 19 +++++++++++-------- .../proc-aap-platform-gateway-restore.adoc | 9 ++++++--- 7 files changed, 41 insertions(+), 32 deletions(-) diff --git a/downstream/modules/platform/proc-aap-controller-backup.adoc b/downstream/modules/platform/proc-aap-controller-backup.adoc index 7a2af22554..2afb0622b0 100644 --- a/downstream/modules/platform/proc-aap-controller-backup.adoc +++ b/downstream/modules/platform/proc-aap-controller-backup.adoc @@ -8,13 +8,13 @@ Use this procedure to back up a deployment of the controller, including jobs, in .Prerequisites * You must be authenticated with an OpenShift cluster. -* You have installed the {OperatorPlatform} on the cluster. -* The {ControllerName} is deployed to using the {OperatorPlatform}. +* You have installed {OperatorPlatform} on the cluster. +* You have deployed {ControllerName} using the {OperatorPlatform}. .Procedure -. Log in to *{OCP}*. +. Log in to {OCP}. . Navigate to menu:Operators[Installed Operators]. -. Select the {OperatorPlatform} installed on your project namespace. +. Select your {OperatorPlatform} deployment. . Select the *Automation Controller Backup* tab. . Click btn:[Create AutomationControllerBackup]. . Enter a *Name* for the backup. @@ -43,9 +43,9 @@ $ df -h | grep "/var/lib/pgsql/data" A backup tarball of the specified deployment is created and available for data recovery or deployment rollback. Future backups are stored in separate tar files on the same pvc. .Verification -. Log in to Red Hat *{OCP}* +. Log in to {OCP}. . Navigate to menu:Operators[Installed Operators]. -. Select the {OperatorPlatform} installed on your project namespace. +. Select your {OperatorPlatform}. . Select the *AutomationControllerBackup* tab. . Select the backup resource you want to verify. . Scroll to *Conditions* and check that the *Successful* status is `True`. diff --git a/downstream/modules/platform/proc-aap-controller-restore.adoc b/downstream/modules/platform/proc-aap-controller-restore.adoc index f717fcd44c..7e90f3efb1 100644 --- a/downstream/modules/platform/proc-aap-controller-restore.adoc +++ b/downstream/modules/platform/proc-aap-controller-restore.adoc @@ -19,9 +19,9 @@ If the backup custom resource being restored is a backup of a currently running * An AutomationControllerBackup is available on a PVC in your cluster. .Procedure -. Log in to *{OCP}*. +. Log in to {OCP}. . Navigate to menu:Operators[Installed Operators]. -. Select the {OperatorPlatform} installed on your project namespace. +. Select your {OperatorPlatform} deployment. . Select the *Automation Controller Restore* tab. . Click btn:[Create AutomationControllerRestore]. . Enter a *Name* for the recovery deployment. @@ -29,7 +29,7 @@ If the backup custom resource being restored is a backup of a currently running + [NOTE] ==== -This should be different from the original deployment name. +This must be different from the original deployment name. ==== + . Select the *Backup source to restore from*. *Backup CR* is recommended. @@ -40,9 +40,9 @@ A new deployment is created and your backup is restored to it. This can take app .Verification -. Log in to Red Hat *{OCP}* +. Log in to Red Hat {OCP}. . Navigate to menu:Operators[Installed Operators]. -. Select the {OperatorPlatform} installed on your project namespace. +. Select your {OperatorPlatform} deployment. . Select the *AutomationControllerRestore* tab. . Select the restore resource you want to verify. . Scroll to *Conditions* and check that the *Successful* status is `True`. diff --git a/downstream/modules/platform/proc-aap-controller-yaml-backup.adoc b/downstream/modules/platform/proc-aap-controller-yaml-backup.adoc index 86dcdc9e74..1c7bb3f038 100644 --- a/downstream/modules/platform/proc-aap-controller-yaml-backup.adoc +++ b/downstream/modules/platform/proc-aap-controller-yaml-backup.adoc @@ -7,8 +7,8 @@ See the following procedure for how to back up a deployment of the {ControllerNa .Prerequisites * You must be authenticated with an OpenShift cluster. -* You have installed the {OperatorPlatform} on the cluster. -* The {ControllerName} is deployed to using the {OperatorPlatform}. +* You have installed {OperatorPlatform} on the cluster. +* You have deployed {ControllerName} using the {OperatorPlatform}. .Procedure @@ -26,8 +26,11 @@ spec: ---- + -NOTE: The "deployment_name" above is the name of the {ControllerName} deployment you intend to backup from. +[NOTE] +==== +The "deployment_name" above is the name of the {ControllerName} deployment you intend to backup from. The namespace above is the one containing the {ControllerName} deployment you intend to back up. +==== . Use the `oc apply` command to create the backup object in your cluster: diff --git a/downstream/modules/platform/proc-aap-hub-backup.adoc b/downstream/modules/platform/proc-aap-hub-backup.adoc index d9528a92dd..50af694047 100644 --- a/downstream/modules/platform/proc-aap-hub-backup.adoc +++ b/downstream/modules/platform/proc-aap-hub-backup.adoc @@ -8,13 +8,13 @@ Use this procedure to back up a deployment of the hub, including all hosted Ansi .Prerequisites * You must be authenticated with an OpenShift cluster. -* You have installed the {OperatorPlatform} on the cluster. -* The {HubName} is deployed to using the {OperatorPlatform}. +* You have installed {OperatorPlatform} on the cluster. +* You have deployed {HubName} using the {OperatorPlatform}. .Procedure -. Log in to *{OCP}*. +. Log in to {OCP}. . Navigate to menu:Operators[Installed Operators]. -. Select the {OperatorPlatform} installed on your project namespace. +. Select your {OperatorPlatform} deployment. . Select the *Automation Hub Backup* tab. . Click btn:[Create AutomationHubBackup]. . Enter a *Name* for the backup. diff --git a/downstream/modules/platform/proc-aap-hub-restore.adoc b/downstream/modules/platform/proc-aap-hub-restore.adoc index c9c6c282ce..870ae9c65c 100644 --- a/downstream/modules/platform/proc-aap-hub-restore.adoc +++ b/downstream/modules/platform/proc-aap-hub-restore.adoc @@ -17,9 +17,9 @@ The name specified for the new AutomationHub custom resource must not match an e * An AutomationHubBackup is available on a PVC in your cluster. .Procedure -. Log in to *{OCP}*. +. Log in to {OCP}. . Navigate to menu:Operators[Installed Operators]. -. Select the {OperatorPlatform} installed on your project namespace. +. Select your {OperatorPlatform} deployment. . Select the *Automation Hub Restore* tab. . Click btn:[Create AutomationHubRestore]. . Enter a *Name* for the recovery deployment. @@ -27,4 +27,4 @@ The name specified for the new AutomationHub custom resource must not match an e . Enter the *Backup Name* of the AutomationHubBackup object. . Click btn:[Create]. + -This creates a new deployment and your backup is restored to it. +This creates a new deployment and restores your backup to it. diff --git a/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc b/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc index 3c842fe8ce..36dcde74d6 100644 --- a/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc +++ b/downstream/modules/platform/proc-aap-platform-gateway-backup.adoc @@ -4,18 +4,21 @@ Regularly backing up your *{PlatformNameShort}* deployment is vital to protect against unexpected data loss and application errors. *{PlatformNameShort}* hosts any enabled components (such as, {ControllerName}, {HubName}, and {EDAName}), when you back up *{PlatformNameShort}* the operator will also back up these components. .Prerequisites -* You must be authenticated on Openshift cluster. -* The {OperatorPlatform} has been installed on the cluster. -* The *{PlatformNameShort}* instance is deployed using the {OperatorPlatform}. +* You must be authenticated on OpenShift cluster. +* You have installed {OperatorPlatform} on the cluster. +* You have deployed a *{PlatformNameShort}* instance using the {OperatorPlatform}. .Procedure . Log in to {OCP}. -. Go to menu:Operators[Installed Operators]. -. Select the {OperatorPlatform} installed on your project namespace. +. Navigate to menu:Operators[Installed Operators]. +. Select your {OperatorPlatform} deployment. . Go to your *All Instances* tab, and click btn:[Create New]. . Select *{PlatformNameShort} Backup* from the list. + -NOTE: When creating the *{PlatformNameShort} Backup* resource it also creates backup resources for each of the nested components that are enabled. +[NOTE] +==== +When creating the *{PlatformNameShort} Backup* resource it also creates backup resources for each of the nested components that are enabled. +==== + . In the *Name* field, enter a name for the backup. . In the *Deployment name* field, enter the name of the deployed {PlatformNameShort} instance being backed up. For example if your {PlatformNameShort} deployment must be backed up and the deployment name is aap, enter 'aap' in the *Deployment name* field. @@ -38,8 +41,8 @@ spec: To verify that your backup was successful you can: . Log in to {OCP}. -. Go to menu:Operators[Installed Operators]. -. Select the {OperatorPlatform} installed on your project namespace. +. Navigate to menu:Operators[Installed Operators]. +. Select your {OperatorPlatform} deployment. . Click *All Instances*. The *All Instances* page displays the main backup and the backups for each component with the name you specified when creating your backup resource. diff --git a/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc b/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc index f9575cebdc..63eade72ee 100644 --- a/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc +++ b/downstream/modules/platform/proc-aap-platform-gateway-restore.adoc @@ -17,8 +17,8 @@ Now, you create a single *AnsibleAutomationPlatformRestore* resource, which cre .Procedure . Log in to {OCP}. -. Go to menu:Operators[Installed Operators]. -. Select the {OperatorPlatform} installed on your project namespace. +. Navigate to menu:Operators[Installed Operators]. +. Select your {OperatorPlatform} deployment. . Go to your *All Instances* tab, and click btn:[Create New]. . Select *{PlatformNameShort} Restore* from the list. . For *Name* enter the name for the recovery deployment. @@ -29,7 +29,10 @@ Now, you create a single *AnsibleAutomationPlatformRestore* resource, which cre Your backups starts restoring under the *AnsibleAutomationPlatformRestores* tab. -NOTE: The recovery is not complete until all the resources are successfully restored. Depending on the size of your database this this can take some time. +[NOTE] +==== +The recovery is not complete until all the resources are successfully restored. Depending on the size of your database this this can take some time. +==== .Verification To verify that your recovery was successful you can: From a993a468446a7251f2e335674055fe22f8325285 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:34:16 +0100 Subject: [PATCH 115/590] Create directories for supported topologies doc (#1828) (#1829) Added the relevant directories, files, symlinks etc. for the new topology doc Create a document for supported topologies https://issues.redhat.com/browse/AAP-28228 --- .../assembly-container-topologies.adoc | 7 ++++ ...-overview-supported-deployment-models.adoc | 33 +++++++++++++++++++ .../topologies/assembly-rpm-topologies.adoc | 9 +++++ downstream/assemblies/topologies/topologies | 1 + downstream/attributes/attributes.adoc | 3 ++ downstream/titles/topologies/aap-common | 1 + downstream/titles/topologies/attributes | 1 + downstream/titles/topologies/docinfo.xml | 13 ++++++++ downstream/titles/topologies/images | 1 + downstream/titles/topologies/master.adoc | 22 +++++++++++++ downstream/titles/topologies/topologies | 1 + 11 files changed, 92 insertions(+) create mode 100644 downstream/assemblies/topologies/assembly-container-topologies.adoc create mode 100644 downstream/assemblies/topologies/assembly-overview-supported-deployment-models.adoc create mode 100644 downstream/assemblies/topologies/assembly-rpm-topologies.adoc create mode 120000 downstream/assemblies/topologies/topologies create mode 120000 downstream/titles/topologies/aap-common create mode 120000 downstream/titles/topologies/attributes create mode 100644 downstream/titles/topologies/docinfo.xml create mode 120000 downstream/titles/topologies/images create mode 100644 downstream/titles/topologies/master.adoc create mode 120000 downstream/titles/topologies/topologies diff --git a/downstream/assemblies/topologies/assembly-container-topologies.adoc b/downstream/assemblies/topologies/assembly-container-topologies.adoc new file mode 100644 index 0000000000..1ce1b61e24 --- /dev/null +++ b/downstream/assemblies/topologies/assembly-container-topologies.adoc @@ -0,0 +1,7 @@ +[id="container-topologies"] + += Container supported topologies + +The containerized installer deploys {PlatformNameShort} on {RHEL} by using Podman which runs the platform in containers on host machines. Customers manage the product and infrastructure lifecycle. + +//Container enterprise topology \ No newline at end of file diff --git a/downstream/assemblies/topologies/assembly-overview-supported-deployment-models.adoc b/downstream/assemblies/topologies/assembly-overview-supported-deployment-models.adoc new file mode 100644 index 0000000000..6a787ea53f --- /dev/null +++ b/downstream/assemblies/topologies/assembly-overview-supported-deployment-models.adoc @@ -0,0 +1,33 @@ +[id="overview-supported-deployment-models"] + += Overview of supported deployment models + +Red Hat tests {PlatformNameShort} {PlatformVers} with a defined set of topologies to give you opinionated deployment options. While it is possible to install the {PlatformNameShort} on different infrastructure topologies and with different environment configurations, Red Hat provides full support for the topologies outlined in this document. + +== Installation and deployment models + +The following table outlines the different ways to install or deploy {PlatformNameShort}: + + +.{PlatformNameShort} installation and deployment models +[options="header"] +|==== +| Mode | Infrastructure | Description | Supported topologies +| RPM | Virtual machines and bare metal | The RPM installer deploys {PlatformNameShort} on {RHEL} by using RPMs to install the platform on host machines. Customers manage the product and infrastructure lifecycle. +a| +* RPM enterprise topology +* RPM mixed enterprise topology + +| Containers +| Virtual machines and bare metal +| The containerized installer deploys {PlatformNameShort} on {RHEL} by using Podman which runs the platform in containers on host machines. Customers manage the product and infrastructure lifecycle. +a| +* Container enterprise topology + +| Operator +| Red Hat OpenShift +| The Operator uses Red Hat OpenShift Operators to deploy {PlatformNameShort} within Red Hat OpenShift. Customers manage the product and infrastructure lifecycle. +a| +* Operator growth topology +* Operator enterprise topology +|==== \ No newline at end of file diff --git a/downstream/assemblies/topologies/assembly-rpm-topologies.adoc b/downstream/assemblies/topologies/assembly-rpm-topologies.adoc new file mode 100644 index 0000000000..56f323f2ee --- /dev/null +++ b/downstream/assemblies/topologies/assembly-rpm-topologies.adoc @@ -0,0 +1,9 @@ +[id="rpm-topologies"] + += RPM supported topologies + +The RPM installer deploys {PlatformNameShort} on {RHEL} by using RPMs to install the platform on host machines. Customers manage the product and infrastructure lifecycle. + +//RPM enterprise topology + +//RPM mixed enterprise topology \ No newline at end of file diff --git a/downstream/assemblies/topologies/topologies b/downstream/assemblies/topologies/topologies new file mode 120000 index 0000000000..e20855697b --- /dev/null +++ b/downstream/assemblies/topologies/topologies @@ -0,0 +1 @@ +../../modules/topologies \ No newline at end of file diff --git a/downstream/attributes/attributes.adoc b/downstream/attributes/attributes.adoc index abf73b5b2c..d8c949c267 100644 --- a/downstream/attributes/attributes.adoc +++ b/downstream/attributes/attributes.adoc @@ -364,3 +364,6 @@ // // titles/develop-automation-content :TitleDevelopAutomationContent: Developing automation content +// +// titles/topologies +:TitleTopologies: Supported deployment models for Ansible Automation Platform diff --git a/downstream/titles/topologies/aap-common b/downstream/titles/topologies/aap-common new file mode 120000 index 0000000000..472eeb4dac --- /dev/null +++ b/downstream/titles/topologies/aap-common @@ -0,0 +1 @@ +../../aap-common \ No newline at end of file diff --git a/downstream/titles/topologies/attributes b/downstream/titles/topologies/attributes new file mode 120000 index 0000000000..a5caaa73a5 --- /dev/null +++ b/downstream/titles/topologies/attributes @@ -0,0 +1 @@ +../../attributes \ No newline at end of file diff --git a/downstream/titles/topologies/docinfo.xml b/downstream/titles/topologies/docinfo.xml new file mode 100644 index 0000000000..17dc09a636 --- /dev/null +++ b/downstream/titles/topologies/docinfo.xml @@ -0,0 +1,13 @@ +Supported deployment models for Ansible Automation Platform +Red Hat Ansible Automation Platform +2.5 +Red Hat has tested and supports the topologies identified in this document for Ansible Automation Platform 2.5 + + +This guide provides the Red Hat tested and supported toplogies for Red Hat Ansible Automation Platform. + + + + Red Hat Customer Content Services + + diff --git a/downstream/titles/topologies/images b/downstream/titles/topologies/images new file mode 120000 index 0000000000..5fa6987088 --- /dev/null +++ b/downstream/titles/topologies/images @@ -0,0 +1 @@ +../../images \ No newline at end of file diff --git a/downstream/titles/topologies/master.adoc b/downstream/titles/topologies/master.adoc new file mode 100644 index 0000000000..c1f1c1dc64 --- /dev/null +++ b/downstream/titles/topologies/master.adoc @@ -0,0 +1,22 @@ +:imagesdir: images +:toclevels: 4 +:context: topologies +include::attributes/attributes.adoc[] + +// Book Title + += Supported deployment models for Ansible Automation Platform + +include::{Boilerplate}[] + +include::topologies/assembly-overview-supported-deployment-models.adoc[leveloffset=+1] + +//RPM supported topologies +include::topologies/assembly-rpm-topologies.adoc[leveloffset=+1] + +//Container supported topologies +include::topologies/assembly-container-topologies.adoc[leveloffset=+1] + +//Operator supported topologies + +//Automation mesh nodes diff --git a/downstream/titles/topologies/topologies b/downstream/titles/topologies/topologies new file mode 120000 index 0000000000..760101fd3c --- /dev/null +++ b/downstream/titles/topologies/topologies @@ -0,0 +1 @@ +../../assemblies/topologies \ No newline at end of file From 17c2e4653a92dfe5e86ff1c055bcf2cba887f70c Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Thu, 5 Sep 2024 17:10:10 +0100 Subject: [PATCH 116/590] Add info on configuring load balancer for container installer (#1831) (#1832) Containerized installer: There's no guide to configure loadbalancer for containerized installer https://issues.redhat.com/browse/AAP-28700 --- .../proc-installing-containerized-aap.adoc | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/downstream/modules/platform/proc-installing-containerized-aap.adoc b/downstream/modules/platform/proc-installing-containerized-aap.adoc index 8c200bc53f..1b1c698689 100644 --- a/downstream/modules/platform/proc-installing-containerized-aap.adoc +++ b/downstream/modules/platform/proc-installing-containerized-aap.adoc @@ -187,4 +187,18 @@ You can use increasing verbosity, up to 4 v's (-vvvv) to see the details of the [NOTE] ==== This can significantly increase installation time, so it is recommended that you use it only as needed or requested by Red Hat support. +==== + +.Configuring a HAProxy load balancer + +To configure a HAProxy load balancer in front of platform gateway with a custom CA cert, set the following inventory file variables under the `[all:vars]` group: + +---- +custom_ca_cert= +gateway_main_url= +---- + +[NOTE] +==== +HAProxy SSL passthrough mode is not supported with platform gateway. ==== \ No newline at end of file From 3a15776251fa4381a05762862b7780f041957739 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Thu, 5 Sep 2024 10:59:56 -0600 Subject: [PATCH 117/590] AAP-21776 Convert HA Redis conceptual content (#1801) (#1833) * AAP-21776 Convert HA Redis conceptual content * AAP-21776 - implemented peer review changes * AAP-21776 - Updated default to clustered Redis --- downstream/images/gw-clustered-redis.png | Bin 0 -> 56788 bytes downstream/images/gw-single-node-redis.png | Bin 0 -> 19164 bytes .../modules/platform/con-gw-cache-queue.adoc | 25 +++++++++++++++ .../platform/con-gw-centralized-redis.adoc | 7 +++++ .../platform/con-gw-clustered-redis.adoc | 29 ++++++++++++++++++ .../platform/con-gw-single-node-redis.adoc | 11 +++++++ 6 files changed, 72 insertions(+) create mode 100644 downstream/images/gw-clustered-redis.png create mode 100644 downstream/images/gw-single-node-redis.png create mode 100644 downstream/modules/platform/con-gw-cache-queue.adoc create mode 100644 downstream/modules/platform/con-gw-centralized-redis.adoc create mode 100644 downstream/modules/platform/con-gw-clustered-redis.adoc create mode 100644 downstream/modules/platform/con-gw-single-node-redis.adoc diff --git a/downstream/images/gw-clustered-redis.png b/downstream/images/gw-clustered-redis.png new file mode 100644 index 0000000000000000000000000000000000000000..743d8c05dc7abb56f692ae6ed88a8b9bcf0906fd GIT binary patch literal 56788 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 #8G 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 literal 0 HcmV?d00001 diff --git a/downstream/modules/platform/con-gw-cache-queue.adoc b/downstream/modules/platform/con-gw-cache-queue.adoc new file mode 100644 index 0000000000..647b08a6ee --- /dev/null +++ b/downstream/modules/platform/con-gw-cache-queue.adoc @@ -0,0 +1,25 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-cache-queue_{context}"] + += Caching and queueing system + +In {PlatformNameShort} {PlatformVers}, link:https://redis.io/[Redis (REmote DIctionary Server)] is used as the caching and queueing system. Redis is an open source, in-memory, NoSQL key/value store that is used primarily as an application cache, quick-response database and lightweight message broker. + +Centralized Redis is provided for the platform gateway and {EDAName} and shared between those components. {ControllerNameStart} and {HubName} have their own instances of Redis. + +This cache and queue system stores data in memory, rather than on a disk or solid-state drive (SSD), which helps deliver speed, reliability, and performance. In {PlatformNameShort}, the system caches the following types of data for the various services in {PlatformNameShort}: + +.Data types cached by Centralized Redis +[options="header"] +|==== +| {ControllerNameStart} | {EDAName} server | {HubNameStart} | Platform gateway +| N/A {ControllerName} does not use shared Redis in {PlatformNameShort} {PlatformVers} | Event queues | N/A {HubName} does not use shared Redis in {PlatformNameShort} {PlatformVers} | Settings, Session Information, JSON Web Tokens +|==== + +This data can contain sensitive Personal Identifiable Information (PII). Your data is protected through secure communication with the cache and queue system through both Transport Layer Security (TLS) encryption and authentication. + +[NOTE] +==== +The data in Redis from both the platform gateway and {EDAName} are partitioned; therefore, neither service can access the other’s data. +==== \ No newline at end of file diff --git a/downstream/modules/platform/con-gw-centralized-redis.adoc b/downstream/modules/platform/con-gw-centralized-redis.adoc new file mode 100644 index 0000000000..37ab0aa66c --- /dev/null +++ b/downstream/modules/platform/con-gw-centralized-redis.adoc @@ -0,0 +1,7 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-centralized-redis_{context}"] + += Centralized Redis + +{PlatformNameShort} offers a centralized Redis instance in both xref:gw-single-node-redis[single-node] and xref:gw-clustered-redis[clustered] topologies. This enables resiliency by providing consistent performance and reliability. \ No newline at end of file diff --git a/downstream/modules/platform/con-gw-clustered-redis.adoc b/downstream/modules/platform/con-gw-clustered-redis.adoc new file mode 100644 index 0000000000..3f09dabc7a --- /dev/null +++ b/downstream/modules/platform/con-gw-clustered-redis.adoc @@ -0,0 +1,29 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-single-node-redis_{context}"] + += Clustered Redis + +With clustered Redis, data is automatically partitioned over multiple nodes to provide performance stability and nodes are assigned as replicas to provide reliability. Clustered Redis shared between the platform gateway and {EDAName} is provided by default when installing {PlatformNameShort} in containerized and operator-based deployments. + +[NOTE] +==== +Clustered Redis is currently not available for rpm deployments. +==== + +A cluster contains three primary nodes and each primary node contains a replica node. + +If a primary instance becomes unavailable due to failures, the other primary nodes will initiate a failover state to promote a replica node to a primary node. + +image::gw-clustered-redis.png[Single-node Redis deployment] + +The benefits of deploying clustered Redis over single-node Redis include the following: +* Data is automatically split across multiple nodes. +* Data can be dynamically adjusted. +* Automatic failover of the primary nodes is initiated during system failures. + +Therefore, if you need data scalability and automatic failover, deploy {PlatformNameShort} with a clustered Redis. For more information about scalability with Redis, refer to link:https://redis.io/docs/latest/operate/oss_and_stack/management/scaling/[Scale with Redis Cluster] in the Redis product documentation. + +For information on deploying {PlatformNameShort} with clustered Redis, refer to the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/containerized_installation[{TitleContainerizedInstall}] guide or the link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/installing_on_openshift_container_platform[{TitleOperatorInstallation}] guide. + +include::snippets/external-site-disclaimer.adoc[] diff --git a/downstream/modules/platform/con-gw-single-node-redis.adoc b/downstream/modules/platform/con-gw-single-node-redis.adoc new file mode 100644 index 0000000000..20f1430f59 --- /dev/null +++ b/downstream/modules/platform/con-gw-single-node-redis.adoc @@ -0,0 +1,11 @@ +:_mod-docs-content-type: CONCEPT + +[id="gw-single-node-redis_{context}"] + += Single-node Redis + +Single-node Redis consists of a simple architecture that is easy to deploy and configure. + +image::gw-single-node-redis.png[Single-node Redis deployment] + +If a resilient solution is not a requirement, deploy {PlatformNameShort} with a single-node Redis. From 59dce37e888691ebafe3594174183bd4049d99b8 Mon Sep 17 00:00:00 2001 From: Jameria Self <73364088+jself-sudoku@users.noreply.github.com> Date: Thu, 5 Sep 2024 15:12:49 -0400 Subject: [PATCH 118/590] AAP-28434 Added notes about the impact of Redis failure on EDA controller resources (#1830) (#1835) * AAP-28434 Added notes about the impact of Redis failure on various functions of EDA controller * AAP-28434 Updated notes for HA Redis failure impact according to SME feedback --- downstream/assemblies/eda/assembly-eda-projects.adoc | 6 ++++++ .../eda/assembly-eda-rulebook-activations.adoc | 11 +++++++++++ .../eda/assembly-eda-user-guide-overview.adoc | 5 ++--- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/downstream/assemblies/eda/assembly-eda-projects.adoc b/downstream/assemblies/eda/assembly-eda-projects.adoc index 2bdd34c4e4..00b6fcff30 100644 --- a/downstream/assemblies/eda/assembly-eda-projects.adoc +++ b/downstream/assemblies/eda/assembly-eda-projects.adoc @@ -6,6 +6,12 @@ Projects are a logical collection of rulebooks. They must be a git repository and only http protocol is supported. The rulebooks of a project must be located in the path defined for {EDAName} content in Ansible collections: `/extensions/eda/rulebooks` at the root of the project. +[IMPORTANT] +==== +//(J. Self) Commenting this out until we can confirm it's no longer needed. Brought to our attention by developer Joe Shimkus. * Do not link a project to an empty repository. Linking a project to an empty repository causes synchronization errors. +To meet high availability demands, {EDAcontroller} shares centralized link:https://redis.io/[Redis (REmote DIctionary Server)] with the {PlatformNameShort} UI. When Redis is unavailable, you will not be able to create or sync projects. +==== + include::eda/proc-eda-set-up-new-project.adoc[leveloffset=+1] include::eda/con-eda-projects-list-view.adoc[leveloffset=+1] include::eda/proc-eda-editing-a-project.adoc[leveloffset=+1] diff --git a/downstream/assemblies/eda/assembly-eda-rulebook-activations.adoc b/downstream/assemblies/eda/assembly-eda-rulebook-activations.adoc index 9c4e992169..413b628a1e 100644 --- a/downstream/assemblies/eda/assembly-eda-rulebook-activations.adoc +++ b/downstream/assemblies/eda/assembly-eda-rulebook-activations.adoc @@ -6,6 +6,17 @@ A rulebook activation is a process running in the background defined by a decision environment executing a specific rulebook. +[IMPORTANT] +==== +To meet high availability demands, {EDAcontroller} shares centralized link:https://redis.io/[Redis (REmote DIctionary Server)] with the {PlatformNameShort} UI. When Redis is unavailable, the following functions will not be available: + +* Creating an activation, if `is_enabled` is True +* Deleting an activation +* Enabling an activation, if not already enabled +* Disabling an activation, if not already disabled +* Restarting an activation +==== + include::eda/proc-eda-set-up-rulebook-activation.adoc[leveloffset=+1] include::eda/con-eda-rulebook-activation-list-view.adoc[leveloffset=+1] include::eda/proc-eda-view-activation-output.adoc[leveloffset=+2] diff --git a/downstream/assemblies/eda/assembly-eda-user-guide-overview.adoc b/downstream/assemblies/eda/assembly-eda-user-guide-overview.adoc index a7167fe5bc..c89efdc793 100644 --- a/downstream/assemblies/eda/assembly-eda-user-guide-overview.adoc +++ b/downstream/assemblies/eda/assembly-eda-user-guide-overview.adoc @@ -17,7 +17,6 @@ The following procedures form the user configuration: [NOTE] ==== - -API documentation for {EDAcontroller} is available at \https:///api/eda/v1/docs - +* API documentation for {EDAcontroller} is available at \https:///api/eda/v1/docs +* To meet high availability demands, {EDAcontroller} shares centralized link:https://redis.io/[Redis (REmote DIctionary Server)] with the {PlatformNameShort} UI. When Redis is unavailable, you will not be able to create projects or enable rulebook activations. ==== From 1c43a9c23a855f44a492d79ff21adf887339d23a Mon Sep 17 00:00:00 2001 From: EMcWhinn <122449381+EMcWhinn@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:12:22 +0100 Subject: [PATCH 119/590] Adding new content for 2.5 to rulebook act. chapter (#1793) (#1838) * Adding new content for 2.5 to rulebook act. chapter Update the Rulebook activations chapter https://issues.redhat.com/browse/AAP-29949 Affects `titles/eda/eda-user-guide` * Further edits to rulebook act. chapter * Further edits to rulebook chapter * Peer review edit --- .../assembly-eda-rulebook-activations.adoc | 31 +++++++++++++++-- ...con-eda-rulebook-activation-list-view.adoc | 2 +- .../eda/proc-eda-activate-webhook.adoc | 4 +-- .../proc-eda-delete-rulebook-activations.adoc | 4 ++- .../proc-eda-enable-rulebook-activations.adoc | 4 ++- ...proc-eda-restart-rulebook-activations.adoc | 4 ++- .../proc-eda-set-up-rulebook-activation.adoc | 34 ++++++++++++------- .../eda/proc-eda-view-activation-output.adoc | 2 +- 8 files changed, 63 insertions(+), 22 deletions(-) diff --git a/downstream/assemblies/eda/assembly-eda-rulebook-activations.adoc b/downstream/assemblies/eda/assembly-eda-rulebook-activations.adoc index 413b628a1e..2af0325df6 100644 --- a/downstream/assemblies/eda/assembly-eda-rulebook-activations.adoc +++ b/downstream/assemblies/eda/assembly-eda-rulebook-activations.adoc @@ -4,7 +4,34 @@ [role="_abstract"] -A rulebook activation is a process running in the background defined by a decision environment executing a specific rulebook. +A rulebook is a set of conditional rules that {EDAName} uses to perform IT actions in an event-driven automation model. +Rulebooks are the means by which users tell {EDAName} which source to check for an event and when that event occurs what to do when certain conditions are met. + +A rulebook specifies actions to be performed when a rule is triggered. +A rule gets triggered when the events match the conditions for the rules. +The following actions are currently supported: + +* `run_playbook` (only supported with ansible-rulebook CLI) +* `run_module` +* `run_job_template` +* `run_workflow_template` +* `set_fact` +* `post_event` +* `retract_fact` +* `print_event` +* `shutdown` +* `debug` +* `none` + +To view further details, see link:https://ansible.readthedocs.io/projects/rulebook/en/stable/actions.html[Actions]. + +A rulebook activation is a process running in the background defined by a decision environment executing a specific rulebook. You can set up your rulebook activation by following xref:eda-set-up-rulebook-activation[Setting up a rulebook activation]. + +[WARNING] +==== +Red Hat does not recommend the use of a non-supported source plugin with 1 postgres database. +This can pose a potential risk to your use of {PlatformNameShort}. +==== [IMPORTANT] ==== @@ -24,4 +51,4 @@ include::eda/proc-eda-enable-rulebook-activations.adoc[leveloffset=+1] include::eda/proc-eda-restart-rulebook-activations.adoc[leveloffset=+1] include::eda/proc-eda-delete-rulebook-activations.adoc[leveloffset=+1] include::eda/proc-eda-activate-webhook.adoc[leveloffset=+1] -include::eda/proc-eda-test-with-K8s.adoc[leveloffset=+1] \ No newline at end of file +include::eda/proc-eda-test-with-K8s.adoc[leveloffset=+1] diff --git a/downstream/modules/eda/con-eda-rulebook-activation-list-view.adoc b/downstream/modules/eda/con-eda-rulebook-activation-list-view.adoc index 9e275b3f27..60011424e0 100644 --- a/downstream/modules/eda/con-eda-rulebook-activation-list-view.adoc +++ b/downstream/modules/eda/con-eda-rulebook-activation-list-view.adoc @@ -4,7 +4,7 @@ On the *Rulebook Activations* page, you can view the rulebook activations that you have created along with the *Status*, *Number of rules* with the rulebook, the *Fire count*, and *Restart count*. -If the *Activation Status* is *Running*, it means that the rulebook activation is running in the background and executing the required actions according to the rules declared in the rulebook. +If the *Status* is *Running*, it means that the rulebook activation is running in the background and executing the required actions according to the rules declared in the rulebook. You can view more details by selecting the activation from the *Rulebook Activations* list view. diff --git a/downstream/modules/eda/proc-eda-activate-webhook.adoc b/downstream/modules/eda/proc-eda-activate-webhook.adoc index 30c282a800..8150d6b9ff 100644 --- a/downstream/modules/eda/proc-eda-activate-webhook.adoc +++ b/downstream/modules/eda/proc-eda-activate-webhook.adoc @@ -6,7 +6,7 @@ In Openshift environments, you can allow webhooks to reach an activation-job-pod .Prerequisites -* You have created a rulebook activation in the {EDAcontroller} Dashboard. +* You have created a rulebook activation. [NOTE] ==== @@ -71,4 +71,4 @@ test-sync-bug-dynatrace.apps.aap-dt.ocp4.testing.ansible.com -d [NOTE] ==== You do not need the port as it is specified on the Route (targetPort). -==== \ No newline at end of file +==== diff --git a/downstream/modules/eda/proc-eda-delete-rulebook-activations.adoc b/downstream/modules/eda/proc-eda-delete-rulebook-activations.adoc index 0a510d8df0..da43e61516 100644 --- a/downstream/modules/eda/proc-eda-delete-rulebook-activations.adoc +++ b/downstream/modules/eda/proc-eda-delete-rulebook-activations.adoc @@ -2,7 +2,9 @@ = Deleting rulebook activations +.Procedure + . Select the btn:[More Actions] icon *{MoreActionsIcon}* next to the *Rulebook Activation enabled/disabled* toggle. . Select btn:[Delete rulebook activation]. -. In the popup window, select btn:[Yes, I confirm that I want to delete these X rulebook activations]. +. In the window, select btn:[Yes, I confirm that I want to delete these X rulebook activations]. . Select btn:[Delete rulebook activations]. diff --git a/downstream/modules/eda/proc-eda-enable-rulebook-activations.adoc b/downstream/modules/eda/proc-eda-enable-rulebook-activations.adoc index 9657ef0aa3..7bce0494f4 100644 --- a/downstream/modules/eda/proc-eda-enable-rulebook-activations.adoc +++ b/downstream/modules/eda/proc-eda-enable-rulebook-activations.adoc @@ -2,6 +2,8 @@ = Enabling and disabling rulebook activations +.Procedure + . Select the switch on the row level to enable or disable your chosen rulebook. -. In the popup window, select btn:[Yes, I confirm that I want to enable/disable these X rulebook activations]. +. In the window, select btn:[Yes, I confirm that I want to enable/disable these X rulebook activations]. . Select btn:[Enable/Disable rulebook activation]. diff --git a/downstream/modules/eda/proc-eda-restart-rulebook-activations.adoc b/downstream/modules/eda/proc-eda-restart-rulebook-activations.adoc index 0ae85f2aab..7347a30c71 100644 --- a/downstream/modules/eda/proc-eda-restart-rulebook-activations.adoc +++ b/downstream/modules/eda/proc-eda-restart-rulebook-activations.adoc @@ -7,7 +7,9 @@ You can only restart a rulebook activation if it is currently enabled and the restart policy was set to *Always* when it was created. ==== +.Procedure + . Select the btn:[More Actions] icon *{MoreActionsIcon}* next to *Rulebook Activation enabled/disabled* toggle. . Select btn:[Restart rulebook activation]. -. In the popup window, select btn:[Yes, I confirm that I want to restart these X rulebook activations]. +. In the window, select btn:[Yes, I confirm that I want to restart these X rulebook activations]. . Select btn:[Restart rulebook activations]. diff --git a/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc b/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc index 842301f685..5652ba45ad 100644 --- a/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc +++ b/downstream/modules/eda/proc-eda-set-up-rulebook-activation.adoc @@ -7,11 +7,10 @@ * You are logged in to the {PlatformNameShort} Dashboard as a Content Consumer. * You have set up a project. * You have set up a decision environment. -* You have set up an {ControllerName} token. .Procedure // [ddacosta] I'm not sure whether there will be an EDA specific dashboard in the gateway. Step 1 might need to change to something like "Log in to AAP". -. Log in to the {PlatformNameShort} Dashboard. +. Log in to the {PlatformNameShort}. . Navigate to the {MenuADRulebookActivations}. . Click btn:[Create rulebook activation]. . Insert the following: @@ -25,7 +24,7 @@ Credential:: Select 0 or more credentials for this rulebook activation. This fie + [NOTE] ==== -The credentials that display in this field are customized based on your rulebook activation and will only include the following credential types: Vault, {PlatformName}, or any custom credential types that you have created. For more information on credentials, see link:https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.4/html/event-driven_ansible_controller_user_guide/eda-credentials#eda-credentials[Setting up credentials for {EDAcontroller}]. +The credentials that display in this field are customized based on your rulebook activation and only include the following credential types: Vault, {PlatformName}, or any custom credential types that you have created. For more information about credentials, see xref:eda-credentials[Setting up credentials for {EDAcontroller}]. ==== //[J. Self] Might need to update the link above for the updated Credentials section. Decision environment:: Decision environments are a container image to run Ansible rulebooks. @@ -36,24 +35,33 @@ In {EDAcontroller}, you cannot customize the pull policy of the decision environ By default, it follows the behavior of the *always* policy. Every time an activation is started, the system tries to pull the most recent version of the image. ==== -Restart policy:: This is a policy to decide when to restart a rulebook. +Restart policy:: This is the policy that determines how an activation should restart after the container process running the source plugin ends. *** Policies: -... Always: Restarts when a rulebook finishes -... Never: Never restarts a rulebook when it finishes -... On failure: Only restarts when it fails -Service Name:: This defines a service name for Kubernetes to configure inbound connections if the activation exposes a port. This field is optional. +... *Always*: This restarts the rulebook activation immediately, regardless of whether it ends successfully or not, and occurs no more than 5 times. +... *Never*: This never restarts a rulebook activation when the container process ends. +... *On failure*: This restarts the rulebook activation after 60 seconds by default, only when the container process fails, and occurs no more than 5 times. +Log level:: This field defines the severity and type of content in your logged events. +*** Levels: +... *Error*: Logs that contain error messages that are displayed in the *History* tab of an activation. +... *Info*: Logs that contain useful information about rulebook activations, such as a success or failure, triggered action names and their related action events, and errors. +... *Debug*: Logs that contain information that is only useful during the debug phase and might be of little value during production. +This log level includes both error and log level data. +Service name:: This defines a service name for Kubernetes to configure inbound connections if the activation exposes a port. This field is optional. Rulebook activation enabled?:: This automatically enables the rulebook activation to run. -Variables:: The variables for the rulebook are in a JSON/YAML format. +Variables:: The variables for the rulebook are in a JSON or YAML format. The content would be equivalent to the file passed through the `--vars` flag of ansible-rulebook command. +Options:: Check the *Skip audit events* option if you do not want to see your events in the Rule Audit. . Click btn:[Create rulebook activation]. Your rulebook activation is now created and can be managed on the *Rulebook Activations* page. -After saving the new rulebook activation, the rulebook activation's details page is displayed. -From there or the *Rulebook Activations* list view, you can edit or delete it. +After saving the new rulebook activation, the rulebook activation's details page is displayed, with either a *Pending*, *Running*, or *Failed* status. +From there or the *Rulebook Activations* list view, you can restart or delete it. [NOTE] ==== -Occasionally, when a source plugin shuts down, it causes a rulebook to exit gracefully after a certain amount of time. When a rulebook activation shuts down, any tasks that are waiting to be performed will be canceled, and an info level message will be sent to the activation log. For more information, see link:https://ansible.readthedocs.io/projects/rulebook/en/stable/rulebooks.html#[Rulebooks]. -==== \ No newline at end of file +Occasionally, when a source plugin shuts down, it causes a rulebook to exit gracefully after a certain amount of time. +When a rulebook activation shuts down, any tasks that are waiting to be performed will be canceled, and an info level message is sent to the activation log. +For more information, see link:https://ansible.readthedocs.io/projects/rulebook/en/stable/rulebooks.html#[Rulebooks]. +==== diff --git a/downstream/modules/eda/proc-eda-view-activation-output.adoc b/downstream/modules/eda/proc-eda-view-activation-output.adoc index 2143d3ff74..8fd7436e4b 100644 --- a/downstream/modules/eda/proc-eda-view-activation-output.adoc +++ b/downstream/modules/eda/proc-eda-view-activation-output.adoc @@ -7,7 +7,7 @@ You can view the output of the activations in the *History* tab. .Procedure . Select the *History* tab to access the list of all the activation instances. An activation instance represents a single execution of the activation. -. Then select the activation instance in question, this will show you the *Output* produced by that specific execution. +. Then select the activation instance in question, this shows you the *Output* produced by that specific execution. //Replace this screenshot with current view image::eda-rulebook-activation-history.png[Rulebook activation history] From 465c34bfae80a58f45649fa6957342d311d9f958 Mon Sep 17 00:00:00 2001 From: Elizabeth Murtough <114593312+emurtoug@users.noreply.github.com> Date: Fri, 6 Sep 2024 11:45:28 +0100 Subject: [PATCH 120/590] AAP-28228 added OCP assembly (#1837) (#1839) --- .../assemblies/topologies/assembly-ocp-topologies.adoc | 9 +++++++++ downstream/titles/topologies/master.adoc | 1 + 2 files changed, 10 insertions(+) create mode 100644 downstream/assemblies/topologies/assembly-ocp-topologies.adoc diff --git a/downstream/assemblies/topologies/assembly-ocp-topologies.adoc b/downstream/assemblies/topologies/assembly-ocp-topologies.adoc new file mode 100644 index 0000000000..33d355972e --- /dev/null +++ b/downstream/assemblies/topologies/assembly-ocp-topologies.adoc @@ -0,0 +1,9 @@ +[id="ocp-topologies"] + += Operator supported topologies + +The {OperatorPlatform} uses Red Hat OpenShift operators to deploy {PlatformNameShort} within Red Hat OpenShift. Customers manage the product and infrastructure lifecycle. + +//OCP growth topology + +//OCP enterprise topology \ No newline at end of file diff --git a/downstream/titles/topologies/master.adoc b/downstream/titles/topologies/master.adoc index c1f1c1dc64..24fefd7a82 100644 --- a/downstream/titles/topologies/master.adoc +++ b/downstream/titles/topologies/master.adoc @@ -18,5 +18,6 @@ include::topologies/assembly-rpm-topologies.adoc[leveloffset=+1] include::topologies/assembly-container-topologies.adoc[leveloffset=+1] //Operator supported topologies +include::topologies/assembly-ocp-topologies.adoc[leveloffset=+1] //Automation mesh nodes From 98acd805caa7b0c3ba4907f13ba9d3bea08103f0 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Fri, 6 Sep 2024 13:25:47 +0100 Subject: [PATCH 121/590] Add RPM and CONT modules to topology docs (#1841) (#1842) Create a document for supported topologies https://issues.redhat.com/browse/AAP-28228 --- .../assembly-container-topologies.adoc | 3 +- .../topologies/assembly-rpm-topologies.adoc | 4 +- .../modules/topologies/ref-cont-b-env-a.adoc | 83 +++++++++++++++++++ .../modules/topologies/ref-rpm-b-env-a.adoc | 65 +++++++++++++++ .../modules/topologies/ref-rpm-b-env-b.adoc | 65 +++++++++++++++ 5 files changed, 218 insertions(+), 2 deletions(-) create mode 100644 downstream/modules/topologies/ref-cont-b-env-a.adoc create mode 100644 downstream/modules/topologies/ref-rpm-b-env-a.adoc create mode 100644 downstream/modules/topologies/ref-rpm-b-env-b.adoc diff --git a/downstream/assemblies/topologies/assembly-container-topologies.adoc b/downstream/assemblies/topologies/assembly-container-topologies.adoc index 1ce1b61e24..973e61c93b 100644 --- a/downstream/assemblies/topologies/assembly-container-topologies.adoc +++ b/downstream/assemblies/topologies/assembly-container-topologies.adoc @@ -4,4 +4,5 @@ The containerized installer deploys {PlatformNameShort} on {RHEL} by using Podman which runs the platform in containers on host machines. Customers manage the product and infrastructure lifecycle. -//Container enterprise topology \ No newline at end of file +//Container enterprise topology +include::topologies/ref-cont-b-env-a.adoc[leveloffset=+1] \ No newline at end of file diff --git a/downstream/assemblies/topologies/assembly-rpm-topologies.adoc b/downstream/assemblies/topologies/assembly-rpm-topologies.adoc index 56f323f2ee..f0f0fad82f 100644 --- a/downstream/assemblies/topologies/assembly-rpm-topologies.adoc +++ b/downstream/assemblies/topologies/assembly-rpm-topologies.adoc @@ -5,5 +5,7 @@ The RPM installer deploys {PlatformNameShort} on {RHEL} by using RPMs to install the platform on host machines. Customers manage the product and infrastructure lifecycle. //RPM enterprise topology +include::topologies/ref-rpm-b-env-a.adoc[leveloffset=+1] -//RPM mixed enterprise topology \ No newline at end of file +//RPM mixed enterprise topology +include::topologies/ref-rpm-b-env-b.adoc[leveloffset=+1] \ No newline at end of file diff --git a/downstream/modules/topologies/ref-cont-b-env-a.adoc b/downstream/modules/topologies/ref-cont-b-env-a.adoc new file mode 100644 index 0000000000..263650edea --- /dev/null +++ b/downstream/modules/topologies/ref-cont-b-env-a.adoc @@ -0,0 +1,83 @@ +[id="cont-b-env-a"] += Container enterprise topology + +The enterprise topology is intended for organizations that require {PlatformNameShort} to be deployed with redundancy or higher compute for large volumes of automation. + +== Infrastructure topology + +Each VM has been tested with the following component requirements: 16 GB RAM, 4 CPU, 60 GB local disk, and 3000 IOPS. + +.Infrastructure topology +[options="header"] +|==== +| VM count | Purpose | Example VM names +| 2 | Platform gateway with Redis | automationgateway +| 2 | {ControllerNameStart} | automationcontroller +| 2 | {PrivateHubNameStart} with Redis | automationhub +| 2 | {EDAName} with Redis | automationedacontroller +| 1 | {AutomationMeshStart} hop node | hop_nodes +| 2 | {AutomationMeshStart} execution node | execution_nodes +| 1 | Externally managed database service | external_database +| 1 | HAProxy load balancer in front of platform gateway (externally managed) | N/A +|==== + +== Tested system configurations + +Red Hat has tested the following configurations to install and run {PlatformName}: + +.Tested system configurations +[options="header"] +|==== +| Type | Description +| Subscription +a| +* Valid {PlatformName} subscription +* Valid {RHEL} subscription (to consume the BaseOS and AppStream repositories) +| Operating system | {RHEL} 9.2 or later 64-bit (x86_64) +| Ansible-core | Ansible-core version 2.15 or later +| Browser | A currently supported version of Mozilla Firefox or Google Chrome. +| Database | PostgreSQL version 15 +|==== + +== Network ports + +{PlatformName} uses several ports to communicate with its services. These ports must be open and available for incoming connections to the {PlatformName} server in order for it to work. Ensure that these ports are available and are not blocked by the server firewall. + +.Network ports and protocols +[options="header"] +|==== +| Port number | Protocol | Service | Source | Destination +| 80/443 | TCP | HTTP/HTTPS | {EDAName} | {HubNameStart} +| 80/443 | TCP | HTTP/HTTPS | {EDAName} | {ControllerNameStart} +| 80/443 | TCP | HTTP/HTTPS | {ControllerNameStart} | {HubNameStart} +| 443 | TCP | HTTPS | HAProxy load balancer | Platform gateway +| 443 | TCP | HTTPS | Platform gateway | {ControllerNameStart} +| 443 | TCP | HTTPS | Platform gateway | {HubNameStart} +| 443 | TCP | HTTPS | Platform gateway | {EDAName} +| 5432 | TCP | PostgreSQL | {EDAName} | External database +| 5432 | TCP | PostgreSQL | Platform gateway | External database +| 5432 | TCP | PostgreSQL | {HubNameStart} | External database +| 5432 | TCP | PostgreSQL | {ControllerNameStart} | External database +| 27199 | TCP | Receptor | {ControllerNameStart} | Hop node and execution node +| 27199 | TCP | Receptor | Hop node | Execution node +| 6379 | TCP | Redis | {EDAName} | Platform gateway +| 6379 | TCP | Redis | {EDAName} | {HubNameStart} +| 6379 | TCP | Redis | {EDAName} | {EDAName} +| 6379 | TCP | Redis | Platform gateway | Platform gateway +| 6379 | TCP | Redis | Platform gateway | {HubNameStart} +| 6379 | TCP | Redis | Platform gateway | {EDAName} +| 16379 | TCP | Redis | Redis | Redis cluster node +| 8433 | TCP | HTTPS | Platform gateway | Platform gateway +| 50051 | TCP | gRPC | Platform gateway | Platform gateway +|==== + +== Storage requirements +* Execution environments are pulled into {ControllerName} hybrid nodes and execution nodes that run jobs. The size of these containers influences the storage requirements for `$PATH_WHERE_PODMAN_PUTS_CONTAINER_IMAGES`. + +* The primary determining factors for the size of the database and its storage volume, which defaults to `$POSTGRES_DEFAULT_DATA_DIR`, are: +** The quantity of job events (lines of output from {ControllerName} jobs) +** The quantity of days of job data that are retained + +* On execution nodes and {ControllerName} control and hybrid nodes, job output is buffered to the disk in `$NAME_OF_RECEPTOR_DIR_VAR`, which defaults to `/tmp`. + +* The size and quantity of collections synced to {HubName} influence the storage requirements of `$PATH_WHERE_PULP_STORES_COLLECTIONS`. diff --git a/downstream/modules/topologies/ref-rpm-b-env-a.adoc b/downstream/modules/topologies/ref-rpm-b-env-a.adoc new file mode 100644 index 0000000000..58690f6ec7 --- /dev/null +++ b/downstream/modules/topologies/ref-rpm-b-env-a.adoc @@ -0,0 +1,65 @@ +[id="rpm-b-env-a"] += RPM enterprise topology + +The enterprise topology is intended for organizations that require {PlatformNameShort} to be deployed with redundancy or higher compute for large volumes of automation. + +== Infrastructure topology + +Each VM has been tested with the following component requirements: 16 GB RAM, 4 CPU, 60 GB local disk, and 3000 IOPS. + +.Infrastructure topology +[options="header"] +|==== +| VM count | Purpose | Example VM names +| 2 | Platform gateway | automationgateway +| 2 | {ControllerNameStart} | automationcontroller +| 2 | {PrivateHubNameStart} | automationhub +| 2 | {EDAName} | automationedacontroller +| 1 | {AutomationMeshStart} hop node | hop_nodes +| 2 | {AutomationMeshStart} execution node | execution_nodes +| 1 | Externally managed database service | external_database +| 1 | HAProxy load balancer in front of platform gateway (externally managed) | N/A +|==== + +== Tested system configurations + +Red Hat has tested the following configurations to install and run {PlatformName}: + +.Tested system configurations +[options="header"] +|==== +| Type | Description +| Subscription | Valid {PlatformName} subscription +| Operating system | {RHEL} 9.2 or later 64-bit (x86) +| Ansible-core | Ansible-core version 2.15 or later +| Browser | A currently supported version of Mozilla Firefox or Google Chrome. +| Database | PostgreSQL version 15 +|==== + +== Network ports + +{PlatformName} uses several ports to communicate with its services. These ports must be open and available for incoming connections to the {PlatformName} server in order for it to work. Ensure that these ports are available and are not blocked by the server firewall. + +.Network ports and protocols +[options="header"] +|==== +| Port number | Protocol | Service | Source | Destination +| 80/443 | TCP | HTTP/HTTPS | {EDAName} | {HubNameStart} +| 80/443 | TCP | HTTP/HTTPS | {EDAName} | {ControllerNameStart} +| 80/443 | TCP | HTTP/HTTPS | {ControllerNameStart} | {HubNameStart} +| 443 | TCP | HTTPS | HAProxy load balancer | Platform gateway +| 443 | TCP | HTTPS | Platform gateway | {ControllerNameStart} +| 443 | TCP | HTTPS | Platform gateway | {HubNameStart} +| 443 | TCP | HTTPS | Platform gateway | {EDAName} +| 5432 | TCP | PostgreSQL | {EDAName} | External database +| 5432 | TCP | PostgreSQL | Platform gateway | External database +| 5432 | TCP | PostgreSQL | {HubNameStart} | External database +| 5432 | TCP | PostgreSQL | {ControllerNameStart} | External database +| 27199 | TCP | Receptor | {ControllerNameStart} | Hop node and execution node +| 27199 | TCP | Receptor | Hop node | Execution node +| 6379 | TCP | Redis | {EDAName} | Platform gateway +| 6379 | TCP | Redis | Platform gateway | Platform gateway +| 16379 | TCP | Redis | Redis | Redis cluster node +| 8443 | TCP | HTTPS | Platform gateway | Platform gateway +| 50051 | TCP | gRPC | Platform gateway | Platform gateway +|==== \ No newline at end of file diff --git a/downstream/modules/topologies/ref-rpm-b-env-b.adoc b/downstream/modules/topologies/ref-rpm-b-env-b.adoc new file mode 100644 index 0000000000..0e5675fbc0 --- /dev/null +++ b/downstream/modules/topologies/ref-rpm-b-env-b.adoc @@ -0,0 +1,65 @@ +[id="rpm-b-env-b"] += RPM mixed enterprise topology + +The enterprise topology is intended for organizations that require {PlatformNameShort} to be deployed with redundancy or higher compute for large volumes of automation. The mixed topology has different versions of {PlatformNameShort} intended for configuring a new installation of {EDAcontroller} 1.1 with {ControllerName} 4.4 or 4.5. + +== Infrastructure topology + +Each VM has been tested with the following component requirements: 16 GB RAM, 4 CPU, 60 GB local disk, and 3000 IOPS. + +.Infrastructure topology +[options="header"] +|==== +| VM count | Purpose | {PlatformNameShort} version | Example VM names +| 2 | Platform gateway | 2.5 | automationgateway +| 2 | {ControllerNameStart} | 2.4 | automationcontroller +| 2 | {PrivateHubNameStart} | 2.4 | automationhub +| 2 | {EDAName} | 2.5 | automationedacontroller +| 1 | {AutomationMeshStart} hop node | 2.4 | hop_nodes +| 2 | {AutomationMeshStart} execution node | 2.4 | execution_nodes +| 1 | Externally managed database service | N/A | external_database +| 1 | HAProxy load balancer in front of platform gateway (externally managed) | N/A | N/A +|==== + +== Tested system configurations + +Red Hat has tested the following configurations to install and run {PlatformName}: + +.Tested system configurations +[options="header"] +|==== +| Type | Description +| Subscription | Valid {PlatformName} subscription +| Operating system | {RHEL} 9.2 or later 64-bit (x86_64) +| Ansible-core | Ansible-core version 2.15 or later +| Browser | A currently supported version of Mozilla Firefox or Google Chrome. +| Database | PostgreSQL version 15 +|==== + +== Network ports + +{PlatformName} uses several ports to communicate with its services. These ports must be open and available for incoming connections to the {PlatformName} server in order for it to work. Ensure that these ports are available and are not blocked by the server firewall. + +.Network ports and protocols +[options="header"] +|==== +| Port number | Protocol | Service | Source | Destination +| 80/443 | TCP | HTTP/HTTPS | {EDAName} | {HubNameStart} +| 80/443 | TCP | HTTP/HTTPS | {EDAName} | {ControllerNameStart} +| 80/443 | TCP | HTTP/HTTPS | {ControllerNameStart} | {HubNameStart} +| 443 | TCP | HTTPS | HAProxy load balancer | Platform gateway +| 443 | TCP | HTTPS | Platform gateway | {ControllerNameStart} +| 443 | TCP | HTTPS | Platform gateway | {HubNameStart} +| 443 | TCP | HTTPS | Platform gateway | {EDAName} +| 5432 | TCP | PostgreSQL | {EDAName} | External database +| 5432 | TCP | PostgreSQL | Platform gateway | External database +| 5432 | TCP | PostgreSQL | {HubNameStart} | External database +| 5432 | TCP | PostgreSQL | {ControllerNameStart} | External database +| 27199 | TCP | Receptor | {ControllerNameStart} | Hop node and Execution node +| 27199 | TCP | Receptor | Hop node | Execution node +| 6379 | TCP | Redis | {EDAName} | Platform gateway +| 6379 | TCP | Redis | Platform gateway | Platform gateway +| 16379 | TCP | Redis | Redis | Redis cluster node +| 8443 | TCP | HTTPS | Platform gateway | Platform gateway +| 50051 | TCP | gRPC | Platform gateway | Platform gateway +|==== \ No newline at end of file From 903b6b65300b38110f05b4daad31746828616618 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Fri, 6 Sep 2024 12:27:38 -0600 Subject: [PATCH 122/590] Fix Managing content document title to remove AAP (#1844) (#1845) --- downstream/titles/hub/managing-content/docinfo.xml | 2 +- downstream/titles/hub/managing-content/master.adoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/downstream/titles/hub/managing-content/docinfo.xml b/downstream/titles/hub/managing-content/docinfo.xml index 1c27ab4354..26b6154d33 100644 --- a/downstream/titles/hub/managing-content/docinfo.xml +++ b/downstream/titles/hub/managing-content/docinfo.xml @@ -1,4 +1,4 @@ -Managing content in automation hub +Managing automation content Red Hat Ansible Automation Platform 2.5 Create and manage collections, content and repositories in automation hub diff --git a/downstream/titles/hub/managing-content/master.adoc b/downstream/titles/hub/managing-content/master.adoc index 943dd4c74f..a077b78b4a 100644 --- a/downstream/titles/hub/managing-content/master.adoc +++ b/downstream/titles/hub/managing-content/master.adoc @@ -4,7 +4,7 @@ :experimental: include::attributes/attributes.adoc[] -= Managing content in automation hub += Managing automation content include::{Boilerplate}[] From 2aed18d4476bd6ffc3dbcf6392422f47dd49f0a1 Mon Sep 17 00:00:00 2001 From: Jameria Self <73364088+jself-sudoku@users.noreply.github.com> Date: Fri, 6 Sep 2024 19:33:26 -0400 Subject: [PATCH 123/590] AAP-22022 Document the 2.5 changes for Credentials (#1820) (#1847) * AAP-22022 Added new credential types topic and updated credentials topic * AAP-22022 Added new credential types topic and updates to credentials topic * AAP-22022 Added new credential types topic and updates to credentials topic * AAP-22022 Added new credential types topic and updates to credentials topic * AAP-22022 Credential content updates for 2.5 * AAP-22022 Updated credentials and created new credential type chapter * AAP-22022 Corrected module ID for creating a new credential type * AAP-22022 Removed cross reference to creating a credential * AAP-22022 Corrected module ID for creating a new credential type * AAP-22022 Corrected syntax in new creating a credential type module * AAP-22022 Removed + from syntax to correct numbering * AAP-22022 Corrected all syntax errors around code samples * AAP-22022 Corrected all syntax errors around code samples * AAP-22022 Corrected cross-reference to custom credentials topic * AAP-22022 Added comments to update graphics in the credential type procedure * AAP-22022 Final tweaks for SME review * AAP-22022 Fixed syntactical errors with code sections, etc. * AAP-22022 Fixed syntactical errors with code sections, etc. * AAP-22022 Final update from to in custom credential * AAP-22022 Corrected statement about EDA controller cred types and container registries * AAP-22022 Replaced Automation Decisions with the attribute * AAP-22022 Replaced Automation Execution with the attribute * AAP-22022 Incorporated feedback from SME Review (M. Kanoor) * AAP-22022 Incorporated feedback from SME Review (M. Kanoor) * AAP-22022 Incorporated feedback from SME Review (M. Kanoor) * AAP-22022 Applied updates from SME review feedback (M. Kanoor * AAP-22022 Applied additional updates based on SME review * AAP-22022 Applied additional updates based on SME review * AAP-22022 Remove references to files from content, per SME, as it is not supported --- .../eda/assembly-eda-credential-types.adoc | 15 +++ .../eda/assembly-eda-credentials.adoc | 11 +- .../eda/con-credential-types-list-view.adoc | 16 +++ .../eda/con-credentials-list-view.adoc | 10 +- .../eda/con-custom-credential-types.adoc | 57 ++++++++++ .../eda/proc-eda-delete-credential.adoc | 7 ++ .../modules/eda/proc-eda-edit-credential.adoc | 2 + .../eda/proc-eda-set-up-credential-types.adoc | 103 ++++++++++++++++++ .../eda/proc-eda-set-up-credential.adoc | 34 +++--- .../titles/eda/eda-user-guide/master.adoc | 2 + 10 files changed, 237 insertions(+), 20 deletions(-) create mode 100644 downstream/assemblies/eda/assembly-eda-credential-types.adoc create mode 100644 downstream/modules/eda/con-credential-types-list-view.adoc create mode 100644 downstream/modules/eda/con-custom-credential-types.adoc create mode 100644 downstream/modules/eda/proc-eda-set-up-credential-types.adoc diff --git a/downstream/assemblies/eda/assembly-eda-credential-types.adoc b/downstream/assemblies/eda/assembly-eda-credential-types.adoc new file mode 100644 index 0000000000..2b7900e934 --- /dev/null +++ b/downstream/assemblies/eda/assembly-eda-credential-types.adoc @@ -0,0 +1,15 @@ +[id="eda-credential-types"] + += Credential types + +{EDAcontroller} comes with several built-in credental types that you can use for syncing projects, running rulebook activations, executing job templates through {MenuTopAE} ({ControllerName}), fetching images from container registries, and processing data through event streams. + +These built-in credential types are not editable. So if you want credential types that support authentication with other systems, you can create your own credential types that can be used in your source plugins. Each credential type contains an input configuration and an injector configuration that can be passed to an Ansible rulebook to configure your sources. + +For more information, see xref:eda-custom-credential-types[Custom credential types]. +//[J. Self] Will add the cross-reference/link later. + + +include::eda/con-custom-credential-types.adoc[leveloffset=+1] +include::eda/proc-eda-set-up-credential-types.adoc[leveloffset=+1] + diff --git a/downstream/assemblies/eda/assembly-eda-credentials.adoc b/downstream/assemblies/eda/assembly-eda-credentials.adoc index 244c5f8baa..f887e6dc44 100644 --- a/downstream/assemblies/eda/assembly-eda-credentials.adoc +++ b/downstream/assemblies/eda/assembly-eda-credentials.adoc @@ -1,10 +1,15 @@ [id="eda-credentials"] -= Setting up credentials for {EDAcontroller} += Credentials + +You can use credentials to store secrets that can be used for authentication purposes with resources, such as decision environments, rulebook activations and projects for {EDAcontroller}, and projects for {ControllerName}. + +Credentials authenticate users when launching jobs against machines and importing project content from a version control system. + +You can grant users and teams the ability to use these credentials without exposing the credential to the user. If a user moves to a different team or leaves the organization, you do not have to rekey all of your systems just because that credential was previously available. -Credentials are used by {EDAName} for authentication when launching rulebooks. -include::eda/proc-eda-set-up-credential.adoc[leveloffset=+1] include::eda/con-credentials-list-view.adoc[leveloffset=+1] +include::eda/proc-eda-set-up-credential.adoc[leveloffset=+1] include::eda/proc-eda-edit-credential.adoc[leveloffset=+1] include::eda/proc-eda-delete-credential.adoc[leveloffset=+1] diff --git a/downstream/modules/eda/con-credential-types-list-view.adoc b/downstream/modules/eda/con-credential-types-list-view.adoc new file mode 100644 index 0000000000..9d1c192825 --- /dev/null +++ b/downstream/modules/eda/con-credential-types-list-view.adoc @@ -0,0 +1,16 @@ +[id="eda-credentials-list-view"] + += Credentials list view + +When you log in to the {PlatformNameShort} and select {MenuADCredentials}, the Credentials page has a pre-loaded *Decision Environment Container Registry* credential. When you create your own credentials, they will be added to this list view. . + +From the menu bar, you can search for credentials in the *Name* search field. + +You also have the following options in the menu bar: + +* Choose how fields are shown in the list view by clicking the btn:[Manage columns] icon. You have four options in which you can arrange your fields: +** *Column* - Shows the column in the table. +** *Description* - Shows the column when the item is expanded as a full width description. +** *Expanded* - Shows the column when the item is expanded as a detail. +** *Hidden* - Hides the column. +* Choose between a btn:[List view] or a btn:[Card view], by clicking the icons. diff --git a/downstream/modules/eda/con-credentials-list-view.adoc b/downstream/modules/eda/con-credentials-list-view.adoc index d56aec530b..9d1c192825 100644 --- a/downstream/modules/eda/con-credentials-list-view.adoc +++ b/downstream/modules/eda/con-credentials-list-view.adoc @@ -2,11 +2,15 @@ = Credentials list view -On the *Credentials* page, you can view the list of created credentials that you have created along with the *Type* of credential. +When you log in to the {PlatformNameShort} and select {MenuADCredentials}, the Credentials page has a pre-loaded *Decision Environment Container Registry* credential. When you create your own credentials, they will be added to this list view. . -From the menu bar, you can search for credentials in the *Name* field. +From the menu bar, you can search for credentials in the *Name* search field. You also have the following options in the menu bar: -* Choose which columns are shown in the list view by clicking btn:[Manage columns]. +* Choose how fields are shown in the list view by clicking the btn:[Manage columns] icon. You have four options in which you can arrange your fields: +** *Column* - Shows the column in the table. +** *Description* - Shows the column when the item is expanded as a full width description. +** *Expanded* - Shows the column when the item is expanded as a detail. +** *Hidden* - Hides the column. * Choose between a btn:[List view] or a btn:[Card view], by clicking the icons. diff --git a/downstream/modules/eda/con-custom-credential-types.adoc b/downstream/modules/eda/con-custom-credential-types.adoc new file mode 100644 index 0000000000..7977d55324 --- /dev/null +++ b/downstream/modules/eda/con-custom-credential-types.adoc @@ -0,0 +1,57 @@ +[id="eda-custom-credential-types"] + += Custom credential types + +As a system administrator, you can define a custom credential type that works in ways similar to existing credential types in a standard format using a YAML or JSON-like definition. + +Each credential type displays its own unique configurations in the Input Configuration field and the Injector Configuration field, if applicable. Custom credentials support Ansible extra variables as a means of injecting their authentication information. + +You can attach one or more cloud, vault, and {PlatformName} credentials to a rulebook activation. + +[NOTE] +==== +* When creating a new credential type, you must avoid collisions in the `extra_vars`. +* Extra variable names must not start with *EDA_* because they are reserved. +* You must have System administrator (superuser) permissions to be able to create and edit a credential type and to be able to view the *Injector configuration* field. +==== + +When you customize your own credential types, they will display on the Credential Types page along with a list of built-in credential types. + +Each credential type displays its own unique configurations in the Input Configuration and the Injector Configuration fields, if applicable. Both YAML and JSON formats are supported in the configuration fields. +//Note from J. Self: REVIEWERS, please confirm the Note above along with the paragraph about attachning one SSH and multiple clouds to a job template. I copied this from automation controller content, but not entirely sure it's relevant to EDA. + +[discrete] +== Input Configuration + +The Input configuration has two attributes: + +* fields - a collection of properties for a credential type. +* required - a list of required fields. + +Fields can have multiple properties, depending on the credential type you select. + +.Input Configuration Field Properties +[cols="a,a,a"] +|=== +| Fields | Description | Mandatory (Y/N) + +h| id | Unique id of the field; must be a string type and stores the variable name | Yes + +h| type | Can be string or boolean type | No, default is string + +h| label | Used by the UI when rendering the UI element | Yes + +h| secret | Will be encrypted | No, default false + +h| multiline | If the field contains data from a file the multiline can be set to True | No, default false + +h| help_text | The help text associated with this field | No + +|=== + +[discrete] +== Injector Configuration + +You can use the Injector configuration field to take the fields from input configuration field and map them into `extra_vars` that can be sent to ansible-rulebook when running the activation. The Injector currently only supports `extra_vars`. + +Injectors enable you to tailor the fields so that they can be injected into a rulebook as `extra_vars`, which cannot have duplicate keys at the top level. If you have two sources in a rulebook that both require a parameter called username and password, the injectors, along with the rulebook, help you tailor the arguments for each source. diff --git a/downstream/modules/eda/proc-eda-delete-credential.adoc b/downstream/modules/eda/proc-eda-delete-credential.adoc index da26398250..6f3c791780 100644 --- a/downstream/modules/eda/proc-eda-delete-credential.adoc +++ b/downstream/modules/eda/proc-eda-delete-credential.adoc @@ -2,12 +2,19 @@ = Deleting a credential +You can delete credentials if they are no longer needed for your organization. + .Procedure . Delete the credential by using one of these methods: * From the *Credentials* list view, click the btn:[More Actions] icon *{MoreActionsIcon}* next to the desired credential and click btn:[Delete credential]. * From the *Credentials* list view, select the name of the credential, click the btn:[More Actions] icon *{MoreActionsIcon}* next to btn:[Edit credential], and click btn:[Delete credential]. . In the pop-up window, select *Yes, I confirm that I want to delete this credential*. ++ +[NOTE] +==== +If your credential is still in use by other resources in your organization, a warning message is displayed letting you know that the credential cannot be deleted. Also, if your credential is being used in an event stream, you cannot delete it until the event stream is deleted or attached to a different credential. In general, avoid deleting a credential that is in use because it can lead to broken activations. +==== . Click btn:[Delete credential]. You can delete multiple credentials at a time by selecting the checkbox next to each credential and clicking the btn:[More Actions] icon *{MoreActionsIcon}* in the menu bar and then clicking btn:[Delete selected credentials]. diff --git a/downstream/modules/eda/proc-eda-edit-credential.adoc b/downstream/modules/eda/proc-eda-edit-credential.adoc index aadb801f03..12059fd745 100644 --- a/downstream/modules/eda/proc-eda-edit-credential.adoc +++ b/downstream/modules/eda/proc-eda-edit-credential.adoc @@ -2,6 +2,8 @@ = Editing a credential +You can edit existing credentials to ensure the appropriate level of access for your organization. + .Procedure . Edit the credential by using one of these methods: diff --git a/downstream/modules/eda/proc-eda-set-up-credential-types.adoc b/downstream/modules/eda/proc-eda-set-up-credential-types.adoc new file mode 100644 index 0000000000..d74e05858c --- /dev/null +++ b/downstream/modules/eda/proc-eda-set-up-credential-types.adoc @@ -0,0 +1,103 @@ +[id="eda-set-up-new-credential-types"] + += Creating a new credential type + +You can create a credential type to use with a source plugin that you select based on the supported, default credential types. You can make your credential type available to a team or individuals. + + +.Procedure + +. Log in to the {PlatformNameShort} Dashboard. +. From the navigation panel, select {MenuADCredentialType}. +. Click btn:[Create credential type]. +. Insert the following: ++ +Name:: Insert the name. +Description:: This field is optional. +. In the *Input Configuration* field, specify an input schema that defines a set of ordered fields for that type. The format can be in YAML or JSON: ++ +*YAML* ++ +[literal, options="nowrap" subs="+attributes"] +---- +fields: + - type: string + id: username + label: Username + - type: string + id: password + label: Password + secret: true +required: + - username + - password +---- ++ + +View more YAML examples at the link:https://yaml.org/spec/1.2.2/[YAML page]. ++ +*JSON* ++ +[literal, options="nowrap" subs="+attributes"] +---- +{ +"fields": [ + { + "type": "string", + "id": "username", + "label": "Username" + }, + { + "secret": true, + "type": "string", + "id": "password", + "label": "Password" + } + ], + "required": ["username", "password"] +} +---- ++ +View more JSON examples at link:https://www.json.org/json-en.html[The JSON website]. + +. In the *Injector Configuration* field, enter environment variables or extra variables that specify the values a credential type can inject. +The format can be in YAML or JSON (see examples in the previous step). ++ +The following configuration in JSON format shows each field and how they are used: ++ +[literal, options="nowrap" subs="+attributes"] +---- + +{ + "extra_vars": { + "some_extra_var": "{{ username }}:{{ password }}" + } +} +---- + +. Click btn:[Create credential type]. ++ +Your newly created credential type is displayed in the list of credential types: + ++ +image:credential-types-new-listed.png[New credential type] +//[JMS] Replace image with EDA version + +. Click the btn:[Edit credential type] image:leftpencil.png[Edit,15,15] icon to modify the credential type options. ++ +[NOTE] +==== +On the *Edit* page, you can modify the details or delete the credential. +If the *Delete* option is disabled, this means that the credential type is being used by a credential, and you must delete the credential type from all the credentials that use it before you can delete it. +==== + +.Verification + +* Verify that the newly created credential type can be selected from the *Credential Type* selection window when creating a new credential: ++ +image:credential-types-new-listed-verify.png[Verify new credential type] +//[JMS] Replace this image with up to date one, maybe? + +.Additional resources + +For information about how to create a new credential, see xref:eda-set-up-credential[Setting up credentials]. diff --git a/downstream/modules/eda/proc-eda-set-up-credential.adoc b/downstream/modules/eda/proc-eda-set-up-credential.adoc index 4b5c1d4839..7b73e59e27 100644 --- a/downstream/modules/eda/proc-eda-set-up-credential.adoc +++ b/downstream/modules/eda/proc-eda-set-up-credential.adoc @@ -2,35 +2,41 @@ = Setting up credentials -Create a credential to use with a private repository (GitHub or GitLab) or a private container registry. +You can create a credential to use with a source plugin or a private container registry that you select. You can make your credential available to a team or individuals. -[IMPORTANT] -==== -If you are using a GitHub or GitLab repository, use the `basic auth` method. -Both SCM servers are officially supported. -You can use any SCM provider that supports `basic auth`. -==== +//[IMPORTANT] +//==== +//If you are using a GitHub or GitLab repository, use the `basic auth` method. +//Both SCM servers are officially supported. +//You can use any SCM provider that supports `basic auth`. +//==== .Procedure // ddacosta: I'm not sure whether there will be an EDA specific dashboard in the gateway. Step 1 might need to change to something like "Log in to AAP". // Also, Credentials will be centrally defined at the platform level for 2.5. Steps here should be verified/rewritten as appropriate and possibly relocated to Authentication docs -. Log in to the {EDAcontroller} Dashboard. +. Log in to the {PlatformNameShort} Dashboard. . From the navigation panel, select {MenuADCredentials}. . Click btn:[Create credential]. . Insert the following: + Name:: Insert the name. Description:: This field is optional. -Credential type:: The options available are a GitHub personal access token, a GitLab personal access token, or a container registry. -Username:: Insert the username. -Token:: Insert a token that allows you to authenticate to your destination. +Organization:: Click the list to select an organization or select *Default*. +Credential type:: Click the list to select your Credential type. + [NOTE] ==== -If you are using a container registry, the token field can be a token or a password, depending on the registry provider. -If you are using the {PlatformNameShort} hub registry, insert the password for that in the token field. -==== +When you select the credential type, the *Type Details* section is displayed with fields that are applicable for the credential type you chose. +==== + +//[JMS] Deleting this note for now. Not sure it's still relevant with all of the new credential types added to the list. +//[NOTE] +//==== +//If you are using a container registry, the token field can be a token or a password, depending on the registry provider. +//If you are using the {PlatformNameShort} hub registry, insert the password for that in the token field. +//==== + +. Complete the fields that are applicable to the credential type you selected. . Click btn:[Create credential]. After saving the credential, the credentials details page is displayed. diff --git a/downstream/titles/eda/eda-user-guide/master.adoc b/downstream/titles/eda/eda-user-guide/master.adoc index b549f64da4..8665de774e 100644 --- a/downstream/titles/eda/eda-user-guide/master.adoc +++ b/downstream/titles/eda/eda-user-guide/master.adoc @@ -14,6 +14,8 @@ Developed by Red Hat, this feature is designed for simplicity and flexibility. include::{Boilerplate}[] include::eda/assembly-eda-user-guide-overview.adoc[leveloffset=+1] include::eda/assembly-eda-credentials.adoc[leveloffset=+1] +include::eda/assembly-eda-credential-types.adoc[leveloffset=+1] + include::eda/assembly-eda-projects.adoc[leveloffset=+1] include::eda/assembly-eda-decision-environments.adoc[leveloffset=+1] include::eda/assembly-eda-set-up-rhaap-credential.adoc[leveloffset=+1] From 2dac73fb4341486f969a35da7f8b83aae63e0921 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Mon, 9 Sep 2024 10:34:43 +0100 Subject: [PATCH 124/590] Add CONT-A-ENV-A to topology docs (#1849) (#1850) Create a document for supported topologies https://issues.redhat.com/browse/AAP-28228 --- .../assembly-container-topologies.adoc | 3 + .../modules/topologies/ref-cont-a-env-a.adoc | 61 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 downstream/modules/topologies/ref-cont-a-env-a.adoc diff --git a/downstream/assemblies/topologies/assembly-container-topologies.adoc b/downstream/assemblies/topologies/assembly-container-topologies.adoc index 973e61c93b..8df6e7b7a6 100644 --- a/downstream/assemblies/topologies/assembly-container-topologies.adoc +++ b/downstream/assemblies/topologies/assembly-container-topologies.adoc @@ -4,5 +4,8 @@ The containerized installer deploys {PlatformNameShort} on {RHEL} by using Podman which runs the platform in containers on host machines. Customers manage the product and infrastructure lifecycle. +//Container growth topology +include::topologies/ref-cont-a-env-a.adoc[leveloffset=+1] + //Container enterprise topology include::topologies/ref-cont-b-env-a.adoc[leveloffset=+1] \ No newline at end of file diff --git a/downstream/modules/topologies/ref-cont-a-env-a.adoc b/downstream/modules/topologies/ref-cont-a-env-a.adoc new file mode 100644 index 0000000000..3dca043419 --- /dev/null +++ b/downstream/modules/topologies/ref-cont-a-env-a.adoc @@ -0,0 +1,61 @@ +[id="cont-a-env-a"] += Container growth topology + +The growth topology is intended for organizations that do not require {PlatformNameShort} to be deployed with redundancy or higher compute for large volumes of automation. + +== Infrastructure topology + +Each VM has been tested with the following component requirements: 16 GB RAM, 4 CPU, 60 GB local disk, and 3000 IOPS. Resources, such as storage, can be increased based on the needs of the deployment. + +.Infrastructure topology +[options="header"] +|==== +| Purpose | Example group names +| All {PlatformNameShort} components +a| +* automationgateway +* automationcontroller +* automationhub +* automationedacontroller +* database +|==== + +== Tested system configurations + +Red Hat has tested the following configurations to install and run {PlatformName}: + +.Tested system configurations +[options="header"] +|==== +| Type | Description +| Subscription +a| +* Valid {PlatformName} subscription +* Valid {RHEL} subscription (to consume the BaseOS and AppStream repositories) +| Operating system | {RHEL} 9.2 or later 64-bit (x86_64) +| Ansible-core | Ansible-core version 2.15 or later +| Browser | A currently supported version of Mozilla Firefox or Google Chrome. +| Database | PostgreSQL version 15 +|==== + +== Network ports + +{PlatformName} uses several ports to communicate with its services. These ports must be open and available for incoming connections to the {PlatformName} server in order for it to work. Ensure that these ports are available and are not blocked by the server firewall. + +.Network ports and protocols +[options="header"] +|==== +| Port number | Protocol | Service | Source | Destination +| 80/443 | TCP | HTTP/HTTPS | {EDAName} | {HubNameStart} +| 80/443 | TCP | HTTP/HTTPS | {EDAName} | {ControllerNameStart} +| 80/443 | TCP | HTTP/HTTPS | {ControllerNameStart} | {HubNameStart} +| 443 | TCP | HTTPS | Platform gateway | {ControllerNameStart} +| 443 | TCP | HTTPS | Platform gateway | {HubNameStart} +| 443 | TCP | HTTPS | Platform gateway | {EDAName} +| 5432 | TCP | PostgreSQL | {EDAName} | External database +| 5432 | TCP | PostgreSQL | Platform gateway | External database +| 5432 | TCP | PostgreSQL | {HubNameStart} | External database +| 5432 | TCP | PostgreSQL | {ControllerNameStart} | External database +| 8433 | TCP | HTTPS | Platform gateway | Platform gateway +| 50051 | TCP | gRPC | Platform gateway | Platform gateway +|==== \ No newline at end of file From 61b9c40c4e181353248eb12d404897111cda1a93 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Mon, 9 Sep 2024 12:06:05 +0100 Subject: [PATCH 125/590] Update containerized install guide (#1851) (#1852) * Update containerized install guide Containerized installer - implement hackathon docs feedback https://issues.redhat.com/browse/AAP-30481 * updates based on peer review feedback * updates based on peer review feedback --- ...sembly-aap-containerized-installation.adoc | 37 ++++++++------- .../proc-downloading-containerized-aap.adoc | 18 ++++---- .../proc-installing-ansible-core.adoc | 22 ++++----- .../proc-installing-containerized-aap.adoc | 45 ++++++++----------- ...l-host-for-containerized-installation.adoc | 38 +++++++++------- .../proc-uninstalling-containerized-aap.adoc | 18 ++++---- .../platform/proc-using-postinstall.adoc | 42 +++++++++-------- ...ccessing-control-auto-hub-eda-control.adoc | 18 +++----- .../platform/ref-adding-execution-nodes.adoc | 16 ++++--- ...ef-containerized-troubleshoot-install.adoc | 18 ++++++++ ...-hub-collection-and-container-signing.adoc | 8 ++-- ...ef-using-custom-receptor-signing-keys.adoc | 6 +-- .../ref-using-custom-tls-certificates.adoc | 2 +- 13 files changed, 154 insertions(+), 134 deletions(-) diff --git a/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc b/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc index b93234912e..3de79ab8cc 100644 --- a/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc +++ b/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc @@ -15,7 +15,7 @@ endif::[] :context: aap-containerized-installation [role="_abstract"] -{PlatformNameShort} is a commercial offering that helps teams manage complex multitiered deployments by adding control, knowledge, and delegation to Ansible-powered environments. +{PlatformNameShort} is a commercial offering that helps teams manage complex multi-tier deployments by adding control, knowledge, and delegation to Ansible-powered environments. This guide helps you to understand the installation requirements and processes behind the containerized version of {PlatformNameShort}. @@ -26,32 +26,39 @@ include::snippets/container-upgrades.adoc[] .Prerequisites -* A RHEL 9.2 based host. Minimal operating system (OS) base install is recommended. +* A {RHEL} (RHEL) 9.2 based host. Minimal operating system (OS) base install is recommended. * A non-root user for the {RHEL} host, with sudo or other Ansible supported privilege escalation (sudo recommended). This user is responsible for the installation of containerized {PlatformNameShort}. -* It is recommended that you set up an *SSH public key authentication* for the non-root user. For guidelines on setting up an SSH public key authentication for the non-root user, see link:https://access.redhat.com/solutions/4110681[How to configure SSH public key authentication for passwordless login]. -* SSH keys are only required when installing on remote hosts. If doing a self contained local VM based installation, you can use *ansible_connection: local*. -* Internet access from the {RHEL} host if using the default online installation method. +* It is recommended that you set up SSH public key authentication for the non-root user. For guidelines on setting up SSH public key authentication for the non-root user, see link:https://access.redhat.com/solutions/4110681[How to configure SSH public key authentication for passwordless login]. +** SSH keys are only required when installing on remote hosts. If doing a self contained local VM based installation, you can use *ansible_connection: local*. +* Internet access from the {RHEL} host if you are using the default online installation method. +* The appropriate network ports are open if a firewall is in place. For more information about the ports to open, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/supported_deployment_models_for_ansible_automation_platform[Container supported topologies] in _{TitleTopologies}_. -== System Requirements -Your system must meet the following minimum system requirements to install and run Red Hat Containerized {PlatformNameShort}. -[cols=2] -|====================== -| Memory | 16Gb RAM -| CPU | 4 CPU -| Disk space | 40Gb -| Disk IOPS | 1500 -|====================== +== Supported deployment topologies +Red Hat tests {PlatformNameShort} {PlatformVers} with a defined set of topologies to provide you with opinionated deployment options. The supported topologies include infrastructure topology, tested system configurations, example inventory files, and network ports information. +For more information about the supported topologies for containerized {PlatformNameShort}, see link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/supported_deployment_models_for_ansible_automation_platform[Container supported topologies] in _{TitleTopologies}_. +== System requirements +Each virtual machine (VM) has the following system requirements: + +[cols=2,options="header"] +|==== +| Requirement | Minimum requirement +| RAM | 16 GB +| CPUs | 4 +| Local disk | 60 GB +| Disk IOPS | 3000 +|==== + include::platform/proc-preparing-the-rhel-host-for-containerized-installation.adoc[leveloffset=+1] include::platform/proc-installing-ansible-core.adoc[leveloffset=+1] include::platform/proc-downloading-containerized-aap.adoc[leveloffset=+1] -include::platform/proc-using-postinstall.adoc[leveloffset=+1] include::platform/proc-installing-containerized-aap.adoc[leveloffset=+1] +include::platform/proc-using-postinstall.adoc[leveloffset=+1] include::platform/ref-accessing-control-auto-hub-eda-control.adoc[leveloffset=+1] include::platform/ref-using-custom-tls-certificates.adoc[leveloffset=+1] include::platform/ref-using-custom-receptor-signing-keys.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/proc-downloading-containerized-aap.adoc b/downstream/modules/platform/proc-downloading-containerized-aap.adoc index c75fe43ad1..b3f839171e 100644 --- a/downstream/modules/platform/proc-downloading-containerized-aap.adoc +++ b/downstream/modules/platform/proc-downloading-containerized-aap.adoc @@ -8,23 +8,23 @@ .Procedure -. Download the latest installer .tar file from link:{PlatformDownloadUrl}[access.redhat.com]. This can be done directly within the {RHEL} host, which saves time. +. Download the latest installer .tar file from the link:{PlatformDownloadUrl}[{PlatformNameShort} download page]. -. If you have downloaded the .tar file and optional manifest .zip file onto your laptop, copy them onto your {RHEL} host. -+ -Decide where you want the installation program to reside on the filesystem. Installation related files will be created under this location and require at least 10Gb for the initial installation. -+ -. Unpack the installation program .tar file into your installation directory, and navigate to the unpacked directory. +. Copy the installer .tar file and the optional manifest .zip file onto your {RHEL} host. + +. Decide where you want the installer to reside on the file system. Installation related files are created under this location and require at least 10 GB for the initial installation. + +. Unpack the installer .tar file into your installation directory, and go to the unpacked directory. + -.. online installer +.. For the online installer: + ---- $ tar xfvz ansible-automation-platform-containerized-setup-.tar.gz ---- + -.. bundled installer +.. For the bundled installer: + ---- -$ tar xfvz ansible-automation-platform-containerized-setup-bundle--.tar.gz +$ tar xfvz ansible-automation-platform-containerized-setup-bundle--.tar.gz ---- diff --git a/downstream/modules/platform/proc-installing-ansible-core.adoc b/downstream/modules/platform/proc-installing-ansible-core.adoc index 23202ee3b9..e970b6d2d4 100644 --- a/downstream/modules/platform/proc-installing-ansible-core.adoc +++ b/downstream/modules/platform/proc-installing-ansible-core.adoc @@ -2,21 +2,23 @@ [id="installing-ansible-core_{context}"] -= Installing ansible-core - -[role="_abstract"] - - += Installing ansible-core on the RHEL host .Procedure - -. Install ansible-core and other tools: +. From your RHEL host, install `ansible-core`: + ---- -sudo dnf install -y ansible-core wget git rsync +sudo dnf install -y ansible-core ---- -. Set a fully qualified hostname: ++ +. Optionally, you can install additional utilities that can be useful for troubleshooting purposes, for example `wget`, `git`, `rsync`, and `vim`: ++ +---- +sudo dnf install -y wget git rsync vim +---- ++ +. Set a hostname that is a fully qualified domain name (FQDN): + ---- -sudo hostnamectl set-hostname your-FQDN-hostname +sudo hostnamectl set-hostname ---- diff --git a/downstream/modules/platform/proc-installing-containerized-aap.adoc b/downstream/modules/platform/proc-installing-containerized-aap.adoc index 1b1c698689..8a7de59cfa 100644 --- a/downstream/modules/platform/proc-installing-containerized-aap.adoc +++ b/downstream/modules/platform/proc-installing-containerized-aap.adoc @@ -7,16 +7,13 @@ [role="_abstract"] -Installation of {PlatformNameShort} is controlled with inventory files. Inventory files define the hosts and containers used and created, variables for components, and other information needed to customize the installation. +You can control the installation of {PlatformNameShort} with inventory files. Inventory files define the hosts and containers used and created, variables for components, and other information needed to customize the installation. -For convenience an example inventory file is provided, that you can copy and modify to quickly get started. +You can find example inventory files for containerized {PlatformNameShort} in link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/supported_deployment_models_for_ansible_automation_platform[Container supported topologies] in _{TitleTopologies}_. -[NOTE] -==== -There is no default database choice given in the inventory file. You must follow the instructions in the inventory file to make the appropriate choice between an internally provided Postgres, or provide your own externally managed and supported database option. -==== +Additionally, for convenience, an example `inventory` file is provided that you can copy and change to quickly get started. -Edit the inventory file by replacing the `< >` placeholders with your specific variables, and uncommenting any lines specific to your needs. Refer to the `README.md` file for more information about optional and required variables. +Edit the `inventory` file by replacing the `< >` placeholders with your specific variables, and uncommenting any lines specific to your needs. Refer to the `README.md` file in the installation directory for more information about optional and required variables. ---- @@ -170,24 +167,7 @@ gateway_pg_password= #receptor_signing_public_key= ---- -Use the following command to install containerized {PlatformNameShort}: - ----- -ansible-playbook -i inventory ansible.containerized_installer.install ----- - - -[NOTE] -==== - If your privilege escalation requires a password to be entered, append *-K* to the command line. You will then be prompted for the *BECOME* password. -==== - -You can use increasing verbosity, up to 4 v's (-vvvv) to see the details of the installation process. - -[NOTE] -==== -This can significantly increase installation time, so it is recommended that you use it only as needed or requested by Red Hat support. -==== +* There is no default database choice in the example inventory file. Follow the instructions in the inventory file to make the appropriate choice between an internally provided Postgres, or provide your own externally managed and supported database option. .Configuring a HAProxy load balancer @@ -201,4 +181,17 @@ gateway_main_url= [NOTE] ==== HAProxy SSL passthrough mode is not supported with platform gateway. -==== \ No newline at end of file +==== + +.Installing containerized {PlatformNameShort} + +Use the following command to install containerized {PlatformNameShort}: + +---- +ansible-playbook -i inventory ansible.containerized_installer.install +---- + +* If your privilege escalation requires a password to be entered, append `-K` to the command line. You are then prompted for the `BECOME` password. +* You can use increasing verbosity, up to 4 v's (`-vvvv`) to see the details of the installation process. However, it is important to note that this can significantly increase installation time, so it is recommended that you use it only as needed or requested by Red Hat support. + + diff --git a/downstream/modules/platform/proc-preparing-the-rhel-host-for-containerized-installation.adoc b/downstream/modules/platform/proc-preparing-the-rhel-host-for-containerized-installation.adoc index e95525966c..a046e6e2ee 100644 --- a/downstream/modules/platform/proc-preparing-the-rhel-host-for-containerized-installation.adoc +++ b/downstream/modules/platform/proc-preparing-the-rhel-host-for-containerized-installation.adoc @@ -8,33 +8,39 @@ .Procedure -Containerized {PlatformNameShort} runs the component services as podman based containers on top of a RHEL host. The installer takes care of this once the underlying host has been prepared. Use the following instructions for this. +Containerized {PlatformNameShort} runs the component services as Podman based containers on top of a RHEL host. The installer takes care of this once the underlying host has been prepared. -. Log into your RHEL host as your non-root user. +Use the following instructions to prepare the RHEL host: -. Run *dnf repolist* to validate only the BaseOS and appstream repos are setup and enabled on the host: +. Log in to the RHEL host as your non-root user. + +. Register your RHEL host with `subscription-manager`: + ---- -$ dnf repolist +sudo subscription-manager register +---- ++ + +. Run `sudo dnf repolist` to validate that only the BaseOS and AppStream repositories are setup and enabled on the host: ++ +---- +$ sudo dnf repolist Updating Subscription Management repositories. repo id repo name rhel-9-for-x86_64-appstream-rpms Red Hat Enterprise Linux 9 for x86_64 - AppStream (RPMs) rhel-9-for-x86_64-baseos-rpms Red Hat Enterprise Linux 9 for x86_64 - BaseOS (RPMs) ---- + -. Ensure that these repos and only these repos are available to the host OS. If you need to know how to do this use this guide: -link:{BaseURL}/red_hat_enterprise_linux/9/html/managing_software_with_the_dnf_tool/assembly_managing-custom-software-repositories_managing-software-with-the-dnf-tool[Chapter 10. Managing custom software repositories Red Hat Enterprise Linux] - -. Ensure that the host has DNS configured and can resolve hostnames and IPs using a fully qualified domain name (FQDN). This is essential to ensure services can talk to one another. - -.Using unbound DNS - -To configure unbound DNS refer to link:{BaseURL}/red_hat_enterprise_linux/9/html/managing_networking_infrastructure_services/assembly_setting-up-an-unbound-dns-server_networking-infrastructure-services[Chapter 2. Setting up an unbound DNS server Red Hat Enterprise Linux 9]. +. Ensure that only these repositories are available to the RHEL host. For more information about managing custom repositories, see: +link:{BaseURL}/red_hat_enterprise_linux/9/html/managing_software_with_the_dnf_tool/assembly_managing-custom-software-repositories_managing-software-with-the-dnf-tool[Chapter 10. Managing custom software repositories]. -.Using BIND DNS +. Ensure that the host has DNS configured and can resolve host names and IP addresses by using a fully qualified domain name (FQDN). This is essential to ensure services can talk to one another. -To configure DNS using BIND refer to link:{BaseURL}/red_hat_enterprise_linux/9/html/managing_networking_infrastructure_services/assembly_setting-up-and-configuring-a-bind-dns-server_networking-infrastructure-services[Chapter 1. Setting up and configuring a BIND DNS server Red Hat Enterprise Linux 9]. +. Optional: To have the installer automatically pick up and apply your {PlatformNameShort} subscription manifest license, follow the steps in link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_operations_guide/assembly-aap-obtain-manifest-files[Chapter 2. Obtaining a manifest file]. -.Optional +[role="_additional-resources"] +.Additional resources +* For more information about registering your RHEL system, see link:{BaseURL}/subscription_central/1-latest/html-single/getting_started_with_rhel_system_registration/index[Getting Started with RHEL System Registration]. +* For information about configuring unbound DNS, see link:{BaseURL}/red_hat_enterprise_linux/9/html/managing_networking_infrastructure_services/assembly_setting-up-an-unbound-dns-server_networking-infrastructure-services[Chapter 2. Setting up an unbound DNS server]. +* For information about configuring DNS using BIND, see link:{BaseURL}/red_hat_enterprise_linux/9/html/managing_networking_infrastructure_services/assembly_setting-up-and-configuring-a-bind-dns-server_networking-infrastructure-services[Chapter 1. Setting up and configuring a BIND DNS server]. -To have the installer automatically pick up and apply your {PlatformNameShort} subscription manifest license, use this guide to generate a manifest file which can be downloaded for the installer: link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_operations_guide/assembly-aap-obtain-manifest-files[Chapter 2. Obtaining a manifest file Red Hat Ansible Automation Platform 2.]. diff --git a/downstream/modules/platform/proc-uninstalling-containerized-aap.adoc b/downstream/modules/platform/proc-uninstalling-containerized-aap.adoc index 973679b5c2..9bc33ca7f2 100644 --- a/downstream/modules/platform/proc-uninstalling-containerized-aap.adoc +++ b/downstream/modules/platform/proc-uninstalling-containerized-aap.adoc @@ -6,29 +6,29 @@ [role="_abstract"] -To uninstall a containerized deployment, execute the *uninstall.yml* playbook. +To uninstall a containerized deployment, run the `uninstall.yml` playbook: ---- $ ansible-playbook -i inventory ansible.containerized_installer.uninstall ---- -This will stop all systemd units and containers and then delete all resources used by the containerized installer such as: +This stops all systemd units and containers and then delete all resources used by the containerized installer such as: -* config and data directories/files +* config and data directories and files * systemd unit files -* podman containers and images +* Podman containers and images * RPM packages -To keep container images, you can set the *container_keep_images* variable to true. +To keep container images, you can set the `container_keep_images` variable to `true`. ---- $ ansible-playbook -i inventory ansible.containerized_installer.uninstall -e container_keep_images=true ---- -To keep postgresql databases, you can set the *postgresql_keep_databases* variable to true. +To keep PostgreSQL databases, you can set the `postgresql_keep_databases` variable to `true`. ---- -$ ansible-playbook -i ansible.containerized_installer.uninstall -e postgresql_keep_databases=true +$ ansible-playbook -i inventory ansible.containerized_installer.uninstall -e postgresql_keep_databases=true ---- [NOTE] ==== -You will have to use the same django secret key values rather than the auto-generated ones. -==== \ No newline at end of file +Use the {PlatformNameShort} secret key values rather than the auto-generated ones. +==== diff --git a/downstream/modules/platform/proc-using-postinstall.adoc b/downstream/modules/platform/proc-using-postinstall.adoc index da3df34d16..3a3ae6e7c0 100644 --- a/downstream/modules/platform/proc-using-postinstall.adoc +++ b/downstream/modules/platform/proc-using-postinstall.adoc @@ -2,55 +2,53 @@ [id="using-postinstall_{context}"] -= Using postinstall feature of containerized {PlatformNameShort} += Using the postinstall feature of containerized {PlatformNameShort} [role="_abstract"] -Use the postinstaller feature of containerized {PlatformNameShort} to define and load the configuration during the initial installation. This uses a configuration-as-code approach, where you simply define your configuration to be loaded as simple YAML files. +You can use the optional postinstall feature of containerized {PlatformNameShort} to define and load the configuration during the initial installation. This uses a configuration-as-code approach, where you simply define your configuration to be loaded as YAML files. -. To use this optional feature, you need to uncomment the following vars in the inventory file: -+ ----- -controller_postinstall=true ----- -+ +.Prerequisites +* An {PlatformNameShort} license for this feature that is on the local filesystem so it can be automatically loaded from the inventory file. -. The default is false, so you need to enable this to activate the postinstaller. You need a {PlatformNameShort} license for this feature that must reside on the local filesystem so it can be automatically loaded: + +.Procedure +. The postinstall feature is disabled by default. To use the postinstaller, uncomment the following variables in your inventory file: + ---- -controller_license_file=/full_path_to/manifest_file.zip +controller_postinstall=true +controller_license_file= ---- + - . You can pull your configuration-as-code from a Git based repository. To do this, set the following variables to dictate where you pull the content from and where to store it for upload to the {PlatformNameShort} controller: + ---- -controller_postinstall_repo_url=https://your_cac_scm_repo -controller_postinstall_dir=/full_path_to_where_you_want_the pulled_content_to_reside +controller_postinstall_repo_url= +controller_postinstall_dir= +controller_postinstall_repo_ref=main ---- + - -. The controller_postinstall_repo_url variable can be used to define the postinstall repository URL which must include authentication information. +. The `controller_postinstall_repo_url` variable can define the postinstall repository URL which must include authentication information. + ---- -http(s):///.git (public repository without http(s) authentication) -http(s)://:@:.git (private repository with http(s) authentication) -git@:.git (public/private repository with ssh authentication) +http(s):///.git (public repository without HTTP(S) authentication) +http(s)://:@:.git (private repository with HTTP(S) authentication) +git@:.git (public or private repository with SSH authentication) ---- + [NOTE] ==== -When using ssh based authentication, the installer does not configure anything for you, so you must configure everything on the installer node. +When using SSH based authentication, the installer does not configure anything for you, so you must configure everything on the installer node. ==== -Definition files use the link:https://console.redhat.com/ansible/automation-hub/namespaces/infra/[infra certified collections]. The link:https://console.redhat.com/ansible/automation-hub/repo/validated/infra/controller_configuration/[controller_configuration] collection is preinstalled as part of the installation and uses the installation controller credentials you supply in the inventory file for access into the {PlatformNameShort} controller. You simply need to give the YAML configuration files. +Definition files that are used by Ansible Builder to create automation execution environment images use the link:https://console.redhat.com/ansible/automation-hub/namespaces/infra/[infra certified collections]. The link:https://console.redhat.com/ansible/automation-hub/repo/validated/infra/controller_configuration/[controller_configuration] collection is preinstalled as part of the installation and uses the installation controller credentials you supply in the inventory file for access into the {PlatformNameShort} controller. You simply need to give the YAML configuration files. -You can setup {PlatformNameShort} configuration attributes such as credentials, LDAP settings, users and teams, organizations, projects, inventories and hosts, job and workflow templates. +You can set up {PlatformNameShort} configuration attributes such as credentials, LDAP settings, users and teams, organizations, projects, inventories and hosts, job and workflow templates. -The following example shows a sample *your-config.yml* file defining and loading controller job templates. The example demonstrates a simple change to the preloaded demo example provided with an {PlatformNameShort} installation. +The following example shows a sample `your-config.yml` file defining and loading controller job templates. The example demonstrates a simple change to the example provided with an {PlatformNameShort} installation. ---- /full_path_to_your_configuration_as_code/ diff --git a/downstream/modules/platform/ref-accessing-control-auto-hub-eda-control.adoc b/downstream/modules/platform/ref-accessing-control-auto-hub-eda-control.adoc index a67c54fd74..27290becd8 100644 --- a/downstream/modules/platform/ref-accessing-control-auto-hub-eda-control.adoc +++ b/downstream/modules/platform/ref-accessing-control-auto-hub-eda-control.adoc @@ -2,41 +2,35 @@ [id="accessing-gateway_{context}"] -= Accessing platform gateway += Accessing {PlatformNameShort} [role="_abstract"] -After the installation completes, the default protocol and ports used for platform gateway are 80 (http) and 443 (https). +After the installation completes, the default protocol and ports used for {PlatformNameShort} are 80 (HTTP) and 443 (HTTPS). You can customize the ports with the following variables: ---- gateway_nginx_http_port: 8500 - gateway_nginx_https_port: 8501 ---- -If you want to disable https, set `gateway_nginx_disable_https` to `true`: +If you want to disable HTTPS, set `gateway_nginx_disable_https` to `true`: ---- gateway_nginx_disable_https: true ---- -[NOTE] -==== -Consult the *README.md* for further details. Leave the defaults unless you need to change them due to port conflicts or other factors. -==== - -.Accessing platform gateway UI +.Accessing the platform UI -The platform gateway UI is available by default at: +The platform UI is available by default at: ---- https://:443 ---- -Log in as the admin user with the password you created for *gateway_admin_password*. +Log in as the admin user with the password you created for `gateway_admin_password`. // Michelle: Removing additional component UI references as platform gateway UI will be used going forward - AAP-18760 // .Accessing {ControllerName} UI diff --git a/downstream/modules/platform/ref-adding-execution-nodes.adoc b/downstream/modules/platform/ref-adding-execution-nodes.adoc index bbd6a7890a..1778f43158 100644 --- a/downstream/modules/platform/ref-adding-execution-nodes.adoc +++ b/downstream/modules/platform/ref-adding-execution-nodes.adoc @@ -8,23 +8,25 @@ [role="_abstract"] -The containerized installer can deploy remote execution nodes. This is handled by the execution_nodes group in the ansible inventory file. +The containerized installer can deploy remote execution nodes. The `execution_nodes` group in the inventory file handles this. ---- [execution_nodes] -fqdn_of_your_execution_host + ---- An execution node is by default configured as an execution type running on port 27199 (TCP). This can be changed by the following variables: -* receptor_port=27199 -* receptor_protocol=tcp -* receptor_type=hop +---- +receptor_port=27199 +receptor_protocol=tcp +receptor_type=hop +---- -Receptor type value can be either execution or hop, while the protocol is either TCP or UDP. By default, the nodes in the `execution_nodes` group will be added as peers for the controller node. However, you can change the peers configuration by using the `receptor_peers` variable. +The `receptor_type` value can be either `execution` or `hop`, while the `receptor_protocol` is either `tcp` or `udp`. By default, the nodes in the `execution_nodes` group are added as peers for the controller node. However, you can change the peers configuration by using the `receptor_peers` variable. ---- [execution_nodes] fqdn_of_your_execution_host -fqdn_of_your_hop_host receptor_type=hop receptor_peers=’[“fqdn_of_your_execution_host”]’ +fqdn_of_your_hop_host receptor_type=hop receptor_peers='[""]' ---- \ No newline at end of file diff --git a/downstream/modules/platform/ref-containerized-troubleshoot-install.adoc b/downstream/modules/platform/ref-containerized-troubleshoot-install.adoc index 908f51e0e4..ee5bffdd7a 100644 --- a/downstream/modules/platform/ref-containerized-troubleshoot-install.adoc +++ b/downstream/modules/platform/ref-containerized-troubleshoot-install.adoc @@ -131,3 +131,21 @@ fatal: [ec2-13-48-25-168.eu-north-1.compute.amazonaws.com]: FAILED! => {"changed If you are installing a `/home` filesystem into a default {AWS} marketplace RHEL instance, it might be too small since `/home` is part of the root `/` filesystem. You will need to make more space available. The documentation specifies a minimum of 40GB for a single-node deployment of containerized {PlatformNameShort}. +."Install container tools" task fails due to unavailable packages + +This error occurs in the installation application output as: + +---- +TASK [ansible.containerized_installer.common : Install container tools] ********************************************************************************************************** +fatal: [192.0.2.1]: FAILED! => {"changed": false, "failures": ["No package crun available.", "No package podman available.", "No package slirp4netns available.", "No package fuse-overlayfs available."], "msg": "Failed to install some of the specified packages", "rc": 1, "results": []} +fatal: [192.0.2.2]: FAILED! => {"changed": false, "failures": ["No package crun available.", "No package podman available.", "No package slirp4netns available.", "No package fuse-overlayfs available."], "msg": "Failed to install some of the specified packages", "rc": 1, "results": []} +fatal: [192.0.2.3]: FAILED! => {"changed": false, "failures": ["No package crun available.", "No package podman available.", "No package slirp4netns available.", "No package fuse-overlayfs available."], "msg": "Failed to install some of the specified packages", "rc": 1, "results": []} +fatal: [192.0.2.4]: FAILED! => {"changed": false, "failures": ["No package crun available.", "No package podman available.", "No package slirp4netns available.", "No package fuse-overlayfs available."], "msg": "Failed to install some of the specified packages", "rc": 1, "results": []} +fatal: [192.0.2.5]: FAILED! => {"changed": false, "failures": ["No package crun available.", "No package podman available.", "No package slirp4netns available.", "No package fuse-overlayfs available."], "msg": "Failed to install some of the specified packages", "rc": 1, "results": []} +---- + +To fix this error, run the following command on the target hosts: + +---- +sudo subscription-manager register +---- \ No newline at end of file diff --git a/downstream/modules/platform/ref-enabling-automation-hub-collection-and-container-signing.adoc b/downstream/modules/platform/ref-enabling-automation-hub-collection-and-container-signing.adoc index b0a9437429..ae6b2bdb7c 100644 --- a/downstream/modules/platform/ref-enabling-automation-hub-collection-and-container-signing.adoc +++ b/downstream/modules/platform/ref-enabling-automation-hub-collection-and-container-signing.adoc @@ -11,14 +11,14 @@ ---- hub_collection_signing=true -hub_collection_signing_key=/full/path/to/collections/gpg/key +hub_collection_signing_key= hub_container_signing=true -hub_container_signing_key=/full/path/to/containers/gpg/key +hub_container_signing_key= ---- When the GPG key is protected by a passphrase, you must provide the passphrase. ---- -hub_collection_signing_pass= -hub_container_signing_pass= +hub_collection_signing_pass= +hub_container_signing_pass= ---- diff --git a/downstream/modules/platform/ref-using-custom-receptor-signing-keys.adoc b/downstream/modules/platform/ref-using-custom-receptor-signing-keys.adoc index 1b83fff58f..138c3c491a 100644 --- a/downstream/modules/platform/ref-using-custom-receptor-signing-keys.adoc +++ b/downstream/modules/platform/ref-using-custom-receptor-signing-keys.adoc @@ -7,9 +7,9 @@ = Using custom Receptor signing keys [role="_abstract"] -Receptor signing is now enabled by default unless `receptor_disable_signing=true` is set, and a RSA key pair (public/private) is generated by the installer. However, you can provide custom RSA public/private keys by setting the path variable. +Receptor signing is enabled by default unless `receptor_disable_signing=true` is set, and an RSA key pair (public and private) is generated by the installer. However, you can provide custom RSA public and private keys by setting the path variables: ---- -receptor_signing_private_key=/full/path/to/private/key -receptor_signing_public_key=/full/path/to/public/key +receptor_signing_private_key= +receptor_signing_public_key= ---- diff --git a/downstream/modules/platform/ref-using-custom-tls-certificates.adoc b/downstream/modules/platform/ref-using-custom-tls-certificates.adoc index c2f4ec3991..36c633bcf8 100644 --- a/downstream/modules/platform/ref-using-custom-tls-certificates.adoc +++ b/downstream/modules/platform/ref-using-custom-tls-certificates.adoc @@ -40,7 +40,7 @@ eda_tls_cert=/full/path/to/tls/certificate eda_tls_key=/full/path/to/tls/key ---- -* Postgresql +* PostgreSQL ---- postgresql_tls_cert=/full/path/to/tls/certificate postgresql_tls_key=/full/path/to/tls/key From 16feeb1010837e8abe95316739df24c1d220ea2c Mon Sep 17 00:00:00 2001 From: EMcWhinn <122449381+EMcWhinn@users.noreply.github.com> Date: Tue, 10 Sep 2024 10:01:34 +0100 Subject: [PATCH 126/590] Add Event filter chapter to EDA user guide (#1812) (#1854) * Add Event filter chapter to EDA user guide Improve documentation for event filter plugins to include authoring them https://issues.redhat.com/browse/AAP-29016 Affects `titles/eda/eda-user-guide` * Add Event filter chapter to EDA user guide * Adding 2 more filters as per tech review --- .../assembly-eda-event-filter-plugins.adoc | 49 +++++++++++++++++++ .../eda/con-eda-author-event-filters.adoc | 33 +++++++++++++ .../titles/eda/eda-user-guide/master.adoc | 1 + 3 files changed, 83 insertions(+) create mode 100644 downstream/assemblies/eda/assembly-eda-event-filter-plugins.adoc create mode 100644 downstream/modules/eda/con-eda-author-event-filters.adoc diff --git a/downstream/assemblies/eda/assembly-eda-event-filter-plugins.adoc b/downstream/assemblies/eda/assembly-eda-event-filter-plugins.adoc new file mode 100644 index 0000000000..9d5852e57c --- /dev/null +++ b/downstream/assemblies/eda/assembly-eda-event-filter-plugins.adoc @@ -0,0 +1,49 @@ +[id="eda-event-filter-plugins"] + += Event filter plugins + +Events sometimes have extra data that is unnecessary and might overwhelm the rule engine. +Use event filters to remove that extra data so you can focus on what matters to your rules. +Event filters might also change the format of the data so that the rule conditions can better match the data. + +Events are defined as python code and distributed as collections. +The default link:https://github.com/ansible/event-driven-ansible/tree/main/extensions/eda/plugins/event_filter[eda collection] has the following filters: + +[cols="30%,30%",options="header"] +|==== +| Name | Description +| json_filter | This filter includes and excludes keys from the event object +| dashes_to_underscores | This filter changes the dashes in all keys in the payload to be underscore +| ansible.eda.insert_hosts_to_meta | This filter is used to add host information into the event so that ansible-rulebook can locate it and use it +| ansible.eda.normalize_keys | This filter is used if you want to change non alpha numeric keys to underscore +|==== + +You can chain event filters one after the other, and the updated data is sent from one filter to the next. +Event filters are defined in the rulebook after a source is defined. +When the rulebook starts the source plugin it associates the correct filters and transforms the data before putting it into the queue. + +.Example + +---- +sources: + - name: azure_service_bus + ansible.eda.azure_service_bus: + conn_str: "{{connection_str}}" + queue_name: "{{queue_name}}" + filters: + - json_filter: + include_keys: ['clone_url'] + exclude_keys: ['*_url', '_links', 'base', 'sender', 'owner', 'user'] + - dashes_to_underscores: +---- + +In this example the data is first passed through the `json_filter` and then through the `dashes_to_underscores` filter. +In the event payload, keys can only contain letters, numbers, and underscores. +The period (.) is used to access nested keys. + +Since every event should record the origin of the event the filter `eda.builtin.insert_meta_info` is added automatically by ansible-rulebook to add the `source name`, `type`, and `received_at`. +The `received_at` stores a date time in UTC ISO8601 format and includes the microseconds. +The `uuid` stores the unique id for the event. +The `meta key` is used to store metadata about the event and its needed to correctly report about the events in the aap-server. + +include::eda/con-eda-author-event-filters.adoc[leveloffset=+1] diff --git a/downstream/modules/eda/con-eda-author-event-filters.adoc b/downstream/modules/eda/con-eda-author-event-filters.adoc new file mode 100644 index 0000000000..ec38ff555b --- /dev/null +++ b/downstream/modules/eda/con-eda-author-event-filters.adoc @@ -0,0 +1,33 @@ +[id="eda-author-event-filters"] + += Author event filters + +Event filters are functions in a python module that perform transformations on the event data. +They can remove, add, change, or move any data in the event data structure. +Event filters take the event as the first argument and additional keyword arguments are provided by the configuration in the rulebook. + +The basic structure follows: + +---- + # my_namespace.my_collection/extensions/eda/plugins/event_filter/my_filter.py + def main(event: dict, arg1, arg2): + # Process event data here + return event +---- + +You can use this filter in a rulebook by adding it to the filters list in an event source: + +---- + sources: + - name: azure_service_bus + ansible.eda.azure_service_bus: + conn_str: "{{connection_str}}" + queue_name: "{{queue_name}}" + filters: + - my_namespace.my_collection.my_filter: + arg1: hello + arg2: world +---- + +.Additional resources +See the event filter plugins in link:https://github.com/ansible/event-driven-ansible/tree/main/extensions/eda/plugins/event_filter[ansible.eda collection] for more examples of how to author them. diff --git a/downstream/titles/eda/eda-user-guide/master.adoc b/downstream/titles/eda/eda-user-guide/master.adoc index 8665de774e..5db6254fb2 100644 --- a/downstream/titles/eda/eda-user-guide/master.adoc +++ b/downstream/titles/eda/eda-user-guide/master.adoc @@ -23,4 +23,5 @@ include::eda/assembly-eda-set-up-rhaap-credential.adoc[leveloffset=+1] include::eda/assembly-eda-rulebook-activations.adoc[leveloffset=+1] include::eda/assembly-eda-rule-audit.adoc[leveloffset=+1] include::eda/assembly-eda-performance-tuning.adoc[leveloffset=+1] +include::eda/assembly-eda-event-filter-plugins.adoc[leveloffset=+1] include::eda/assembly-eda-logging-strategy.adoc[leveloffset=+1] From a4005bdbbbb0b4d0e52807934578b8cb859af060 Mon Sep 17 00:00:00 2001 From: Elizabeth Murtough <114593312+emurtoug@users.noreply.github.com> Date: Tue, 10 Sep 2024 12:10:14 +0100 Subject: [PATCH 127/590] AAP-28228-A added ref modules for OCP (#1843) (#1857) * AAP-28228-A added ref modules for OCP * AAP-28228-A updated OCP-A-ENV-A * AAP-28228-A added OCP-B-ENV-A * AAP-28228-A updated OCP topologies * AAP-28228-A updated OCP topologies --- .../topologies/assembly-ocp-topologies.adoc | 5 +- .../modules/topologies/ref-ocp-a-env-a.adoc | 104 +++++++++++++++++ .../modules/topologies/ref-ocp-b-env-a.adoc | 109 ++++++++++++++++++ 3 files changed, 216 insertions(+), 2 deletions(-) create mode 100644 downstream/modules/topologies/ref-ocp-a-env-a.adoc create mode 100644 downstream/modules/topologies/ref-ocp-b-env-a.adoc diff --git a/downstream/assemblies/topologies/assembly-ocp-topologies.adoc b/downstream/assemblies/topologies/assembly-ocp-topologies.adoc index 33d355972e..be945e073f 100644 --- a/downstream/assemblies/topologies/assembly-ocp-topologies.adoc +++ b/downstream/assemblies/topologies/assembly-ocp-topologies.adoc @@ -5,5 +5,6 @@ The {OperatorPlatform} uses Red Hat OpenShift operators to deploy {PlatformNameShort} within Red Hat OpenShift. Customers manage the product and infrastructure lifecycle. //OCP growth topology - -//OCP enterprise topology \ No newline at end of file +include::topologies/ref-ocp-a-env-a.adoc[leveloffset=+1] +//OCP enterprise topology +include::topologies/ref-ocp-b-env-a.adoc[leveloffset=+1] \ No newline at end of file diff --git a/downstream/modules/topologies/ref-ocp-a-env-a.adoc b/downstream/modules/topologies/ref-ocp-a-env-a.adoc new file mode 100644 index 0000000000..03a2d30cd1 --- /dev/null +++ b/downstream/modules/topologies/ref-ocp-a-env-a.adoc @@ -0,0 +1,104 @@ +[id="ocp-a-env-a"] += Operator growth topology + +The growth topology is intended for organizations that do not require {PlatformNameShort} to be deployed with redundancy or higher compute for large volumes of automation. + +== Infrastructure topology +// The following diagram outlines the infrastructure topology that Red Hat has tested with the respective deployment model that customers may use when self-managing {PlatformNameShort}: + +A Single Node OpenShift (SNO) cluster has been tested with the following requirements: 32 GB RAM, 16 CPU, 128 GB local disk, and 3000 IOPS. + +.Infrastructure topology +[options="header"] +|==== +| Count | Component +| 1 | Automation controller web Pod +| 1 | Automation controller task Pod +| 1 | Automation hub API Pod +| 2 | Automation hub content Pod +| 2 | Automation hub worker Pod +| 1 | Automation hub redis Pod +| 1 | Event-Driven Ansible API Pod +| 1 | Event-Driven Ansible activation worker Pod +| 1 | Event-Driven Ansible default worker Pod +| 1 | Event-Driven Ansible event stream Pod +| 1 | Event-Driven Ansible scheduler Pod +| 1 | Platform gateway Pod +| 1 | Database Pod +| 1 | Redis Pod +|==== + +== Tested system configurations + +Red Hat has tested the following configurations to install and run {PlatformName}: + +.Tested system configurations +[options="header"] +|==== +| Type | Description +| Subscription +a| +* Valid {PlatformName} subscription +* Valid {RHEL} subscription (to consume the BaseOS and AppStream repositories) +| Operating system | {RHEL} 9.2 or later 64-bit (x86_64) +| Red Hat OpenShift +a| +* Version: 4.14 +* num_of_control_nodes: 1 +* num_of_worker_nodes: 1 +* VM Configuration: +** OS: {RHEL} 9.2 or later 64-bit (x86) +** CPU: 16 +** RAM: 32 GB +** Disk: 128 GB +** IOPS: 3000/s +| Ansible-core | Ansible-core version 2.15 or later +| Browser | A currently supported version of Mozilla Firefox or Google Chrome. +| Database | PostgreSQL version 15 +|==== + +== Example custom resource file + +Use the following example custom resource (CR) to add your {PlatformNameShort} instance to your project: + +==== +---- +apiVersion: aap.ansible.com/v1alpha1 +kind: AnsibleAutomationPlatform +metadata: + name: +spec: + eda: + automation_server_ssl_verify: 'no' + hub: + storage_type: 's3' + object_storage_s3_secret: '' +---- +==== + +== Nonfunctional requirements + +{PlatformNameShort}’s performance characteristics and capacity are impacted by its resource allocation and configuration. With OpenShift, each {PlatformNameShort} component is deployed as a pod. You can specify resource requests and limits for each pod. + +The {PlatformNameShort} custom resource allows you to configure resource allocation for OpenShift installations. Each configurable item has default settings. These settings are the minimum requirements for an installation, but may not meet your production workload needs. + +By default, each component’s deployments are set for minimum resource requests but no resource limits. OpenShift only schedules the pods with available resource requests, but the pods are allowed to consume unlimited RAM or CPU as long as the OpenShift worker node itself is not under node pressure. + +In the reference topology provided in this document, {PlatformNameShort} is deployed on a Single Node OpenShift (SNO) with 32 GB RAM, 16 CPU, 128 GB Local disk, and 3000 IOPS. This is not a shared environment, so {PlatformNameShort} pods have full access to all of the compute resources of the OpenShift SNO. In this scenario, the capacity calculation for the automation controller task pods is derived from the underlying OCP node that runs the pod. It does not have access to the entire node. This capacity calculation influences how many concurrent jobs {ControllerName} can run. + +OpenShift manages storage distinctly from VMs. This impacts how {HubName} stores its artifacts. In the reference topology provided in this document, we use s3 storage because {HubName} requires a ReadWriteMany type storage, which is not a default storage type in OpenShift. + +== Network ports + +{PlatformName} uses several ports to communicate with its services. These ports must be open and available for incoming connections to the {PlatformName} server in order for it to work. Ensure that these ports are available and are not blocked by the server firewall. + +.Network ports and protocols +[options="header"] +|==== +| Port number | Protocol | Service | Source | Destination +| 27199 | TCP | Receptor | OCP cluster | Execution node +| 27199 | TCP | Receptor | OCP cluster | Hop node +| 443 | HTTPS | Receptor | Execution node | OCP ingress +| 443 | HTTPS | Receptor | Hop node | OCP ingress +| 443 | HTTPS | Platform | Customer clients | OCP ingress +|==== diff --git a/downstream/modules/topologies/ref-ocp-b-env-a.adoc b/downstream/modules/topologies/ref-ocp-b-env-a.adoc new file mode 100644 index 0000000000..b384d86a48 --- /dev/null +++ b/downstream/modules/topologies/ref-ocp-b-env-a.adoc @@ -0,0 +1,109 @@ +[id="ocp-b-env-a"] += Operator enterprise topology + +The enterprise topology is intended for organizations that require {PlatformNameShort} to be deployed with redundancy or higher compute for large volumes of automation. + +== Infrastructure topology + +// The following diagram outlines the infrastructure topology that Red Hat has tested with the respective deployment model that customers may use when self-managing Ansible Automation Platform: + +The following infrastructure topology describes an OpenShift Cluster with 3 master nodes and 2 worker nodes. + +Each OpenShift Worker node has been tested with the following component requirements: 16 GB RAM, 4 CPU, 128 GB local disk, and 3000 IOPS. + +.Infrastructure topology +[options="header"] +|==== +| Count | Component +| 1 | Automation controller web Pod +| 1 | Automation controller task Pod +| 1 | Automation hub API Pod +| 2 | Automation hub content Pod +| 2 | Automation hub worker Pod +| 1 | Automation hub redis Pod +| 1 | Event-Driven Ansible API Pod +| 2 | Event-Driven Ansible activation worker Pod +| 2 | Event-Driven Ansible default worker Pod +| 2 | Event-Driven Ansible event stream Pod +| 1 | Event-Driven Ansible scheduler Pod +| 1 | Platform gateway Pod +| 2 | Mesh Ingress Pod +| N/A | Externally managed database service +| N/A | Externally managed redis +| N/A | Externally managed object storage service (for {HubName}) +|==== + +== Tested system configurations + +Red Hat has tested the following configurations to install and run {PlatformName}: + +.Tested system configurations +[options="header"] +|==== +| Type | Description +| Subscription | Valid {PlatformName} subscription +| Red Hat OpenShift +a| +* Red Hat OpenShift on AWS Hosted Control Planes 4.15.16 +** 2 worker nodes in different AZs at t3.xlarge +| Ansible-core | Ansible-core version 2.15 or later +| Browser | A currently supported version of Mozilla Firefox or Google Chrome. +| AWS RDS PostgreSQL service +a| +* engine: “postgres” +* engine_version: “15” +* parameter_group_name: “default.postgres15” +* allocated_storage: 20 +* max_allocated_storage: 1000 +* storage_type: “gp2” +* storage_encrypted: true +* instance_class: “db.t4g.small” +* multi_az: true +* backup_retention_period: 5 +| AWS Memcached Service +a| +* engine: “redis” +* engine_version: “6.2” +* auto_minor_version_upgrade: “false” +* node_type: “cache.t3.micro” +* parameter_group_name: “default.redis6.x.cluster.on” +* transit_encryption_enabled: “true” +* num_node_groups: 2 +* replicas_per_node_group: 1 +* automatic_failover_enabled: true +| S3 storage | HTTPS only accessible through AWS Role assigned to {HubName} SA at runtime using AWS Pod Identity +|==== + +// == Example custom resource file + +// Use the following example custom resource (CR) to add your {PlatformNameShort} instance to your project: + +== Nonfunctional requirements + +{PlatformNameShort}’s performance characteristics and capacity are impacted by its resource allocation and configuration. With OpenShift, each {PlatformNameShort} component is deployed as a pod. You can specify resource requests and limits for each pod. + +The {PlatformNameShort} custom resource allows you to configure resource allocation for OpenShift installations. Each configurable item has default settings. These settings are the minimum requirements for an installation, but may not meet your production workload needs. + +By default, each component’s deployments are set for minimum resource requests but no resource limits. OpenShift only schedules the pods with available resource requests, but the pods are allowed to consume unlimited RAM or CPU as long as the OpenShift worker node itself is not under node pressure. + +In the reference topology provided in this document, {PlatformNameShort} is deployed on a Single Node OpenShift (SNO) with 32 GB RAM, 16 CPU, 128 GB Local disk, and 3000 IOPS. This is not a shared environment, so {PlatformNameShort} pods have full access to all of the compute resources of the OpenShift SNO. In this scenario, the capacity calculation for the automation controller task pods is derived from the underlying OCP node that runs the pod. It does not have access to the entire node. This capacity calculation influences how many concurrent jobs {ControllerName} can run. + +OpenShift manages storage distinctly from VMs. This impacts how {HubName} stores its artifacts. In the reference topology provided in this document, we use s3 storage because {HubName} requires a ReadWriteMany type storage, which is not a default storage type in OpenShift. Externally provided Redis, Posgres, and object storage for automation hub are specified. This provides the {PlatformNameShort} deployment with additional scalability and reliability features, including specialized backup, restore, and replication services as well as scalable storage. + + +== Network ports + +{PlatformName} uses several ports to communicate with its services. These ports must be open and available for incoming connections to the {PlatformName} server in order for it to work. Ensure that these ports are available and are not blocked by the server firewall. + +.Network ports and protocols +[options="header"] +|==== +| Port number | Protocol | Service | Source | Destination +| 5432 | TCP | PostgreSQL | OCP cluster | External database service +| 6379 | TCP | Redis | OCP cluster | External redis service +| 443 | HTTPS | Object storage | OCP cluster | External object storage service +| 27199 | TCP | Receptor | OCP cluster | Execution node +| 27199 | TCP | Receptor | OCP cluster | Hop node +| 443 | HTTPS | Receptor | Execution node | OCP ingress +| 443 | HTTPS | Receptor | Hop node | OCP ingress +|==== From f8a45320f5fab5b2400037d1f7fbd9f08a1313cb Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Tue, 10 Sep 2024 12:24:37 +0100 Subject: [PATCH 128/590] Update topologies based on feedback (#1856) (#1859) - Update doc title to "Tested" instead of "Supported" - Feedback from peer review of KCS articles Create a document for supported topologies https://issues.redhat.com/browse/AAP-28228 --- .../assembly-container-topologies.adoc | 2 +- .../topologies/assembly-ocp-topologies.adoc | 2 +- ...-overview-supported-deployment-models.adoc | 5 +++-- .../topologies/assembly-rpm-topologies.adoc | 2 +- downstream/attributes/attributes.adoc | 2 +- .../modules/topologies/ref-cont-a-env-a.adoc | 6 +++--- .../modules/topologies/ref-cont-b-env-a.adoc | 4 ++-- .../modules/topologies/ref-mesh-nodes.adoc | 20 +++++++++++++++++++ .../modules/topologies/ref-rpm-b-env-a.adoc | 7 +++---- .../modules/topologies/ref-rpm-b-env-b.adoc | 7 +++---- downstream/titles/topologies/docinfo.xml | 4 ++-- downstream/titles/topologies/master.adoc | 9 +++++---- 12 files changed, 45 insertions(+), 25 deletions(-) create mode 100644 downstream/modules/topologies/ref-mesh-nodes.adoc diff --git a/downstream/assemblies/topologies/assembly-container-topologies.adoc b/downstream/assemblies/topologies/assembly-container-topologies.adoc index 8df6e7b7a6..ddefcaac5c 100644 --- a/downstream/assemblies/topologies/assembly-container-topologies.adoc +++ b/downstream/assemblies/topologies/assembly-container-topologies.adoc @@ -1,6 +1,6 @@ [id="container-topologies"] -= Container supported topologies += Container topologies The containerized installer deploys {PlatformNameShort} on {RHEL} by using Podman which runs the platform in containers on host machines. Customers manage the product and infrastructure lifecycle. diff --git a/downstream/assemblies/topologies/assembly-ocp-topologies.adoc b/downstream/assemblies/topologies/assembly-ocp-topologies.adoc index be945e073f..be7975dd82 100644 --- a/downstream/assemblies/topologies/assembly-ocp-topologies.adoc +++ b/downstream/assemblies/topologies/assembly-ocp-topologies.adoc @@ -1,6 +1,6 @@ [id="ocp-topologies"] -= Operator supported topologies += Operator topologies The {OperatorPlatform} uses Red Hat OpenShift operators to deploy {PlatformNameShort} within Red Hat OpenShift. Customers manage the product and infrastructure lifecycle. diff --git a/downstream/assemblies/topologies/assembly-overview-supported-deployment-models.adoc b/downstream/assemblies/topologies/assembly-overview-supported-deployment-models.adoc index 6a787ea53f..20d5c271fe 100644 --- a/downstream/assemblies/topologies/assembly-overview-supported-deployment-models.adoc +++ b/downstream/assemblies/topologies/assembly-overview-supported-deployment-models.adoc @@ -1,6 +1,6 @@ [id="overview-supported-deployment-models"] -= Overview of supported deployment models += Overview of tested deployment models Red Hat tests {PlatformNameShort} {PlatformVers} with a defined set of topologies to give you opinionated deployment options. While it is possible to install the {PlatformNameShort} on different infrastructure topologies and with different environment configurations, Red Hat provides full support for the topologies outlined in this document. @@ -12,7 +12,7 @@ The following table outlines the different ways to install or deploy {PlatformNa .{PlatformNameShort} installation and deployment models [options="header"] |==== -| Mode | Infrastructure | Description | Supported topologies +| Mode | Infrastructure | Description | Tested topologies | RPM | Virtual machines and bare metal | The RPM installer deploys {PlatformNameShort} on {RHEL} by using RPMs to install the platform on host machines. Customers manage the product and infrastructure lifecycle. a| * RPM enterprise topology @@ -22,6 +22,7 @@ a| | Virtual machines and bare metal | The containerized installer deploys {PlatformNameShort} on {RHEL} by using Podman which runs the platform in containers on host machines. Customers manage the product and infrastructure lifecycle. a| +* Container growth topology * Container enterprise topology | Operator diff --git a/downstream/assemblies/topologies/assembly-rpm-topologies.adoc b/downstream/assemblies/topologies/assembly-rpm-topologies.adoc index f0f0fad82f..7d503785f8 100644 --- a/downstream/assemblies/topologies/assembly-rpm-topologies.adoc +++ b/downstream/assemblies/topologies/assembly-rpm-topologies.adoc @@ -1,6 +1,6 @@ [id="rpm-topologies"] -= RPM supported topologies += RPM topologies The RPM installer deploys {PlatformNameShort} on {RHEL} by using RPMs to install the platform on host machines. Customers manage the product and infrastructure lifecycle. diff --git a/downstream/attributes/attributes.adoc b/downstream/attributes/attributes.adoc index d8c949c267..50a7dcc929 100644 --- a/downstream/attributes/attributes.adoc +++ b/downstream/attributes/attributes.adoc @@ -366,4 +366,4 @@ :TitleDevelopAutomationContent: Developing automation content // // titles/topologies -:TitleTopologies: Supported deployment models for Ansible Automation Platform +:TitleTopologies: Tested deployment models for Ansible Automation Platform diff --git a/downstream/modules/topologies/ref-cont-a-env-a.adoc b/downstream/modules/topologies/ref-cont-a-env-a.adoc index 3dca043419..14a6be809f 100644 --- a/downstream/modules/topologies/ref-cont-a-env-a.adoc +++ b/downstream/modules/topologies/ref-cont-a-env-a.adoc @@ -1,11 +1,11 @@ [id="cont-a-env-a"] = Container growth topology -The growth topology is intended for organizations that do not require {PlatformNameShort} to be deployed with redundancy or higher compute for large volumes of automation. +The growth topology is intended for organizations that do not require {PlatformNameShort} {PlatformVers} to be deployed with redundancy or higher compute for large volumes of automation. == Infrastructure topology -Each VM has been tested with the following component requirements: 16 GB RAM, 4 CPU, 60 GB local disk, and 3000 IOPS. Resources, such as storage, can be increased based on the needs of the deployment. +A single VM has been tested with the following component requirements: 16 GB RAM, 4 CPUs, 60 GB local disk, and 3000 IOPS. Resources, such as storage, can be increased based on the needs of the deployment. .Infrastructure topology [options="header"] @@ -34,7 +34,7 @@ a| * Valid {RHEL} subscription (to consume the BaseOS and AppStream repositories) | Operating system | {RHEL} 9.2 or later 64-bit (x86_64) | Ansible-core | Ansible-core version 2.15 or later -| Browser | A currently supported version of Mozilla Firefox or Google Chrome. +| Browser | A currently supported version of Mozilla Firefox or Google Chrome | Database | PostgreSQL version 15 |==== diff --git a/downstream/modules/topologies/ref-cont-b-env-a.adoc b/downstream/modules/topologies/ref-cont-b-env-a.adoc index 263650edea..c1aafa4282 100644 --- a/downstream/modules/topologies/ref-cont-b-env-a.adoc +++ b/downstream/modules/topologies/ref-cont-b-env-a.adoc @@ -5,12 +5,12 @@ The enterprise topology is intended for organizations that require {PlatformName == Infrastructure topology -Each VM has been tested with the following component requirements: 16 GB RAM, 4 CPU, 60 GB local disk, and 3000 IOPS. +Each VM has been tested with the following component requirements: 16 GB RAM, 4 CPUs, 60 GB local disk, and 3000 IOPS. .Infrastructure topology [options="header"] |==== -| VM count | Purpose | Example VM names +| VM count | Purpose | Example VM group names | 2 | Platform gateway with Redis | automationgateway | 2 | {ControllerNameStart} | automationcontroller | 2 | {PrivateHubNameStart} with Redis | automationhub diff --git a/downstream/modules/topologies/ref-mesh-nodes.adoc b/downstream/modules/topologies/ref-mesh-nodes.adoc new file mode 100644 index 0000000000..6ba3ccfa32 --- /dev/null +++ b/downstream/modules/topologies/ref-mesh-nodes.adoc @@ -0,0 +1,20 @@ +[id="mesh-nodes"] += {AutomationMeshStart} nodes + +{AutomationMeshStart} is an overlay network intended to ease the distribution of work across a large and dispersed collection of workers. This is done through nodes that establish peer-to-peer connections with each other by using existing networks. + +== Tested system configurations +Each {AutomationMesh} VM has been tested with the following component requirements: 16 GB RAM, 4 CPUs, 60 GB local disk, and 3000 IOPS. + +== Network ports +{AutomationMeshStart} uses several ports to communicate with its services. These ports must be open and available for incoming connections to the {PlatformName} server in order for it to work. Ensure that these ports are available and are not blocked by the server firewall. + +.Network ports and protocols +[options="header"] +|==== +| Port number | Protocol | Service | Source | Destination +| 27199 | TCP | Receptor | {OCPShort} cluster | Execution node +| 27199 | TCP | Receptor | {OCPShort} cluster | Hop node +| 443 | HTTPS | Receptor | Execution node | {OCPShort} mesh ingress +| 443 | HTTPS | Receptor | Hop node | {OCPShort} mesh ingress +|==== \ No newline at end of file diff --git a/downstream/modules/topologies/ref-rpm-b-env-a.adoc b/downstream/modules/topologies/ref-rpm-b-env-a.adoc index 58690f6ec7..901f1328af 100644 --- a/downstream/modules/topologies/ref-rpm-b-env-a.adoc +++ b/downstream/modules/topologies/ref-rpm-b-env-a.adoc @@ -5,12 +5,12 @@ The enterprise topology is intended for organizations that require {PlatformName == Infrastructure topology -Each VM has been tested with the following component requirements: 16 GB RAM, 4 CPU, 60 GB local disk, and 3000 IOPS. +Each virtual machine (VM) has been tested with the following component requirements: 16 GB RAM, 4 CPUs, 60 GB local disk, and 3000 IOPS. .Infrastructure topology [options="header"] |==== -| VM count | Purpose | Example VM names +| VM count | Purpose | Example VM group names | 2 | Platform gateway | automationgateway | 2 | {ControllerNameStart} | automationcontroller | 2 | {PrivateHubNameStart} | automationhub @@ -32,7 +32,7 @@ Red Hat has tested the following configurations to install and run {PlatformName | Subscription | Valid {PlatformName} subscription | Operating system | {RHEL} 9.2 or later 64-bit (x86) | Ansible-core | Ansible-core version 2.15 or later -| Browser | A currently supported version of Mozilla Firefox or Google Chrome. +| Browser | A currently supported version of Mozilla Firefox or Google Chrome | Database | PostgreSQL version 15 |==== @@ -59,7 +59,6 @@ Red Hat has tested the following configurations to install and run {PlatformName | 27199 | TCP | Receptor | Hop node | Execution node | 6379 | TCP | Redis | {EDAName} | Platform gateway | 6379 | TCP | Redis | Platform gateway | Platform gateway -| 16379 | TCP | Redis | Redis | Redis cluster node | 8443 | TCP | HTTPS | Platform gateway | Platform gateway | 50051 | TCP | gRPC | Platform gateway | Platform gateway |==== \ No newline at end of file diff --git a/downstream/modules/topologies/ref-rpm-b-env-b.adoc b/downstream/modules/topologies/ref-rpm-b-env-b.adoc index 0e5675fbc0..e423ab7392 100644 --- a/downstream/modules/topologies/ref-rpm-b-env-b.adoc +++ b/downstream/modules/topologies/ref-rpm-b-env-b.adoc @@ -5,12 +5,12 @@ The enterprise topology is intended for organizations that require {PlatformName == Infrastructure topology -Each VM has been tested with the following component requirements: 16 GB RAM, 4 CPU, 60 GB local disk, and 3000 IOPS. +Each VM has been tested with the following component requirements: 16 GB RAM, 4 CPUs, 60 GB local disk, and 3000 IOPS. .Infrastructure topology [options="header"] |==== -| VM count | Purpose | {PlatformNameShort} version | Example VM names +| VM count | Purpose | {PlatformNameShort} version | Example VM group names | 2 | Platform gateway | 2.5 | automationgateway | 2 | {ControllerNameStart} | 2.4 | automationcontroller | 2 | {PrivateHubNameStart} | 2.4 | automationhub @@ -32,7 +32,7 @@ Red Hat has tested the following configurations to install and run {PlatformName | Subscription | Valid {PlatformName} subscription | Operating system | {RHEL} 9.2 or later 64-bit (x86_64) | Ansible-core | Ansible-core version 2.15 or later -| Browser | A currently supported version of Mozilla Firefox or Google Chrome. +| Browser | A currently supported version of Mozilla Firefox or Google Chrome | Database | PostgreSQL version 15 |==== @@ -59,7 +59,6 @@ Red Hat has tested the following configurations to install and run {PlatformName | 27199 | TCP | Receptor | Hop node | Execution node | 6379 | TCP | Redis | {EDAName} | Platform gateway | 6379 | TCP | Redis | Platform gateway | Platform gateway -| 16379 | TCP | Redis | Redis | Redis cluster node | 8443 | TCP | HTTPS | Platform gateway | Platform gateway | 50051 | TCP | gRPC | Platform gateway | Platform gateway |==== \ No newline at end of file diff --git a/downstream/titles/topologies/docinfo.xml b/downstream/titles/topologies/docinfo.xml index 17dc09a636..9543a6665e 100644 --- a/downstream/titles/topologies/docinfo.xml +++ b/downstream/titles/topologies/docinfo.xml @@ -1,7 +1,7 @@ -Supported deployment models for Ansible Automation Platform +Tested deployment models for Ansible Automation Platform Red Hat Ansible Automation Platform 2.5 -Red Hat has tested and supports the topologies identified in this document for Ansible Automation Platform 2.5 +Plan your deployment of Ansible Automation Platform This guide provides the Red Hat tested and supported toplogies for Red Hat Ansible Automation Platform. diff --git a/downstream/titles/topologies/master.adoc b/downstream/titles/topologies/master.adoc index 24fefd7a82..2a5e420ac0 100644 --- a/downstream/titles/topologies/master.adoc +++ b/downstream/titles/topologies/master.adoc @@ -5,19 +5,20 @@ include::attributes/attributes.adoc[] // Book Title -= Supported deployment models for Ansible Automation Platform += Tested deployment models for Ansible Automation Platform include::{Boilerplate}[] include::topologies/assembly-overview-supported-deployment-models.adoc[leveloffset=+1] -//RPM supported topologies +//RPM topologies include::topologies/assembly-rpm-topologies.adoc[leveloffset=+1] -//Container supported topologies +//Container topologies include::topologies/assembly-container-topologies.adoc[leveloffset=+1] -//Operator supported topologies +//Operator topologies include::topologies/assembly-ocp-topologies.adoc[leveloffset=+1] //Automation mesh nodes +include::topologies/topologies/ref-mesh-nodes.adoc[leveloffset=+1] From 1948750e41d06babae9769bb0a307edcfadfbc6f Mon Sep 17 00:00:00 2001 From: Elizabeth Murtough <114593312+emurtoug@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:02:38 +0100 Subject: [PATCH 129/590] AAP-28228-B updated OCP-A-ENV-A (#1858) (#1860) * AAP-28228-B updated OCP-A-ENV-A * AAP-28228-B updated OCP topologies following KCS peer review * AAP-28228-B updated OCP topologies following KCS peer review --- downstream/modules/topologies/ref-ocp-a-env-a.adoc | 12 +++--------- downstream/modules/topologies/ref-ocp-b-env-a.adoc | 8 ++++---- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/downstream/modules/topologies/ref-ocp-a-env-a.adoc b/downstream/modules/topologies/ref-ocp-a-env-a.adoc index 03a2d30cd1..3ec1983d19 100644 --- a/downstream/modules/topologies/ref-ocp-a-env-a.adoc +++ b/downstream/modules/topologies/ref-ocp-a-env-a.adoc @@ -6,7 +6,7 @@ The growth topology is intended for organizations that do not require {PlatformN == Infrastructure topology // The following diagram outlines the infrastructure topology that Red Hat has tested with the respective deployment model that customers may use when self-managing {PlatformNameShort}: -A Single Node OpenShift (SNO) cluster has been tested with the following requirements: 32 GB RAM, 16 CPU, 128 GB local disk, and 3000 IOPS. +A Single Node OpenShift (SNO) cluster has been tested with the following requirements: 32 GB RAM, 16 CPUs, 128 GB local disk, and 3000 IOPS. .Infrastructure topology [options="header"] @@ -46,12 +46,6 @@ a| * Version: 4.14 * num_of_control_nodes: 1 * num_of_worker_nodes: 1 -* VM Configuration: -** OS: {RHEL} 9.2 or later 64-bit (x86) -** CPU: 16 -** RAM: 32 GB -** Disk: 128 GB -** IOPS: 3000/s | Ansible-core | Ansible-core version 2.15 or later | Browser | A currently supported version of Mozilla Firefox or Google Chrome. | Database | PostgreSQL version 15 @@ -84,9 +78,9 @@ The {PlatformNameShort} custom resource allows you to configure resource allocat By default, each component’s deployments are set for minimum resource requests but no resource limits. OpenShift only schedules the pods with available resource requests, but the pods are allowed to consume unlimited RAM or CPU as long as the OpenShift worker node itself is not under node pressure. -In the reference topology provided in this document, {PlatformNameShort} is deployed on a Single Node OpenShift (SNO) with 32 GB RAM, 16 CPU, 128 GB Local disk, and 3000 IOPS. This is not a shared environment, so {PlatformNameShort} pods have full access to all of the compute resources of the OpenShift SNO. In this scenario, the capacity calculation for the automation controller task pods is derived from the underlying OCP node that runs the pod. It does not have access to the entire node. This capacity calculation influences how many concurrent jobs {ControllerName} can run. +In the reference topology provided in this document, {PlatformNameShort} is deployed on a Single Node OpenShift (SNO) with 32 GB RAM, 16 CPUs, 128 GB Local disk, and 3000 IOPS. This is not a shared environment, so {PlatformNameShort} pods have full access to all of the compute resources of the OpenShift SNO. In this scenario, the capacity calculation for the automation controller task pods is derived from the underlying OCP node that runs the pod. It does not have access to the entire node. This capacity calculation influences how many concurrent jobs {ControllerName} can run. -OpenShift manages storage distinctly from VMs. This impacts how {HubName} stores its artifacts. In the reference topology provided in this document, we use s3 storage because {HubName} requires a ReadWriteMany type storage, which is not a default storage type in OpenShift. +OpenShift manages storage distinctly from VMs. This impacts how {HubName} stores its artifacts. In the reference topology provided in this document, we use s3 storage because {HubName} requires a `ReadWriteMany` type storage, which is not a default storage type in OpenShift. == Network ports diff --git a/downstream/modules/topologies/ref-ocp-b-env-a.adoc b/downstream/modules/topologies/ref-ocp-b-env-a.adoc index b384d86a48..34c28373f6 100644 --- a/downstream/modules/topologies/ref-ocp-b-env-a.adoc +++ b/downstream/modules/topologies/ref-ocp-b-env-a.adoc @@ -9,7 +9,7 @@ The enterprise topology is intended for organizations that require {PlatformName The following infrastructure topology describes an OpenShift Cluster with 3 master nodes and 2 worker nodes. -Each OpenShift Worker node has been tested with the following component requirements: 16 GB RAM, 4 CPU, 128 GB local disk, and 3000 IOPS. +Each OpenShift Worker node has been tested with the following component requirements: 16 GB RAM, 4 CPUs, 128 GB local disk, and 3000 IOPS. .Infrastructure topology [options="header"] @@ -71,7 +71,7 @@ a| * num_node_groups: 2 * replicas_per_node_group: 1 * automatic_failover_enabled: true -| S3 storage | HTTPS only accessible through AWS Role assigned to {HubName} SA at runtime using AWS Pod Identity +| s3 storage | HTTPS only accessible through AWS Role assigned to {HubName} SA at runtime using AWS Pod Identity |==== // == Example custom resource file @@ -86,9 +86,9 @@ The {PlatformNameShort} custom resource allows you to configure resource allocat By default, each component’s deployments are set for minimum resource requests but no resource limits. OpenShift only schedules the pods with available resource requests, but the pods are allowed to consume unlimited RAM or CPU as long as the OpenShift worker node itself is not under node pressure. -In the reference topology provided in this document, {PlatformNameShort} is deployed on a Single Node OpenShift (SNO) with 32 GB RAM, 16 CPU, 128 GB Local disk, and 3000 IOPS. This is not a shared environment, so {PlatformNameShort} pods have full access to all of the compute resources of the OpenShift SNO. In this scenario, the capacity calculation for the automation controller task pods is derived from the underlying OCP node that runs the pod. It does not have access to the entire node. This capacity calculation influences how many concurrent jobs {ControllerName} can run. +In the reference topology provided in this document, {PlatformNameShort} is deployed on a Single Node OpenShift (SNO) with 32 GB RAM, 16 CPUs, 128 GB Local disk, and 3000 IOPS. This is not a shared environment, so {PlatformNameShort} pods have full access to all of the compute resources of the OpenShift SNO. In this scenario, the capacity calculation for the automation controller task pods is derived from the underlying OCP node that runs the pod. It does not have access to the entire node. This capacity calculation influences how many concurrent jobs {ControllerName} can run. -OpenShift manages storage distinctly from VMs. This impacts how {HubName} stores its artifacts. In the reference topology provided in this document, we use s3 storage because {HubName} requires a ReadWriteMany type storage, which is not a default storage type in OpenShift. Externally provided Redis, Posgres, and object storage for automation hub are specified. This provides the {PlatformNameShort} deployment with additional scalability and reliability features, including specialized backup, restore, and replication services as well as scalable storage. +OpenShift manages storage distinctly from VMs. This impacts how {HubName} stores its artifacts. In the reference topology provided in this document, we use s3 storage because {HubName} requires a `ReadWriteMany` type storage, which is not a default storage type in OpenShift. Externally provided Redis, Posgres, and object storage for automation hub are specified. This provides the {PlatformNameShort} deployment with additional scalability and reliability features, including specialized backup, restore, and replication services as well as scalable storage. == Network ports From ce140aeff32eca3fcfc093af390e54b917d3aae9 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Wed, 11 Sep 2024 01:21:47 -0600 Subject: [PATCH 130/590] AAP-29918 - Update Creating a user with UI changes (#1863) (#1865) --- downstream/assemblies/platform/assembly-controller-teams.adoc | 4 ++-- .../modules/platform/proc-controller-creating-a-user.adoc | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/downstream/assemblies/platform/assembly-controller-teams.adoc b/downstream/assemblies/platform/assembly-controller-teams.adoc index 4728b5c285..2b350d03f5 100644 --- a/downstream/assemblies/platform/assembly-controller-teams.adoc +++ b/downstream/assemblies/platform/assembly-controller-teams.adoc @@ -11,10 +11,10 @@ ifdef::context[:parent-context: {context}] A team is a subdivision of an organization with associated users and resources. Teams provide a means to implement role-based access control schemes and delegate responsibilities across organizations. For instance, you can grant permissions to a team rather than each user on the team. You can create as many teams as needed for your organization. Teams can only be assigned to one organization while an organization can be made up of multiple teams. Each team can be assigned roles, the same way roles are assigned for users. With teams you can assign credential ownership at scale, preventing the need to click through multiple interfaces to assign the same credentials to each individual user. -include::platform/proc-controller-creating-a-team.adoc[leveloffset=+1] - include::platform/proc-gw-team-list-view.adoc[leveloffset=+1] +include::platform/proc-controller-creating-a-team.adoc[leveloffset=+1] + include::platform/proc-gw-team-add-user.adoc[leveloffset=+1] include::platform/proc-gw-team-remove-user.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/proc-controller-creating-a-user.adoc b/downstream/modules/platform/proc-controller-creating-a-user.adoc index cc9dbf5753..f60f014b72 100644 --- a/downstream/modules/platform/proc-controller-creating-a-user.adoc +++ b/downstream/modules/platform/proc-controller-creating-a-user.adoc @@ -14,7 +14,8 @@ Normal user:: Normal users have read and write access limited to the resources ( . From the navigation panel, select {MenuAMUsers}. . Click btn:[Create user]. . Enter the details about your new user in the fields on the *Create* user page. Fields marked with an asterisk (*) are required. -. Normal users are the default when no User type is specified. To define a user as an administrator or auditor, select a *User type*. +. Normal users are the default when no User type is specified. To define a user as an administrator or auditor, select a *User type* checkbox. ++ [NOTE] ==== If you are modifying your own password, log out and log back in again for it to take effect. From 8ea7d9dbf861ac549fdaab3620c0cf4b103e89c1 Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Wed, 11 Sep 2024 11:14:14 +0100 Subject: [PATCH 131/590] aap-30853 topology and minor updates (#1866) (#1868) * aap-30853 topology and minor updates * PR suggestions --- ...sembly-installing-controller-operator.adoc | 4 +-- .../modules/platform/con-about-operator.adoc | 3 +++ ...-configuring-controller-ldap-security.adoc | 6 ++--- .../proc-controller-ingress-options.adoc | 25 +++++++++++++++---- .../proc-operator-deploy-central-config.adoc | 2 +- .../proc-operator-link-components.adoc | 2 +- 6 files changed, 29 insertions(+), 13 deletions(-) diff --git a/downstream/assemblies/platform/assembly-installing-controller-operator.adoc b/downstream/assemblies/platform/assembly-installing-controller-operator.adoc index b20300b072..d20b9cc911 100644 --- a/downstream/assemblies/platform/assembly-installing-controller-operator.adoc +++ b/downstream/assemblies/platform/assembly-installing-controller-operator.adoc @@ -46,9 +46,7 @@ When an instance of {ControllerName} is removed, the associated PVCs are not aut //include::platform/proc-creating-controller-form-view.adoc[leveloffset=+2] include::platform/proc-configuring-controller-image-pull-policy.adoc[leveloffset=+2] - -// removing this section until we add the new guide for gateway specific - need to add a link to Donna's doc -// include::platform/proc-configuring-controller-ldap-security.adoc[leveloffset=+2] +include::platform/proc-configuring-controller-ldap-security.adoc[leveloffset=+2] include::platform/proc-configuring-controller-route-options.adoc[leveloffset=+2] include::platform/proc-controller-ingress-options.adoc[leveloffset=+2] include::platform/proc-operator-external-db-controller.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/con-about-operator.adoc b/downstream/modules/platform/con-about-operator.adoc index ea54b95823..81b436c3bd 100644 --- a/downstream/modules/platform/con-about-operator.adoc +++ b/downstream/modules/platform/con-about-operator.adoc @@ -11,3 +11,6 @@ Deploying {PlatformNameShort} instances with a Kubernetes native operator offers You can install the {OperatorPlatform} from the Red Hat Operators catalog in OperatorHub. +For information about the {OperatorPlatform} infrastructure topology see {BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/tested_deployment_models_for_ansible_automation_platform/index[Container supported topologies] in {TitleTopologies}. + + diff --git a/downstream/modules/platform/proc-configuring-controller-ldap-security.adoc b/downstream/modules/platform/proc-configuring-controller-ldap-security.adoc index 8c5cbe8e31..acd9fd1f1d 100644 --- a/downstream/modules/platform/proc-configuring-controller-ldap-security.adoc +++ b/downstream/modules/platform/proc-configuring-controller-ldap-security.adoc @@ -2,11 +2,11 @@ = Configuring your controller LDAP security -You can configure your LDAP security for {ControllerName} through any of the following options: +You can configure your LDAP SSL configuration for {ControllerName} through any of the following options: -* The automation controller user interface. +* The {ControllerName} user interface. //Need to add a link to Donna's Auth doc when finished. -* The platform gateway user interface. See Authentication doc for additional steps. +//* The platform gateway user interface. See Authentication doc for additional steps. * The following procedure steps. .Procedure diff --git a/downstream/modules/platform/proc-controller-ingress-options.adoc b/downstream/modules/platform/proc-controller-ingress-options.adoc index c87782b07e..c88e734aef 100644 --- a/downstream/modules/platform/proc-controller-ingress-options.adoc +++ b/downstream/modules/platform/proc-controller-ingress-options.adoc @@ -24,20 +24,27 @@ You can view the progress by navigating to menu:Workloads[Pods] and locating the .Verification Verify that the following operator pods provided by the {PlatformNameShort} Operator installation from {ControllerName} are running: -[cols="a,a,a"] +[cols="a,a,a,a"] |=== -| Operator manager controllers | {ControllerName} |{HubName} +| Operator manager controllers | {ControllerNameStart} |{HubNameStart} |{EDAName} (EDA) -| The operator manager controllers for each of the 3 operators, include the following: +| The operator manager controllers for each of the three operators, include the following: * automation-controller-operator-controller-manager * automation-hub-operator-controller-manager * resource-operator-controller-manager -| After deploying {ControllerName}, you will see the addition of these pods: +* aap-gateway-operator-controller-manager +* ansible-lightspeed-operator-controller-manager +* eda-server-operator-controller-manager + +| After deploying {ControllerName}, you can see the addition of the following pods: * controller * controller-postgres -| After deploying {HubName}, you will see the addition of these pods: +* controller-web +* controller-task + +| After deploying {HubName}, you can see the addition of the following pods: * hub-api * hub-content @@ -45,6 +52,14 @@ Verify that the following operator pods provided by the {PlatformNameShort} Oper * hub-redis * hub-worker +| After deploying EDA, you can see the addition of the following pods: + +* eda-activation-worker +* da-api +* eda-default-worker +* eda-event-stream +* eda-scheduler + |=== [NOTE] diff --git a/downstream/modules/platform/proc-operator-deploy-central-config.adoc b/downstream/modules/platform/proc-operator-deploy-central-config.adoc index 063d8c00cb..54dad99dfc 100644 --- a/downstream/modules/platform/proc-operator-deploy-central-config.adoc +++ b/downstream/modules/platform/proc-operator-deploy-central-config.adoc @@ -33,7 +33,7 @@ The following procedure simulates a scenario where you have {ControllerName} as disabled: false ## uncomment if using file storage for Content pod storage_type: file - file_storage_storage_class: your-rwx-storage-class + file_storage_storage_class: file_storage_size: 10Gi ## uncomment if using S3 storage for Content pod diff --git a/downstream/modules/platform/proc-operator-link-components.adoc b/downstream/modules/platform/proc-operator-link-components.adoc index a5b0f7d223..afc2388bc3 100644 --- a/downstream/modules/platform/proc-operator-link-components.adoc +++ b/downstream/modules/platform/proc-operator-link-components.adoc @@ -27,7 +27,7 @@ spec: hub: disabled: false storage_type: file - file_storage_storage_class: nfs-local-rwx + file_storage_storage_class: file_storage_size: 10Gi ---- From 7d8112bb420c42d6aa3a5af796cda40692ab0bff Mon Sep 17 00:00:00 2001 From: g-murray <147741787+g-murray@users.noreply.github.com> Date: Thu, 12 Sep 2024 11:13:21 +0100 Subject: [PATCH 132/590] Adding link to authentication (#1876) (#1877) --- .../platform/proc-configuring-controller-ldap-security.adoc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/downstream/modules/platform/proc-configuring-controller-ldap-security.adoc b/downstream/modules/platform/proc-configuring-controller-ldap-security.adoc index acd9fd1f1d..6b9b15ec26 100644 --- a/downstream/modules/platform/proc-configuring-controller-ldap-security.adoc +++ b/downstream/modules/platform/proc-configuring-controller-ldap-security.adoc @@ -5,8 +5,7 @@ You can configure your LDAP SSL configuration for {ControllerName} through any of the following options: * The {ControllerName} user interface. -//Need to add a link to Donna's Auth doc when finished. -//* The platform gateway user interface. See Authentication doc for additional steps. +* The platform gateway user interface. See link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/access_management_and_authentication/index#controller-set-up-LDAP[Access management and authentication] for additional steps. * The following procedure steps. .Procedure From b0c77effe3f6ac1b7955bbd141758843a23c3789 Mon Sep 17 00:00:00 2001 From: Ian Fowler <77341519+ianf77@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:32:01 +0100 Subject: [PATCH 133/590] 2.5 Remove field from procedure (#1878) (#1879) Remove entry from System settings https://issues.redhat.com/browse/AAP-30850 --- .../platform/proc-controller-configure-system.adoc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/downstream/modules/platform/proc-controller-configure-system.adoc b/downstream/modules/platform/proc-controller-configure-system.adoc index d068d09c7d..f95ac0d0d3 100644 --- a/downstream/modules/platform/proc-controller-configure-system.adoc +++ b/downstream/modules/platform/proc-controller-configure-system.adoc @@ -8,10 +8,10 @@ You can use the *System* menu to define automation controller system settings. . From the navigation panel, select {MenuSetSystem}. The *System Settings* page is displayed. -+ -image::system-settings-page.png[System settings page - unedited] +//+ +//image::system-settings-page.png[System settings page - unedited] . Click btn:[Edit]. -+ +//+ //image::system-settings-full.png[System settings - configurable fields] . You can configure the following options: + @@ -30,7 +30,8 @@ If this setting is an empty list (the default), the headers specified by `REMOTE Enter one path per line. + * *Last gather date for Automation Analytics*: Set the date and time. -* *Last gathered entries from the data collection service of {Analytics}*: Do not enter anything in this field. +//This field has been removed by https://github.com/ansible/awx/pull/15497 +//* *Last gathered entries from the data collection service of {Analytics}*: Do not enter anything in this field. * *{Analytics} Gather Interval*: Interval (in seconds) between data gathering. + If *Gather data for {Analytics}* is set to false, this value is ignored. From 5b9691b32c86617994469f53d012fb2324cf75f7 Mon Sep 17 00:00:00 2001 From: Elizabeth Murtough <114593312+emurtoug@users.noreply.github.com> Date: Thu, 12 Sep 2024 15:19:27 +0100 Subject: [PATCH 134/590] AAP-26519-A created structure for new book title: Using AA (#1824) (#1880) * AAP-26519-A created structure for new book title: Using automation analytics * AAP-26519-A edited master.adoc --- .../aap-common/apache-2.0-license.adoc | 57 +++ .../aap-common/assembly-aap-common.adoc | 16 + .../analytics/aap-common/boilerplate.adoc | 4 + .../aap-common/external-site-disclaimer.adoc | 20 + .../aap-common/gplv3-license-text.adoc | 231 +++++++++++ .../making-open-source-more-inclusive.adoc | 8 + .../aap-common/providing-feedback.adoc | 7 + .../analytics/attributes/attributes.adoc | 367 ++++++++++++++++++ downstream/titles/analytics/docinfo.xml | 11 + downstream/titles/analytics/master.adoc | 22 ++ 10 files changed, 743 insertions(+) create mode 100644 downstream/titles/analytics/aap-common/apache-2.0-license.adoc create mode 100644 downstream/titles/analytics/aap-common/assembly-aap-common.adoc create mode 100644 downstream/titles/analytics/aap-common/boilerplate.adoc create mode 100644 downstream/titles/analytics/aap-common/external-site-disclaimer.adoc create mode 100644 downstream/titles/analytics/aap-common/gplv3-license-text.adoc create mode 100644 downstream/titles/analytics/aap-common/making-open-source-more-inclusive.adoc create mode 100644 downstream/titles/analytics/aap-common/providing-feedback.adoc create mode 100644 downstream/titles/analytics/attributes/attributes.adoc create mode 100644 downstream/titles/analytics/docinfo.xml create mode 100644 downstream/titles/analytics/master.adoc diff --git a/downstream/titles/analytics/aap-common/apache-2.0-license.adoc b/downstream/titles/analytics/aap-common/apache-2.0-license.adoc new file mode 100644 index 0000000000..e40eeb1791 --- /dev/null +++ b/downstream/titles/analytics/aap-common/apache-2.0-license.adoc @@ -0,0 +1,57 @@ +[id="apache-2.0-license"] + +[.text-center] +*Apache License* +[.text-center] +Version 2.0, January 2004 +[.text-center] +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +*1. Definitions.* + +*"License"* shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +*"Licensor"* shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +*"Legal Entity"* shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, *"control"* means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +*"You"* (or *"Your"*) shall mean an individual or Legal Entity exercising permissions granted by this License. + +*"Source"* form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +*"Object"* form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +*"Work"* shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +*"Derivative Works"* shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +*"Contribution"* shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, *"submitted"* means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as *"Not a Contribution."* + +*"Contributor"* shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +*2. Grant of Copyright License.* Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +*3. Grant of Patent License.* Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +*4. Redistribution.* You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + +.. You must give any other recipients of the Work or Derivative Works a copy of this License; and +.. You must cause any modified files to carry prominent notices stating that You changed the files; and +.. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and +.. If the Work includes a *"NOTICE"* text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + +You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +*5. Submission of Contributions.* Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +*6. Trademarks.* This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +*7. Disclaimer of Warranty.* Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +*8. Limitation of Liability.* In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +*9. Accepting Warranty or Additional Liability.* While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/downstream/titles/analytics/aap-common/assembly-aap-common.adoc b/downstream/titles/analytics/aap-common/assembly-aap-common.adoc new file mode 100644 index 0000000000..3f3f998b4f --- /dev/null +++ b/downstream/titles/analytics/aap-common/assembly-aap-common.adoc @@ -0,0 +1,16 @@ +ifdef::context[:parent-context: {context}] +[preface] +[id='ansible-automation-platform'] +:context: aap-common += {PlatformName} + +{PlatformName} simplifies the development and operation of automation workloads for managing enterprise application infrastructure lifecycles. +{PlatformNameShort} works across multiple IT domains including operations, networking, security, and development, as well as across diverse hybrid environments. +Simple to adopt, use, and understand, {PlatformNameShort} provides the tools needed to rapidly implement enterprise-wide automation, no matter where you are in your automation journey. + +include::making-open-source-more-inclusive.adoc[leveloffset=+1] +include::aap-common/providing-direct-documentation-feedback.adoc[leveloffset=+1] + +// Restore the parent context. +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] diff --git a/downstream/titles/analytics/aap-common/boilerplate.adoc b/downstream/titles/analytics/aap-common/boilerplate.adoc new file mode 100644 index 0000000000..a91f32e965 --- /dev/null +++ b/downstream/titles/analytics/aap-common/boilerplate.adoc @@ -0,0 +1,4 @@ +// Removing the following module from AAP docs front matter because the +// docs.redhat.com site already includes a similar statement. +// include::making-open-source-more-inclusive.adoc[leveloffset=+1] +include::{DocumentationFeedback}[leveloffset=+1] diff --git a/downstream/titles/analytics/aap-common/external-site-disclaimer.adoc b/downstream/titles/analytics/aap-common/external-site-disclaimer.adoc new file mode 100644 index 0000000000..b33617837b --- /dev/null +++ b/downstream/titles/analytics/aap-common/external-site-disclaimer.adoc @@ -0,0 +1,20 @@ +// Richard Fontana from the Legal Department approved the following disclaimer. +// When linking to external resources, include this file in your document. +// +// Prerequisites: +// Add a symlink to the /downstream/snippets directory from the directory that contains the +// file where you plan to include the disclaimer. +// For example, if you want to include the disclaimer in master.adoc for the installation guide, +// you must add a symlink to /downstream/snippets in the /titles/installation-guide directory: +// $ cd titles/aap-installation-guide +// $ ln -s ../../snippets ./snippets +// +// The following example adds a symlink to snippets from a hub title +// $ cd /titles/hub/getting-started +// $ ln -s ../../../snippets ./snippets +// +// Including the file in a document +// Add the following in the file where you want the text to be included: +// include::snippets/external-site-disclaimer.adoc[] +//[ddacosta] generalized this to be usable in broader applications. +*Disclaimer*: Links contained in this information to external website(s) are provided for convenience only. Red Hat has not reviewed the links and is not responsible for the content or its availability. The inclusion of any link to an external website does not imply endorsement by Red Hat of the website or their entities, products or services. You agree that Red Hat is not responsible or liable for any loss or expenses that may result due to your use of (or reliance on) the external site or content. diff --git a/downstream/titles/analytics/aap-common/gplv3-license-text.adoc b/downstream/titles/analytics/aap-common/gplv3-license-text.adoc new file mode 100644 index 0000000000..8ee4be0676 --- /dev/null +++ b/downstream/titles/analytics/aap-common/gplv3-license-text.adoc @@ -0,0 +1,231 @@ +[id="gplv3-license-text"] + +[.text-center] +*GNU GENERAL PUBLIC LICENSE* +[.text-center] +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc.<> + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +[discrete] +==== Preamble +The GNU General Public License is a free, copyleft license for software and other kinds of works. + +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and modification follow. + +[discrete] +==== TERMS AND CONDITIONS + +.0. Definitions. +“This License” refers to version 3 of the GNU General Public License. + +“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + +“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. + +To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. + +A “covered work” means either the unmodified Program or a work based on the Program. + +To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. + +To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. + +.1. Source Code. +The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. + +A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. + +The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. + +The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + +.2. Basic Permissions. +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +.3. Protecting Users' Legal Rights From Anti-Circumvention Law. +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. + +.4. Conveying Verbatim Copies. +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. + +.5. Conveying Modified Source Versions. +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: + +* a) The work must carry prominent notices stating that you modified it, and giving a relevant date. +* b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. +* c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. +* d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. + +.6. Conveying Non-Source Forms. +You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: + +* a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. +* b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. +* c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. +* d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. +* e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. + +A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. + +“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. + +.7. Additional Terms. +“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: + +* a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or +* b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or +* c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or +* d) Limiting the use for publicity purposes of names of licensors or authors of the material; or +* e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or +* f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. + +All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. + +.8. Termination. +You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. + +.9. Acceptance Not Required for Having Copies. +You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. + +.10. Automatic Licensing of Downstream Recipients. +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. + +An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. + +.11. Patents. +A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. + +A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. + +In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. + +A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. + +.12. No Surrender of Others' Freedom. +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. + +.13. Use with the GNU Affero General Public License. +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. + +.14. Revised Versions of this License. +The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. + +.15. Disclaimer of Warranty. +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +.16. Limitation of Liability. +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +.17. Interpretation of Sections 15 and 16. +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS +[discrete] +==== How to Apply These Terms to Your New Programs +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. +---- + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +---- +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: +---- + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. +---- +The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. + +You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <>. + +The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <>. + diff --git a/downstream/titles/analytics/aap-common/making-open-source-more-inclusive.adoc b/downstream/titles/analytics/aap-common/making-open-source-more-inclusive.adoc new file mode 100644 index 0000000000..25d261e0d3 --- /dev/null +++ b/downstream/titles/analytics/aap-common/making-open-source-more-inclusive.adoc @@ -0,0 +1,8 @@ +[preface] +[id="making-open-source-more-inclusive"] += Making open source more inclusive + +Red Hat is committed to replacing problematic language in our code, documentation, and web properties. +We are beginning with these four terms: master, slave, blacklist, and whitelist. +Because of the enormity of this endeavor, these changes will be implemented gradually over several upcoming releases. +For more details, see link:https://www.redhat.com/en/blog/making-open-source-more-inclusive-eradicating-problematic-language[our CTO Chris Wright's message]. diff --git a/downstream/titles/analytics/aap-common/providing-feedback.adoc b/downstream/titles/analytics/aap-common/providing-feedback.adoc new file mode 100644 index 0000000000..9fb541ab69 --- /dev/null +++ b/downstream/titles/analytics/aap-common/providing-feedback.adoc @@ -0,0 +1,7 @@ +[preface] +:_module-type: CONCEPT +[id="providing-feedback"] += Providing feedback on Red Hat documentation + +If you have a suggestion to improve this documentation, or find an error, you can contact technical support at link:https://access.redhat.com[https://access.redhat.com] to open a request. + diff --git a/downstream/titles/analytics/attributes/attributes.adoc b/downstream/titles/analytics/attributes/attributes.adoc new file mode 100644 index 0000000000..bbf81b9792 --- /dev/null +++ b/downstream/titles/analytics/attributes/attributes.adoc @@ -0,0 +1,367 @@ +// Attributes for Red Hat Ansible Automation Platform + +// Platform +:PlatformName: Red Hat Ansible Automation Platform +:PlatformNameShort: Ansible Automation Platform +:AAPCentralAuth: Ansible Automation Platform Central Authentication +:CentralAuthStart: Central authentication +:CentralAuth: central authentication +:PlatformVers: 2.5 +:PostgresVers: PostgreSQL 15 +//The Ansible-core version required to install AAP +:CoreInstVers: 2.15 +//The Ansible-core version used by the AAP control plane and EEs +:CoreUseVers: 2.16 +:PlatformDownloadUrl: https://access.redhat.com/downloads/content/480/ver=2.5/rhel---9/2.4/x86_64/product-software +:BaseURL: https://docs.redhat.com/en/documentation +:VMBase: VM-based installation +:OperatorBase: operator-based installation +:ContainerBase: container-based installation + +// Event-Driven Ansible +:EDAName: Event-Driven Ansible +:EDAcontroller: Event-Driven Ansible controller + +// Ansible Lightspeed +:LightspeedFullName: Red Hat Ansible Lightspeed with IBM watsonx Code Assistant +:LightspeedShortName: Red Hat Ansible Lightspeed +:LightspeedTechPreview: Ansible Lightspeed Technical Preview +:AnsibleCodeBot: Ansible code bot +:AnsibleContentParser: content parser tool +:ibmwatsonxcodeassistant: IBM watsonx Code Assistant + +// AAP on Clouds +:AAPonAzureName: Red Hat Ansible Automation Platform on Microsoft Azure +:AAPonAzureNameShort: Ansible Automation Platform on Microsoft Azure +:AWS: Amazon Web Services +:GCP: Google Cloud Platform +:Azure: Microsoft Azure +:MSEntraID: Microsoft Entra ID + +// Automation Mesh +:AutomationMesh: automation mesh +:AutomationMeshStart: Automation mesh +:ReceptorRpm: receptor rpm/container +:RunnerRpm: Ansible-runner rpm/container + +// Operators +:OperatorPlatform: Ansible Automation Platform Operator +:OperatorHub: Ansible Automation Platform Hub Operator +:OperatorController: Ansible Automation Platform Controller Operator +:OperatorResource: Ansible Automation Platform Resource Operator +:OperatorResourceShort: Resource Operator + +// Automation services catalog +:CatalogName: automation services catalog +:CatalogNameStart: Automation services catalog +:ITSM: ITSM integration +:returns: product returns +:leasing: product leasing +:surveys: dynamic surveys +:connector: cloud connector for catalog + +// Insights +:InsightsName: Red Hat Insights for Red Hat Ansible Automation Platform +:InsightsShort: Insights for Ansible Automation Platform +:calculator: automation calculator +:explorer: job explorer +:planner: automation savings planner +:email: email notification +:subscription: subscription watch +:insights: insights integration + +// Automation hub +:HubNameStart: Automation hub +:HubName: automation hub +:HubNameMain: Ansible automation hub +:PrivateHubNameStart: Private automation hub +:PrivateHubName: private automation hub +:PrivateCollections: Ansible private automation hub collection management +:EEmanagement: Ansible private automation hub EE management +:HubDatabase: Ansible private automation hub database +:Hubreadonly: Ansible automation hub "read-only" instance +:HubCollLife: Ansible automation hub collection lifecycle + +// Automation Controller +:ControllerNameStart: Automation controller +:ControllerName: automation controller +:TaskManager: task manager/scheduler +:APIinventory: API inventory management +:APIcredential: API credential management +:MessageQueue: message queue/cache/KV store +:MeshConnect: automation mesh connector +:MeshReceptor: automation mesh receptor +:ControllerGS: Getting started with automation controller +:ControllerUG: Using automation execution +:ControllerAG: Configuring automation execution +:Analytics: Automation Analytics + + + +// Execution environments +:ExecEnvNameStart: Automation execution environments +:ExecEnvName: automation execution environments +:ExecEnvNameSing: automation execution environment +:ExecEnvNameStartSing: Automation execution environment +:ExecEnvShort: execution environment +:RHEL8: RHEL 8 UBI +:RHEL9: RHEL 9 UBI +:Python: Python 3.9 +:Runner: Ansible Runner +:Role: Role ARG Spec + +// Ansible developer tools +:ToolsName: Ansible developer tools +:AAPRHDH: Ansible plug-ins for Red Hat Developer Hub +:RHDH: Red Hat Developer Hub +:RHDHShort: RHDH +:Builder: Ansible Builder +:Navigator: automation content navigator +:NavigatorStart: Automation content navigator +:IDEplugin: Ansible IDE plugins +:IDEcollection: Ansible IDE collection explorer +:IDElanguage: Ansible IDE language server +:VSCode: VS Code + +// Content Collections +:CertifiedName: Ansible Certified Content Collections +:CertifiedColl: Red Hat Ansible Certified Content Collection +:CertifiedCon: Red Hat Ansible Certified Content +:ServiceNowColl: Red Hat Ansible Certified Content Collection for Service Now +:Galaxy: Ansible Galaxy +:Valid: Ansible validated content +:Console: console.redhat.com + +// Satellite attributes +:SatelliteVers: 6.15 + +// OpenShift attributes +:OCP: Red Hat OpenShift Container Platform +:OCPShort: OpenShift Container Platform +:OCPLatest: 4.15 +:ODF: Red Hat OpenShift Data Foundation +:ODFShort: OpenShift Data Foundation + +// Red Hat products +:RHSSO: Red Hat Single Sign-On +:RHSSOVers: 7.6 +:RHSSOshort: RH-SSO +:OperatorRHSSO: Red Hat Single Sign-On Operator + +// Icons +:MoreActionsIcon: ⋮ +:SettingsIcon: ⚙ + +// Feedback module +:DocumentationFeedback: providing-feedback.adoc +:Boilerplate: aap-common/boilerplate.adoc + +// Linux platforms +:RHEL: Red Hat Enterprise Linux + +// 2.5 Gateway Menu selections +// These menu selections were based on the UI build environment dated 05/03/24 and should be verified against the final build before GA +// Top level menu definitions for use only when selections go 3 levels deep. +:MenuTopAE: Automation Execution +:MenuAD: Automation Decisions +// Not yet used but looks to be future scoped and might replace Automation Execution > Infrastructure +//:MenuAI: Automation Infrastructure +:MenuTopAC: Automation Content +:MenuAA: Automation Analytics +:MenuAL: Ansible Lightspeed with IBM watsonx Code Assistant +:MenuQS: Quick Starts +// Not yet used but looks to be future scoped and will include a blend of menu selections that currently exist. +//:MenuU: Utilities +:MenuAM: Access Management +//Might become Global Settings in the future with a few changed/new selections? +:MenuAEAdminSettings: Settings + +// Automation Execution (aka automation controller menu items) +:MenuAEJobs: menu:{MenuTopAE}[Jobs] +:MenuAETemplates: menu:{MenuTopAE}[Templates] +:MenuAESchedules: menu:{MenuTopAE}[Schedules] +// FYI Automation Execution and Automation Decisions Projects will be under 1 selection in the 2.5-next or later. +:MenuAEProjects: menu:{MenuTopAE}[Projects] + +// Automation Execution > Infrastructure +:MenuInfrastructureTopology: menu:{MenuTopAE}[Infrastructure > Topology View] +:MenuInfrastructureInventories: menu:{MenuTopAE}[Infrastructure > Inventories] +:MenuInfrastructureHosts: menu:{MenuTopAE}[Infrastructure > Hosts] +:MenuInfrastructureInstanceGroups: menu:{MenuTopAE}[Infrastructure > Instance Groups] +:MenuInfrastructureInstances: menu:{MenuTopAE}[Infrastructure > Instances] +:MenuInfrastructureExecEnvironments: menu:{MenuTopAE}[Infrastructure > Execution Environments] +:MenuAECredentials: menu:{MenuTopAE}[Infrastructure > Credentials] +:MenuAECredentialType: menu:{MenuTopAE}[Infrastructure > Credential Types] + +// Automation Execution > Administration +:MenuAEAdminActivityStream: menu:{MenuTopAE}[Administration > Activity Stream] +:MenuAEAdminWorkflowApprovals: menu:{MenuTopAE}[Administration > Workflow Approvals] +:MenuAEAdminJobNotifications: menu:{MenuTopAE}[Administration > Notifiers] +:MenuAEAdminManageJobs: menu:{MenuTopAE}[Administration > Management Jobs] + +//Each of the services previously had selections for access which will be centralized in 2.5, ultimately these should be changed to use the attributes in Access Management menu selections but I'm leaving these for later cleanup to avoid possible errors: +:MenuControllerOrganizations: menu:{MenuAM}[Organizations] +:MenuControllerUsers: menu:{MenuAM}[Users] +:MenuControllerTeams: menu:{MenuAM}[Teams] + +// Automation Decisions (aka event driven automation menu selections) +:MenuADRuleAudit: menu:{MenuAD}[Rule Audit] +:MenuADRulebookActivations: menu:{MenuAD}[Rulebook Activations] +// FYI Automation Execution and Automation Decisions Projects will be under 1 selection in the 2.5-next or later. +:MenuADProjects: menu:{MenuAD}[Projects] +:MenuADDecisionEnvironments: menu:{MenuAD}[Decision Environments] +:MenuADWebhooks: menu:{MenuAD}[Webhooks] +:MenuADCredentials: menu:{MenuAD}[Infrastructure > Credentials] +:MenuADCredentialType: menu:{MenuAD}[Infrastructure > Credential Types] + + +// Automation Content (aka automation hub menu selections) +// In 2.5EA the Automation Content selection will open a hub ui instance in a new tab/browser so the menu definitions will not change until 2.5-next +:MenuACNamespaces: menu:{MenuTopAC}[Namespaces] +:MenuACCollections: menu:{MenuTopAC}[Collections] +:MenuACExecEnvironments: menu:{MenuTopAC}[Execution Environments] + +// Automation Content > Administration +:MenuACAdminSignatureKeys: menu:MenuTopAC[Signature Keys] +:MenuACAdminRepositories: menu:MenuTopAC[Repositories] +:MenuACAdminRemoteRegistries: menu:{MenuTopAC}[Remote Registries] +:MenuACAdminTasks: menu:{MenuTopAC}[Task Management] +:MenuACAdminCollectionApproval: menu:{MenuTopAC}[Collection Approvals] +:MenuACAdminRemotes: menu:{MenuTopAC}[Remotes] +:MenuACAPIToken: menu:Collections[API token] +//Each of the services previously had selections for access which will be centralized, ultimately these should be changed to use the attributes in Access Management menu selections once automation hub is provide in the full ui platform experience in 2.5-next +:MenuHubUsers: menu:{MenuAM}[Users] +:MenuHubGroups: menu:User Access[Groups] +:MenuHubRoles: menu:{MenuAM}[Roles] + +// Automation Analytics menu selections - According to mockups, analytics will be included in the Gateway nav only includes Automation Calculator, Host Metrics and Subscription Usage, other settings are also included on the Ansible dashboard on the Hybrid Cloud Console https://console.redhat.com/ansible/ansible-dashboard +:MenuAAReports: menu:{MenuAA}[Reports] +:MenuAASavingsPlanner: menu:{MenuAA}[Savings Planner] +:MenuAAAutomationCalc: menu:{MenuAA}[Automation Calculator] +:MenuAAHostMetrics: menu:{MenuAA}[Host Metrics] +:MenuAAOrgStats: menu:{MenuAA}[Organization Statistics] +:MenuAAJobExplorer: menu:{MenuAA}[Job Explorer] +:MenuAAClusters: menu:{MenuAA}[Clusters] +:MenuAANotifications: menu:{MenuAA}[Notification] +//The following currently don't exist in the console but may be included in the 2.5 platform +//:MenuAAActivityStream: menu:{MenuAA}[Activity Stream] +//:MenuAAAnalyticsBuilder: menu:{MenuAA}[Analytics builder] +//:MenuAAHostSubscriptionUse: menu:{MenuAA}[Subscription Usage] + +// Ansible Lightspeed menu selections +// --- the following is not in the current build but may be added later --- +//:MenuALSeatManagement: menu:{MenuAL}[Seat Management] + +// Access Management menu selections +:MenuAMAuthentication: menu:{MenuAM}[Authentication Methods] +:MenuAMOrganizations: menu:{MenuAM}[Organizations] +:MenuAMTeams: menu:{MenuAM}[Teams] +:MenuAMUsers: menu:{MenuAM}[Users] +:MenuAMRoles: menu:{MenuAM}[Roles] +:MenuAMAdminOauthApps: menu:{MenuAM}[OAuth Applications] +// [ddacosta Credentials will not be centralized until 2.5-next] +// :MenuAMCredentials: menu:{MenuAM}[Credentials] +// :MenuAMCredentialType: menu:{MenuAM}[Credential Types] + + +//Settings menu selections +// --Previously settings was a single menu selection, in 2.5 it's a top level selection with sub selections see above for the attribute {MenuAEAdminSettings} +:MenuSetSubscription: menu:{MenuAEAdminSettings}[Subscription] +:MenuSetGateway: menu:{MenuAEAdminSettings}[Platform gateway] +:MenuSetUserPref: menu:{MenuAEAdminSettings}[User Preferences] +:MenuSetSystem: menu:{MenuAEAdminSettings}[System] +:MenuSetJob: menu:{MenuAEAdminSettings}[Job] +:MenuSetLogging: menu:{MenuAEAdminSettings}[Logging] +:MenuSetTroubleshooting: menu:{MenuAEAdminSettings}[Troubleshooting] +// Not yet implemented but look to be in the future scope 2.5-next plan +//:MenuSetLogin: {MenuAEAdminSettings}[Log In Settings] +//:MenuSetUI: {MenuAEAdminSettings}[User Interface Settings] + +// Title attributes +// +// titles/troubleshooting-aap +:TitleTroubleshootingAAP: Troubleshooting Ansible Automation Platform +// +// titles/aap-plugin-rhdh-install +:TitlePluginRHDHInstall: Installing Ansible plug-ins for Red Hat Developer Hub +// +// titles/aap-plugin-rhdh-using +:TitlePluginRHDHUsing: Using Ansible plug-ins for Red Hat Developer Hub +// +// titles/aap-operations-guide +:TitleAAPOperationsGuide: Operating Ansible Automation Platform +// +// titles/eda/eda-user-guide +:TitleEDAUserGuide: Using automation decisions +// +// titles/upgrade +:TitleUpgrade: Upgrade and migration +// +// titles/aap-operator-installation +:TitleOperatorInstallation: Installing on Openshift Container Platform +// +// titles/aap-installation-guide +:TitleInstallationGuide: Installing on virtual machines +// +// titles/aap-planning-guide +:TitlePlanningGuide: Planning your installation +// +// titles/operator-mesh +:TitleOperatorMesh: Automation mesh for managed cloud or operator environments +// +// titles/automation-mesh +:TitleAutomationMesh: Automation mesh for VM environments +// +// titles/ocp_performance_guide +:TitleOCPPerformanceGuide: Performance considerations for operator environments +// +// titles/security-guide +:TitleSecurityGuide: Implementing security automation +// +// titles/playbooks/playbooks-getting-started +:TitlePlaybooksGettingStarted: Getting started with playbooks +// +// titles/playbooks/playbooks-reference +:TitlePlaybooksReference: Reference guide to Ansible Playbooks +// +// titles/release-notes +:TitleReleaseNotes: Release notes +// +// titles/controller/controller-user-guide +:TitleControllerUserGuide: Using automation execution +// +// titles/controller/controller-admin-guide +:TitleControllerAdminGuide: Configuring automation execution +// +// titles/controller/controller-api-overview +:TitleControllerAPIOverview: Automation execution API overview +// +// titles/aap-operator-backup +:TitleOperatorBackup: Backup and recovery for operator environments +// +// titles/central-auth +:TitleCentralAuth: Access management and authentication +// +// titles/getting-started +:TitleGettingStarted: Getting started with Ansible Automation Platform +// +// titles/aap-containerized-install +:TitleContainerizedInstall: Containerized installation +// +// titles/navigator-guide +:TitleNavigatorGuide: Using content creator +// +// titles/aap-hardening +:TitleHardening: Hardening and compliance +// +// titles/builder +:TitleBuilder: Creating and using execution environments +// +// titles/hub/managing-content +:TitleHubManagingContent: Managing content in automation hub +// +// titles/analytics/job-explorer +:TitleAnalyticsJobExplorer: Using automation analytics +// +// titles/develop-automation-content +:TitleDevelopAutomationContent: Developing automation content diff --git a/downstream/titles/analytics/docinfo.xml b/downstream/titles/analytics/docinfo.xml new file mode 100644 index 0000000000..a15b8b438d --- /dev/null +++ b/downstream/titles/analytics/docinfo.xml @@ -0,0 +1,11 @@ +Using automation analytics +Red Hat Ansible Automation Platform +2.5 +Evaluate the cost savings associated with automated processes + +This guide shows how to use the features of automation analytics to evaluate how automation is deployed across your environments and the savings associated with it. + + + Red Hat Customer Content Services + + diff --git a/downstream/titles/analytics/master.adoc b/downstream/titles/analytics/master.adoc new file mode 100644 index 0000000000..26bcb48c1d --- /dev/null +++ b/downstream/titles/analytics/master.adoc @@ -0,0 +1,22 @@ +:imagesdir: images +:numbered: +:toclevels: 1 + +:experimental: + +include::attributes/attributes.adoc[] + + +// Book Title += Using automation analytics + +This guide provides recommended practices for various processes needed to install, configure, and maintain {PlatformNameShort} on Red Hat Enterprise Linux in a secure manner. + +// Downstream content only +include::{Boilerplate}[] + +// Contents +include::automation-savings/analytics/assembly-evaluating-automation-return.adoc[leveloffset=+1] +include::automation-savings-planner/analytics/assembly-automation-savings-planner.adoc[leveloffset=+1] +include::job-explorer/analytics/assembly-insights-reports.adoc[leveloffset=+1] +include::reports/analytics/assembly-using-job-explorer.adoc[leveloffset=+1] From b32b8b2cb1113e43e24af8ed365ad72a13fc785e Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Thu, 12 Sep 2024 11:34:18 -0600 Subject: [PATCH 135/590] Update gateway snippet to include link to the Getting started guide (#1873) (#1881) --- downstream/snippets/snip-gateway-component-description.adoc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/downstream/snippets/snip-gateway-component-description.adoc b/downstream/snippets/snip-gateway-component-description.adoc index 9af9201e93..b5835f0380 100644 --- a/downstream/snippets/snip-gateway-component-description.adoc +++ b/downstream/snippets/snip-gateway-component-description.adoc @@ -1,2 +1 @@ -Platform gateway is the service that handles authentication and authorization for the {PlatformNameShort}. It provides a single entry into the {PlatformNameShort} and serves the platform user interface so you can authenticate and access all of the {PlatformNameShort} services from a single location. -//(add link once content is created) For more information about the services available in the {PlatformNameShort}, refer to [new overview content]. +Platform gateway is the service that handles authentication and authorization for the {PlatformNameShort}. It provides a single entry into the {PlatformNameShort} and serves the platform user interface so you can authenticate and access all of the {PlatformNameShort} services from a single location. For more information about the services available in the {PlatformNameShort}, refer to link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html-single/getting_started_with_ansible_automation_platform/index#assembly-gs-key-functionality[Key functionality and concepts] in _{TitleGettingStarted}_. From 62c631c3b058c69474da275ab9bc294188fd366e Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Thu, 12 Sep 2024 11:55:27 -0600 Subject: [PATCH 136/590] AAP-19528 - Adding the subscription details to the access management guide (#1864) (#1882) * AAP-19528 - Adding the subscription details to the access management guide * AAP-19528 updates for peer review changes --- .../assembly-attaching-subscriptions.adoc | 2 +- .../platform/assembly-aap-activate.adoc | 2 +- .../platform/assembly-aap-manifest-files.adoc | 6 +- .../platform/assembly-gateway-licensing.adoc | 21 +++++ .../proc-aap-activate-with-credentials.adoc | 24 +++++- .../proc-aap-activate-with-manifest.adoc | 34 +++++--- .../proc-aap-add-merge-subscriptions.adoc | 13 +-- ...oc-aap-create-subscription-allocation.adoc | 4 + .../proc-aap-generate-manifest-file.adoc | 11 +-- .../proc-attaching-subscriptions.adoc | 79 +++++++++++++++++++ .../platform/ref-controller-licenses.adoc | 2 +- .../ref-controller-node-counting.adoc | 4 +- .../ref-controller-subscription-types.adoc | 4 +- .../ref-controller-trial-evaluation.adoc | 7 +- downstream/titles/central-auth/master.adoc | 1 + 15 files changed, 168 insertions(+), 46 deletions(-) rename downstream/{archive/archived-assemblies => assemblies}/platform/assembly-aap-manifest-files.adoc (83%) create mode 100644 downstream/assemblies/platform/assembly-gateway-licensing.adoc create mode 100644 downstream/modules/platform/proc-attaching-subscriptions.adoc diff --git a/downstream/archive/archived-assemblies/platform/assembly-attaching-subscriptions.adoc b/downstream/archive/archived-assemblies/platform/assembly-attaching-subscriptions.adoc index 8a4ebc7d43..81b9a25f79 100644 --- a/downstream/archive/archived-assemblies/platform/assembly-attaching-subscriptions.adoc +++ b/downstream/archive/archived-assemblies/platform/assembly-attaching-subscriptions.adoc @@ -1,4 +1,4 @@ -// emurtoug archived this assembly from the Planning guide to avoid duplication of subscription content added to Access management and authentication +// emurtoug removed this assembly from the Planning guide to avoid duplication of subscription content added to Access management and authentication [id="proc-attaching-subscriptions_{context}"] diff --git a/downstream/assemblies/platform/assembly-aap-activate.adoc b/downstream/assemblies/platform/assembly-aap-activate.adoc index f2131b15c5..9e9624362e 100644 --- a/downstream/assemblies/platform/assembly-aap-activate.adoc +++ b/downstream/assemblies/platform/assembly-aap-activate.adoc @@ -15,4 +15,4 @@ include::platform/proc-aap-activate-with-credentials.adoc[leveloffset=+1] include::platform/proc-aap-activate-with-manifest.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] -ifndef::parent-context[:!context:] +ifndef::parent-context[:!context:] \ No newline at end of file diff --git a/downstream/archive/archived-assemblies/platform/assembly-aap-manifest-files.adoc b/downstream/assemblies/platform/assembly-aap-manifest-files.adoc similarity index 83% rename from downstream/archive/archived-assemblies/platform/assembly-aap-manifest-files.adoc rename to downstream/assemblies/platform/assembly-aap-manifest-files.adoc index ef9d9f40d8..c61f15c668 100644 --- a/downstream/archive/archived-assemblies/platform/assembly-aap-manifest-files.adoc +++ b/downstream/assemblies/platform/assembly-aap-manifest-files.adoc @@ -1,9 +1,7 @@ -// emurtoug archived this file to avoid duplication of subscription content within Access mangement and authentication +// emurtoug removed this file from the planning guide to avoid duplication of subscription content within Access mangement and authentication ifdef::context[:parent-context: {context}] - - [id="assembly-aap-obtain-manifest-files"] = Obtaining a manifest file @@ -21,4 +19,4 @@ include::platform/proc-aap-add-merge-subscriptions.adoc[leveloffset=+1] include::platform/proc-aap-generate-manifest-file.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] -ifndef::parent-context[:!context:] +ifndef::parent-context[:!context:] \ No newline at end of file diff --git a/downstream/assemblies/platform/assembly-gateway-licensing.adoc b/downstream/assemblies/platform/assembly-gateway-licensing.adoc new file mode 100644 index 0000000000..bf4215997f --- /dev/null +++ b/downstream/assemblies/platform/assembly-gateway-licensing.adoc @@ -0,0 +1,21 @@ +ifdef::context[:parent-context: {context}] + +[id="assembly-gateway-licensing"] += Managing {PlatformNameShort} licensing, updates and support + +:context: licensing-gw + +Ansible is an open source software project and is licensed under the GNU General Public License version 3, as described in the link:https://github.com/ansible/ansible/blob/devel/COPYING[Ansible Source Code] + +You must have valid subscriptions attached before installing {PlatformNameShort}. + +For more information, see xref:proc-attaching-subscriptions[Attaching Subscriptions]. + +include::platform/ref-controller-trial-evaluation.adoc[leveloffset=+1] +include::platform/ref-controller-licenses.adoc[leveloffset=+1] +include::platform/ref-controller-node-counting.adoc[leveloffset=+1] +include::platform/ref-controller-subscription-types.adoc[leveloffset=+1] +include::platform/proc-attaching-subscriptions.adoc[leveloffset=+1] +include::assembly-aap-manifest-files.adoc[leveloffset=+1] +include::assembly-aap-activate.adoc[leveloffset=+1] + \ No newline at end of file diff --git a/downstream/modules/platform/proc-aap-activate-with-credentials.adoc b/downstream/modules/platform/proc-aap-activate-with-credentials.adoc index 3c6d18120e..de843fb6dd 100644 --- a/downstream/modules/platform/proc-aap-activate-with-credentials.adoc +++ b/downstream/modules/platform/proc-aap-activate-with-credentials.adoc @@ -1,11 +1,21 @@ -[id="proc-aap-activate-with-credentials_{context}"] +[id="proc-aap-activate-with-credentials"] = Activate with credentials When {PlatformNameShort} launches for the first time, the {PlatformNameShort} Subscription screen automatically displays. You can use your Red Hat credentials to retrieve and import your subscription directly into {PlatformNameShort}. -.Procedures +[NOTE] +==== +You are opted in for {Analytics} by default when you activate the platform on first time log in. This helps Red Hat improve the product by delivering you a much better user experience. You can opt out, after activating {PlatformNameShort}, by doing the following: + +. From the navigation panel, select {MenuSetSystem}. +. Uncheck the *Gather data for {Analytics}* option. +. Click btn:[Save]. +==== + +.Procedure +. Log in to {PlatformName}. . Select *Username / password*. . Enter your Red Hat username and password. . Select your subscription from the *Subscription* list. @@ -15,7 +25,13 @@ When {PlatformNameShort} launches for the first time, the {PlatformNameShort} Su You can also use your Satellite username and password if your cluster nodes are registered to Satellite through Subscription Manager. ==== + -. The Automation Analytics option is checked by default. These selections help Red Hat improve the product by delivering you a much better user experience. You can opt out by deselecting the options. . Review the End User License Agreement and select *I agree to the End User License Agreement*. . Click btn:[Finish]. -. After your subscription has been accepted, the license screen displays and navigates you to the Dashboard of the {PlatformNameShort} interface. You can return to the license screen by selecting {MenuSetSubscription} from the navigation panel and clicking btn:[Edit subscription].. + +.Verification +After your subscription has been accepted, subscription details are displayed. A status of _Compliant_ indicates your subscription is in compliance with the number of hosts you have automated within your subscription count. Otherwise, your status will show as _Out of Compliance_, indicating you have exceeded the number of hosts in your subscription. +Other important information displayed include the following: +Hosts automated:: Host count automated by the job, which consumes the license count +Hosts imported:: Host count considering all inventory sources (does not impact hosts remaining) +Hosts remaining:: Total host count minus hosts automated + \ No newline at end of file diff --git a/downstream/modules/platform/proc-aap-activate-with-manifest.adoc b/downstream/modules/platform/proc-aap-activate-with-manifest.adoc index ce54d98df7..90f0700e63 100644 --- a/downstream/modules/platform/proc-aap-activate-with-manifest.adoc +++ b/downstream/modules/platform/proc-aap-activate-with-manifest.adoc @@ -1,22 +1,28 @@ -[id="proc-aap-activate-with-manifest_{context}"] +[id="proc-aap-activate-with-manifest"] = Activate with a manifest file -If you have a subscriptions manifest, you can upload the manifest file either by using the {PlatformName} interface or manually in an Ansible Playbook. +If you have a subscriptions manifest, you can upload the manifest file either by using the {PlatformName} interface. + +[NOTE] +==== +You are opted in for {Analytics} by default when you activate the platform on first time log in. This helps Red Hat improve the product by delivering you a much better user experience. You can opt out, after activating {PlatformNameShort}, by doing the following: + +. From the navigation panel, select {MenuSetSystem}. +. Uncheck the *Gather data for {Analytics}* option. +. Click btn:[Save]. +==== .Prerequisites You must have a Red Hat Subscription Manifest file exported from the Red Hat Customer Portal. For more information, see xref:assembly-aap-obtain-manifest-files[Obtaining a manifest file]. -.Uploading with the interface +.Procedure -. Complete steps to generate and download the manifest file . Log in to {PlatformName}. -//[ddacosta] There is no license setting in the test environment for 2.4? Need to verify this selection. In 2.5, I think it will be Settings[Subscription]... . If you are not immediately prompted for a manifest file, go to {MenuSetSubscription}. . Select *Subscription manifest*. . Click btn:[Browse] and select the manifest file. -. The Automation Analytics option is checked by default. These selections help Red Hat improve the product by delivering you a much better user experience. You can opt out by deselecting the options. . Review the End User License Agreement and select *I agree to the End User License Agreement*. . Click btn:[Finish]. @@ -25,12 +31,14 @@ You must have a Red Hat Subscription Manifest file exported from the Red Hat Cus If the btn:[BROWSE] button is disabled on the License page, clear the *USERNAME* and *PASSWORD* fields. ==== -.Uploading manually +.Verification +After your subscription has been accepted, subscription details are displayed. A status of _Compliant_ indicates your subscription is in compliance with the number of hosts you have automated within your subscription count. Otherwise, your status will show as _Out of Compliance_, indicating you have exceeded the number of hosts in your subscription. +Other important information displayed include the following: +Hosts automated:: Host count automated by the job, which consumes the license count +Hosts imported:: Host count considering all inventory sources (does not impact hosts remaining) +Hosts remaining:: Total host count minus hosts automated -If you are unable to apply or update the subscription information by using the {PlatformName} interface, you can upload the subscriptions manifest manually in an Ansible Playbook by using the `license` module in the `ansible.controller` collection. +[role="_additional-resources"] +.Next steps +* You can return to the license screen by selecting {MenuSetSubscription} from the navigation panel and clicking btn:[Edit subscription]. ------ -- name: Set the license using a file - license: - manifest: "/tmp/my_manifest.zip" ------ diff --git a/downstream/modules/platform/proc-aap-add-merge-subscriptions.adoc b/downstream/modules/platform/proc-aap-add-merge-subscriptions.adoc index aa6c72a2eb..b4f76c49ad 100644 --- a/downstream/modules/platform/proc-aap-add-merge-subscriptions.adoc +++ b/downstream/modules/platform/proc-aap-add-merge-subscriptions.adoc @@ -1,5 +1,5 @@ -[id="proc-add-merge-subscriptions_{context}"] +[id="proc-add-merge-subscriptions"] = Adding subscriptions to a subscription allocation @@ -12,11 +12,6 @@ Once an allocation is created, you can add the subscriptions you need for {Platf . Enter the number of {PlatformNameShort} Entitlement(s) you plan to add. . Click btn:[Submit]. -.Verification -After your subscription has been accepted, subscription details are displayed. A status of _Compliant_ indicates your subscription is in compliance with the number of hosts you have automated within your subscription count. Otherwise, your status will show as _Out of Compliance_, indicating you have exceeded the number of hosts in your subscription. - -Other important information displayed include the following: - -Hosts automated:: Host count automated by the job, which consumes the license count -Hosts imported:: Host count considering all inventory sources (does not impact hosts remaining) -Hosts remaining:: Total host count minus hosts automated +[role="_additional-resources"] +.Next steps +* xref:proc-aap-generate-manifest-file[Download the manifest file] from Red Hat Subscription Management. \ No newline at end of file diff --git a/downstream/modules/platform/proc-aap-create-subscription-allocation.adoc b/downstream/modules/platform/proc-aap-create-subscription-allocation.adoc index 6f3798b198..4cbd1cf9ab 100644 --- a/downstream/modules/platform/proc-aap-create-subscription-allocation.adoc +++ b/downstream/modules/platform/proc-aap-create-subscription-allocation.adoc @@ -10,3 +10,7 @@ Creating a new subscription allocation allows you to set aside subscriptions and . Enter a name for the allocation so that you can find it later. . Select *Type: Satellite 6.8* as the management application. . Click btn:[Create]. + +[role="_additional-resources"] +.Next steps +* xref:proc-add-merge-subscriptions[Add the subscriptions] needed for {PlatformNameShort} to run properly. \ No newline at end of file diff --git a/downstream/modules/platform/proc-aap-generate-manifest-file.adoc b/downstream/modules/platform/proc-aap-generate-manifest-file.adoc index 5d96ca2ab4..cf70850995 100644 --- a/downstream/modules/platform/proc-aap-generate-manifest-file.adoc +++ b/downstream/modules/platform/proc-aap-generate-manifest-file.adoc @@ -1,5 +1,5 @@ -[id="proc-generate-manifest-file_{context}"] +[id="proc-aap-generate-manifest-file"] = Downloading a manifest file @@ -10,8 +10,9 @@ After an allocation is created and has the appropriate subscriptions on it, you . From the link:https://access.redhat.com/management/subscription_allocations/[Subscription Allocations] page, click on the name of the *Subscription Allocation* to which you would like to generate a manifest. . Click the *Subscriptions* tab. . Click btn:[Export Manifest] to download the manifest file. ++ +This downloads a file _manifest__.zip_ to your default downloads folder. -[NOTE] -==== -The file is saved to your default downloads folder and can now be uploaded to xref:proc-aap-activate-with-manifest_activate-aap[activate {PlatformName}]. -==== +[role="_additional-resources"] +.Next steps +* xref:proc-aap-activate-with-manifest[Upload the manifest file] to activate {PlatformName}. diff --git a/downstream/modules/platform/proc-attaching-subscriptions.adoc b/downstream/modules/platform/proc-attaching-subscriptions.adoc new file mode 100644 index 0000000000..9635111467 --- /dev/null +++ b/downstream/modules/platform/proc-attaching-subscriptions.adoc @@ -0,0 +1,79 @@ +// emurtoug removed this assembly from the Planning guide to avoid duplication of subscription content added to Access management and authentication + +[id="proc-attaching-subscriptions"] + += Attaching your {PlatformName} subscription + +[role="_abstract"] +You *must* have valid subscriptions attached on all nodes before installing {PlatformName}. Attaching your {PlatformNameShort} subscription provides access to subscription-only resources necessary to proceed with the installation. + +[NOTE] +==== +Attaching a subscription is unnecessary if you have enabled Simple Content Access Mode on your Red Hat account. Once enabled, you will need to register your systems to either Red Hat Subscription Management (RHSM) or Satellite before installing the {PlatformNameShort}. For more information, see link:https://access.redhat.com/articles/simple-content-access[Simple Content Access]. +==== + +.Procedure + +. Obtain the `pool_id` for your {PlatformName} subscription: ++ +----- +# subscription-manager list --available --all | grep "Ansible Automation Platform" -B 3 -A 6 +----- ++ +[NOTE] +==== +Do not use MCT4022 as a `pool_id` for your subscription because it can cause {PlatformNameShort} subscription attachment to fail. +==== ++ +.Example +An example output of the `*subsciption-manager list*` command. Obtain the `pool_id` as seen in the `Pool ID:` section: ++ +----- +Subscription Name: Red Hat Ansible Automation, Premium (5000 Managed Nodes) + Provides: Red Hat Ansible Engine + Red Hat Ansible Automation Platform + SKU: MCT3695 + Contract: ```` + Pool ID: + Provides Management: No + Available: 4999 + Suggested: 1 +----- ++ +. Attach the subscription: ++ +----- +# subscription-manager attach --pool= +----- ++ +You have now attached your {PlatformName} subscriptions to all nodes. ++ +. To remove this subscription, enter the following command: ++ +----- +# subscription-manager remove --pool= +----- + +.Verification + +* Verify the subscription was successfully attached: + +----- +# subscription-manager list --consumed +----- + +.Troubleshooting + +* If you are unable to locate certain packages that came bundled with the {PlatformNameShort} installer, or if you are seeing a `_Repositories disabled by configuration_` message, try enabling the repository by using the command: ++ +{PlatformName} {PlatformVers} for RHEL 8 ++ +---- +subscription-manager repos --enable ansible-automation-platform-2.4-for-rhel-8-x86_64-rpms +---- ++ +{PlatformName} {PlatformVers} for RHEL 9 ++ +---- +subscription-manager repos --enable ansible-automation-platform-2.4-for-rhel-9-x86_64-rpms +---- diff --git a/downstream/modules/platform/ref-controller-licenses.adoc b/downstream/modules/platform/ref-controller-licenses.adoc index 46dc100524..c37ba42f78 100644 --- a/downstream/modules/platform/ref-controller-licenses.adoc +++ b/downstream/modules/platform/ref-controller-licenses.adoc @@ -2,7 +2,7 @@ = Component licenses -To view the license information for the components included in {ControllerName}, see `/usr/share/doc/automation-controller-/README`. +To view the license information for the components included in {PlatformNameShort}, see `/usr/share/doc/automation-controller-/README`. where `` refers to the version of {ControllerName} you have installed. diff --git a/downstream/modules/platform/ref-controller-node-counting.adoc b/downstream/modules/platform/ref-controller-node-counting.adoc index 011985ee69..6fd9fee4a7 100644 --- a/downstream/modules/platform/ref-controller-node-counting.adoc +++ b/downstream/modules/platform/ref-controller-node-counting.adoc @@ -2,11 +2,11 @@ = Node counting in licenses -The {ControllerName} license defines the number of Managed Nodes that can be managed as part of a {PlatformName} subscription. +The {PlatformNameShort} license defines the number of Managed Nodes that can be managed as part of your subscription. A typical license says "License Count: 500", which sets the maximum number of Managed Nodes at 500. -For more information about managed node requirements for licensing, see https://access.redhat.com/articles/3331481. +For more information about managed node requirements for licensing, see link:https://access.redhat.com/articles/3331481[How are "managed nodes" defined as part of the {PlatformName} offering] [NOTE] ==== diff --git a/downstream/modules/platform/ref-controller-subscription-types.adoc b/downstream/modules/platform/ref-controller-subscription-types.adoc index cf3017b14a..5222faf18a 100644 --- a/downstream/modules/platform/ref-controller-subscription-types.adoc +++ b/downstream/modules/platform/ref-controller-subscription-types.adoc @@ -18,7 +18,7 @@ ** Review the SLA at link:https://access.redhat.com/support/offerings/production/sla[Product Support Terms of Service] ** Review the link:https://access.redhat.com/support/policy/severity[Red Hat Support Severity Level Definitions] -All subscription levels include regular updates and releases of {ControllerName}, Ansible, and any other components of the Platform. +All subscription levels include regular updates and releases of {ControllerName}, Ansible, and any other components of the {PlatformNameShort}. For more information, contact Ansible through the link:https://access.redhat.com/[Red Hat Customer Portal] -or at http://www.ansible.com/contact-us/. +or at the link:http://www.ansible.com/contact-us/[Ansible site]. diff --git a/downstream/modules/platform/ref-controller-trial-evaluation.adoc b/downstream/modules/platform/ref-controller-trial-evaluation.adoc index c2e2bc2255..1f668223a9 100644 --- a/downstream/modules/platform/ref-controller-trial-evaluation.adoc +++ b/downstream/modules/platform/ref-controller-trial-evaluation.adoc @@ -1,9 +1,8 @@ [id="ref-controller-trial-evaluation"] = Trial and evaluation -You require a license to run {ControllerName}. -You can start by using a free trial license. +A license is required to run {PlatformNameShort}. You can start by using a free trial license. -* Trial licenses for {PlatformNameShort} are available at: https://www.redhat.com/en/products/trials?products=ansible +* Trial licenses for {PlatformNameShort} are available at the link:https://www.redhat.com/en/products/trials?products=ansible[Red Hat product trial center]. -* Support is not included in a trial license or during an evaluation of the {ControllerName} software. \ No newline at end of file +* Support is not included in a trial license or during an evaluation of the {PlatformNameShort}. \ No newline at end of file diff --git a/downstream/titles/central-auth/master.adoc b/downstream/titles/central-auth/master.adoc index 6005517547..aadd249df2 100644 --- a/downstream/titles/central-auth/master.adoc +++ b/downstream/titles/central-auth/master.adoc @@ -12,6 +12,7 @@ include::attributes/attributes.adoc[] include::{Boilerplate}[] include::platform/platform/con-gw-overview-access-auth.adoc[leveloffset=+1] +include::platform/assembly-gateway-licensing.adoc[leveloffset=+1] include::platform/assembly-gw-configure-authentication.adoc[leveloffset=+1] include::platform/assembly-gw-config-authentication-type.adoc[leveloffset=+2] include::platform/assembly-gw-mapping.adoc[leveloffset=+2] From eef25db9b550b270d8f891b3c31e9a20133825e1 Mon Sep 17 00:00:00 2001 From: Donna DaCosta Date: Thu, 12 Sep 2024 12:32:16 -0600 Subject: [PATCH 137/590] AAP19528_a - Implement peer review changes from backport PR#1882 (#1883) (#1884) --- downstream/assemblies/platform/assembly-gateway-licensing.adoc | 2 +- .../modules/platform/proc-aap-activate-with-credentials.adoc | 2 +- downstream/modules/platform/ref-controller-node-counting.adoc | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/downstream/assemblies/platform/assembly-gateway-licensing.adoc b/downstream/assemblies/platform/assembly-gateway-licensing.adoc index bf4215997f..aa5d755988 100644 --- a/downstream/assemblies/platform/assembly-gateway-licensing.adoc +++ b/downstream/assemblies/platform/assembly-gateway-licensing.adoc @@ -5,7 +5,7 @@ ifdef::context[:parent-context: {context}] :context: licensing-gw -Ansible is an open source software project and is licensed under the GNU General Public License version 3, as described in the link:https://github.com/ansible/ansible/blob/devel/COPYING[Ansible Source Code] +Ansible is an open source software project and is licensed under the GNU General Public License version 3, as described in the link:https://github.com/ansible/ansible/blob/devel/COPYING[Ansible Source Code]. You must have valid subscriptions attached before installing {PlatformNameShort}. diff --git a/downstream/modules/platform/proc-aap-activate-with-credentials.adoc b/downstream/modules/platform/proc-aap-activate-with-credentials.adoc index de843fb6dd..f46bf09404 100644 --- a/downstream/modules/platform/proc-aap-activate-with-credentials.adoc +++ b/downstream/modules/platform/proc-aap-activate-with-credentials.adoc @@ -10,7 +10,7 @@ When {PlatformNameShort} launches for the first time, the {PlatformNameShort} Su You are opted in for {Analytics} by default when you activate the platform on first time log in. This helps Red Hat improve the product by delivering you a much better user experience. You can opt out, after activating {PlatformNameShort}, by doing the following: . From the navigation panel, select {MenuSetSystem}. -. Uncheck the *Gather data for {Analytics}* option. +. Clear the *Gather data for {Analytics}* option. . Click btn:[Save]. ==== diff --git a/downstream/modules/platform/ref-controller-node-counting.adoc b/downstream/modules/platform/ref-controller-node-counting.adoc index 6fd9fee4a7..d60e5f125a 100644 --- a/downstream/modules/platform/ref-controller-node-counting.adoc +++ b/downstream/modules/platform/ref-controller-node-counting.adoc @@ -6,7 +6,7 @@ The {PlatformNameShort} license defines the number of Managed Nodes that can be A typical license says "License Count: 500", which sets the maximum number of Managed Nodes at 500. -For more information about managed node requirements for licensing, see link:https://access.redhat.com/articles/3331481[How are "managed nodes" defined as part of the {PlatformName} offering] +For more information about managed node requirements for licensing, see link:https://access.redhat.com/articles/3331481[How are "managed nodes" defined as part of the {PlatformName} offering]. [NOTE] ==== From 4370ddc5d2f659d8f5983465d529f694a85a48b3 Mon Sep 17 00:00:00 2001 From: Michelle McCausland <141345897+michellemacrh@users.noreply.github.com> Date: Fri, 13 Sep 2024 13:23:05 +0100 Subject: [PATCH 138/590] Update containerized install guide (#1885) (#1886) * Update containerized install guide Containerized installer - implement hackathon docs feedback https://issues.redhat.com/browse/-30481 * Updates based on peer review feedback --- ...sembly-aap-containerized-installation.adoc | 1 - .../proc-downloading-containerized-aap.adoc | 10 +- .../proc-installing-containerized-aap.adoc | 263 ++++++++++-------- ...l-host-for-containerized-installation.adoc | 24 +- .../platform/proc-using-postinstall.adoc | 2 +- 5 files changed, 167 insertions(+), 133 deletions(-) diff --git a/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc b/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc index 3de79ab8cc..73c9c8db37 100644 --- a/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc +++ b/downstream/assemblies/platform/assembly-aap-containerized-installation.adoc @@ -55,7 +55,6 @@ Each virtual machine (VM) has the following system requirements: include::platform/proc-preparing-the-rhel-host-for-containerized-installation.adoc[leveloffset=+1] -include::platform/proc-installing-ansible-core.adoc[leveloffset=+1] include::platform/proc-downloading-containerized-aap.adoc[leveloffset=+1] include::platform/proc-installing-containerized-aap.adoc[leveloffset=+1] include::platform/proc-using-postinstall.adoc[leveloffset=+1] diff --git a/downstream/modules/platform/proc-downloading-containerized-aap.adoc b/downstream/modules/platform/proc-downloading-containerized-aap.adoc index b3f839171e..1e775c75e0 100644 --- a/downstream/modules/platform/proc-downloading-containerized-aap.adoc +++ b/downstream/modules/platform/proc-downloading-containerized-aap.adoc @@ -1,14 +1,16 @@ :_mod-docs-content-type: PROCEDURE -[id="downloading-containerizzed-aap_{context}"] +[id="downloading-containerized-aap_{context}"] = Downloading {PlatformNameShort} -[role="_abstract"] +Choose the installer you need based on your {RHEL} environment internet connectivity and download the installer to your RHEL host. .Procedure . Download the latest installer .tar file from the link:{PlatformDownloadUrl}[{PlatformNameShort} download page]. +.. For online installations: {PlatformNameShort} {PlatformVers} Containerized Setup +.. For offline or bundled installations: {PlatformNameShort} {PlatformVers} Containerized Setup Bundle . Copy the installer .tar file and the optional manifest .zip file onto your {RHEL} host. @@ -16,13 +18,13 @@ . Unpack the installer .tar file into your installation directory, and go to the unpacked directory. + -.. For the online installer: +.. To unpack the online installer: + ---- $ tar xfvz ansible-automation-platform-containerized-setup-.tar.gz ---- + -.. For the bundled installer: +.. To unpack the offline or bundled installer: + ---- $ tar xfvz ansible-automation-platform-containerized-setup-bundle--.tar.gz diff --git a/downstream/modules/platform/proc-installing-containerized-aap.adoc b/downstream/modules/platform/proc-installing-containerized-aap.adoc index 8a7de59cfa..1d6ba05ec5 100644 --- a/downstream/modules/platform/proc-installing-containerized-aap.adoc +++ b/downstream/modules/platform/proc-installing-containerized-aap.adoc @@ -9,165 +9,184 @@ You can control the installation of {PlatformNameShort} with inventory files. Inventory files define the hosts and containers used and created, variables for components, and other information needed to customize the installation. -You can find example inventory files for containerized {PlatformNameShort} in link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/supported_deployment_models_for_ansible_automation_platform[Container supported topologies] in _{TitleTopologies}_. +== Example inventory files +Example inventory files are provided in this document that you can copy and change to quickly get started. You can find additional example inventory files in link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/supported_deployment_models_for_ansible_automation_platform[Container supported topologies] in _{TitleTopologies}_. -Additionally, for convenience, an example `inventory` file is provided that you can copy and change to quickly get started. +To use the example inventory files, replace the `< >` placeholders with your specific variables, and update the host names. Refer to the `README.md` file in the installation directory for more information about optional and required variables. -Edit the `inventory` file by replacing the `< >` placeholders with your specific variables, and uncommenting any lines specific to your needs. Refer to the `README.md` file in the installation directory for more information about optional and required variables. +.Inventory file for online installation for containerized growth topology +Use the following example inventory file to perform an online installation for the containerized growth topology: +[subs="+attributes"] ---- -# This is the AAP installer inventory file -# Please consult the docs if you're unsure what to add +# This is the {PlatformNameShort} installer inventory file +# Please consult the documentation if you are unsure what to add # For all optional variables please consult the included README.md -# This section is for your AAP Controller host(s) +# This section is for your platform gateway hosts +# ----------------------------------------------------- +[automationgateway] +aap.example.org + +# This section is for your {ControllerName} hosts # ------------------------------------------------- [automationcontroller] -fqdn_of_your_rhel_host ansible_connection=local +aap.example.org -# This section is for your AAP Automation Hub host(s) +# This section is for your {HubName} hosts # ----------------------------------------------------- [automationhub] -fqdn_of_your_rhel_host ansible_connection=local +aap.example.org -# This section is for your AAP EDA Controller host(s) +# This section is for your {EDAcontroller} hosts # ----------------------------------------------------- [automationeda] -fqdn_of_your_rhel_host ansible_connection=local +aap.example.org + +# This section is for the {PlatformNameShort} database +# -------------------------------------- +[database] +aap.example.org + +[all:vars] + +# Common variables +# ---------------- +postgresql_admin_username=postgres +postgresql_admin_password= + +registry_username= +registry_password= + +redis_mode=standalone + +# Platform gateway +# ----------- +gateway_admin_password= +gateway_pg_host=aap.example.org +gateway_pg_password= + +# {ControllerNameStart} +# -------------- +controller_admin_password= +controller_pg_host=aap.example.org +controller_pg_password= + +# {HubNameStart} +# ------------------ +hub_admin_password= +hub_pg_host=aap.example.org +hub_pg_password= + +# {EDAcontroller} +# ------------------ +eda_admin_password= +eda_pg_host=aap.example.org +eda_pg_password= +---- + +.Inventory file for online installation for containerized enterprise topology -# This section is for your AAP Gateway host(s) +Use the following example inventory file to perform an online installation for the containerized enterprise topology: + +[subs="+attributes"] +---- +# This is the {PlatformNameShort} installer inventory file +# Please consult the documentation if you are unsure what to add +# For all optional variables please consult the included README.md + +# This section is for your platform gateway hosts # ----------------------------------------------------- [automationgateway] -fqdn_of_your_rhel_host ansible_connection=local +gateway1.example.org +gateway2.example.org + +# This section is for your {ControllerName} hosts +# ------------------------------------------------- +[automationcontroller] +controller1.example.org +controller2.example.org -# This section is for your AAP Execution host(s) +# This section is for your {PlatformNameShort} execution hosts # ------------------------------------------------ -#[execution_nodes] -#fqdn_of_your_rhel_host +[execution_nodes] +hop1.example.org receptor_type='hop' +exec1.example.org +exec2.example.org -# This section is for the AAP database(s) -# ----------------------------------------- -# Uncomment the lines below and amend appropriately if you want AAP to install and manage the postgres databases -# Leave commented out if you intend to use your own external database and just set appropriate _pg_hosts vars -# see mandatory sections under each AAP component -#[database] -#fqdn_of_your_rhel_host ansible_connection=local +# This section is for your {HubName} hosts +# ----------------------------------------------------- +[automationhub] +hub1.example.org +hub2.example.org + +# This section is for your {EDAcontroller} hosts +# ----------------------------------------------------- +[automationeda] +eda1.example.org +eda2.example.org + +[redis] +gateway1.example.org +gateway2.example.org +hub1.example.org +hub2.example.org +eda1.example.org +eda2.example.org [all:vars] -# Common variables needed for installation -# ---------------------------------------- -postgresql_admin_username=postgres -postgresql_admin_password= -# If using the online (non-bundled) installer, you need to set RHN registry credentials +# Common variables +# ---------------- registry_username= registry_password= -# If using the bundled installer, you need to alter defaults by using: -#bundle_install=true -# The bundle directory must include /bundle in the path -#bundle_dir= -# To add more decision environment images you need to set the de_extra_images variable -#de_extra_images=[{'name': 'Custom decision environment', 'image': '//:'}] -# To add more execution environment images you need to set the ee_extra_images variable -#ee_extra_images=[{'name': 'Custom execution environment', 'image': '//:'}] -# To use custom TLS CA certificate/key you need to set these variables -#ca_tls_cert= -#ca_tls_key= - -# AAP Database - optional -# -------------------------- -# To use custom TLS certificate/key you need to set these variables -#postgresql_tls_cert= -#postgresql_tls_key= - -# AAP Controller - mandatory -# -------------------------- + +# Platform gateway +# ----------- +gateway_admin_password= +gateway_pg_host=externaldb.example.org +gateway_pg_database= +gateway_pg_username= +gateway_pg_password= + +# {ControllerNameStart} +# -------------- controller_admin_password= -controller_pg_host=fqdn_of_your_rhel_host +controller_pg_host=externaldb.example.org +controller_pg_database= +controller_pg_username= controller_pg_password= -# AAP Controller - optional -# ------------------------- -# To use the postinstall feature you need to set these variables -#controller_postinstall=true -#controller_license_file= -#controller_postinstall_dir= -# When using config-as-code in a git repository -#controller_postinstall_repo_url= -#controller_postinstall_repo_ref=main -# To use custom TLS certificate/key you need to set these variables -#controller_tls_cert= -#controller_tls_key= - -# AAP Automation Hub - mandatory -# ------------------------------ +# {HubNameStart} +# ------------------ hub_admin_password= -hub_pg_host=fqdn_of_your_rhel_host +hub_pg_host=externaldb.example.org +hub_pg_database= +hub_pg_username= hub_pg_password= -# AAP Automation Hub - optional -# ----------------------------- -# To use the postinstall feature you need to set these variables -#hub_postinstall=true -#hub_postinstall_dir= -# When using config-as-code in a git repository -#hub_postinstall_repo_url= -#hub_postinstall_repo_ref=main -# To customize the number of worker containers -#hub_workers=2 -# To use the collection signing feature you need to set these variables -#hub_collection_signing=true -#hub_collection_signing_key= -# To use the container signing feature you need to set these variables -#hub_container_signing=true -#hub_container_signing_key= -# To use custom TLS certificate/key you need to set these variables -#hub_tls_cert= -#hub_tls_key= - -# AAP EDA Controller - mandatory -# ------------------------------ +# {EDAcontroller} +# ------------------ eda_admin_password= -eda_pg_host=fqdn_of_your_rhel_host +eda_pg_host=externaldb.example.org +eda_pg_database= +eda_pg_username= eda_pg_password= +---- -# AAP EDA Controller - optional -# ----------------------------- -# When using an external controller node unmanaged by the installer. -#controller_main_url=https://fqdn_of_your_rhel_host -# To customize the number of default/activation worker containers -#eda_workers=2 -#eda_activation_workers=2 -# To use custom TLS certificate/key you need to set these variables -#eda_tls_cert= -#eda_tls_key= - -# AAP Gateway - mandatory -# ------------------------------ -gateway_admin_password= -gateway_pg_host=fqdn_of_your_rhel_host -gateway_pg_password= +== Additional information for configuring your inventory file + +.Offline or bundled installation -# AAP Gateway - optional -# ----------------------------- -# To use custom TLS certificate/key you need to set these variables -#gateway_tls_cert= -#gateway_tls_key= - -# AAP Execution Nodes - optional -# ----------------------------- -#receptor_port=27199 -#receptor_protocol=tcp -# To use custom TLS certificate/key you need to set these variables -#receptor_tls_cert= -#receptor_tls_key= -# To use custom RSA key pair you need to set these variables -#receptor_signing_private_key= -#receptor_signing_public_key= +* To perform an offline installation, add the following under the `[all:vars]` group: + +---- +bundle_install=true +# The bundle directory must include /bundle in the path +bundle_dir= ---- -* There is no default database choice in the example inventory file. Follow the instructions in the inventory file to make the appropriate choice between an internally provided Postgres, or provide your own externally managed and supported database option. .Configuring a HAProxy load balancer @@ -183,7 +202,7 @@ gateway_main_url= HAProxy SSL passthrough mode is not supported with platform gateway. ==== -.Installing containerized {PlatformNameShort} +== Running the installation command Use the following command to install containerized {PlatformNameShort}: diff --git a/downstream/modules/platform/proc-preparing-the-rhel-host-for-containerized-installation.adoc b/downstream/modules/platform/proc-preparing-the-rhel-host-for-containerized-installation.adoc index a046e6e2ee..4fa1b6bd6e 100644 --- a/downstream/modules/platform/proc-preparing-the-rhel-host-for-containerized-installation.adoc +++ b/downstream/modules/platform/proc-preparing-the-rhel-host-for-containerized-installation.adoc @@ -4,14 +4,10 @@ = Preparing the RHEL host for containerized installation -[role="_abstract"] +Containerized {PlatformNameShort} runs the component services as Podman based containers on top of a RHEL host. The installer takes care of this after the underlying host has been prepared. .Procedure -Containerized {PlatformNameShort} runs the component services as Podman based containers on top of a RHEL host. The installer takes care of this once the underlying host has been prepared. - -Use the following instructions to prepare the RHEL host: - . Log in to the RHEL host as your non-root user. . Register your RHEL host with `subscription-manager`: @@ -36,6 +32,24 @@ link:{BaseURL}/red_hat_enterprise_linux/9/html/managing_software_with_the_dnf_to . Ensure that the host has DNS configured and can resolve host names and IP addresses by using a fully qualified domain name (FQDN). This is essential to ensure services can talk to one another. +. Install `ansible-core`: ++ +---- +sudo dnf install -y ansible-core +---- ++ +. Optional: You can install additional utilities that can be useful for troubleshooting purposes, for example `wget`, `git`, `rsync`, and `vim`: ++ +---- +sudo dnf install -y wget git rsync vim +---- ++ +. Set a hostname that is a fully qualified domain name (FQDN): ++ +---- +sudo hostnamectl set-hostname +---- + . Optional: To have the installer automatically pick up and apply your {PlatformNameShort} subscription manifest license, follow the steps in link:{BaseURL}/red_hat_ansible_automation_platform/{PlatformVers}/html/red_hat_ansible_automation_platform_operations_guide/assembly-aap-obtain-manifest-files[Chapter 2. Obtaining a manifest file]. [role="_additional-resources"] diff --git a/downstream/modules/platform/proc-using-postinstall.adoc b/downstream/modules/platform/proc-using-postinstall.adoc index 3a3ae6e7c0..9ce657db76 100644 --- a/downstream/modules/platform/proc-using-postinstall.adoc +++ b/downstream/modules/platform/proc-using-postinstall.adoc @@ -14,7 +14,7 @@ You can use the optional postinstall feature of containerized {PlatformNameShort .Procedure -. The postinstall feature is disabled by default. To use the postinstaller, uncomment the following variables in your inventory file: +. The postinstall feature is disabled by default. To use the postinstaller, add the following variables in your inventory file: + ---- controller_postinstall=true From c77b3cc90e2f97b21cbf6cc00d4820a4aacf601d Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Fri, 13 Sep 2024 14:11:39 +0100 Subject: [PATCH 139/590] Rename navigator guide to Using content navigator (#1887) (#1888) --- downstream/titles/navigator-guide/docinfo.xml | 2 +- downstream/titles/navigator-guide/master.adoc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/downstream/titles/navigator-guide/docinfo.xml b/downstream/titles/navigator-guide/docinfo.xml index 869a540481..4d80c41c38 100644 --- a/downstream/titles/navigator-guide/docinfo.xml +++ b/downstream/titles/navigator-guide/docinfo.xml @@ -1,4 +1,4 @@ -Using content creator +Using content navigator Red Hat Ansible Automation Platform 2.5 Develop content that is compatible with Ansible Automation Platform diff --git a/downstream/titles/navigator-guide/master.adoc b/downstream/titles/navigator-guide/master.adoc index 5adaaa1622..e5f85c2fcb 100644 --- a/downstream/titles/navigator-guide/master.adoc +++ b/downstream/titles/navigator-guide/master.adoc @@ -7,7 +7,7 @@ include::attributes/attributes.adoc[] // Book Title -= Using content creator += Using content navigator include::{Boilerplate}[] From 875ff715183c4d7ea643cbdbfc6cca01d73a6128 Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Sun, 15 Sep 2024 11:52:45 +0100 Subject: [PATCH 140/590] 2.5 Update title attributes for navigator (#1891) (#1892) --- downstream/attributes/attributes.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/downstream/attributes/attributes.adoc b/downstream/attributes/attributes.adoc index 50a7dcc929..c30f8a0612 100644 --- a/downstream/attributes/attributes.adoc +++ b/downstream/attributes/attributes.adoc @@ -348,7 +348,7 @@ :TitleContainerizedInstall: Containerized installation // // titles/navigator-guide -:TitleNavigatorGuide: Using content creator +:TitleNavigatorGuide: Using content navigator // // titles/aap-hardening :TitleHardening: Hardening and compliance From b19c1295590207f5a967d33d57c75f1a5b36d220 Mon Sep 17 00:00:00 2001 From: Aine Riordan <44700011+ariordan-redhat@users.noreply.github.com> Date: Sun, 15 Sep 2024 22:07:10 +0100 Subject: [PATCH 141/590] 2.5 AAP-27695 Add Ansible plug-in for RHDH Installation doc (#1634) (#1897) --- .../devtools/assembly-rhdh-configure.adoc | 11 +- .../devtools/assembly-rhdh-install-ocp.adoc | 33 ++++++ .../devtools/assembly-rhdh-install.adoc | 16 --- .../devtools/assembly-rhdh-intro.adoc | 7 +- .../devtools/assembly-rhdh-uninstall-ocp.adoc | 15 +++ .../devtools/assembly-rhdh-upgrade-ocp.adoc | 17 +++ .../assembly-rhdh-upgrading-uninstalling.adoc | 15 --- downstream/attributes/attributes.adoc | 1 + .../rhdh-ansible-plugin-architecture.png | Bin 0 -> 416259 bytes .../images/rhdh-check-devtools-container.png | Bin 0 -> 94114 bytes .../images/rhdh-check-plugin-config.png | Bin 0 -> 356916 bytes downstream/images/rhdh-plugin-registry.png | Bin 0 -> 348511 bytes .../proc-rhdh-add-additional-scm.adoc | 49 +++++++++ .../proc-rhdh-add-devtools-container.adoc | 51 +++++++++ .../devtools/proc-rhdh-add-plugin-config.adoc | 63 +++++++++++ ...oc-rhdh-add-plugin-software-templates.adoc | 28 +++++ .../proc-rhdh-add-pull-secret-helm.adoc | 30 +++++ .../proc-rhdh-configure-aap-details.adoc | 43 ++++++++ .../proc-rhdh-configure-devspaces.adoc | 43 ++++++++ .../proc-rhdh-configure-devtools-server.adoc | 22 ++++ ...-rhdh-configure-optional-integrations.adoc | 12 ++ .../devtools/proc-rhdh-configure-pah-url.adoc | 43 ++++++++ .../devtools/proc-rhdh-configure-rbac.adoc | 30 +++++ .../proc-rhdh-configure-telemetry.adoc | 22 ++++ .../proc-rhdh-create-plugin-registry.adoc | 47 ++++++++ .../devtools/proc-rhdh-devtools-sidecar.adoc | 7 ++ .../devtools/proc-rhdh-download-plugins.adoc | 44 ++++++++ .../proc-rhdh-enable-rhdh-authentication.adoc | 12 ++ .../devtools/proc-rhdh-uninstall-ocp.adoc | 103 ++++++++++++++++++ .../proc-rhdh-update-plugin-registry.adoc | 38 +++++++ ...c-rhdh-update-plugins-version-numbers.adoc | 59 ++++++++++ .../devtools/proc-rhdh-warning-aap-ooc.adoc | 22 ++++ .../proc-rhdh-warning-invalid-aap-config.adoc | 20 ++++ ...rhdh-warning-invalid-aap-subscription.adoc | 20 ++++ ...-rhdh-warning-unable-authenticate-aap.adoc | 22 ++++ .../proc-rhdh-warning-unable-connect-aap.adoc | 20 ++++ .../devtools/ref-rhdh-about-plugins.adoc | 15 +++ .../modules/devtools/ref-rhdh-about-rhdh.adoc | 6 + .../devtools/ref-rhdh-architecture.adoc | 7 ++ .../ref-rhdh-install-ocp-prereqs.adoc | 13 +++ .../ref-rhdh-plugin-subscription-warning.adoc | 12 ++ .../aap-plugin-rhdh-install/docinfo.xml | 4 +- .../aap-plugin-rhdh-install/master.adoc | 13 ++- .../titles/aap-plugin-rhdh-install/snippets | 1 + 44 files changed, 994 insertions(+), 42 deletions(-) create mode 100644 downstream/assemblies/devtools/assembly-rhdh-install-ocp.adoc delete mode 100644 downstream/assemblies/devtools/assembly-rhdh-install.adoc create mode 100644 downstream/assemblies/devtools/assembly-rhdh-uninstall-ocp.adoc create mode 100644 downstream/assemblies/devtools/assembly-rhdh-upgrade-ocp.adoc delete mode 100644 downstream/assemblies/devtools/assembly-rhdh-upgrading-uninstalling.adoc create mode 100644 downstream/images/rhdh-ansible-plugin-architecture.png create mode 100644 downstream/images/rhdh-check-devtools-container.png create mode 100644 downstream/images/rhdh-check-plugin-config.png create mode 100644 downstream/images/rhdh-plugin-registry.png create mode 100644 downstream/modules/devtools/proc-rhdh-add-additional-scm.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-add-devtools-container.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-add-plugin-config.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-add-plugin-software-templates.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-add-pull-secret-helm.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-configure-aap-details.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-configure-devspaces.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-configure-devtools-server.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-configure-optional-integrations.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-configure-pah-url.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-configure-rbac.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-configure-telemetry.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-create-plugin-registry.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-devtools-sidecar.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-download-plugins.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-enable-rhdh-authentication.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-uninstall-ocp.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-update-plugin-registry.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-update-plugins-version-numbers.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-warning-aap-ooc.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-warning-invalid-aap-config.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-warning-invalid-aap-subscription.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-warning-unable-authenticate-aap.adoc create mode 100644 downstream/modules/devtools/proc-rhdh-warning-unable-connect-aap.adoc create mode 100644 downstream/modules/devtools/ref-rhdh-about-plugins.adoc create mode 100644 downstream/modules/devtools/ref-rhdh-about-rhdh.adoc create mode 100644 downstream/modules/devtools/ref-rhdh-architecture.adoc create mode 100644 downstream/modules/devtools/ref-rhdh-install-ocp-prereqs.adoc create mode 100644 downstream/modules/devtools/ref-rhdh-plugin-subscription-warning.adoc create mode 120000 downstream/titles/aap-plugin-rhdh-install/snippets diff --git a/downstream/assemblies/devtools/assembly-rhdh-configure.adoc b/downstream/assemblies/devtools/assembly-rhdh-configure.adoc index 55205cbd5b..2f9b561f97 100644 --- a/downstream/assemblies/devtools/assembly-rhdh-configure.adoc +++ b/downstream/assemblies/devtools/assembly-rhdh-configure.adoc @@ -6,9 +6,14 @@ ifdef::context[:parent-context: {context}] :context: rhdh-configure [role="_abstract"] -{AAPRHDH} Configuration - -//include::devtools/ref-devtools-components.adoc[leveloffset=+1] +include::devtools/proc-rhdh-enable-rhdh-authentication.adoc[leveloffset=+1] +include::devtools/proc-rhdh-configure-rbac.adoc[leveloffset=+1] +// +include::devtools/proc-rhdh-configure-optional-integrations.adoc[leveloffset=+1] +include::devtools/proc-rhdh-configure-devspaces.adoc[leveloffset=+2] +include::devtools/proc-rhdh-configure-pah-url.adoc[leveloffset=+2] +// +include::devtools/proc-rhdh-configure-telemetry.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/devtools/assembly-rhdh-install-ocp.adoc b/downstream/assemblies/devtools/assembly-rhdh-install-ocp.adoc new file mode 100644 index 0000000000..a9a36dfd55 --- /dev/null +++ b/downstream/assemblies/devtools/assembly-rhdh-install-ocp.adoc @@ -0,0 +1,33 @@ +ifdef::context[:parent-context: {context}] +[id="rhdh-install-ocp_{context}"] + += Installing the Ansible plug-ins on {OCPShort} + +:context: rhdh-install-ocp +[role="_abstract"] +The following procedures describe how to install Ansible plug-ins in {RHDH} instances on {OCP}. + +include::devtools/ref-rhdh-install-ocp-prereqs.adoc[leveloffset=+1] +include::devtools/proc-rhdh-download-plugins.adoc[leveloffset=+1] +include::devtools/proc-rhdh-create-plugin-registry.adoc[leveloffset=+1] +include::devtools/proc-rhdh-add-plugin-config.adoc[leveloffset=+1] +include::devtools/proc-rhdh-devtools-sidecar.adoc[leveloffset=+1] +include::devtools/proc-rhdh-add-pull-secret-helm.adoc[leveloffset=+2] +include::devtools/proc-rhdh-add-devtools-container.adoc[leveloffset=+2] +include::devtools/proc-rhdh-configure-devtools-server.adoc[leveloffset=+1] +include::devtools/proc-rhdh-configure-aap-details.adoc[leveloffset=+1] +// Subscription warnings +include::devtools/ref-rhdh-plugin-subscription-warning.adoc[leveloffset=+1] +include::devtools/proc-rhdh-warning-unable-connect-aap.adoc[leveloffset=+2] +include::devtools/proc-rhdh-warning-unable-authenticate-aap.adoc[leveloffset=+2] +include::devtools/proc-rhdh-warning-invalid-aap-config.adoc[leveloffset=+2] +include::devtools/proc-rhdh-warning-aap-ooc.adoc[leveloffset=+2] +include::devtools/proc-rhdh-warning-invalid-aap-subscription.adoc[leveloffset=+2] +// +include::devtools/proc-rhdh-add-plugin-software-templates.adoc[leveloffset=+2] +// include::devtools/zzz.adoc[leveloffset=+1] +// include::devtools/zzz.adoc[leveloffset=+1] + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] + diff --git a/downstream/assemblies/devtools/assembly-rhdh-install.adoc b/downstream/assemblies/devtools/assembly-rhdh-install.adoc deleted file mode 100644 index c4d32d9280..0000000000 --- a/downstream/assemblies/devtools/assembly-rhdh-install.adoc +++ /dev/null @@ -1,16 +0,0 @@ -ifdef::context[:parent-context: {context}] -[id="rhdh-install_{context}"] - -= Installing {AAPRHDH} - -:context: rhdh-install -[role="_abstract"] - -{AAPRHDH} (`ansible-dev-tools`) is a suite of tools provided with {PlatformNameShort} to help automation creators to -create, test, and deploy playbook projects, execution environments, and collections. - -//include::devtools/ref-devtools-components.adoc[leveloffset=+1] - -ifdef::parent-context[:context: {parent-context}] -ifndef::parent-context[:!context:] - diff --git a/downstream/assemblies/devtools/assembly-rhdh-intro.adoc b/downstream/assemblies/devtools/assembly-rhdh-intro.adoc index 59ac7f4829..8e297ab8cc 100644 --- a/downstream/assemblies/devtools/assembly-rhdh-intro.adoc +++ b/downstream/assemblies/devtools/assembly-rhdh-intro.adoc @@ -6,9 +6,10 @@ ifdef::context[:parent-context: {context}] :context: rhdh-intro [role="_abstract"] -{AAPRHDH} introduction placeholder - -//include::devtools/ref-devtools-components.adoc[leveloffset=+1] +include::devtools/ref-rhdh-about-rhdh.adoc[leveloffset=+1] +include::devtools/ref-rhdh-about-plugins.adoc[leveloffset=+1] +include::devtools/ref-rhdh-architecture.adoc[leveloffset=+1] +// include::devtools/ref-devtools-components.adoc[leveloffset=+1] ifdef::parent-context[:context: {parent-context}] ifndef::parent-context[:!context:] diff --git a/downstream/assemblies/devtools/assembly-rhdh-uninstall-ocp.adoc b/downstream/assemblies/devtools/assembly-rhdh-uninstall-ocp.adoc new file mode 100644 index 0000000000..a065713f22 --- /dev/null +++ b/downstream/assemblies/devtools/assembly-rhdh-uninstall-ocp.adoc @@ -0,0 +1,15 @@ +ifdef::context[:parent-context: {context}] +[id="rhdh-uninstall-ocp_{context}"] + += Uninstalling the Ansible plug-ins from {OCPShort} + +:context: rhdh-uninstall-ocp + +[role="_abstract"] +To uninstall the Ansible plug-ins, you must remove any software templates that use the `ansible:content:create` action from {RHDH}, and remove the plug-ins configuration from the Helm chart in OpenShift. + +include::devtools/proc-rhdh-uninstall-ocp.adoc[leveloffset=+1] + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] + diff --git a/downstream/assemblies/devtools/assembly-rhdh-upgrade-ocp.adoc b/downstream/assemblies/devtools/assembly-rhdh-upgrade-ocp.adoc new file mode 100644 index 0000000000..3a4c84cedd --- /dev/null +++ b/downstream/assemblies/devtools/assembly-rhdh-upgrade-ocp.adoc @@ -0,0 +1,17 @@ +ifdef::context[:parent-context: {context}] +[id="rhdh-upgrade-ocp_{context}"] + += Upgrading the Ansible plug-ins on {OCPShort} + +:context: rhdh-upgrade-ocp + +[role="_abstract"] +To upgrade the Ansible plug-ins, you must update the `plugin-registry` application with the latest Ansible plug-ins files. + +include::devtools/proc-rhdh-download-plugins.adoc[leveloffset=+1] +include::devtools/proc-rhdh-update-plugin-registry.adoc[leveloffset=+1] +include::devtools/proc-rhdh-update-plugins-version-numbers.adoc[leveloffset=+1] + +ifdef::parent-context[:context: {parent-context}] +ifndef::parent-context[:!context:] + diff --git a/downstream/assemblies/devtools/assembly-rhdh-upgrading-uninstalling.adoc b/downstream/assemblies/devtools/assembly-rhdh-upgrading-uninstalling.adoc deleted file mode 100644 index 8161fab3e2..0000000000 --- a/downstream/assemblies/devtools/assembly-rhdh-upgrading-uninstalling.adoc +++ /dev/null @@ -1,15 +0,0 @@ -ifdef::context[:parent-context: {context}] -[id="rhdh-upgrade_{context}"] - -= Upgrading and uninstalling {AAPRHDH} - -:context: rhdh-upgrade -[role="_abstract"] - -{AAPRHDH} Upgrading and uninstalling placeholder - -//include::devtools/ref-devtools-components.adoc[leveloffset=+1] - -ifdef::parent-context[:context: {parent-context}] -ifndef::parent-context[:!context:] - diff --git a/downstream/attributes/attributes.adoc b/downstream/attributes/attributes.adoc index c30f8a0612..b4c2fdad88 100644 --- a/downstream/attributes/attributes.adoc +++ b/downstream/attributes/attributes.adoc @@ -114,6 +114,7 @@ :ToolsName: Ansible developer tools :AAPRHDH: Ansible plug-ins for Red Hat Developer Hub :RHDH: Red Hat Developer Hub +:RHDHShort: RHDH :Builder: Ansible Builder :Navigator: automation content navigator :NavigatorStart: Automation content navigator diff --git a/downstream/images/rhdh-ansible-plugin-architecture.png b/downstream/images/rhdh-ansible-plugin-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..5178397f0a456bc8b1f1caa687fbc5a702be8c47 GIT binary patch literal 416259 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%0A4{>U0!M0i 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 literal 0 HcmV?d00001 diff --git a/downstream/images/logging-settings.png b/downstream/images/logging-settings.png new file mode 100644 index 0000000000000000000000000000000000000000..f9137a70c338cbb871e095e8d14a3e3aaf2ac7fe GIT binary patch literal 98622 zcmdRW2UL}3*Ci>&#Hb{8R6ykl0wU5xy0LPRqV!IbqIBsUOrnw~^&%i3V4+u~cZ`Kz zq)WM=Qj{*`(#!0}#Kc)^{+ad9{A*?n>+_3T;okRs-t(NZ&))kyf1Fc1vtixNbxcf5 z8>q4;m6@2nQD9>FYVWt-;FVJsXO!@tukDUgRlmiT`?p5F<9inSQ=0ZF)+Y8&7i^80 zE?HSy8uQs1+8P^M*Vtam4*mGP()xPnf7!%VTChEzbRGsgR(B0hY8LO)kixHMNxdPiv zW^CfFKNj$){K58Sm6mXSK!D+;<2OVjZFVeN)H+H~CGW}` z`PnaU?H|9ozPGUK%n?a65IlP~K=_}RXA9g#JqNps-MSfHfBMlq%>9dt-)!Rg^!@AT zif!AsU&`QpKCS!DYx<#M3Y$NDchzejjq}qtOcX5n-(Sj~ebgS)FF(B;@N3L>pZ?B7 z{r7FQeD`1U5Y_xT93eC;UP0~nDTUlN-rx!Q~mi0M^Hie1V#jV?Z zD1}YRwa-E0(`P$9mf$p_q&frRO`8#l~`TT^KI+VZd%`h76hh4I)>{l=?be5HEt*e^w6WSf$&*N09w zQbPNyLzU(y=~|f&$o12VGTVinKfGRF{mSBq!%#ETUvl#IO`A6xXSUnshiY+L_!LZe zdQPoPi=6>?@22cO8N47Hr~W@cAEcP;?YqwoCYx_$Y6PEND2u6(nX_kOv#l{fC!HQy&GMv8|E7~YUx zo>noxusHRu{w%HTu9%^vPQGodni6iUrEH)!q9sX<*Tv1P+A25swC~P^dasp-=51-l z9jm^(M3b=bTHlT`OMbX|+Gof89?wO-XEQ5fRl&TCjO(xY^$KqHXHU+|g!ua_-B`SM z@uIL<^MN&Af1U92pTAB{O{qj2vCJ~A4iWC(#;0w>;C1Lhh@@B^iBRawwQl>0S#nQA zZOA}s$Yg)Dj#EYFD$HXYEnTMx833|Nr?7Z5vv~l^pq;xW}ioJK7Rao zs3SYMWNETmxRaSxJm!S=M$y!^6?Ef|M=s)_eRz&EG%Iri+-#US%&2sv1&cjE-AYC$|`a4fdXY6IbN%t#dv$| zQqSVnG`-}d`6->nG`+&O?fT9?vAcixDcsd_VUWw0RYG0Jq~=Nj{q^gghkK-4r(f2D z3902+v_}jr=2&(%mw32EiaS(wIL=QRr|K7LCu^j)4yTurtnBYCez$Jj!o4J6SHFMq%U9vz4oSG* zhxbo-i;qfvN~F2((!81|Vq#jX5{_A$ILT&IPt}f1FI~~@E%y&iPfxFlmPyBDX*ZpV z)y}nwbe$PV#1$pUhY5xYo6>Tu=t&9@M+SXGy8{Xf-ELUx>lQjH;3?&@B{_|DsF}B> zG|Y^4ZvFAc``F3DUHNvR9*0U-R|>!U^2_Ooa(44_KUVF$EB6ufCJcv;EK}1e|J`DZ za(9|jbu_-;cJL*BIoqUmCu5{ts8;6(twfc0KSpbrhJi;c0*A!x5WO&$Qz_}3XW=5|J`|2hi_V(e`;?%cVIr0GN1ykp1Zx+tlLu~!KCc4rqC7OF`_z~0sw)228r%ert8 z-e;bS@tz)@&AWD)`v`Dyaw1SKzF3!Rk!{xELs7{zQLvkz>=$M{FE5W!j+N6|RAD`O zSiWyOB+Y{)^=;Pz6lQpPubVmqW}E21g|y}5lhm{&s`nWM>a6z z<~lnTd7*Tt@Z~E_?;0OnIN{>#9Me89IG7k8?WtWLJ*u9BRLqSXAuTN(F74qOZdzy+ z%N!LI6)xeF=C@nyL1hpZuduMHh*|TaZJJ7oimk1wIt*lyB%NHV)-4y~6(bvQ4g0CR zWxhdlDB~a;A$E3l1dS-8MqhZ6vkoJs(YHbhXyj z#^(IbKi~WEtFKzJ%{A71^9_%*v_2mAd4D#kEt@wR2K(N;S(Q_=Yx~W5bFb30Ts!M% zmjM>NBIongCG&A8c@MG9=F1C=))jGwq4&TQ>Zql53A2A+($%|;8cOwQMb0+EwKrr| zmxQV_5>;&G=jJragaW%~q|?V5g|1>q~L}Hq1?3yK#4b0B3bQ(!5=2 zspzodxaI1~vIA~yw7Xcx?p<9A9&F2lQ{NMO(Bm;1DegFOdB5?eg>Z_(LMY!m_66Qh zkCt`0;emX$Wp`1#>$fYfe`A)T{rcN)vBSgHViYU;E=S<822=R7GWv2Byd;ztOOfvN zid`8wL*i~TDM-T)ep}0IqI1N7hu6TsfU1n;($!Vg*VKOW^PiRsj`aTL#o6r^>(;GP zo*ko$nAGe5vQy;MNV`ozqE)N zM@v#oe1OEMSy1xQX{d82E+B*Uh3LZaY)`7`Bdh6=%z8PRdWzu z(?BZ)E2p0$+=SeJ`!i5_hhg($!!x*5Eg-jWF*}nu>k|ic^UihVSO!rpoQ=Jt3-jOF$9^~uNg%SG3zFdcW<{)b37z=H(C1m{~%Y*RRi7 z@xYVaJS+Az$bYvO`Hia9&s#0VvohWm`%KWanr{~b-cSc+hxi`YQ8UM za&oefWa`zWcQWEOZ?Ea<>4{vb+db?oDk`cFEv<+8*obvm?hc;_chF&AHYF z3U`m5M;ri~P`bCIhQa@A#r_RSi2FoHu4=_Osg$`mQ-qWsfOKLOJzs+^{s_Ge4| zk>hm5ix;ORCMMQ>_g&><^CX?3+{(&If~1aEyt?PPypU+!Q-b>mxA&;Z`17~5I&HN* zJu+t&zyJFgRQ!bAjauS?K^~56(FxL zov|tb5YAEQvqNBC?My^*?sk5CVUpWb;*S0DWf`4LU(iQ2%R~k^IQ|J{?Xjjan(U~J zqz_3iS&;kj#~;laWB!o4ePC}PJ&i{#>3xfaLCY^+t(|_pS;@%R0+}S+yzP(!5-UPF zC?X;P)xJ6Nk`i*VM(o+pkhIc3n}k64BeH77pYcj{&Za6C}V0;-*`%cN2A zNRNLlx0RLEI%eiJ6s497Mh zqAKZhJ>#m|=dm-hfBy5!(N~X8;9IJbJ35byI{p0wFbG|!8`uh8Wl+{E-@bi&yTy_D#l_+NP=i)9tO>XmiP+MA zGWZ2R-D>AAZtdD~NcX6dtKC{2{h~aQ`bE2)Pdq&1?>LvoEVFbD*LJ(sMCJJLU$Zq` ztw`Ym3Z+nYiCU=!aVpprGtWMdc+>rO*E zQ&v`vW5lJoozJ&5j+a)gPhtkpeY_HRel;-v^S5Y|S@~lex67EU<|m*5OQ4J*5*!e4 z57De>UCaov_gF|TXLCDPYlDpi7#!m6;qehp$OZF|+rZvs_CQBYz&9lk$y#xA6>vV= zW6{xJxK#l#PB~1_*nX@_ELAJ>Gy&}&vuH_4iQ;H^ai3y-?x$tyV)#c#C8K=+c0C)n zC?zSGSsA7`+>0dhL z>c5=Mv3371=%6+KGD%FIeLnYROwwm`l|q-c}q*nyws;8#8h$OKgU!3XD{qrBgJcFsc!rqj_ep)RcIUQ-(kYUl(+e_`}m9- z`!Ax^{-etsyAwl2!9NTC`sS&5mz-d;13mxg%=huz2Fxsa=i;tw=FD z&bAH-U;t9$P#(;Y>^i`LDc(IAXg>NC(_|g;0BD}(LZ@-b(ei}z5Bqw1AIhxEJxd(5 z=*Xgi;y}tp{k1XE$se5_Y%0Ju^J^8m^7>f2MUF56m3;$?AmvO)LF66pxiw6aibHd+ zM{Fb{NOl0Ky4$S?+zi5K`sw%lM~hRtuq$r&&OSn?Gp?%Lf(U5@xW`AZK7 z3M%8BQ2Vgk?akcs6H&m#qMpBRNe+!uj7&mrPkJa?%)2PJx{lU-yLY=S$JKv4%XD=r zA5`KPrMtVk1GT%U^SkfAS3!ynFZl1mdg-|4s^{!(ihnlJ0_6n3z`b_1z~<70VmP7{OGgcScN+}-+IaSr$`}XY zMD;-mZ2^!F#&ajB8CcuNwJ`q;vYwd!rKy41mLeBBDh-U^wu74Y00|Spw~2MPrtS-2 zy4q!4^p*TG|P4rqyOX4 zE66G;E@pJu)pMgX1I#rterhwx91Pab52O$}4Z(Tg!UdG%UnM0aL9&P# z4+!YVlVctL9<&$@eV0>c90Sv2B*~kj<)#e2dTeOcQ&L=1RAi4nYOwuMbasb=oE#0M z9PiSCZX!QF-xOG0Yi0MzQ>O--lw?TnwG~eu8+8cO)Juu+qKC8HZc2ddJEh(82q}vA z7n{yp!<6Sl;60#!DHdeQmMt+r)bZ`nbj>LG+);~Hhe-`9a&Fk!MwqXy_|Q5XED@KQu|NFb5x^ z3c$+;D5=nsaZ87=ZD-hAPNKGHym@-PB}GeUIF$x`Gd%w;I+TL%Rq)8r=U2~^7;hUs z`rzaro3MSd-sY!tRK5>4+B#))9XVu-O>220@7i+uNLhJ-!*CLskj4$Y9fW$wwbBDW zN?@UBTy&My?$tstyrc-5H9WZP${310etlhR#Ng9F@ywe+f{PyAJ01d?C*oDaohx8@ z(^6D4opH<8w*`n?6^I9vNrFXt2I0mjrnoyishfU&tpG11D}p(oHewMOjc552NmiPk zRz@FpiT>(QFL6?$i?KEAI>rz8_PGRaRQpE;Jt(S4WvmTAWhouKXObDC8x{LK#LK6 z(6pz-W2cN~5j2e3R>c7VhGmyuJ-U!&P+CITFRYAteUwytPO;rPMLZPM^x~Ot?Ca?| ziE&w4$^5`BaDVDZ=b(ZL2+%h9P$P>@4%}BfatRNGauNXj>}Is6F7gpa6gW=%yaeo} zP_f(Fo?ic+blVD%;%cNB+^i&dA$a`d{oeprlF=)f*W3{xP%L}_ovDw&PAS(cliKiD zJRM|0Mbg@nrttUQzoj;!d)^8u2f@O9Rn~>oZ~uHl0BRX#<-)UAnrg1cqJ>d;#P28m15R z5l8j#Lh=#n4lIqsiWOGs$jD+lYX+-oX8>m?#P43d@;kPd|HL+o$a+#UYcu3xVN z>w_J(Zo`J)G$r%ksz7m8DSwx#0n?SG`JH06G5a_;S_&M@QEL_POR6Y!&7kyC4NCQG z4_i@XWzRv45HYUWLMU8bj>K*Sx)XQ9OWY+q-jBz5E>nH$kovx>WZb zB(HXn^JBud2L$|pz&zSj=i5ffyu&5&oS*56)0IA_S0iP5XUfWbQb2la=2C1fXZK2h zhLnVLZY_!MJtMukWJfyR`}gmYE(N{j^o#8V1^i}6ZdLKhDW zB_Wk)cape4lb3)!(wYO&=<@rQ_sMg5@bKZsyisszyN>a7%`cg3&+F>mtsD#5MQC*% z^^`k}9zOhXhhYu)Yhy|np?2{N?gjiaXyxG9nVBPKACHvnXv(qFQAyDhuv=Mj zG50!M9s`o(FjAW+LiR9N1Wsw`?xN|&v!`kEV};}3qtDcFWG_J#NL_ZD84;k>KoK;u z)PXh{Xarr!`o;$`&vj{O%~`9g`kGsA8d;EpGSl0BTxo*NUT@aI~Eh6kr=5$C&;ngXX}rN)u(w2Z;yn4{iVLJdr{ zWR{-0XWE_-E3ol7ABzhbU3qMhT68zKDEVk>Wb$ z-**%&;N%SYJH{``va&<8hh@f;G>`E2_XiO1Wq6?W4puFp2Ruz<5w}lhIgPhY-9h06d}1jRvh2tb zAVNUsAw5BeQ^Jr-a?>VTue^+JFRyM&yVKzkSe+LknXDvbrdjw zl=pKJy$g8#HgY`yMJ#OSHC$ell_lvHyP^W+cKM@ZadUH54ygd`11;Kr5ZYQuM0Utt5*4x_IsibOWrwAMd)?TZ1~3?YZnqv<2+429zGPeB1ur*6-ARC}nyQ$yL~MftA%Ma~FFi zF<%JRv)ON+kVS4IvH zyL$*$M-#uNQtG)Z$Y($ZC|6hQdZUb6saD%aqf@RIB%BD;O7{GV@^YQdlEpCz;J!q# z0R+t=Q=wAltoP>!&Lj=Y>hidkSVugVah^km>h4csZGl9Z0hd#elZQ70=@AtMXk1ak zAOC-rwzAl>I)uNqav{A#E>yX`ZYzZf+1oPC0bSe~jWpc`>(b>o1Wgh)G)st3ndWL5 zKHEnCj*a;2(ZcbPAPUgyU|ii^HPAe%`7c#KuP6g4XKu3$ioxF10x&9#J;KD~B!i9& zm4OJLtvS!1pM+}Ax%0P-UDd2C?AB$qe!XB#)IcW>p*!MqdbJ?z`_=kKWbmvIPQnK$C*brWJi_HXsf3cq7dtBA!?JO6WdF@uYKb zg@CjLx}ns)%0C>fd|Wb4EPcu3WP+; zl@m&1ha@T>AdtH>vX=t|LmjOWqmnE7G6ADqd5_tgU;iRsjbx$&PBm*GRL>%K>&5Sw zDx?m%(0|$W;>8Qo#u(~g&g^iT5`XDZ1_>Jw@JV2xJ2Ef%6QOtSi5r@?!b=y&3Q5NR z2AdDu;V|DuDiXv_L8IThq01813@NDrqIMQ^UFa{%Aqx`DAAZK3l&g&pZTp_T=pOdk zWq=!&5Gmw4mG)Y5<_axo?jMj96bTrnc zFYoZW;)~_8fiR|H6LFjT>_Fx z92%uWRC)rOi1t=IKM=8Q<3{yNlUl2x3n!BBW~NxbkMavc33?|7)fH{XekxJdXU6Es zSekD8Wu~iz)!6V&FPM>(RC2B8(;epNra-_$?V0gxE`2|Of`J_qr-Wt;PXMiZWJa;I*q->Osqg;o$37iL2>pGm8+ZgOJn%!nUGol40 z;XUy{z@b&(G=50zhrfYXLu6JQ_4JhDSwX~onQk=ui~$uk zF+DAeXcPcpk}(r4<<@FH+R@_d>KYC?Djew|HmrUc?R4CQXE(}Feu)1-a&>9yG))Ue z7qxQylS1IWQv_H*d=@O*Vb@pj;}m3!J1DndAalcEizq`sSGHsAz=hfxTm$fpM-93; zYaf9Dl+f&fTg#xI(1v@Ef3-?dWO_p1@1PLmBaMb2vkEcwLN!UXa?62pPspbq)XJbJ zNVWU+xBL3Hr<&5lxn{7JeQbW-U3wl5ovb189OPP~GXubZql-03sBo&nLN5nNCmdOD z7c(<6$SRhmWDR~hY(#S}N1JLSS_OQbFZxo`)|4<81fUPa9EQbE{s>6?yUCP^-6whd8AXpR;0X8jqHA}+=tAfx|TEq7fNeZStK@{%8j)ioH ze$PkRGt0#}lO0r64rPic)NC03b8cZF9KIBDw;_++!j}UQ^@|H8K72R~mMpV%XZ{46 z@z%d%*qaZkYo`pO)P^;%uo6*0EK10rRKlP=l1KM=a|`zaKAoIC*$9C2hAh)2LeZl* z_sd4Q*s#&I?Apa^ZEa0@RT9{KEfFdk;lN@MGC6SIK!q#o3}T36a6B2}ej9Mu{soiM z{gE=;OFsT}JIXVYo3wh1IBcqASSG$_>WawNS%d~cI(Gxvy1TohZFOLk@zjN*P6Pa>HLr8Ut*Muc z>)r6{B|ylL$Mb9jX^Py}3~sbDsZ9&|Xc8$9=seL+d&dl?C+A#lI1XLKg)YVPL~mc= zW6AjPGnagN{h9|;Y@`eG)|mbXWJa$Kv=RO1AAByc)w#yKu>ccGjD05cQG8BLv%4c_ zhD`vRuTIfbsGGrLSW2+&JgF@Ro_pgb z8-8Hzuk1`rS7s{`y|+DQW@1_r`ayz;>1u>S^2Aq7cK_VQXTrz-f%X*8NBc}psS8Ch zD_-3AzAy1| zF`#-rQamfzfV)R>uqW~}Z}aS<`jR>2=yaWE<1hnHsRxh8l~j{MYMU1tw&l0xN^CIy z$K!m(U)+8!-eNPS=z=@ll~sHxNM+HUi{l^F?TOTTAnFDC_A24dsL}Z>vo&k9d(79Y z8ETJGiszmh%m^;9?UzeqOesG7*QDL`+eS9=l=n>nt+UP7sHyjkaWAb}2T>TepFWid zp`42LYxwho_f}or14;{#q0UX8jMZ1&&LNOZO8_A27iKf1q7|oZRQfIoiqAOuvdicr z8CFaRS#{;@wwzM`_j$Z#n|>D^-{`)2p96|gfjEkiAb zTTsC-$A$MZRW5#VcD4Q8s_>oS(ib;HOx@_P+^s0sZ zuA4V)vIjk3&j7)wdnBUvuPZC`eDzRlYMW+{%JyGFS5_a4CsJ>hD$!e#-9+R0zFx&; zX?g8mu=?!SUaldbg8xl7p}dZ#bnaZS1V>M8DY=*b+Rqul9;<#hHv$)iF@}+ z`hU&Vicnv-F6Dk~wfaz~fxnSvoNesQq2~LkOLFrAuB&5|f0fj{^7-J&maCq{*-kxQ zL`rT=RUt+;nzZyJ-{8Y1JHH@G`moi2*uT>5(pN;VbG%YpG*-syEAsEy!Dq4cAI%Q@ zM8pib{+H*s|9hJ7|9ZLpr?!Brg*_k*B}n(;sN5l z?}ciOhPlsK$7M9qsXGvK9{7X+s~%)*pcf+gK_}f$7s;Oxy7KzT!OnJ&5LKc4Wan{3 zDa`zCM{f6M(|=NePA{DFcYObHFVQP+-n^*{%&i9g3VPfitb}aqvvVG~Q#580u`B44f!DPNCL-D;w@Tb)Shf^RdD9`= ziZpo;Rr)t(=>#H+fm0zqc%n8##h}un+{VPrbuiRo_qZ+h#!=!AxtjUE6q_d}CTv^_ z>q1~wfr!xWAiB~(tl;Rz64BnGNpB^=0gn&SVnAwzOS)u$=XwAK{5uDYFJ4DYyuHOg z1d+ksY!{hgfSA;hZXn|^@nSoST28JJ`TLXCu87^oo1>Lp*-s@N7l`y*e*E!1`fOeh zpNf_e=`d;^BYtX{1y~CW$YA@aaMHl^`3tc*q9q!zQDQxDmpD83h<2%2f3!j}OHBtr zZmJ65O9s&x=OXJh_u&E&@4?Wjq9QTC;>L%4S-s;S8Z-ld;1IO5WSQXVCCVMmzQ1ZK z;$Z@91B$NB#LHVsbssY~K-h{Y7Q;}RNV&0kn^^J&s#7+#M8NWn)lF#gp z!hryCKMk!65tTvN(hY8PkGaGsUJ`*l5xKs})ouW;shx*^z6t=(38swDFQ6mT3(?t~ zL(x-%p_=%|h{+mqAt;+Y)DF zENC0NF+awNJX|pdlk^+5C&M>OcEB@-Dn`RM~y}OF2U0--9RLt7tD*ZaWG9!g4#$VK}fgchR|@dVD+1(`3m!lv9Af!s0x-4JiaEnvCM9sM37riUMntC zWqgk$V?Xi=GMA1?Zw?2{koUnOg6cOC^E*q-ayZ82o8|&zd@Zd`B`|1)q~bqYEEl?}b_;P5*5TuR*MLFj8-zjiG_H{aGY?tN9| z)Ex-XWF!l$6_rNlNA#R#P?Je+!ywTEnChPL^gz0;jg-&;1KtWBz{goE268BZ3%WX% z|19C#!NU>$YQyfM=U~jC#egd$QY*MnWebZGj7i)BLw5P;weLtcV;JTEN>d!wnNPn+ zli*jh>|}JwVw`%K{NqG#xjCMwHfGF_gN&t|k3z+UxS4>J;RVe`t_6}b0zctkdKhIH z8-d7^#AtY$f|A<*G=j}0SnoHJ| zH^(uhrbHxQ-0=Rjy&=e!@Y|}9DutDSZGNNFRE75Yfx{ahQ0*o(VKUG<5)hM`{t7ugL;gm2KK|8VnF|KY+fzkGGGN z7>B)?d*8m}m;o($AB>tldZ!4A0qX<7a4-~W3ZP`%u407yR`18Z0Fe}hEeAeeX8?6ZuJz|q+WIZ zZv82_EvNT!%LSgG+A7`_5<6M9?S_qEjbabxpNDfJYLC?1Zkw9OV;?O^8)qzgrj0w$ z(~=kM40_T9oQz~>)%AA-o@tjtkl?6<-9e`st(FBP3^_z|_>9kv3#tAPuW9m{nwm-F zeHd~)OsfGY=qpf0h&@?B%oqNmHUKw){Q*NC0VEKJ;IQze9DxQIV79AlM(ahn+ zmK}yflc$8iLle`tbv*6@V$+} zLy}MD6c%nq;(h@G0br)}DWnG!8}BLYkrjmJUtqW`T@8R~ z4L1yX6AXq38Lya!``fqHL+?nZ(I;UoZw zT;9O|KRb5iu3*zRc90MQPxO9&oePjZ$x8RXZNn;VFH6HbwiDxh!!zwD zjx!radp@EKS`1<{UaJQpHbH)bD+V&<0id@Z-5z5q2IoD{2YIUIS_GMypE%l_Zm@bo zGd+|`iEXgs(fT$CjJQq?)bdhY-(26Gh0xrgp03I|faTS3SvIf(uJoysdmXrpU3YYPkYDH-(Dg z)LaqB!P<(^4kzSdYHnT4NI7Gc8PycvH!B1!OA?3_^%bWB-|CnXdPy{R41Ym3 zIsj)XC|z6If{FX@e0JwHUsR~Zo(AgSkErGJ^74|Jd1a_BLmv^>|BE*z1(tLacOxT- z>xT@nix$62fR7j6!YoL198%U z)`AQb;Sp7SC~^rKoJIe1;EdmH0tmAYl5hil)tObz{dI9S$=X_P*o7oDfK;GA`JvyCkh)-Pkcc!v?bejb*Vs*48O802*vHAGwXw+QARMkM6|?Iy~0*k zQlaezYR=2c%ZH4fftWxUM7MTMUfzd+sRIp+fvCYyL~TSuXiVXN0~O_*jBXGGfehTX z*p}@W9*6Uxa>qjgU8_A8M@6a1e{9+>xWx^VDrC?YR!S1{t&;?Kp=1&38HHL`S4S+2 zq?ST6)xmylfFzcU`!Zk6wP?RMx=7ANU}sOq;IGL6zhCBdg{Z5l3PK8w zXeGnPX3+X&m;J8P3LMB7?Q9F5R-+-RE_rZ&&9rI)%LwM-o5o95t@vP%Xo9McYJSeO zZPG`VU5F#IZ2}WZLrCf8uqM05SVQ;?4nehs942+bp?k>l>uZG&VwnG%eI(YK5^Pl$D}#o{0Sm(;7(PsOT3>eyS7aL zp)6x9;OksKN@BoGLr6(P&lL<=0`du4cS{n20qdxa&MMoea#Jb>++p5&v@oVV76_e( zHn#i@gZ#kl0^aOZFjds6A}kW};vw4RA)(WO#7Y&|fhi3FaOi78%MCaU9V^Q!P(shM@h&!dFT9Zt{}o zjfi}$Xrorx#EAQrSU^bMfria~Y0idl-$((X^cPfLOy3vrr7>Nyl`8S?czf$5~`+ z6a|s^3YfOZC3+vBaoI$}p-ARVFGYJCq4zp+#X7M1V{j9THw};b;Nx<(CY*+{p9-r^ z!Jw2kMdb3!V;FZRK(d3!$#^Tb@=0O@f_c_-zd~c-8M(6rWKoije zjAMRq;?A8N=pEUEWV}3k2M0|_aV4ag`7-)b1#C2;Yjb0sEDUh`ndUo0x(H%N7Ws&yRxk49dmPYJ5bu1@@xzua}#5nOOjW68kzROu@cP7Q4wENC_-EtLT69BcK!oXt0F(G{U%!GtBjRjZw;F>vG$xkA-k~8g^2W8DA>C4- zJ(ey|!muz})nIC@VF*Lj^vNDEnUx*jw4>KVNp+%H>;$XTlx3>Y1Oj0Al_kKotRP^h zTKJ-+a##~Z%Vfa=3RGEpdwX-TM*T;UbXFVFE)Q%R9Ewfva({~RN2u5KUPIBgY=K@h zbc)FUklK$gUWXGl$P6=wRU~m?Za!=VNHCIL1`d|g!@JvR}r2>V26qSMesWGPd^tVMU z_!#pN{P9d(eCz+co&ST2IQ~B#Bi;0`*7y0TVzke$|8uG9+P@R1|M%AK|MjKs;lAX! zb`PfJYb(ZnARD1I`O+&(%lc&$+1b#}VkbPoif?{_Ty>o=^kJj|Hhb}oC4O7m(_3G7w{)U*#qs6>@`SPIkuxs1w zPtMMBdj4;0Egl?UEr{XfUzys(xoRY4H=z2hMN=&I_~+wgWYZFw|WVzwqzLdsn>X0mVcBj1MNu zh+UwKcq-m~9qqkk``?dy>9^S3H+hOLBxJbWNgCeFSxMW>)h?jAJ%ELx5U`hU0<*KB zL7SPm{&w4}p45`6KcoF!kP$`kgVGfx&#y}0$CXd#g-IPEL*VuE#-+s9gp*0Yo1G@OZ%H_5r03S^mKHViT8$vp;cSaYEFgAX zfQrtWTwr>kv6l3YW=<8s{1pd4tM4|NZDA^t-1SFqcsLn&z3awp06{meca-jj$3(c- zkB5+fiX&sS>X>kG^#02YHAX;Wq3KgfJ5~}-w35P2o3HSW<;PTFxyke^ysk%8hR4=| z2X4Cd-R9}&)ul72udTf4MGtUl91b;#YD8y}nLqV*(x@XLW=IZ!eK$%3@a2cNuvdP+|Fqwl2) z+TAG2g zTc8Vcx$5!v7vOA}IltUe81B#;wtsxdt$(ounvjG0m}%y9aei#=YX=ZUb2q z(VKZOQRap#*{%7k^WvAtpff^B5vWi zQyX!(3W4^JREVwsf{pYLsTq)BH83oQXS+g5ojqd0ch-!1?0<)ApB%3WsjE zBEuu^-Hmq(uomy90^0bZ@%hL z&TVrW{$f?~<}Kfrx=|fQ&mlVF+0*gqX|JfvoZ0Eg#%MRk!RI|cR;~X0h539lb+c-L ze7;3{yiw`$Oa#F`&@8H}tIyK1FlS~-FHl2w4Mw8{gMJUu;i&`T1!FrB!#IwXAtSw{ z&9om~EWnvuWLliiuoU*oyMj20AW9BOGXEn8gqj3J9^Wv~oc1Wwu@0(OBAl6+ z23wWnZaGAZO=3W3d0GD`U8uWMR>!C9r< zU+r~-1+%{p24zMwCr+Mo(*XN(Le!W^LfXg1BC$gFAl9yA|?XJ zzz`Av>x~jJ>xjuf0Sw0w1B3XL*H^O-;m9D|1NdQ+8^dSQ4TK(et*&75pc%(%5fcJY zYCsfVsmc3b#yHie5#l-#Um^XF9v#08DmQ?FSk)$o8DF4Y$;2?Rg^6Z??mP9D-j7BX ztFKi~DV{ozX*F9^q>sZ?h>R*?@#-9+iiTf>>O6LC0E_O5kx6n;8G_0b)QIT%{_M*Q z`-UYG&{Pre9XAO2HQwb=ywghTEK5O4uPcr`#7TcD@T3NzT|IvMIAMO1>ChfO4jhA5 z2X)9mz;-wE-d6Xbcu5oGf{cR^UKqPC5u`!_0tMPaC^*nWc>QBKS0HMUgG=6n@FI~e z3@A?~)yY=F=?$v)kFP1lxYxo!gta{`RDK+ePJBI)(VJveXi|pg?`9<(y!Ly^7{B}J zW^+$+F%`srH(l4tDrtM8CT+Tj_QGtU#;bX<{m6o8<=b63UWsR&6e5-a8J^1pB4jgc z<%=p-(IQqJFpxQ$IB8@mJKKt`O~c79?1|{;2;U02nL>rtkSJzE#zkX9rICt>lXeo& zPqzxMo7HQiAen+w%|7wAZ{ZsC+_`gc!+LPyW3fm(0Dk3Uz2p>`^@+z|9QETEG~{_Q zXGAs=tmvN4LK`use2(Ng^seM^8M0gsA83Sr!@N%`MmxzUFd6)XPHcBz3a1m1pvEzs zVdSh?loYa!Q6ZaA1phXBi&>xxjw4DvoFf__a^Vob^vecv{NS7K8}Sc`FdC3EeLy7~ z#0(cXbP)~n?Gqk2fu|Y#ETNi+@JOa%DTDA8oF}v0LYEW?Lrv(#sFnP%tf6YzQj=>K z{>L^XG!mLQd7KPEL?ql?8rUOD;n)sg#*@s75zYxdnqX|{DCf7|kpc$xFeq(*HqkPb zWR_JCwv8ZiR6J~r;hR>!NRGfI&Vfl}@iCX%T260^in@tS1F@6<0h8<^(7%Kn1;lFP znSyp;j*~Tq8XkHRQ68kRMDt^uS&3*rPIOaHSZLbPU)-`@Iy1juCssVgUtIq(m8}g# z@bE)_X>uwX1EpjbZ5$3CjC*#8Oqi0rP1J96f^i*A81WK!nT%l+K=``hr=q0$pfc;-!BhMfv_-Oui;4AHHtK?U&lEX!MH`m?~r+Td2nAw`Dm#w=YLRckD*NR8u z{sTuVr`>B36o0$Xk!c>kFWqByw(|LRLye=1!V=~-x5-K_2iSzj=sXz+z@udy=+nc& zj#zV>XO3dFedjR7l#*ZTD?ltF@N=4loiC1wJxA8?fN(?!wIXStRS-CmETA2d$S1=iVP21 z2q;r@G!!SV+yTEF4l4T&-1XtR#cX#dDJe~Xn9&q~{@Kdog@7cS4e@nAh()MDh{Z`J zDS}{o$eCyAGAJSuI7HOkqslT(H~%6f42M*4oM6PZrME@kyo*3145Ux(Y9&X>o~DVp z&wbc1i~|XLC}jA@TnnSEIJ;q9VNnPp*?^~9Ee>e=1!*-zRWKfmJkwS^G$kkkxnC4O zjZ;vt5yW*vO|%RYO9J`@xa*q8$Vew8Is%hcn4%`aDCknw8Sehaile%U<4e^Qm)^Uw zh^67ktJ3>_4}D8}ENEJ8fo@5mP-0vTDzCT&Ey+pOH%Ta(dgP?9x>L%*Qfem4W6G?l zYxOocx>P+)ckoe-Rc-`kJ73|<=Wyia9fm$yFo!@wK3%~0h}W-r`9qc%c357FC>~Rn z*P^SNVXiARN5#_s$F$i8iCyqlm}Qjz@-61dZG^_Xqf?EOJv&XRLU^rridveGKSLsy zFN>FUJkws)49gg}Ce`XbU%PMf%xU&1x<9Xc{7a3R@7z-6t>2}YyirOfe`gUIGZZrF zd%ylg;AHGeg|O}(6t*y6!{KG@-daMl!6s&obYO_FIE*QgN^Am~U}CF)Ro79N$d4MP zc{qinfVMILS}DU#l7zdf8gi>3YpFn4mz`ZW<*esh%Dhdajt2ld@X6LKTPQ$kA0^L^ zk`x#xqGVxI7X!R4s<|>4$tN8euw86eB~k7viAeh-v1Cg^lOqPV;5XAG?yVs1L1PU? zWsD&Xk|b3snYt7?ts{pgka@$mF`MfINqB%G3J6;qwD3;YX-pS!QO^?;5b*kNOdA9I z@)mY>YX%OMjlC`5G$vdf|88Nysx_U(*rx&UJ^kb>=J(hIG`f`rG>I&X`XX)XctqH0 zK5AZ%F*~@2)BuElx(N3VS;*w5-*nx>VgJ$5*3kA92_*ND)fG4VQqLm;;%ow_U!YhuQN}fqZNSKY;@k-#TX+!Q@xt%MKlUKdi zqyo77<-Q5d2&tWSzY*s#;mdaLLqK+l+vT--kD^0!{nN8kkO;%29gr1!lFpBN*`J_m z^^+n9ohNk`d5Wk^&ko3;7?250kkCZPLdcP)ORQ#OmKir)b-xbJk_==L7h9SK|J@OI z`*22YEyi{4#4bA2Z>SGe2KR`am59vLrT+9}8*Kw<&&M}98?q}e6TSM;&p(lACP>QK zrJf#1or?<#JTRRt02Vh{aLoVgf#V4<6aQEr*VP&`kci=f8)Re^(N9Fga({LuhX;#j zh=w6+Z>*-3?r^fTr9sPuz)r?(#k1JAU-`<3=aUy;dpu4nF}W8SgOe#PLvw<-$ifpH zHN7D6ka!g_iJ6RDQWePIO>!b>v9)m&B!T$Qo#G1gs+fsokeHPS{Dj{THNW~Cjl-A~ z$t=vF@LfLxTPzV41rL;!kCwinSC1bO;uw%10q~d>14|NJIISjX?O>!A%lvwJm5oAo zG)7M8+Qeu~oX`8^jI2gZ!-WTNs=`%jvVuc>m(yfk&rPV2P!>HlR+F8C12RDqKi3A1 zm*#CJY7ZDg8I~{!kz}$q82na;B@5|E1P(g9GLe>DilFy^uf^=uqx%H6m^|&%cbs^; zhE;qn^u*JXw4}C_)HOZbN8dS>ztm8Z{BU6_k8WSui=#-EWRSFM2RXVO-3d_|z!s2E zW6}jeaClTzkCEzy2^$RUX5lbag(%7Pg+Hf(Z>Fnw)4LA)I}2hY(E|tcY@8Cjblq)+ z8e{}%y7Gz^4pc%Zq(3Uc!n^kRisE$HeYkH~;yOc>5{BO#qN>*B9ACA5lhA7tR}q(yIAxn1YJQAxd(?GQSnfhhcLmKB)|o; z10DuBY8F}{kz*lC!5Um~ziW(MNPzng@pzL7YX~-Qs>+eGf6z3Lc8f|**#D0O%)yxp ze`|MW+~31L+4SG2d+(^I(r^8fZrk>&w%V;CiXsMrfPyGNK)?(|lq^|AkRTvgkYJlo zNm?WY0hJ;aLCF~-Q9!a}m7GB`2+Z@^O@}r2&bs$EYyKEk2SZhzQ|G*Ar+4qqgF74# zcWgAhS%)vzRlXGK$gb=CmUnO88p8;ZV3lm-{;=%lGlt-&;%s(e0U-bFy)BB^bR0z| zGsJpp$7H|ZqzKr8aFlWJU}vJ3Zy;i1BLn9IA|8q^3)_nDnhTwdj=3agJb7=U5?Uv> zg?5dMj#eVT5_Flh#ZVg^p*%Ctt|$pHZr&V?qS>LE>OVHAUy81SA3tEbo%TK5soJ-# zp0uQs2o95lY`y6GCDAmHY3(Dbb%WBwhu9@G{r$;oB|(P5{=X>i?ua_y>cnI6>^b^Q zjFA(fky0t3@XwVBTW?;4Ao8I2u9A=x1WKyig@mv=(NZuWxi-Jre&FL%M9UYn=hDqy zrR&qRyn=-HCN@2Jq35)qnL0e3^yaJR#BtR~of(1tIqNRleVREh&oxB9*f4H+8P$O(H+0HV0U$7a6QG`Py$hMAwfjE4Uwmt*rYBWwG!zcSHy;v~yxYcB2 zieyxTv(EPgJ>tB04oMR>89^Yo3(uI*73;^?!_(A!35Sl|YAw<`jG*Yj)4{~R2d?sE z1e=F6h%^A9QJq*8v?qK|0MR0pM!L2@!Bar-*9i%cWwgQc$Y;_Gj2NVrRFyDFi(*MF zsri9a6^(FLnC12W%6-aspvVWipc@W|SxQ#7l4;UxjvPR*qND>8_Bj9Z6?k(kyr&kv zQUJjWd2wG|d@#`mz~D;mXu(zjp)1_ssT4Ew1F>t2v7zRO2m<}^TCrONVmfzk~ z0}?!==G?m}Tp_Fs0o?eih;4<7t|V|Ec`$a4r4NoOp?79xcGeW}ii3EbTde0ePgMZp zJRGXX49a+)Uj82AEy6{C!6ZpLKuqx+wIMGr?y&(AJs$LMI(i-J+CAatYq2T_;4+u6@x>jiRCb z77bWSET=MxqupwKInvEgP$N^*c(9%VgN?GJG-?Oj`Vze_A~E1cfQINtQ^MmnfgVR= zlK=CcM`_tr5k(>^8_h~LgnTu)Ftyk#CPNB{eo)>fJb5+La3oOnJ&pPgwm|vG<|-~# zX8g^SVNaWw@SGtXFa|e`;23SqdlG=tBt1$EEZe_-wW6OJW`3gBE7C$+2HV@*X_QrP zDn!`@(lMwzk)Ar(sxsz9K6n7qhK2caG&=jEcLBvYMHHgThdvCO^iJ?t@bb*^LFfXu zRvEzssdDkfd8P5RC>`ejSye2qvB8h=rT4=>=Adg~tDxdT1Ay4ec-rw=(wm=fY zo4@99?=RmR$}`v8H=?7Uxqi*}bH;zBUX;GL8>`-|s}$ItEao?-0KEekEPu3;_L@_c zHai$DyJuz}ic$V;UG9whPj`K@2_u(u`vHRNtJ0;iQ z(B%UWru^$}Np1;jId>rl3lf_#AR6UqH-`Sb38>kFy_aU)&C|UW`wNOd$oM+BjeY4P zlYU+4o84`{o@3Wv1C0##|Ic?2|J;VN&lb-vVUzCF)+}K=5OmCR6}Q+ zo?=b(qh9+fe{F6tT;u#}Ao68yf~mjhBW}y|Cd(L>(7%S6|M#1Ihk_Qyeo!0CRrSfs zl4j4^d%EqBwxL{A*6s(Du``p3RGM$MLC5U)rIWh%{MpocC&Clnau|>OzK7AVSByo> zrXhB$cErnR&{w`8`LD~g?S4gtd~#cKLN2RhMA@)pjK7#-FJ0eTn!2ic;=^4V zekx5cTY>APaA4igJ=JIY2dK?D*3rkTBy;C4J#WlOSGQVuHz;-X{=y+^Jp<8ziZ1a# zd^xUV?@klyvG%X)Vx_M|u@x7#XjZ85(8^YnYxR39ztUIKYaG9@TUk6fu%=Hp%J$P+ zc7NxhChiT5`%nKqlUoBN0_MqDg|c3?u{WKZn%LT~>K>-jm{(6aop$X>EMXk8 ziN1KGzlyuT{K2dQOWe22mZ6uee?Djo*WxA9D&`-?Hp7L@lon2+?rx^;SR3K zY3J)o`I=3(>_V@&Rnnrv)CUf+yIE>Dc9d{wbZ^tj7E>M#?qgRgl^9==_qAz`yPkOI1lS!Orlu^oPM!@i) z82#3j57-3v2I^PT?tSLnUT?Oboq8eJ@QwFhm*tli=q&ct+i7VzJbtfv({~+>u)SnH z`;VV*V`#KGg2cC?MkqbV;eYT@{iC5k`hUHlU%X4>{057x1uw<)=u>TB7Id!?%Z2E4 ziMD{Q*_$WAKTf}GGHqALa2AyK+cfOZWs^^Od5tg4?DZE(ORY%NovdmuHH&GDF_Y2x z*H_KbGV>G`4I7>I_oX#v=$591obInQOBN(DcHe&v?82`9h^4I{uacgHFkkfx*U=`6 zi_Nl()n2=^-xY9{JRI;|n!>&|-Y{T)HA~;*>eZ_kO@2jcC?R1Y$#0b|w>Wbx^4oY| z`N=|ViJeO1xlpPI^evlQJm4XG%DCt;i>TGmJ?FzZHQ~j(`wqu71j4X;nHPwxbw6v&OB@5hQxI$Y$xnl zlj)=P8AX3>JvO(H_vB)tc&62^zIz-u)s?fgPR1okRh+=z`%~PcPVwL|*U`0>rk+aS z3*Y3!q?))zdt=zy@mFp0{v-&IlAGhyV@ zHv%Kjc2%pAe^m5P#I4lfb1K3n!&ceNHl3>JoUBSykv?bmfL5AVr_(Nu3>uxEK4iXwki~Puzh1EmyZTTkUj^x%{_tVQDN94#%rHdL9|8^<|!L zk4(FtZB}*Th`40SUP(ob2}|9Qrvq*UaR31=XQ6U%iMRGkdAVgi+wS(!YV&iK-5)r5f#mX01wLm zGZz*as;7c?35>eC%(|Wp5$NyZxAUzVxL4!(JeFHqAl>u9C86H;x9Hr9v+HI*MXYkl zGTj++$l>I^QweorsUES~zO=W+-fy~Xxj6J{x0i*VFc>$TK1Hdb@%qQ-UF|q(X=kx9 zdX;!!PxuFHTYk`fC&u@oL9@chSbxbLG;~{V$Um%RyH(K1s``LIkwW#!P7aMxmkwU{ zIJGW6|E!P1m6+=#OjEvW#3Z#92v|!$Y)&|~us!xSKMnnO@m;!G&zlYLNsTK@-xaGX zc(Xi5E%te0m-!)X3V8tPhP+j=L=Wn?!-^#oa2VHDj%7Iu>J24`FgEW0u=5;sOFW%P zx#3wRd$Checd4Me>hKF^@;xca3(Xd*hG#Ph_BETCPn~(t96M>eokI03i}behFdNhN z9?Lk?EhkzwHq(WPvX1`GySle2+*3T;y#LQN^Kx*cO2C-PrF~Dudp- z4b176eZH*s%xSjfcK4NEH=C*5zb-V3rhLnJ*tj{ScedkA-_(qdU7Wton9w%0c;z2T zx`X?@(?*r0SGr^kTx*n2IuW+ud<14TDCTD2GQEUZ+EqsR1*`ll#TFV2S0v+V@-SIv z3vD}N)FERS{N_QWR{pSO-JZ|e~oX`r$qr?J|7|vD%_xyzkzcmHxg*Ufcf2@kR;zi(Bv4#LDcPc$}s=x0n~*E6Mty>XqF= zT`B2?Z>zY1^{HeT@wufO^>u5Gst@+h+0DPHqC0|<=Wz6tn3{C5T=0}@<#T((8ru0E zC{?f9eEI`h9yrikmM-`FtZd!Bkfe;jXMrxa|~%~{XsW?9I2{wqEy%uWBptx_v0?M)P~VTM88prUcb#c*Y4cnE1=pyW1ma;T(LMc_3q)78K;ah!-`D?2U7pooy9k2o2x%;Vx7IJ zd-Q`CUqH3*ag7q3z>G~cm%fFt`+-!M}+)VV-CJsejoaD z^ZTAEjCDMILpi4?9xJSMNW!Hu?(6YcqZTE`*++{Qq8dq|0rzR$W=v{}noZ++ zgbRfI%^_-0ws~^HOR78!7<6wM>@B}NI5-#*akRN_?_`E}@VXN* zEpz=T-QiI~)4v-0xw06VSArLD8fo~!)Ux<4mMc{q5`Kr-K7MKtBi>b*O>X^qFYf#q zgV?4?M^R}QlsvKDmpu4orUwF<>+HgkD9QEP)P3)*>+8JDZgD2;O>tz|uyA?6$EAZ5 z@&27OF$`%s*j(X_lCxYglnf($C;pKi{GBKr`FEq`P@IRxm+`Sl-v*Yy0*;L3Z1Pq6 zM@k1{#|x-(=E-vpb?1%DOOqZZz3HTnHn1$6Ducsvim!m*-kxw%_AzwPHS~S0y&_&? z;%e`{bQ&*pAE4(nLnGDY*&P@mw(K`W>UU4w^HM}^zVt;hzz3q8{xjO3+U^upw_`1h zs?ei%oi=KnHDI2tRS3!aHT=hQ8D<@0hH9|4b+Z}MCniE)s1aj#N#~hp9bdxli(K*B z6w-bve1X&bzdLnls%xYDvD}N7YSXL~wL053c;0hZP>@_3OQ$Y(VWX^e6-zjp?9kI3 zL0>guS6$Ry8teLqcE~3zH;y~kRW(fg)vV*(%0Us=quA+^4%gqy7c4((Kd-dro3*JL&o}f1ahI4Y^Df;!f5_%@Eb|(@r|a}$pG46&Ro%7Gs5#$Z+HgrZox>;k=%a60 z%;}W;A@O)qAC5Jwlk<`P5&!li-G9I4d?8n^gt_mgiNyF%$MPCSy0?hW4KeQ<(AVy~ zH-laXslwQj-3xuKW9vizeZQ(uG|1)uh=v07lU zJ9(pf-~(Uyv5lXCWdjon%<5u~mvlaE7xG@Z;S3G#BJu~$HNVbvTFhsR>o}1rH5T2L z93fy;EJ2t1bVJW6w(2;EIrYMHg0`!xsRS%UO#kHjR47l!MtWjazO_d^^2rV-Df6lvXXJ1wO@uxviCq0~YX^UVKBBGMrOpb^CJn@&3 z)%jgphtPnCx@W~XO*98U;J~r4@z6#`%B%YI9L3jH&lrzJ-VsPI4r`Lnd>mri^+m07 ztjynHtNZToRM)mGwOdD$+gAl|+#0qA4%O*}g_YOiY}t!^dbOSOm5na%6O8;>t)mUT z`piv8P7aCX+Y7xuIp7tckIdyJhEQ;*ldm)o2HHQv17mdG%}Z&pi^&SfAQjQOQ%)WfQwO= zhoF0$`RH9PZq1M4O=Fv^?W!V5?}`)zCfo_6M^0JNOeE*y7s4#mt?wzh&qj{&gMP6bI(ZjXzj?3*#&xkgO zemyQdxPDcP?lI~{mO$FY$V)XTVUs4O3uCbbyR?pU*2z`at@+t5HkRq4MP;ag5|!5W zy4ez@GN@0jg%(iJBgxS?}6WXza(>0B*NrI$(jZhdMO z|0Sron^#=oTyFUZJ@w3Iw*(xdpPL4ZrIz^db;YozJ^pY|MTlGEU9|StD(0~hrxPkZ zclSOElS;4p^hkTWq`S$FdVZsF)XgkfycIR!l!*TF=`6b3Z|j!p@DFN)b1%$J&)n`? zEH+{hXWFfCafNv0f&KO2x>X_{F9m(Qw9IZxwmSbPh5K`NLYThgKH-Z}j#(mH+#E{# zZYQ3;q(epbNMGfF(=EXo8Ij*7MacPIPJWKr-p-6;nd#|Mc58N_0EsG8<{roP_gaoe z`t8GN<9_#AExK{(yDlWJ-FApvZ&0kdl=5E`^N4f_Gl-7?e`HgGMyG^LCw8tDw$`TG*+gqP*=RR4Rf85_WzOC|A zZ)?SGd3?8&u58*P_>m}jzcFMC%74TDP#?Q~ z-IiZSNk2|R^~1TP_wINgz;)=wC}lazb+%sXW7fZi%$>R7*&3A3Q)umuG*)N$oz~a6 z(XH#3IO=Nw(O>?2?MriS8s%s0bvhqp zlhgY;Zk5W&DJYd$=Q*{H?x@|{%|kKW-@%zXd)m&<;!J^PS8AgDo&y|5edn6lDYK@7 z=Uko(Ky`Vg_2uU=YGn+$4f~`|=IBh6-417-nNZkb;CJ8eS>Jr1=EPpNTz?rx1s2MS z?lXQryJl&gD-7@W+(mPpQd3%7tHwr=b(Ks|vaye~coH@ll0%#8^RKD9!Q}V&{CL@O zBkSi4);Z;MiSaePMTc%ly(`8It59e4W5Y>l8D!N5u!%2@a>UP!d9Dq+TgP-GsLwZS zvF^p#i&(XC4V&9P@o+U5PX{(lwAcCGQQ@X$6dWtv#*D#8I^@y9IuLt7iF>1^p|m>e`Yyp%ge2I za8|hFUH%^%Eog6aL&WooQ_f;=#!y|_ut;to-+EKJWB^o3Ea=|#?{@o0C}QZGP9*T5c1Ut>mGmJlz!CxeY~ zIP-Kir$f=kAZd%mzM$;`MBRX4OGa*vVBR0;>RJr5##rW!wh}=|5 zEh!N(QRBXKbK|c)%e219jLCIt=k|O4tk4#hdHlLs?j=)d>_z&KiA#)oDBP`M!Iu)d zKlB>AOq^E{5&bAI7r3lX!YX$`E<63I&&im%w-dAHPphQHZFyqw`9KAUG9Z7 zLQ}!zg#L$OY-fh|wuY~B`xsT!^OImk_?^}vwL)f*&z(bYD}n>62lUsPzI`J&UR>d( z9WKch^Z($*4|Q?hesj?v<(z(oR(@KQtGm36v`q0tY6oZfrSoAad*wWYw+AMN%fEAJ zvEw+PFlu6!y6y0W_&!5t|LRNU9#pP$vgjM0H9C_lr()T8%ft7^iYaC=1 z8m%>^bqW6XRj~Z)521}Vdu3R*`jyu^EqR}G*2r!dUzoG599hv(drpvP%&N9-S&T;!XVhkv zH9o}?F9LZvi(B3)C7AT5zGdg=|I+Cexgwix{hR;Zfu{(~ly%N0!J%^O!xr}ovjerY z(+X}bVmX=M%+2ztEW(9lCxUtp$*#rSV zub4&f1CGUj8)cE_B`lo2hVt4`O5Uezc%Y=Tv7~ zvs5>m)Mw|{*X%a`VcOPmDlYu@FpIis-wkS<&!4+)ZaAP(ehP5>J6hyl`|ez z+#2sy)(q`=7X7e4d10v*@Ttzwzl;;H%iMbH|g}Qj#VzvHvA@T+iU%7(}KM!qSTltZ>~$oFtHY_#3{ z=rPtlRyaZ-;bx>5TAA&(N8O)#ytq4izU=AswM(Y&a>xUL;!l;MPZ3V@_Uu0}V^vB) zAnx}2V=*C#m?Pypl&jt+O%NEY9{ASleXFo1ekS{CM8fr)us_f38hy9P^-J)uWFf5< z^=$fiYDwAC!U9uo@f&xuv$Z(ywzN=dR{Zll8JQxCwhY3-NY`s>Sf{vw(oh>q2FXDC3tj@BTtJzwHb>AFM@s%~k;_j$r($f1h zxX&}S|94@{PD<72*bAqLvBAca#hmrNDjPrbM;2E!M`SUs*0ys_oqR5FhB>n6;ZGum zKGwtlYPZ)E$dOPgbE?LKL0O2U*i?km3O(ElH^Z%InyGyv0S3kMm$E5ba2c&3Mjv@D(3DSPB_X!kChESpw1#9 z?)!MC+uwe>_v!Sz{S%*I9^#z%xy-p=;Mr6EIJ(C%LnNlnMXe_PI3uMbaBgYNGh+cO zc_+7!lAEU`=ZawY@a`d1*f~Z~-V@ZCWVI(wX{&0kVK-)BHatlD`3s5OrqdkegVWUy ztW4)-xpSv%UBqir;uQ2U;^tb)#|(BDmSPvG4h>FO{DVu^+a8s=NGSM#GmbQV3Nud6*Imx)tI$8I9hTtq(XJ* zbEIK>;9^?M(RC|opYlw-)jEHj-1wH;3)~^Y8eTE*e{7Ybz@CRrsm?DxC6(l<{kV4!f(jG zb8Z$eJ8R(bbbVmVyi_WbURUU{PMJqf<*zOUIO~s}PhEEZRoEBWpVB}a7b2n*=H_#f zCj){#3?jd}m!IN^&IxNt>oat*>$sFM;n;T9gFLV0Ckl$o-YGHuc$hJ4xt zi&4S;kI&aUb>$*i;*h3}hTczVBh`37w9@C|uG2TEoRGVI%pt6HbSzM9=MKA?_n(vb zgC?unVAFT@XH37{h!`c*JeU1jb7$AUlM&fb?xFt3dRBUb)oKTN)6EG{yU$778>edS zxSK_v^s1q$C{(ZsPpMFMg>M*du4$V<9!U~5(fEG^stY@Uk)rNm;ss|GOymfXy*e%xqvoYW)1x#Z?-G{ARXY$tw(#JHN?U+eoq(*H@oRULl|~b+=#8 z=E!bAMcERXo_pXBT|;?8SggaK@KR2Cx%w05h{p7ER6Zl($(yu|YaZum4)J=MUU7Fz z@E$}pr_JJUO+V2 zMZ_2LWBt}GWOFkq6~Erzx7f?^j-7)?)V~Iem^}Wfl$ln2Mh5%Na5JN?ub8Z3e|LP;M%7n}Ui4|R&$GJ`z!f%1W~iv; z9-{=U z)?{jeoNeR0yyBIPadP>p1@o%)+tykpL`7Yyp|<&GH?dl(>y-+Hd|)zLTl}!5@&N06 zh9a(eMg89nCyxZdGbmU@GA|40Jui3tI-Rka`gva*(@0pnXtcwo;mU@hLn3000tTHw ztm)U%RZNlAwPAZ%FJG!}8UK5=u-VI~U^tk#S0S-|kM7H;&yVS^s#{&1zK37rq{Q}e zQ_X5u?gTv06B8bS4sJv5^7!(M~7$Y z7OcekqT34HdJ>r2{494ewP;7()CpNE_W7@CcL(D_o}~zCL>_KBqFa!lCg)6*na=F* zuGiLHUC>Q~2|QWAR#f?l1D0|5rm3V&S2P-#IanpzPR~m=#D#aC@8}zN!m0JMR=6}< zj5ELD{PWJ6p^uW3in&f<8Gm@lc|C5P(c`M=z;(&g#c}os+Ge%ALlN&11(GMbyB>Ae zN+vo>luD(m&k1YraC00L*IHguQGHU<$0Fj@!So*gigYgacYA0GEA1%S?QHo&oJ%%v zHVH+>M~_#btx~^!2hiQ<>h|@Z{`uDopYl7PeF#OoFM=$-^*PIS%irfD_pn-HTTx02 zj=xfG%f|}4EOK-y)pMsjEU+$YLx#tKJ6d>1kj2IQiKw8T|&)~14Ww7rTUn)~F{4Wpp|KlrlnTJCjdvxC3NGn#Iu(cg` zn{2eP#?WB|jfMmT*REdP)>dHtJDw+_+#;4nK@%$nq=^Wk8#ocP2s?fHeFaeokfx${ zqZ1+kmeyX7RJ9Yoc|X)b6^YF%F!Ikb20Kx{=BVEBg*f4ef+MkON=N$gwml zB2A5HnOriTjPFIsyy87$j{a@JbS4mjcfW4h6p8Urg$nVh$Ej-=F3$r}5rYX5Yb&eF zgziV+VxdtPv=ch;S<1jxWF>TGD-pHos8A;v(B;T5_E_!$sJ~JebOmm^4zn#Fg0KM* zs)TOs5}Ods3C4tUOeE>r=-+q!k>O)DR2l^xzh0nJVUU@S5y`wX`i}kC2(^!za&^jr zkf*VX$h;RB?FPq|@G65O-SRNbz>TR3iZTW`uy4sl5yk8zFeGF&-3+%3Lpw5&o5@hZ zc5$a@sFyln?2Qpr7s-X`<3#@&mpcm5p7Lwg3fB&6Cxe8>N2VYkpPG`Un>hRimoz;z zn2iitV2;*a(sX=$Jm;KClH2aY`R$Fi3>hyhg1%!|QlZ-+|8W0NoLpL(&sJdtg5}4o zy#H{wCs=4xqGK5Sa9qxEEDd9lgyHg|hy(5w5i8y5R8FI@v2${EZ!QFEHzH+iu&+wr zqQ6Cl4XA9X9~2p` zy(ch4jF!q$*Ro2)VQQbiTQC8ZT*AiA-iv8af+Qo-n;1;jnj=&Uazuj3IJH$hM){pZ z4Vf3Kjg;S77AC1rZi^@ zB_;c!fa|wuxhC5ivlkZC^=8FWdKoUaw``2J!a<>U7LS8AvP0+y6b?+96j}Sd!GJp~ z#z1786F3Hhnj5hu5Q~uxoim~wfT;^^Kw~k(O>`nKJePvGeMnKD{aIFK>*!a|cS-?@ z!yX_RfWb`LjtIL@4B`R#LkGD3G-fs%F`k}QU;E_fvKF_+`MPd0xJi^3yFEjQz|==(JB%$* zX)wNM@i)Qf4VWE%mMD>MYQQcMl8sYw5_pVwIT;nis?Tf1c~At0qhbMG}f9L!9{??VWZ2((CkgP9W7RcEY{#O<8~1; zNcKFeLu#WxIFE#OK~PJ4oP2sY(fG;`i_;(jOJc)0yTL2>+Q0b^1q(89llK}z6)~U( zox!*iA+8cCW5093W&-t47n>zae5^i=`P9!u{TFj6bO64|?Z&WP1SZ6ER6;~_rJUT( zVk(u4qrndEijc3?%y)Gms>%d>0Z|p*ODO!Sheg2Z5fwXJ^SB2&vH^RQ!17UpcR;My z522J7uAWMG<9yrVd>9*%hQ{{*jN!6(#b8^?Q_Ll*0Cb9HIVqk~NJyPnjZ=-cZ{8%M zvsG%dt7NYJFom(}A}nxBUQ}Y-*}OjgE~vq>e7Q8}Wfj4P3rzG zhsb3|US)7mIl$>v#$^G+o98h5ABPs-0)~|mC<^Vz_ za@EP?5E+1m?F_-BFq}uVIN(BDLs+lTc+Tx8%vBi^8l1eD9jkLC5jkiag!k_0+wepfzr{cHEU`C zAHS%Pk0EWKbtgU?Uq|__sSStDs}e`BR`9@t*o=iEOX%ac*Mim^(%IHz-jT@00FKi! zyFkbwV3v}rMKA<@ej6tsdrj0)h$|r85(`BI#2N39{R|l)B)mY_q(%Z7j1*&lT?Xzu zbs;+!vxa0`5Vms`l+POYf_|wVd$a5ZV=?7vhI1w)nikoifp0Lsm>kX~%;$B-jstX{gpOjs$%MJgo!o6RV-BX*kCNF_h(XnZ zTSLHChym!%Ghe}N_C^%@j93Ot^WCp%%-Xb1%NP+PL6g- z7CH$J#GS^UC-BU>|3;?Fu*?WEuH8m9Fjz#Yt4>I{=o3n0wzYeacZXd4v6S~OrSF&U;`mXlZvYwytm)p+PcK*#7l&& z8`rPjwPM8z@&O>iJRvjqfHD^+G-GU;Mvel~_y^3Fl6atDFkj1!Eo!)1;Q6@-(I95CNhNd z0_4f;7GUWcY6*gcP1CKnTOX`}2N%FTyM()IMnYZ01!W*ryoW0=ho2X57<$ZK@DLX+ z2=lsI3_NF`@8rq0ftlGf!~muPGRI(UQ79CC#I;@EO(#!=Ndh?oi3M(;5}}kC)*e-VPi`e z1|IpE4teq$VIK7ql_DpXl4j`a4d8s7m zBK{PY4yIx&OwH$d7DOjHo1L; zg@r>d@8KNJVZvMP!i5U~=H^I*PGEt1k?-W04^WA`qWY1>dchbJFWyK8* zBGnsJ7wa&|PDuMu=Qs}f8@G1afEtsFCBJ@!W+6pLV*pee20 z^oG2kI_D>JQ$#XC{~~}VjHNV+@5T)q4C39N?OhP>tVQ}uq>>2go;Zy_(H}mk2ecZI zn5D7n%a>=!KDEq`Ib~B@+&qwd?4dNI6=yzp5poysc*t%MbKh@oi=dlIdtp#m0+^Ye zo*sBVzCbj@Ek9!uJEoPeyFHgk)hRqav=ay#`o5+-m+T3T_u~?>$k~(Qhe`I1N%0O) z&j`!{Sq4_2424phyUqR4hScPpQanNic!T|t~=%t1c zDh|Tx?2PLEkI3F@3lV2!rnXg9DtUW**V~pko`fH;CPX**fp5)-TSC<1&O8O_#Ta&( zP}IPN3^8xPn$v=RRO>$sun7g)#MhK154k zfK~`CAdvo^N9oV5UJ1bqBDxK@Kow$Aq$^^mJSo5%hpQ**g>=^FP|46ZiP#VsXbw$5 ziw_XY+6Y;u>_ZziY#_RKMvh@g*;4gHiUOv37OcOdeZJK;#r-bojkygNR7V7u)a({N z)n$5Mp{dAYyuUfij?O3rYlhMnL^2+^sX1V!$IX1ICgd_4D0%CtJfL8}f&8o=vYNqy z3@md4s6pJgnKlAe*dwCRPN70WBC#<6@O2p~V#zQ*en11dK6)E%1dEr@JLH1|ln_cx zOkoti2xTl%5>X3r%=JbgjIJ7^jI!CY+5l+ZoiRUs_UtFMxxJN@l|+E6Cdp7XMAA(U zhz&CFp0qc(b*QT=Q`ZAe4=IljVKEYs6~~TW^&kBP^{pzPo(_aa8tCstx?QjtE~dC~ z5<$5v6}im?mS8Kb6hwBU>M$o*jf6jEH7Efv?1CWv%|m*?ehz7ozX@|cm>aRk9EhaF z5C}zk-8Mf0yf4(3PNx$IKLWqAXahk4q>=Mn@$wDX4vEB+4+8Pi*7@bj*Tj5TZl<>4 z#5yBG+tlIr^;My*zgRm3-VaU_jdIwzrE}6{nYk###$TeYuieoCG63#4@0u+KPIxf! zspI+(dJKGI9|C?-L5WOdN9Bqgri#>L01ZG=_1ty(^9mp|q)qaRn$s=ANKIsm0eK@5 zVXeX_;VUGBgFHhG{FeC0%VmVL!i$U&SKSQGoe)fb+6;^8CngOrs2zZ_(E(^DG=@;u zS(6a)t3uEZ1c7I~PTR8g_Z8beY_-hU2~$rX1NMd_%_VsO34?KmNX-fo2Ra05gR7+5 zfCtkUq%M*#);vFV99MInV*M@(Xb9kN)Z?R`0*gaO6yAu~MaZJrIQOUG-b~d*J@JaE zOxWmI_;&bLGojPC{%X!j*|RU++N~ zfIxo;NeDK&RCNK^5@M-=y9r0&GaqY*5JL~7rE2gvR1 zO#tokb%O3npnwQ61nCCR=R@rzNX)?^)F8Ft5{V{Zwain)Q5OAx2uu}sORf`GmN=4n zISjXgmX+324?^xf&7>1V_4Y-1j$R>XMFd$vDyD=(R30XoNbDeBC)~POwgD~ys3zm) z(`cxxXqw%Fni@e_*>_9pJI@o`A`~V73|-eb-JB2wcL_;KdqPQ~r39WMggkiPxOdvg zeLS|qt-8ZGW8P#{d2QxDhD!#4pKx+_T5KxBt!-^pfu$e|gA3*EKZIhu@r==sxTUQYhaF(4Jign7M?-0~m3Q)?VY6kHQ0(TRX`K$%gVM>^8_$?{GkdS5_55cH;Y(B2l4p(z(=bPL+Ihl(bF_#%<@U$1Q#L} z!Ska!m16m;PRYf+y2ljE?G%QO`N`)OmX`7~J^UV-H~(T5L<7F|AVJR%9vFlm1W|q9 z2QVtFF0;r~p#&hKhw!;u3GEO$TQHC~T4N_s1#gDpRLS(*+*Y8Ks*%oQr^@HebZu41 zvNdTR7`Rjxvjx~4qSS#b>KrOb@-VAq07527<^jcwitb{zS496C)z|H49{lKw~3tr^dL0EGk<=*F~n zb{YaobQWQ-Ki2}iC77pMUOueUzB$9HE)7|I?ey#{6xh}!qc(9k-UNvXxM{*fsTE}w ze(bSCVo@34`6{@;-#rHoj6ArFTYz7QoV)LjGk-*IiWBjW83|Hx#mfk9#RxVyGZtRv zWJ4J{Z!wlx3%4*T=%DkllY9o*qzRHQON|O-j%6$k&F2tJy@#!}40ZlW$+qvrACm;- zAXZf*INU}68`Y;o7K1c|yb4un@F)?W5M`)HP}9i2BwvU``BJmItOZGW`{&Q+U>zTt zw57MXnz20s&xc3DuFICCA^y>5e`0FJq|4eMfh05>MwN*y}A=FnCs`9zwU{V`>;!)RC~2h{8r?u`U6x=yDw_j zqwR%W#qSzTHIgBC*)Ns^>m37V_7>DB?m}{_B<{?M*F?u9BQujIpFD&SZP8L;qfgQ? z)=ZRS9$sqI)oEZY?iF)XFt0-?P99;amA$5&$M74G)TqoEi%|cZ1d}RMFU(q) zeACw6VM~T^shPIIu%>mNM%OqmTefROEy`jqy)L3Fv&2g7Y=NV|?{Pmtd>IrR06F=3 zPA{ksWjCapgd3cN(l9&W4>ck>B|6QxUhz+k|8z~e99ztQ>Z<~W_Hq8eeqDsUq<##8 z-*xD~{`BkDuLI6(CcLI#B4Nx)$Gz%Q;bC}47({-q4MaD(7<2sg+Dx>cq?wfgUG zNHq)Okb6i}+lsKCNJ_+zT1uEZgw`iiKx|Mlp+J@oC(Q|)q&tGFh%yoo{fOwTCh7>N} zn3wnObAZ?Ak((gYnQ)T7kYP>_-0O&d>>eA)O7IWpuHJOd;PM?lv zwzjuNp8(F%Lgdfhf{b^M4>`)L&YMwp8xFFEAi*Coe1&Ke(6=E6v$YwLT{!$rg5Tgso(ujc2zKcluFh-t*`C z2~`u?gG7V~>7IRUKH2)jABY6dK?r0s0W0g#q(8uFq|k@l#*j%CaCEZh$tDqY-jMqx z0g@X{_<=B2ngwB0>NA8reOTTBY(!BR#n*;b5AwMH!UYf>yJ%rQo`h2grIaejQXCkB zd_&Gq{vvF4f1;!Fb%tv^gDdBF3U5+QNq$Q?cJ=i_Rsw&E0*>x)cva)sPrL0I7^V}? zk~=?LVTN7(g>Peu{bNk}&O|$!)bi_uumSFP<;q9@Iaqk2G>wFTg8Ds`ZH2p=tFJPI z)`?Ez>^5xv!oHh9H_7_)<F-}# z=GB(+t@R5IZd&6rqfQ=plEDsqd|}^|cnKrjF9$vTxGFY~K1BO^Tm{@FP9Ui%fVVvj zB{CT*u`$>>mNR78w(UTz67o;7KR~o9@#XElyj_W$S5?e@;JNF&zV7ZQq#S+N9<4&q zmE^262G(UP?2Dt*UC6OUr9~&19kIN-nZLF{bSnQ;tn( zA$5zcv&EbXl!rPm_~-_U@mR*fg=9!_MlUs#$WD+#9g1HTr#l>hAAW)yl`!@C5X&ER zU&fH0gI6}Wv}U=uw+QI;8oi%=9hAV6jk7>lpw)lH5GI-%@r+7d=-8<{ckfoB?E4gZ zYX}BSzbA3XYw*ZyvNa|rb}oktRyH1ZSUGU+i&Dhd**mks#2|YEKb0g=`0iaXBwUEo zK`0P6NSqPbRhb7HGHCy~>qMS`Ttf6~5LGlHKRr*v<Rs8`=Ami=?N6?b?a^B zfFMMiR0oH35vkcl5k)7|?`x54^pEAa%q?Yv__O3q!}EBK#!=nGR;sWH3pTb0cQ@G+ zsi|IZ6um?bTW+ZJ9qLa8L>a|*>z0bu42z8HvYYAy%om*#w8e@nWD;x@C1-95$l8a? zLxC?era9kV?MsKc!b53ggdHTy?ze%*X71}0Jtl98-&Q3Qo;qgV+P`kFNG3Ro}p-$u4SVq(yG=6%p{x>Bhdapi9==KP! z{z;Z2!Fzf`8hW#-J2d?t?XMi{e_I_cU^=V8_dEmZz>{O#BNznajEj{05fKqPg@iVt zhlMXG?Wdyx#E(!xrgWpa=@Qrk@wzt@c>?vfq|1V>c=&^`1yZB zWoUWUTKv6}eTP)b;;vNIs_N=WEU5QEf~(=sx%w{Oxzn@d*Qts%ms+!yG4bjhIFuJ_ z$!I&+{6ni@?ke%L>o3!mf#=w%YSHgHX>ttTaoiKVO2bdo>5ul~tKM?Z|F|?x1=vgb6)ig4ef!C=4RHOk zcD_2v@-q%oX>*IR0WW@bu^CDAJ<*@=Yw}yBAH}Y7{_*SY|2XD4~^KRwItL?^hfx`o0%4|6av0 zRv+=Z?VJi-+K2JV@qtw<*B-0p@ES|`MdIoXT0v$7Nmmu#$hj__u#wnMePA z@xQOk|96-1?!T`2|I06%^d8RbJ~SxkjwgTe*)Co(^>CH73!YDD1qGo@Z|vE1ny}ze z%(?p?l(O%M{!+qut3{7X+Qh`<%GVBxlDpEURoUW32`&#eR8-HL8qcA~%fCYr-bTRZ z&L_0zh=ls+$vHaaQGM;6hwglqbH#|tf$G!9#KgX;%_z<+hoUHUgnU-E)($@9Xh^=rKvTjCw}hexVd88_MSDUl;E!p%nGAD zg%%a{rlDaAgn#+`&WstjNG^UmD8Rf1sjQ)G5O&qWk-&;*S?K6&LvPOu;GOsC=WT;m zy@O^tyT>O^G|nE4P(Ftpn1%vAz@4{*1q1|iPY?#Q@yF-qLIcMRODih=U);TSSkL|c z|NSO=XJ$rZG&F=V5)vh=gp87kNEAY;WRx_lHW{H|McZf)LZKl-q|lO#N+k5VJUfsX`n|JV~zWxqz%ts?;%?gLLpJA6|6aqVd`E-*`b>N9dFNu{~s9=&7b_Nxz zCl^ASRhx1#TsZK! zHJeu=Ng+UHU16zA)%}8?WSY;|&sUB;`Ii=8%Cq3GFke^)|0nP3i;mG)-(`6?)Vv%E za(MgA8(CyHx5ZZgHYVMjt=md6X7$6|rm(|@cm0K>P5?M8t*Q#WoUIgdB4XqIg99h_ zhCj_f$>>Rq(Z^9UXVUbV#9ua3>OVZ~2ol@a&7yeNh!I1_j!m5Z%%s51+_EM%rTEFk zrHLIV^EJ_msy{r^5FXLthHIFyXVROePkV7T+b%!9IfpYFloSut{1(fiC|G9v`sar( zcYR0)FrP`#HX27=maU%JT{_h^_3GV?hI3;|*Fb zHX67Y%$cKn#WBT;7qHBpDN3f-J$Y9wZk0By*#)jiM!sJTWF^8 z!2h;X=1vVAJ|*qN@>ex)(q%c7NtXh-Tlem}0iHzur=q?CQl`c+@u2EwD28VYRFLjv z%oEpi{LoXJ^}&gGZ6sF!(au7lr@KTf85!NM z)GamXoTk&FqBN(}C?{z%yVc&|HL}_+nn)Yv~wnalY*z9xZItSxd?+UXXjQw@7aLxFQ#jPaupWn!$w^aFHZ>FiTYT$z0qVGSx zTBaaKWv<;0H z7hT9hA$%t@^E9P=$RsCq-BxILbZu-#qGwR@j?jE|u)f**smh#&&u8>sCD&9*57x zldV$;XEzDqQV_Dtr5;2lznh>Aeb`l^>H1RxeZIKj#HD^5{ZLl1PCNv#GWV#~=lM2L zNejv1%Vsm+MM^$?^hJanP7j>r{3JjBl+iifx{e4`i!%X$HTd-T(F z45D9RI#*Y>)%x}8?VB3xtbekXi1k9WIaX_O}b$ zGS03aIfO^NW?Uo!g>Y(5dwYBLg9p2U;CqO(FB7zD8WvOjHZ(M}>(C(s;?_4aCe4nH+0yrR{Y+(e1kn|)d8POqz)a1c?i+#gy-o5mar#N)ws5b&tod~0<)Zv3CO&Y-Ka-Zw^ zoD(HD8DS7N!--_$R#{rAaUcn^DLU}?%zans^hs*7UGJI;v$ps*64<5^EH@=iUJ5yZ z4qzysR9anq?9!Zg_)4U7efT|MU-10m@20>MY~Qg%vFoKc^+jveey<{7eSx(W*YNt| z`>pBa5narZHw>gLAx)H4RO~}IS$1rFz4Iz(QXbJ--EuFKcT|$U6Tu z0&NjbmJ7AXJ=FqGVD(qEXVxFLS0vT=EKmBqDSuG*qse}Y&_aCWq=ps}wD#df=jvaE zK-%fSiLG3-W*;XsRi~bR2aRQeLWuPOkKscMGYwmqRqc9WwDEVPr9{Q)yiAKVYuch| zLcMb5eZ#@NW7;SL8eCf~JH<@|>5*@CBRG?vds6$7(v+x*kIjF+PqA(iQH__7T7y7M zhqD}t|FCnNt%J|iK3hI;>>XzHa!XT%O`G@t)1`58@N z;2H@c1!rp&_w`?w85K%y0^_t@wrm-yUWFpfns2et!asie&^ePQ4u-tCx#EDj-!=8T z`C9$x9*I-8@7@)K1get6xYySU?e+B9ppucI0Mwi?;cY~)Sq3q2&a*W^nFzl2vkz~P zvcSahiZ)o5b=hS9yLGEpBWog%g0Nsp+1m-z;L2y0`WLKoOd5Aa{+?kW zuhF42qqWPor;D>Ln|2C3ULK=%3EJl!jrRmpnsHrXJ-lIo^YQaTQW3s}kEx+Ki z6y#?I1pw4$p(?Th|7@uvl*e*%Y^S$idsJ#c!WI*xWGV;w*hdoQ+O$<#IutFh7K4S*-pk7u$B1MWqR}#%+wOh)j*?gr^yTC>mE3F* z8y9!v(4lUmIzL0?oRnd$-I4OhygI-t^a>0NgfP|D)AK~6>$~<~b)qNDiU= z$znBGQ}W8m<)5C>5n?ouXOs#aBJY{FRGAxwQtc&fNOB1I9H$EUBBGg14K@O4a1X3uLf!cA_{7B; z{rpnu^JgCk3K~wI(ozS+(+W9MErNFIqHUa?AuY-0C7r3bH{zs=9NUX>eFTk6AkWzw zS=y@FjAzvQ(nhMzmO3N~ z`Rc;Uix1SH*gmuEk4>^T4zi_=(8mFw`E$D;j&F<<6WYa#mXo7D2qHs0KtJ}L#Fu~B zdot!QiaJ9qBf=UKHDTG$8R`K{c~Mn-yj-RBq= zD|Dl^h+?zR4YzjpPCDu6x&HM*v%ZGn!J{lsje>PNvhD*$W5@eMqGhU zZm2ry#TJ7hOyf9J;TQX>UbE#cSw#l3Xof9;qXYN&P)oPAqmL0gsni~I&;IGY~m zJ%Pfxu3~k1c~X}&4ozKRYWjdG#+rRm%QH0~l@6Oc`Sr(ZYxIxhFI-;!?2`4x)YbYT z#Z*;Qv15nAIQH<<8www@39Z2Td$l}A^5Rh1*f{&rX?@`gw{PD*i_?kDMnpV7x;Ki) z;?L$@ii)#y>gETp8ZXV>F&c!+wD;)cBN3nk!1K~{`oQ_$K5cn1`}x<$c14Rfy=chR z-=P%sUE})P6O%?!|MZlIwFobH7~QsYdYjg*ACT|f0}K1(*O)~rxc_8_3<2~UjtCdd zDN@Jy7@L$7#KKvt0?QNj;zPRxq@Z`-n+( zbsq*T5PRg)cruiN#0vOdPOcUu=t#TnPR_rJUcSttqAugjy~T+2?Afzgj?~TKJ_EL9 zlQsgE)W!ed{O;_aRo2$>tcF11$}D)w`j~mIf6RG0_WJij{9kv{RbP(!z2&&>@ zaBkHQQb#YozLwKz{z+JzhPd+_Zl8~@t{IDiyFk(xo$#nMyG^&$jpZxOnWXBSZDn=# zA?7A4*VX!ys65qaUZC^?0WdpCSe3oij6c19|I^3M&*Z}%A*K<_ktXNg^A=mZx2>(M zQ}w0f0BcHmJ(!GPqeeY=AAA3&%iZN4%TMeyHS+x6EM47hbH(LroAkCdB~*ALQE=hN zc(FRcG@jayIXZE*sQ@bSIcq-E!ZT~GabZXduSK7L@$Ka;GF@PL^Pgp(=WY2kBL2^d z=g&u4r^EoIdhxRHbiOG`s#G}eZD^I^IDLQisW$=!vq>l*y7lkhAGKJTh`W-JBaT}+ z{Wx~`@Q|387!mIt+`m6RvVG^yV~=U%xh_FGI2`L?FX_Wj@m|=?itn!a&|-&yfp-AZ zCDi&b)>y#4uCfZ_TXW=?wDg1En%ueREHmq0B-qyOn{Ih~iAOHEUwV6A;8&4D)wQcT z&sp@c|BRZumy|>3oHtwdv-3E!OoD1++FGl1g`#)bQ{AoOk>M|0#gb6C{fSkYl$0c* zmbA3k7|2~vC{R-=ORN|+-TTooS$z?66>e+)t~YLRO5-Nh7Qq4;?AoAjNV4%?Z00mW z1TbDs(stLref!e<4o6{Uk~zhxR+r>02TIdN%{~p=u0Gq!@5IK)i=1dohjw|q5{W*I zv-YYAFQ25VBL;Kg;kU<&<>Y2p4xf{spMM9#nMjDj{nDy+>-}CTkp>JLSVsEE(wwf}bQz8zjNf)k?hVQdaZ)eJ*^o$8oI+RWN+_mDnn?Dq9a=i+sBQI~$( z(9^MOizvR+I80JH0mB z8ygeNUul?pdSCyu2+fVzG4&DFM`FhX$5yCEHdG0DC{N}{K)^6+&O>B?krjUD8n+xw zzxG_&>5sL3-*s7aW;2&;`cpo9?dhVVXPMEieUU=F%5v(tgt>BTroC63iw)XyzTbO>%50xpkaoGjb~dEm3(*i!dsi z&;^Zc*$7+FIe{fobt)en58%N1nF_tbdZ&u^LVnn3`^(UPt)Y#H1Ft)*xVEXaL={Kr z^A|5}J$~GUGC>a_(4InlIhP>mhM#7OQ`EeZdLXx@B_$FF@d&A5#+UW3x-_aUROls6 z$nIoIZ}+8s#4pcPkIrEYqSh6yLRJz6{oZ7ztO;#8$+(jV1SD{mgd&ZxTK8{Kjz zFCsd$jH}jHcG)mU+IbzyKwh!+B;s)1dJn{<`;N*dNh zb?w+O`-$Tj;T;!HmcZjmN=jTzhf6QuK2%pflyN};`vaZ1DmvRePhgVTQ%DQIm8Mf* zC#lX4b8@=Ux|1?n;z@6hpV`L}66-zzSbL(Tro^f8jl$*ZCwB2YGk+cr3!5J`cVNUL z2MTKH_^D^|Mt*xCxX3QO5`7a}Y+Aae?B3S0h%OD^zTHKMeFYtQ3MwRfN5>f?-+;v< zLnr*b=dCxq4pM(=rnapn#w*ON z`OWJ&LxnCgc3sbPg)x4-xXDEtK>^|{RlRlV6gc5`H{F;|;bqs$X-Q^TwnZ(pqSF&A zHt{h^OJn36A3;*n$>*l;Y#wm;qVkx{Msur!&PY_Lq0r+=An|oc211;%=kk~87x5#| zntCJaI|au%(&T(kMqk)yB)yt6CO2pe=;!L}<0)o4wMO|roV@M9gyI728sI-cVf5h?4a1HRW?yz%%VZ~9PB zkSF^`@it0kKaTaLvJWSsk2Fu4WDxYLc|#h82tVYz(57u{o?YyVDq;_Z{JNlwbIyL2 z_Nkh_N6UNh1zQ)9c~=Uz4-C+1ImvEI zSzCb&j$Y9ZDRV(lQbEB&rDaK-B)K3`@Ip#U6WZAp#+Ya?Q{QM2KP(d2)PM*0$VY8JzZQC8 zfEa{yBkSn|FRui))_x{noT6}Q({%57>W=Zueek789s>KzD2nW@o3FB2F0Q!I8@K2! zWI6R8E~n&<%c3$qrjos*cj3u^fW7EV6zsg|lQW8n`U85-{}2a1;WN?k;o9SYvb9Uw zey=X;veS7MUl6UVcHx;K8S6EwrIB^%;2T(=`Uv@;VA31f+`ldwdunjM^5Id+u zMl7~AMh5a|gE@udoS--5S<5y%>X>C!zb!6SF^wB0033-7PW)T@T*|YeeSJICb92BJ zp2v?5Y|~{x$mOr$?jJVV?Hm|+qJ@=pObqirh7R=_pt`NNDX495`|Cv)gMrw1}T(hFt zjVp#%sVC0k75T8KEpaaVz~U`94xx4a=%Tg%^^pqmpn&k}W(gBAj?|5xk{ueR9iI>v zx0~uB&n*jP`|RQ^dh&p|kFXtCZuwBq z9y{+;o@k)CLrGP#Q0jTIdJzD$M0YN>;$Dtm4JXcA^WKK;^#_G*F7za1WM1EYFdm?y?gDI`TM%ly<)#YfuLTc-L4Z#^aBNOp zxpJ_Wsi3Q;C&zxJhqz0yh*z$l@V*LM5ZtCXMN0$|8azuZT|8%x zGiQbtJ69_!t+?J(67cwjB;SD{54QZ39W3%Ma4F3iG zf#9yCWF;Y8;(k#3XFJIkqFgCSnk?=(x}m3ZUUPg>QYL2WcIX!U->msb@Hk85+NC`}vwqaPrS$RB;0*+BDapNX((m|=poCF#?sBrI&DPgT zJzv_sY+GC|<0C5(QL*HfluN^lHD79LGr%d%jsMKudST7zP0eu&iN#m(NHEU|h}b=< zeJn2k04H^B(PmqqkE=Vrk4BrdAFDTP;+$(!lM-rz49Sh+s;t=*^?Z&* z0(3MD8X_0bXM7z$Dg};v3l!mic=B7fZWa4nta>`FyYEw+Qgg=Kc|O?(JRdAT6;(7N z1*B;QW>6J!lOE=7jjd^ORwt(eTWzmNEL4S`mgpe0SHo(oIdNk3Ys)2BxeeC8SKHd# zt77c)6CXryy~hIimU&EZ+IfV%scE2RbL0)j4g7CuzLZ= zNYUzN;^9`M!kct&(fn`YCA4Uz2-)&>w7J4UI`d?iQI5&QCDPE|lNmwcTWGeUbK5Qh z+!37JDnnUzhF<&X)|!6kOb=pp#|P5&e%a)owD$IYemTKyPS<7R(#k8e7ZiNlMkg6n z3C!_Tx8DjDZMJzCByEgwwCY4cZB z#j5tXA)k}3G-`UhbKVEgfsJlKW3D-^HpSEthPiBU^_a6js!I~r^%65Cpu^9QKVgq< z(o|g`7HF(1Xa`dA^qAl(v&Q5yFi0d>NiH6O)T)FEpQN-gWlqtu=G$|OP7XJHqZ0M| zNm|o(6skrPyr6oFgp#G%iz}Y^ftMtYQ{eQX3lT8&>danB{r)Q=Dk>ZE-Cf3jP$dia z*9f)PfNyJ!!l$(sR_0m(ECnG4*w51w=W(NAwEN;3E}Zu_XN{O4uw3pu;@z2)4f|rh zk6$-2y0*5qJ764dHW(~X;oZLIv7BE!SfZ~xb)mqgHl{U3QZ1ZAH?6e%>io|uJgBMu zYUqKD1tbWEle+%%8d)Z7afGdcM4PJC5MQfYnJUh=TvuQUXRx`Pv-8RUy|W*z|VS2>7!0mF;Jl#ws=H$*lrVI_ZQ(SD86|ABHJ-T4R@r1K(y~a2O zy+1v#$Lt2%4IfHKXb&*Mokf7V%GOp9;pXC>*Hs-qtu@V$)aVTf*#Agk>gt%^EA@W~ z$Ps&+fGj~2b4#4N4$vG-TIe}(;>1ztzsYaRckzaF*WubnUlSh)GY&+ zO)nobRd{`D}jQ zugrk+xpe7LZ6gs~m~Qan^adAoA~tnOt1HTF3<9cH5%elvprq7-!@&o!2X;=~Ave9~ zWTO8Y#$-Lv-7mom}+c^?5m{cIuxChL3{B_TC(OY{wt@3D(g|F9ktbg=(zrUhSm>mACcaxlNhNiA^W9 zOgBB;B4obo^0?+ZyS3+ZT48BA5bO!B-C*8(R%{pp>58}ZcP?H6F(uX{-Gx$-`m)4z z@+ztINAet3o4ookGe3&aR_=M1f3|Jiy2XUg-ijMw91alPEFiovg6_Yy7Raph?c3cb zMBism*hdn>N-PH&@Fs2Y(w;@TqNYsTym|9@a=mq-KS=-j)L`K7_1DcN<8s(!rQj+wtI< zJfY44?v|nuoeFWTbmHJQ%dg)IQ%@*f7F{DXZV#gOETntH>(Wo34&W}9%zHEa2h02n zp!%1uUvE);`;znq0?X>h6ly_8Z+CV+O^qs0pV-xp`iYr*^TsF7h#k27<&bB%w{y`P zXyVN{el^rNP;yuvvOtIl1XRN4R_5k-@zb}8if%;T9*U%OQ|r9QVa{eDH>R9EeXl_~ z&j*cFFC5#Mq$gPO;EF=`P^0-d>Cq+c>qBTHyU--)l8qK%2sJ!0>BZ@}?>j!BaurGr zPy_jy?R#8tQ+jsd!rA>47F5Tvur4Vu&!2EUW!vXL7cX5>qh5QJ=Gvb*4YV=? zv|*i=Uz(>2)Z;-!dkZ27$b}ok?kg#~_l25VVoC-Li4dJka;|SjbX{^|t1^+THetD( zHa?`>TNkcE?SDuK5Yos ztof};_Nqf&?+wM*TT4d1t7?B){Y1Nq10}Y$)u+207FuKeR9?#z3gf&ngFl_@|2)O9 z?datx0oD)KN_0%#C{(_@CY6%y+)Ll(UstZu@-G3h_w#L2K4yNu(GU_=o^f|}$hgg2 zUM6hVm2^2#A>sMozu3#mY}nn%dHxJew4kZVs!+4cyjfV-r|`1*cuiN>tuM@79Cfn) z*mbQ?#qQaOcq;$ccXWI*>Q?OtS_?o2Xl&o@>8gDbF+oTBj{ChTXKZPB)%+B9zU<1k@|6j3Pa3sA`^8WN#D6@s=wlbuWWy{jvv+^HkNsb`pi zHv!pBE^G{p_=3J~!l$=AQzO*5P#`TOjH>dcal+bs8vAf%!MPrgOp8V~d2nZ)dPu{i ziQ2SX=g!JPLhlvr)$`cd{X^!Rm~;!o40Y=XyD)=@tZ_=}>fLuTd@?DWo@G(!YPO`! z%Y;#=@MH11enePEg`owa;7&beiR`L%8q81qDzwa*L6;`hdw#2VE#2z%3w$TiQ^aENeB_#eJWGzTqZz_~gkV4}o z$V!$IV(CykqM}A@{aoxv-*6f`gK#zA^OQ)QUw2dlh&#D{ClWC|JZ93}y15gvrTIoZ z*Z^UAeoI)M4$&$4^k1KM8hWv{dj*n>m6lwQ@P_tz^>ox^oh;P#{#JbrecV@2ty0+E z+muK3nSBk8BAnsNw<~L5xBO_f-=cw-!4xm`6pHHY$XH_W$q4}UcOQv8o)OGoU4}UB_8#`>?JBw=i90iN6mAP; zE>^cHd0nwMfHI^IZ_b2B@BFx}1cE^a$U_K+t)Ih?e|`U;2Zd}GT(@Jzm@{PrgBmV4 zW<`iahbO?9k44GzF3(X%v^GF%Q!8dgePKpV#pJ2nbI`~Y*ENLQUrbHn>NhT+anjYD zadt^_K1-?%*ymkf5C?F~R0q!^!^-G}bUhq+w<7gpT zAhyn=REzWLuW3J+*d;)LJ#{gr@ok`ENYPRfj2SOWf;AT^1m61BW{v*Rvl`nS!)`68 znzq9!0ry3B${|S(9V*4Hn$G&1Gq;cq+3g+vi`u(WnqL((4cJi|P;1+Lg?JUQBj$yM zjlXQR^S7gax;@Y4HWbj|%hfKuK}9TCI5f*`#N4JW*8yv8qBN#f&KdXk_3ME`Ad0v! z-fzd3k`}<39w6cVcK)bb-ysI7q%a$lePsd=3UbhK6N-_6F(oT!oC|OYqbItMH+>&BA;EmdU>(tXmwfne z)JGXKO#C_ht9JRYIbZ6-@4!dKy8U*(IV<1l$Cpwu%cwS)s>(VH$d?7>o3?bifV_cX zb|oe{rfujbEuFd@A>NtqFXl&mR?XE)33sa76aM~w-BHzBPY%4k3}%cxP9T5C-^We3 z1nFI@vNZns&Stly#kOK>m5|5E4IS$Dcw1fh9HB2|{@7HojZN3&S&ZUOfcXhR)rAX+ zg7-5FQEdT(q8_5*uzB;Ig9i`RRxt3+H$E67!x zJ$q~wn=dcpUfXRf94fdg65Hna_YC;uT{Y+W*-`+JIoI`!CW14H%vEy{aFVG)5 zpBEKXY2-h@inqg$r9oX6TaRpT~bx$cH zo^Arb*Jnchwj)bT3srA!u0Dy^;N#20jtB(CT}8yB%asczVLP*v>r#m0fBgxVLOs`B zB4AAfIX_r2hFdGw&0hwKOcpADzZKDnA*uRjtUKhmRcD4V^6DP9T%9 zTAwK*zrM7+e5<&45E0!oFtFFS_0Qb_0L8JN8(*^BggTds@kM*`sXcJ zX+6c{7q@26i4Gk)w3HAud)ajRdxMY8btE86&VKvn+O9{-wv|xKw7IwV+ojzx$0y#r zvA)54bkCWM3%>td^1WU8Psx|;xHHymav#d3x{Mna`?Tr2y=|0Rv()$v#Tk#5B}*jM zlO~s%WcJvVD1}3CMS(^4f2!cgg@1Xlob_l^&uo}wzhIw89^y}ZhQc$~|FEu=_4$9t z>h)L6d-Lmae@(ZyR)1fh$FO0V?dBZQc>F{?C}zp=jbC|WdGQ+yyeyoKp0sN#JbLps zyzKfvT!<+%^!~oLzi-g@UG=qpRfgi<|LI2i|G#zZ?_KoQKmTvttimUKe`Ml49ox-N zpdn*$4R*=U`7#xiOwz-JWs#R4w_6zBwhsh=yhQ;M=u;^k@ZW#D4`OcW-mRM?(7^i3 zX9Q`_;R(aS!r*yZON9IzRCsxTMfIqM`?6@P|8bz1jI5qLd-iQ`%Wt0la+K}5H0D1n zWF6N}ZXKcem~t>Gm%nn%>+_QWu#aLI|X5dspx?QYUqgL=cJ~43yC}S+7r}cFTc)DkwG$nOp_52r} zo)!|UgS!}oe2Q66aFVBr6X>knX}6h|t8`+tqH)tEvb;ga4<-CGtP@qMY-yX(cCsZ^i@#BX-QZabun1L%3cDC0K${Mtx_;$M2y z?vb6VDOr&4?ZTkaC+jB&C~?|oWOYjk0twI-3lu(Cs`KXMwDhw;AAfaARd?;Ck7M8j zQ*S;qp5Ni!0N2|0`Y}=4?Co=JM0zX2`-qR=5v-0{0d6h|UOZ2OM~;l1|2F#qa^Y17 z$S`^AhMW)54v(%xJao|#@7EM!PD4E2(@R6pq&Bv}TTC_-r@_{G? z5gs)@9t61m6{C5Fm;AgwCeS&4Dnr!F>A4?U3i?+0NV@Ul1&4>594dT6z(haVu zHO{4b*u>PBndTGhh!mS=G4Q0@&r#yHm1tcrWIH)8m~5=ygF$pK6E{mVS#x0=i;!y> zS5WuosM7SJWO72w70kdMFM1kb_O5g`TL^xXQ$N=F9PC?v7s;AgbNvlx*wGsZp@3k$ z0PY0FB2+WauM82X1&#O+d?$Yyr|0iC(o{@S-BZZe?mf2kfU)E;|Wsm5+XpBXTb8%U6 z7d`=ct)Fd=&p~t7+>dvgD|7q0r;h-!ErD8jo$v# z+f(%F+1VW-v9?!51Ye;o6T~p$^w0g}@s;U91`FKkOdX=jc5FjjZPQk*!tL3MNuKQ{ z)l69>s%1nKI9mkm#BGksMp-l+CRgvkfcA`Oz*=Jol_^#W!kJbWsTkDI?^T!S32y?x zl4oKB5egQy@@f(%OBQCp$hD#hR+ zNN8*$qQx(%8oz*E?}Ab@6sPFsVe}WAUpR`vXMM1HNu3xs%tWCVWR9P(ZQ>(Arqc#z zBn2>WL#*NSU$q^%H=5T+G1G6%+p~MODpCf*!oy?Z=WTpJ!;n?24rNkWUfxC`?&v=} zLBi9+(J$_PetyLhz_DAQ$pv1vj?Z@xdVQJw@&AtnJl~zNIz4fQek;Oi!D|g!s%gsgb@ld&J=^o%ov+ zq_)o4PhO`B9{(SM6>|UvOx$XyGJ132jAxcI|I_m_mc~&cp?}!LT0!>WYZkTrr-X^@ z#ZnSb860$_Jj~wr{TDpj)9Q!G84BdiEjW|F-1pXer_$yhZ5x;P-ccqt#a3X;-!^4shrW zp>NKHeM9I=?xi>X@e$H2XdGedW2bM}`kM~>=99wXOWxAv%@iXepoc&Q9+&Xg6K;_# zzCh3m*Qe&D_w7*0djVFIue%i8-?N&jI@6ZuV;40*f2t9rcXInQ=RUWplUx=$WR zRCu1v6^0keTkMW9e~T(mOSctKRibn?9kur`MklxUCA(wWpkU*l&0T*5uJAf-xHR|t ztcI-tP$UC&tsAY@2dddzl+Tv&ywz>b#}|dZmz0d9AN1~Foo%$=;H3=!*NBWsZ6@Bt!W*SsCxVuYi)~*dl z{3J8kIUzTGPeRiW21)z6x|o}s(OdPN#~{EiM2U~Zsr@}XJg%U1?dvsh^yn^a+O)y9smEYZVNeuN2>~da zLJwiJr8$VtpCsBWRXE)xOO~u;-_JKTz6~DIt!K|xlD}x{j~@?(hVBQFUxk(SIjSLM zZ8LJ*ouq>^VkHc$XiYKXIg~%_%P$djLooC!^u>TxclJr6z~p~2h~YxGB?fwkE^fep z0lNKMnO);U>pv8$Ie(Aq-T(Ra0T=+dwS5N;bn*4|6>%F5CM)FtHH3%_LJSI9I;=dH z?INax;9kSOAq}@%S(L28f)-;37;$u($0Rdmbtk$Qdn6+g9XB^^)cb9r51B!{lD6BX zAX=K-dj;#R)tWVDc$-hNP7aywDR5C?*GE5z09B#;J(z+LG@}qQw{V?9gBjgRFa=TM zt}Rxt_N09Z2e=ib)txK(wWlu9lHCHw0yxrisvX9WQG?aeppBLVO=O zneR@!^nHA6d{!|$Pu~am+`=~ zFwyL@Xv>M~&fgTsp{)odVpTCr0sJRZNYy^Qo(T8e&H}(iKosj=U+;x>_cm+)3T^ti zLixB2Z6!h!D{SKPhx7izNuAFb$6atmBq3ivKL@xXrXv^)n|Gl{%ti0o zxP>zsO&X52QZJt@p=y+3X5bxAsk0}V&z5fPZ22+05^q=K%S1(CX&84ITs${7_a^1g zjL5}Xc8(zcLrJ%kFj#<%C=}1J+ZAsN8r2IOC@|_O(rUX-okYFienhXA>8E|f1ht04 zz&u7X(h<;Q-M@b-C!AKlmCpO`05I+AcrkM%mB7$&N){GVc?Y_>3D_oD>YzND_Jaoh z(C*zW%PJ~-F0KJu1{|EpE)_E(jHXWArTUqeJ3_+g6$)q1Z5fy!G*qr19(XZ){YU!M zt06sm^;(O~D+52b#`$H*qY3AR>-&3oah=m8l>lmhT*r^kk=)0^u9VJNX(xeK4WQFN zd$}LrZEvHKlhfHtm*xx~&fpkv6ba`zon;9PG2E~r=1$x!L&IT`1h_YgrSvnjTl&Mo z_U~^mj`0{)6X7&dw`aF*I+9A*;Dz(&4^C2!$VTa^Z@7=OXu4#Hm&awBfe}vU`TaOs zyT4O7Ka*|Hwed6cDlT}H?mEnXZ&GBTbu zt6i$w@1<5Nth1Bj5}ETH%cuvP21#~rr&`B!zBp>meU3YE^)m_JUu;U zO(3ls00nigyL^%Rd;%adBhuQ+Dwi61E&Fi`K%|_UnCX50&%@_C^$iR>-~=^( zY%;9$`dNjd1xs@RQ@d=huas^vc;m*;9g@$a5zWQHt5;n6p*gZ#i0`?9;1NJJ$m$LJqj0tdGn$um^t&Wwbq0Q-T{izd6W(M zEK13t*jNXT!fA1y7e=ZOxfHwWExi_e>9+NQru^S^R1?!evL5g3_4j^@ruLC5Y*Tjb z!UbdMVlS(!=|ki|X|-FNB7CiAXWU>mJE&S(zi<#qr2y;aX@h@u)mK*&^P|z{&%b4H zW#n+aQDhnVg%%RFkQg9E!L?67c5ImKH&O#Yam6%{ii);WM4}!vh7R=NEwseQJ;tn~wNN8~PXR}eHvcUF87_s!W&{p)$UP-C8|A`>Bx~I+il#v$okNCrgH1xG#%DCLh8Yy zgj8~rx}CX6VII@I3!;a(7H&ZG`6ZbYC{*3T+rN7C>iG*7-T^Q??C-yaW>ZYV2@ema zfXyJQg~!AkpkR=aaPp7OuU{@qJJ6XiqctCXnZ?OJieW1hUg+ z&+f=N&}1y&^XuC89G1GJ2X0+|_uf5`iG@bzZMthyQo)9&XVDUjWFn6M9?|{9E_G0C zFqg}2j7`{}yu<9!U9^aMs{`{#Ptq=TG5}G%I>>#mZA-FB^tp4QysFHP=*R;$j;Pye zU9@YHR0fi<>87UF42tMaC6XoAw~S(m?j=zS!D~XPvC45fz_%DaLQ^VQai9_g5?#{x zO@0*e*Ar8AcCoXw8>yf$jXF(8%<*j;9lvq(US%bvz0eKw^HWW?Y)QDY%gws;VzU=1 zsNbjDEngg9ZvB0-X0`7%Y2?3L%Kl^c=XN*WkfKTVFoAuQQWa}Xh+kS znZwo=L?5;<4*urmrABEedvEbm8#xt~u9%QYqb^@od9o?O)$mPMNnGH$3%T>2#kt|Xe~F5IoYbpoXNT5`@Jut3Pn>6&^!dLYe&P! zTc83S8}c|P$LH7N+YyB}@FR1PerOZP|TT^toJ!2LdwDtZypki9U7RPJkI5AQR znH_D6*Bw3CwG}m4NmA~!(!{ctm!DByLvRo+`@=_%C=N#dV#54E0;ZQ^-czjfw7kVNp$MnyEj#O?+j4~f>DaX2oknEh?M{~XyE(oH-2Vc7WioP zT9v7@j9;e&fBUs~&`Dbv%jOyI=l35!_T+K%YWG%!hK36HHqX1Hv~)pft@Y=PS?4QL z6tln0vbIW47Yx1KQN5$yBebDE~ zq&lI0#91;J5P~Jxt5~;LhRai>OBXLeG_qpY3MK1XIsrk-Nd!6}fVjlOvBIOlauQ%) zMu<%7)~zWx_F}rbf9iFFfl4h^r6o4}ALV=QmpcB{A>M22mH42BO%4f>s7;E7fVb&>naaP}-U6^y<^+9gkoi z8&X^!oE0awbjUW5uMzwU(j*~E=-IpXw8e}2&@c4Z4_7aRc}57>F>-sdagpWDeifPD z(G>z!kXi)%tJKXgW~tuna1*Vr^J~A|q45)9Bot$GPRmy0MSEVuUCQTJ1UmmY?Z<~YII85u3XqQo2; zev=4=__~@Kx(EaA0Q+;xTyg;CZsr@ZoLf zQF@2+9>#Ft*YoSn@Gj~0M;Baz3F`IiQefl4igVr^?J44`(2kQaPn|!n@X&wD3b_j; zq%#z@5Qb6){WQc(DN4Uq7u00Ag697~{a8MND>ldSe~nUn9Ce!`d(8GheBe2mc-E@Tgwdqh|zz!&76K$!1l zn(+OU$xk0O{dbXJ!}JYMG2w%7Ao>YaHcLtPZ18Z2_OEotZlnB98x3}}6c`2F)$m21 zvp1!i^)>zcPYLfb$MUF+t?gn>^Oqr1!bCE0tdTLX^&FR3z{H5_VgSJ;s&)v12R>2R4(JoTzzy zBbZo?^jeR>V^cWg&(Op5RiECy#WZMrQ`69e3m4wMeR~gYSI)t($6BZPX&=o}womQX zuOBJ}J@%r1NIEDKCuHf0$H)T-pI2{WqBYvf3!L#mW~L{vR8RaBp+8*ZO`PS?gj8fO@w0I!}tzhhsK5Q|z>t2!U-zg7*Psxzp^r!x0hkPdS~3eYO_COop@KW(*l( z3- zUDaCwEBrz1sP_-CR51MK(oIBcm}!cFc$kXHJd(hwIz(7{5*sLuzyq_5&!1MCqi{Mh za=7o^pd&}7fg|v%hb)SuCKAWaQvaU@jR?))ctG!m{u+_`RhPFc?`@iW-0J=g{olol zxBl_>%o*z&+kBq+UFu`U%F`8syh)QZe86z1@SimuW8}bmkfvE?W+z0bX!x~T;o6|X z3zL)Azc_;XVZXw)fAY_WKK=SFEgc~N=9OgCmo}So5|KM$eA>*JZK*%ZCun_CjO8#$ z@FgKdTV?*jMS;~e-^eI~Ls72a4$g^t+?5_v3qrq?kRk)36g>Cw_)>(Rf|H;@a|fM} z$h#^NU;0Dy>{o9!Tz~ZC-J34<~{mk#ZTbaapFG69r;%vqq}L>6>=gq`X&!X9UI?Was7?zfnLh&F}R5)!mwZZzFlGN?2emk&=B(a83F z@!~~pUfwOT_uZen*ECOFw{G39T<_R^X>DHFWc-h>`3?Wq-~RI#&HMV#`5)hN zHE-|VAM~$Z|FPNrO#8p@_P>65{880^{q^5p`z^ac!{WdG`mgVPr`O{@zbCf&_W!zo z|8177bZ7F_{c037TXKt;_@0(oe?_`(CL@Dw05T!J4y&hlgcIAH> zPS(cuoAl%7E-t-kV@a^QxT%I~_TQKP=QUaWUwq#GzG2&bPyYKEd^E6dzzpOT)2H9g37gQ6_<-DS?V1+&kM&%hR`kGM_y>p;*U0~yFKBZEIXYlha+Hbf{uMds~$~r#UGE(>#2a9|KYIA^3j)v6TylnnynIB? z(MTh3c46qlN6Dy#vXT;aaq8{cNi$~Ly`VwX(}L zZ*Q!X7ot|00f|IIL*rCbR9h31rz*!aGSf`|ZB4~)ET(Xi^9ZJ50UvhHN99ae0 zZMt?H`qeKI6Z%=2axo2$;W1OL-g-Y<@y+1DL^_I{=;&ydSdBnxT+i6puWL*f^Ayv( z?f!Jzi3uyVKINw`|!`g0TS;dWUMkcQ8j%nBXWn`a3&2hu|q8!(9PYMfRyPZ(di?G(CFs z`_!*Q=KC_N0^`=ol`GxJ$ZxT8aIZpn*>cXDIU&c6S;BL#%HHrIZboJC!-9gI*enh| z?`2BB#|7Ax8JzDcD&7G>0sS3QeS>5h+VB?eBU&cq^~)MJks!oZJUuO(fM@_6^{pseYax8Kngme?|xY{O#;&4 z-ZCI)R<2*)3DL>n4Yl**RDwRugloY0Ic@9KB-JTHhfcqL5{o@gxs=T+=kV8H(sk>$ z|Nfb{o8nT0LtBrgB z1#$(8BvtqT(K<04qoANb4C|z#6mr#GqqAk2RR3+ksx|CqpLb=K+{FxPFZ7J4eZ|O4 zj?+@wE8Ky!sJj?l@s4YJ9%t=yXWy>~+Iqnnh!LZ7Aelgb%3p8Y;Ht!l*6KoYV8aYW zC1vGUCLE$fZOx3c@%(&SDkr4FVx@>rgsy@XkmtN~A*|pHS#o-aKo)2nDA#-mV`m`# z?q_9ne^y6FD5hC*P&Q#emkH9M-=iFPiw0TrYhs`@X3MUR-%|gtjR?{BA zhPWXj8$aEnd~u?$wMn|0E4uo(DBqF3wE|GtkDfz6~Zx`qQSM!aY#nI(-qy5|*#70*gbY?8_)*IyoKvGz{rIMJQ&vDT>6E zt5)p>#+~hZfv$#GsBluJ?$-l`+$=6Odt0a}Zo|oqnQfs@%+Eumivb-pTzh%wVq`0r z!r^nbF2`A3Nnu(=7}*3&Pmq~pn^+JgF-e&Xw2S_SCf=U;4K#iWotDX1<~y9x?*+<# z8w%m=j9FFf6I^C%i)1X*4_=x6bFo=xXy$C~bI|R3ilS{OL z)ay98+KUngaaS+lRd#StldR-8K5T+OTYB$ZeqM56Z` z0c)hjx#Tb{QW7y0ghn2#VTWvt*d2K^#Kav9otUa2#&QtwJJM|c45egvwvcEt=KAP3 zyAI%&8XJoTu>OTbnX+$qtpd{f*G5V!k|O#fb^;GWWZ>&L1cw8f3j) zM>eD^G%*owDlrX0tQAH;uC%bgK-2Ej*$ou4P#_CbQt8L&l^z!b?u%;ViQZrCuI zSeDB%hXQ*TSQtU<&M0ipL%WNdNHDY(ZjM8iDDl^(yn+46d8U>1JQ4G9w=;TS2&94}5 zrK+ZOi}*iffjH1xZ8%&;3))Bdt*P@vQ4zJ%$$x%v4Syq_s+U!K1}bOQgwK2klxd@(tD$#^+o zsg`djuSp&Tv`PKr$zp*UPusHT&r^Vt7LJaN;y}rZ9Rtswk52n@$oZGC!p;Lf!tQ-e zUKqU77Sk(D#R_m|qT*=(s2946ZvKK5lB(3=IR>5Gsi{B979qV(a|WiMb+ z0fYcQi}s6w^GrpPlAwdU$?I3+n9fu0r*5TC6kCbbu7vJh&fI6#rr$puY0KM|^J>yr zUiz+H7cO2@Qol0Mpx+|85rx-}vjSwBnY%a;;{phLYXRZPy8UPYWt(vw#eF#QA@X(P z_JdhcxgHRs67>AePc{$-P31l<*cT8B@W+9IBWo|1r>ChlqiGYx6=fpgA9rzh$NRNJ zL-yvfjKs2B_X3QQxzs_Px10aF-7WqYovku&<{f8zvb@r|f-TU=Hk=Ry} z`|MdJ;O2!CWnZh^Gv@dtb*K-`EV+kqOy@HZ5oM-d&Koi?8+T=oSF6?)U zQC7sWB_<5gu|$24(SMx@cFfWB&A-keSI9tFfVLr%ppl14KQsvQYA>ee7?pkFIN3#K ztG$}LQ^$!p2Gok8`#WDyQhQAd{a~~7C_Z6*G81l1Kzo9*;0WqmTH^GVz(-#oeW+x1 zeks)N^|Vmd=-^I+vK;A?bw7Tq6qcFa$d8?=08O@dZOHlDCr@q*>nXvz)Vc#;kQk6a zSQTA{p0CU<^jH!J)mAr#_=3v`k*B8HFHQ3CSF-52wOjF0;!C~%nf!CIM!qmhMV`Jm>%ixI{bq_O0EhqxTQUoix z)30*=BhTF*KK4I(lpcv0iV8bFcm9_aVDISbV%;uYT)588+%!LH1QZK7*<;ThDddiT zpDlOnXi^yaYWBo7)(#&EM$t^4GEa9?RaZaaq?Nhk>2JmUbA*rqD&ImUeqI$hA3Qx1 zYud2KvM6Z_=Cx6bN1{N3-MB|_tEhTimkId=k3z@Pv@c}Wulxs%<(zBVjS^S9YyOrt zf9PQZc$AT~5&mE2JSiy9g&ssV^JT`t8wVRp>SrGg4xTB##42TY$fwyODtz9(3r0%P z83=LJ#=R%CHn#z%L60*XG&}sJ1d1Pi zctM2uf}f3z;b_5Rs2kgk?Y%I{*IFF9z=+nq0V|wMg;L`A_{# z@-WKN5H3Df*jpllFiY^MtP{=GN~57N zR8mPah)D0}O4i=be*gP8-sd^q_w6|LX5}~B_kCU0IegFW`8~n*CGoj!WMaD+Us>M` zQjLt7lN1+smqcOz($A`rGwu3NKu$jEOgr;VvMm+|R6*3YU(@=%|N8Z5klgpWBnGcb z_Zm_V?0xFg(N0sIiGCC4hPb$Wyh41RpPv&e4!6i?brVZP%HQpJAq`f7k#&|WDthUE zWY_!BORqo)_44uQkgrC_*DWG@!o-Q=srmqoo#)zUzS;j|-f>YfBsJ$G{C)6XJ2)7B zv+)jxmr&Kbbdy zz+BMnC6IV)hiU{xgWET6N)WW&#t1G*CMU;=5xNU#QxuCZr!q}8=dHa-!d8-|i0#UC z-}jP;F6zh(#lHwTl?ZvofySf0B#i0<$A{#j?Zk-_qh_cwx5m@6HyZ=T+JSC$dcj!`GdJKM{?6H; z>F4l_*|lg0mOOB6S+u@==U^gNH+ybBF;a2&8oB8b?4$6LDI)KLDo3}$o%gd;wU>F$ zyVrO{rc_hKK=QkZmXXmhB5T!ey?XYXJ#Stcv>Fg1yo-yY%(+kWH3EcU-R99K22SC~ z`CEw?610Lo(U&iO{Ptxl+O*e_>%|%50ls~aG)pwY5|PJ)0SUSS^d~1ckaM9`{$5QB zn&?O*unG9MLa?RdtcF9xoHJiE2hi6n75^~e>{$s3U?(L5gMRGCSFrk^>~t)VwYflte=q zSP^59obbPYY6O10=LmQ3PgtKqwt?O`f~PhRIJ?K`xCdCz-pN{Hq;x-LsXm=C3rF>cM9J%l9L&bQduoh6avVCMN9s_$%2c=O|dSUmw#6U@n12c2jzCb9SEN_l!5L>2iay4@j$c zeb@txqHkbuWdBs#Pow+x>!%5P2rKR}nRYo}?&jyWlw&s-$ig6Lcfy}Vd3he-L!+im z^Eq?~x*6T-SZjtnDKYSK?h{6UYwGA+D9iAJ?nSg|hNkY&T3r9gNs~MXwnvQ|d59Q% zJyf_=&mpAF73IqBNmivD&P?5UkmsO^UXVY99oK#Peo5HV?2BUlv1307Z*_#oR8!6| zh`2)P8WT zz}Xr-R8b0ppD4Q9$}&W;ik-W_V>+22LLFzUwr(Azpx|CmSO^_NW9Ulscoq>D_VUIY zFBC$_-fzmvlsNhBqZD1{D=E41sUP-i+&EfP*AU2}Afw5DQPs_6uN)Z1D~DtAoOj~= zN%@S$&7@{z1kraxdv7l`z3T6mcT_Krj){SOh`{@5%JLKBCQsIl{fqGAJRAEl%Mo(v z5`z1< z7O7nhs9dQ3dg-D?gB2AOeSqE+cYpJOO=CvJE>uT`4i!s+!#EDkFrU&EHTQ+0x`-9& zxTWshQ&*CiMe~JI7{;YIUtuV5CVkLrir&B&&dSTXfKABc>L{xnMmA{?>A&96UC_S- ztr1K$2+nmTHzpW(IUvQ*XwCy}QzDfl+F7J0P43XCQ>VA!4c&{sWtu8^ScJc|G3mZ% z&mJ!K;D=`R-Xhi=w$AYGkBW+XfvQyJ&le()Z&8^OY#bY0EqjlTQtbsyLGE7N;rk19W`XgzC(-N*bV`ohr39t>~HPbx%l|>V;(?r zj|){#q8#vy!@v0vMB?g7ii_v5f89=>UW{o9B%9Y-yY|ALv_6d^;969%{l3e+BNdfL zE@XI(cM#*2IC1`v_kbk>Fn`$~z6)wLVR^+d6$RY#a%E_A;$ulUU~bMP_PoIG`QJY_ ze*SzC#ML-<^FBVLoOjCO(^oc+9bP^__feiIDT=n9u2MZ~xbrg4Gy^}K z7^8sPSANMUvD*=xImefKCtnB(I(lZQZ1V)BcyF|Uem_jPb9lHM zlhkJGz2Ru&FtXNpr<5A_w%h$U!+tQyqD+seR9w!oiCac5G>+^D!1aSCPrS$|my%yz zfs*39nd0D3NP>u#4&#pwzyE%gz$a?mY)}Wti1N`_t_0wLqO8Au{``Acq$aH`!}(}u zGi^CjHnr7`9iBd8c?M?*u!!MiK7IZ?8|oa}PG2gWwYh)y?g4ILk*exZBV*$Q5yS9A zg7_N{5wV2Ygqx@5i0niS55j-K&7+HwCtlGc_Pc<`>Cl|CtM(vC#C#64I1xxc3{zul zNN_b~RCfFxoQT-n{4xK6>NCI94{9k8IRoJF{7xP{+EF~3)g}xh3g7@Z6QLr_oyqb& z$jm$`POQ|*7amuZ>R5MDK`v^^tfo5G&EG|P3l)arhYoFek*LP+dSEtm`*k(FSn*x^ zxHNlCJZEOO_7e2ilequQ-R8~*3|gq_F*;p!&}Wqm^3JP;vG1A`n!TR*V;+Xrje#b$+uacuJxjJ1k?d%W*|S;P}osJ``C2hd4PTRHZRF}--ytoz(up7w8HNvKRiOQcOcR&9d3d;nOT;Tw5| zcehYWva&(QLyk+A4r+(L)*znQ-(*I|nmo!KE5Ad@3PGPvkhjM_>Z-VX_0zl~#J&9Z z12$xX2<|tFmiM93a*9f&)V)!vUp$JG+$L4rKY!k~EAiyx`6@ZO{ zXrm3!9DJSnOuuQ?!FmOh70=R7<7^>6d2$fUa_?)Zn*GAE*4NaPYr$X^lY9>EXa0qW zAYaVyRbp&sH)E8nER-{saaCf0L7z@rN>w#4vl^sxb*6jF(Nbs~$xqlabVf_aUuNowS;e~B7fBD;s5tQXM z3Gtv=y!8(_Za-kq^HGr zj(qbYwSP6AOu(d`*b^Xi$Um?8?61$SPff>WO?JYZsSjSS# z))JK-9=+%q5vc~!h-gYKs<0w@xho(dyyk2GQXbO6B}*QyQ_CQo5g9BT=a;zOWNYev zf@jS&i9t*-mfQ0~NlVpuhmFlNk1@ug?*!Gxj&zC5*|4Fay`?9S2JrK*yc4+Uc4p?E zr2nKt5!O%9T%byJ7NgO<%;d&)r1lyXV#*d=XrN3*WYjxZByE67fBm7g`(iA;YQ-pv zK?~Wd*H~O!d@eGwtAwD`3MF`vWk3i+Jk$No75Ah~Zo|KGB?v4it+HeL3pg1TV z@WLf-U1nY+&n8?E3NDO+sLu0`HdV^2ku%v;DrRiLw8Mo)TKQEAof@Jaz$^!X%w#H! z+&t*|!NsKzUyZ%9Ms~zHy!t*T&-PpmJm9<6^MqNbI415Dd%LQzfrqjrpno@FZ0O%N zd3;!dTYzkLE5a%+L=6??a)Jz?;NcS#XU!6m4n40w99gb;@!J(r(vZSWOx`wp(mZSa z(`ec7HjK$0*8RdX)0L^3ejd8|Ek`GuJ#!XHEht)t+iqR%Z!$OUC7nx5=kCHy?fm><2$)P4=r=jRA0sQnn@)WUN%gWX47Kf4QC^M? zMH?Yy%+XTM+U5xW45mA4OK9J()s4CeK2$SInRK)&yRe`@>{(G!6T+ZQa%NYv2 zU!mgnnSsktnmaIBRwcil@M{$vAjt=6Qq*ns89vKcM@!l`E3{9d3)Hcwib?}6i7Z*D*^vXLkSc&~`~eW*{EO_-qer)(kAsZ->{Ty{Ky;s6Tg)w! z(I($c;E0-{m&{DYeV_q%*3fbyhM);RfM9Yqk6+B3sht+sxyZ=9PTU5F3afV9)er?nxiIK97M4mi(&s^(l0kfZH6R~ zSoAfCl;HNVn`G?%)b+UHxTjb6wP|fur(r_!^RFe3S5P6Zxm8#wiGd2uYO`CvIC8zM zY7jJm2Qz+8_<^zh$>=!t`6|eDr0l(3yC|p)Itoa1X%l4@W+cs#l+1c&e{wOTmaLb86I(IOYuTv3e+#uH1+9x*=1S7 z^56;Lky}|Mb7}(*er4fAagc;a_w$M}(;$r{OS*vAkjHDr6bFYAjBHR?yGZNI^@z|d z%7%`kOKYO8ec3u*UjEzA<3plJh?JnyQ~nV`Rj{&er>3f`-guxw^m+U>c6lcbXh?CV zsHN3f?&Fcxyg!~clGM&p$L!ZO`{;J0aoL&X4_JFg9&!kJh>kk3t~`pN?n|jW2qS_Q z?=rIQNXVF*H1pj-Gsv0me;ao$zNWXIzy+XR?*GM?7TuwpdYV*F<)+sBH{AtP@zoLe zY4>>t`UXQ40^Fo(0M>~4p zgKK(si@r0~>{6{JHpmgi{bIAx=7g(4TAjH|->?NvxO#qCVlt2K~}n(UsZ4$6o4pf{5xh zT@CPU*2JVWmt_$$Omp z(E6;DtRE0}$2M_$e%G(au91=TOs&|gLrp2y0R#?hxV=eg!W>BI(xpp#BO*4%WKAP&5KS1+dxT5I{f$E|n_+kTt6wCg;6m;sdOfD> zfS2snr_b+hcFz*QYU1s`>PQ)}lV4HDwc9iXQ;1cgF=t*$=WINQsVFYPpae}6BOe8= zkZ>jUnKXrucQ4ld51?9G-hVdW=u)?MFK09q0N+5yhp>g|^Oq1^!gPcz9Q__^Caf$x z*xnK2xkXXK5Hfqj`huCw0a>%eNeVvdP-9D!a8`gy2o@M2tuMq&dU?({2gzHY&&T+W z(99+={_7IP8$tyXv_A>sV(q>}KbgcS>;z?tZUu>Mx9;3&3$A|$(4{hO<2_TY^;#o0P%)^QFlF1*x(@G5utP3eMfm#b41iv738AUr3xsuQ`A+KnO z-r$Ri*%@a`jvgdf7IQH9NDjMbcou!@&fCbQB>D0?LS&UTf_Pvx%=EqLq~v z0^oPQkT664HTBzRf=nT*twh({zk{FOAQ2I{*%^yGa^s6cNq`~2KLO+qm{h~TQ{jYlVz+Bux5I?sAaq?FF#CADl9jH z-^ntah`w+%VtBA-@mFw;yc&0KWUu>M@{vEFvzws}T_Kc+W+lKr1hR+jMBuI!YE2`#{jP_$8PhQ~4h?0u^cUL?VMab~RhH59WjN3Gt3t*ovW(KKG zTWROOQ8NWEWt2t-LenE8U0z;ZV&u9|XXGEmkY?&KNA4;@a~VKsNEjP>AtZ!|3CZ4F zBpWiXS{PCw>ju_2AxO!E->yWLFS!|1NDO=s!XnU&Rx)&eAmGyGGrtJ+i#f#gf<1#B zI$LsXEA6YDI(L2yq=vqPAm$9MjE;&DLxn|FB*=Lje*B7XU?Mu8Ftmy<0p(A+v=~a+ zO2~x7>T{r;Vt3~8KhX!`ow}Y|5u84tWk-(73i<;D4GD}+5URxB7=WPHXDn!>T6QK*7@4GC=`KVi(mmggZ8GTrs!9n1!B|mbZr6s zJcg^rEegBcu|tPH|N2YXxbNpqBy|3Jy(^D48?nu+zb zEqt}afz3zuy+q#jFh+iNP5qzUkjDN*GrtuT?oHzaq1|gSUoCipkl~+`}CXMz}RLg==B@_>MW3WcC$;a`ZbYf|Yq(GZ z2Y&>KAJWkL;>cm+rR3+!cXK&8bi7osx6e_ZxkruUx`$qCqmo% zsE+ouzYE{IjMQ$hW{HfM<$e~V2vy#6|ogg`H{;rvM)6A#(Wqg0v zRP^=q(pC0FPi^~mvZ)9OIx^a0&of2qAizuD*$PbK^-BA{PqO7Kz`E20&)L+}pFKKK zUVa$>gj_|YgoMOE^X5a%37vWkynldP+4sbU%31&^u`7Y&ys>s`PY1BX@*Cd3w zx(g&98Si>^ptlfK*kxmrO0zhz&e&+Z@5&A8n-Uu$KX;ETosL z&RZm+#FTCAK$TudSt(;@NB?sJrEwAxH;WIn{89L_VWxz{PCY$a?(WCWUX(0be`Zf| zk^cF22`ROI{u=Ep|I5$+7;MHJ|M)q1{9kXCK+LoCXYWRj1(JKE9)91nT*Hyy4UBF+ z_UT4s<(K9*JS&f{O-cN@cWNh~=G4^6)udg+l{xEOC;s!@dmZ09d$oR#`V;(i0LY1| zOLVkVbAL^TTW1-Q8A5@m>(uLiOHQ?#kETCB_5I6>8C!wUNv}SAf_a5v&gbuckVIW1 zpxyvAYJp@2iI?5(`u_Nqmr>Vh{J#b(Ie9=%rr}eO)4I83rARvs7_BBR1!uD~i zoVxXyZBL<6fqcsS`qNB%(BDQhzT|~{!y*%(QKoIg#v?i9kX;G0OG<%5M0FFxS{Go-XBT{f>E_|s2bXi+#)es!*th} zmet=o_f2(mBu2svdKs0eGx!_A}m&Vyze;iO%If`Y`PYGnbYCw^}!B+cl{maryahaLw#Laxq63UtG07hc~ z9*YyFxmeS3SF9(dSr1!yERzXMVdQqoF3<$mTOFVJVwmzYyU&-{rQ)dOh8yZaDUGAp z8q73CqpyIF7a(?q!BA#kq#seGcAV83st8L7Y;wVYD6@W=ozhKWp!Uz>Iq+{%(=dXT zM%p}kb?bHx1k%3lvC_R-0L=Ou(uQaZ zr9v_|e^PclD>fCNn`*($@{>}hmhkzK7?0)v2f#9FKqe7kdu z%UtX(qn$+!OrBs(+!)!-5ho{IMp31o5Q;FYxzKBsN8hRVBact*^b`#$MIZu4>z=Oj z^M2Rgl&Q%qm?VG;XoWjPv7%jNXKdfE+e8OLBqAiTjF$&Z%LHu{y_s^x*K_pNA{K{~ zOe`!*p;Wq_5UG&~35zR~RaITDUAqP*5QESi^-4qVglq)yYAlk@R%zIwyA4PT+@OLXm*s1|k;Qe#9^jto*cl8sEoO|sipwKWJH5`2 zBKH~prR3HMqnL;CO^N8g@kR6ZAhNtLJXr-uOQPwTO*1%m6+pOB-lHEXthgyr9KBNf z25o@{qn#*;g>Y(R^rHjFc^P9f?tr6XS^w-pa=UCI_AB&|Jr`ATc}h9L&rs!d z31H1P08Z3=`s9ImfvlO+RKuh>wqH5vxODA)cR^e>H# zZ)`RZ@jgSvn~t`XRx@aCebN3UNW{c3N4KS+dt^~lME5sj7abTJ+8D?I%KN?^PAOPG%Ahd)#%?Zp-#e%K@k;)?CgI zNf#;NW;MLihNAc{#&_FGG|T_96&*M`6ke*sP7pqX5$N_~(iC+s`mIB7VOZR=H_dBp z?{6B{CkKR0=yvbu<-`CZefw#EcXDv9l+Szbv{=7Bn5G1u$~e4@Iat+ik96XCvjqfiM<|;M69yix zFlMQ{XY#RiJTOu~dtoic^e^8zB> zF_$9PhO%;URr^w68Ek(!?M7@Y%5bLADPpj7w_yu|Il1>p<0V~>9!+a=yqCnl1^+zQ zdBksz&P?~Lto)=_P+QED2Euc57$8{>OGBx%ZNvJzS^=)*@rmvyPo5=PgApM^J|!ZC zm?HA=RAy*ni6Lq(!(sq=To^L%;7BscFiG!4X!B8}O4V2d|lQIK_zABqQbpya221+w&N!S6W#a zMw5OC)Zc19=qB`PW|j*dzZk%nLA_6$Jk z-XM1KIY9$~Y$U3?GPJCnNKk}cMTz|aPezC`QGL(F%xIJ68db(zxspSjaT)n_ebsYa zR$7Ko*!8K2FYIcMi`a`3t1@|=tSBH-qSL`I zT9f41o=6#h6UZeW7sck>i~3ruA5BhAjq{63OWndE6Z1>(+6RTLAuY zIea~d5ZC$H>tK>trIV*l8Ag;cS{bHXAf;&2wpekWbl3VlPgE}-4DP@STxv0|sah;vvI!59{ z?8;#~TbB64lS+au8QqABe0Hh+n>^_vic8~U<9;m}K5?R!FslRx+6gw>jNv#Fq-hax zsCAbnDbt!e_it?S5M~cRBAN&Eh%Ur?`)aY<5;#@hkB&xc|S>GKqi7?VkSITTlKgx4XaaUvK@H zGTfXc)OLWcJuSTv=c|ABR15Pq=E@WVe?y>L&JD3ek+l(V&KkMP2q$t-!quOpIMjk+ zF_qaMl*%v%Ts`O2j0t^uzkICJ`V})i*`&L6YF22@HTB(9e{lc)`$a`FGjta%y5FX9 z9>E!SrHiF#XBx@$ddjp71&=sC0qoe4UArluqWOz4O2sPu^L%$g`*e%D7$`0t1|< z_Z=6EHxX1Ca|Z~uJRBVzDV@iVmy;hA*7hj~iXyCN?)c_5sAO<=#4fPhl%2{YWe z&@mx}3kdSHQK86|#n_aOvy16vd<x!K`_0qLP_4sJ=d6hjW%nHYnI4kIr4}x5b2AoVFo$}PIPGq!%j>?~(#xHBXI^$!$#juV zSrg%REv{55WLb!&bQx)}aEa?FARAn_4#Aj&leY94yW9vE6yuZiP|ApuqMivHBG~L2 zdu>-*YU+f0n@2$8SM#25w?vO<;YhEE#xE~`tsdxC>|c_%6Rl-i>6ESgJsr1oRZO>4 zm^MuaQX-S$NRT|d#g@VcqG&%Dr>E#PWv}hs8l#q7@bd7R^~2-_jqEjXQHtyPF)LS% z5!r43NsIA{=toxxpGf%9$1~0)fKeZWx2X`Uf%j?tJjHmZGyW03b^I$BQ%*#n!y?46 zQ|+FU!g~1m`H2u6L!7__(rILH5o?k_n?#mJzNyNh zD*lRV4k4Ad+OkE1j7J{c!vZBGRToHv_4F@>5x0pLSR_wev1_2Ob?w+33J@(RaEO)? zZTX~JV1W=n2a6Re`MUN|M)-8hn;GmKkqgrL zJ%U0txtTtuObfHB03I+PE%O(rey#4}=_ZKJ}vF0JYOPJZ33n`z+UCaJ!D`(c>qv=3x+Xa z6>TY9OXdbED*~81hlPc888GE6*S~=VLmu+UP47*+4;mDSNAWT;wXg`MM(_|On0Dwg zkq4j#wZ`21)UZcvA9GHGNbBh|r;B9pnVI&_yn^pn?_Q5oC$B55stRZ0X@SoGR2+~h z7a_mWAo~DH+m!$kKJ-hA5QpM!$+YDJx+21P5Ji)^Hg4DkbUHoJk$V3Xgbl=2LdpKX zq%p%)+|;>6%)1N#-eQhYKD?e|wy97f<_h!#_jtU@ZKTFfrRgXs3gm-M#Bpp`ljep! z%|Q&;UeF9_TrIU%-PX$OTpS{dv~l?fb3xdIn^{YOdfcO96&4_sNU1qsd1YgP3Vi#CES+4Q(qTQF4ZSFON=^(nwTig z7^S>o6XSqS(=IN{=|P|tPEf|qM7EN!K^Ar<{tG)N)TGKjyS^<^7Sn32gb=wb@%m+5aIr= zLI)u-;#!?fs#l6@CU+20%r2q^LWVyNN2$w61Q87u?U0x{v7w4=D&_F#GD?MFK?Ric zV1!>ECpE8ew?0>kuch2u!LR$bbnJNa*ME8vCDNq|2S5#15&z&Lu|A+liD5OY6f67n{mHwqEoHV1ua>oVgR`#GSulVXpCCAr zm6pEeB|l0xqQJg>{4A&%0(2saa9!tZ8#f3s6rjF!E*G;ORxc+;2Eo-%wA1D%eWl16U4Uq!taucA5(UnUibyG1DbZPQUIWYUx5JuBd1K!yFT^#Vi$b# z1?UOIR+cyY54IM)b`A|#r?RhG*5rhMTgNY(xYRw8DR(k$SRUDmy~$qvpRl(>M(dmk zMkVP>v~!pP8k2*AIc+J43RC!UW?CvX)nzyIY?gy-l}XebLGWIVmqg+E@!2^J@_2Y* z^M(C{VHr#wjINRfH2P{bu20G9*H%kyrD%+NkejQJ@^Sj0(BAEs4Qt!@ zs3(VoVnIGut{#UbJ8anP*yi-A4vkBot(JNHq206QNbT}!N5lGXqc}~bH;$Wr!Z2;6 zz({Ck&>&SW6Wwe)+!bJExq`=lp=K%TEy{F^=%Y`=kE;{^B8GkLI9NDg1NbsfmNB!kyzu zskq223qEOTx}mgY_GF$KrHA`5P6F1!$<|?Qing70x=!2-R&N>SJAGG80J8E{YF<}B zu~K~d?eI;qFaB_zGR;{kKBaxj5{kM~6t;Qez3%<>J=hU-Vz3x^AIuY6L?J@ncVgK< z8}$zTdMgX}4TQZV?;!Y%@8!8QmYq)A{>cR}55f!xK<>duoMt7feJ}9gdk;b0?dos% zpOEB4>A<~8-F{{~^S?}++wZ#3G^-{3J{LFTdxGu)_?I?bx9`#LEjBhbm|-6G5;_ux zQxo+vEw1Jp%;C@pFp~_gB3R-3)K0Y(;uX9%MYEwmt1gJgkDl@dC5S6ijkw}On6yiNb>z@}9+x0jl zF+;l^zKW^~%1ReS7#v*Yx^(7a*4fR+CsdfYJ#SA;F@W_{26}*~<{bzgOSBX3-m;;vE;e%x3Bu$1lG6>8{x;hyFyrrtIsc z={hzbr+=0FpS zv3#+dl1?@(qQ#TiBpFlKirHRefJAns;AG$-SfTMv#9#_j_k4P%PtU+YVu(DDR*|Xw zYAR!R^`d~lsG5menr2mUU$G$)oD-=SU-3)`DN?yuE)ZllAw6*rASLk5YG8+@B;M{) z0*RXS?Sq4OF}V_@!{y}K>J&a|j{~vIM3cisBxtH>%}M@q<}_qFc)W;Rlts860$I!u z6jKLWNr)GanBEUK!KH~>^9Dr1MTXUXveoyql|>0R2$@CeBYjljuyDL8?d9gZDJemL zbu4reIDht8553i{eR6n8{eV}KWZjkiurr{qU?7wY-HzY)+>|yH)&@V{denQ3I51#B z5^%a%>DlCCZy$?!DG&W-nb0*pszP02hBVq;3JgN!8~d!gBnj(Uq;WVf5DJ}~A-{h4 zXEXkO`RbzH5B222HjXk|eQS?(vy&&`8GJNz2phl_h8m7-UXHh-BN9NNzh?#Umg)5-(wa+dMKJlqeqkqxolkzUaR%Dbil0fGeZ0DJyLk~~TOu%CwL&L>qB%fo zMs2U|-D_?({z(Ce;zo(#8(u6x0@O^~m|q*G_--czgBE|QZQEe=kVGj2+_J#bt*eOj zTJg}owvCkdaNqR84`$NNcNC)q?Vd`4(Y`gr9RY9~LpVfhb1l}b3&Q)9+B`b_X>amc zq6SigFscJx!yjU-M*^>523@2mN`a?6c>MU|xw|mc|Na@o{dYplw6h-sR@XH=oGgW~ zX(?d8=x>!08(Nr-9~=5p=Bi)z-uQ{pNgPOj@xlZeQ8sc$aNMW!rDpVSfmSPc`~jB& zb4|Mko>o*a%!rJpRv27bv5zQxG?xe&KwAVR*QziSaYQ--wwbtj}3z*iDf=i zK+>K+H^jWTlje!sjf}x{0<7=GmkwRY4%HNE(JEsJD1R0N=9x zUU*b|{TJT-?=+dh+?~w)SVD`VOTbSY4CIvrc{CCd37=mdr8qVIaLVbc)&EbJGCD8I zBqSCbXkF@?^8}S&cro$N&|IR2I>c#aEKvyhvySa70Uh)#lA7Jv}`EM{15y2|i#`c4mh)BfVl! zd!ziTaiBvlLB+ufszHM|5~W5gBey*MNlBy7n-WkCL04_Uq-#6B@+DC4aegWwyP6=x zxnTOFdg*$bAR3Cgm#Bz?cGAbEL9RU^#2gp)pF|j3S#8s?^f+ncGX4wP6bF)UADo!6 zlp>pggK&;MnYV;$U+!%#+sQmfS;81u-H4Xl8=ZYlb$Y<*sl{7@h_}kIF$R~{9!J_B z7=t3f*d2wRs(_g=14E(82yX`&KA*5h5Q7AL5w3|~*P!Fe%N`DFFR|0>XF00Ck(a~DgL|Tpxv3~kqOd;1vh6#npfAg5?vZe9O~02W+2P81Wj}s zMr_Jc|1E#x@P+74$V7;bChif82m8;j9PinX@I%!aWcI((XF#IfJYBan@(T=^`g{E? z-H{s1OrA?GI1f1HpQ#%2k0Ays7ty@zIzx+HA9h}qb@nM)EFzr#)XbC;V zV)1*?56JJ~Qm3q*)LCMN%9HFLuJh$gBn#i@B@@a;+^l35te#NG5ET{55|62%i8U(o zwOs-o?YBpZ{}a?G(`(24V}%!vdGL3ns|lAQcD%6Hg^#NVdW}VzC?YjMQee&|TBZU$ z4}sAv@G$NWC5`G|BNMVo;t9V;a7P6tI|V_BRM}J%6ChjU1{}M!V%+!XLxzau6;Xxn zn)j>UD~N*y$VK?I%Bld00|e@OiZk9XqiED(hj+YBpLlS3VLvA-L?wM)rxvg5Lc!3r z`qWg57b4HV{<>}|YD2|CQ$^*-7X3>M7*+lW6%hY?i&)imuj9U-=Et52*U8J5YwdHl zAg2K$dmd)`UDvnOI zm%I3Jr}}?VbwYYbbm;N3eBCn&BuAEcF~GWldq4n9^R5TV<2FA zW5lP&_tUhNDh2|YnUQsg@&&}hWBpG}hD!l{*hsBFR8L##t>%{411&*zz+FhE^?Ii`Oqqm6l=^dM7%3Jt+6Q;NrwWeQXd1u$fdGRs6ZeMu zq$hmx=xt)BA?}X^yl0Od{s>9g<4Jk`-cTYXTS}lbcMisX2x22785j+qk3R0c2SeT_A2@h$19^KWKxRZeg|H1&v_nxACPxkoZucdF&nmoeP?^i#0Ni z#4sXHhOXXKURq-3$@E6ozn|x~re&Xlu=U4rS=$J^W~BA$)DCwNLcmX?`&Y)ibT=25 z^PJ^!0V6S52*Iy&=x5Efn250_9eqqYi}3bmC_)Lg5xP+WZ)8}&wh|B+QB{48*3uSq z8WP#H7rV{hnXf$VIMt%;9vnSUjT2mV?pk^Bx^qIhmN3xn-OOPUPQCxBj;d2McOC9q zbNlk2wZw9Ies(oNZ##e|Jku@ehE08_$c7Pd5flk9RY7tPPJM=lUm-pnz(a~|kTebo z+fR(?Ic_hP{&8e*RXl>pxYRKzA5%Wo{_i!vSHD&7W@s-`=?~&?s%(iLrKVSTs7L{`S?{1(L}<_HAj` z`o_VQPV=+&504wz<=zjRgT9$~#qO>CiWluY|35Ic{txbjMxGT1E6epaOdO{2@qw9W zmHF{=_M{#t!-Bwoz&XwK=g!;tJPlF#(p^O@EoYyWZm;+e`Y#TQs7S3(Ki}nJ)Q-A> zZT8XMFXk;+p7m69^0K05n&E}1>vL+mZ1}Xe{Ct;;JI9ZWwwP(7Uv4MY`tdKL>hDOa z{T2Tv^w|j=o2|E$tBxjxM(g~wK|kTx!7IBA91Na>ymCVoL8fBlAQRQ?!_70}dsJvd zUQCo!Ul7qt-|npdd0mo~)PYdHRFXWIGq3}@vY>z;S7$iAtwq`E3U zq~l~M<+8{CS?Q10cR%rv;-91zcX<5XHKgXt%!MyLMV_A{_wHCqp=5xLLhAb2TGQPx z(Rg^Q^;-9i$mroMKWh8d5xtMDiks!-bi?Ask##a|IksnHLruejmPKvca@Tihc8xQk3udi)AqUa~>Su?zD z!_f|n86CSsk6x?3)$@6K{T%)KPzIce!&%O6j|8k;01+xPYeHXfn1?QMFD(c~|QzP=%6MntTC9h%)ZeYkPBx!dEh^TK3n>a-8M zyAj+!a&?GOp;d<>*NyROH}k#Qw{F)AupDNn_Fi84GH?6AACulAKu5wnUlbJs4s5~^sdY2WXOic68_e4%v1TWU+|VoNwhu38{DTVvOk z<`b1wcejWa&V2hOxT(hm+1)nAzkS-F5omSycfol;tIP9;jcObw zv%sRjSJP&#$D4yADqhIR_DQqVxvD9bqG@nRQMsLie7L7;yGPT{%{s4TU2br2_jH%@ zx(-X$+f7#L>wB|T@FSB4nVgfUPyd?ie`Q(v;Leuo#_n*`l-aaW{o#?ox(ywtH+4I+ zO7lG*9DH7F`Ej`SFH3DwnZB1xTp2fotzQelp$}t&-9j)sZUP$%4n&Z}6HYEJH)^%s+!28*{Yb;GeFnx<$zKSzW?M$^uMcp~Gs#Nk0j6P4de>)OUcwf`ufuq`qpf#%>L|xqVK=S7;&3e(}jC@@7tBLvY zn~VN1{_F;QJ22;PV&pnQtW+Y z?at2PcFQ!g>NjovW_<0`i-3U+b3zTy?eFp>Kd#c|CqLN9X@u3TF)7h^70xHvN0gnm zP`w}RHK$DLvg-hgg4Fe&Jd(E6FZ`5#@bedo`09&mh5tbJy6lMB#+8Pe5oJ647UyEAhbx~tuT@f*nHRg- zr%B6WgGP9raZG-+O<&2WwrcH{nmnwvvrgVtHDgO@#Mhr*Yp0zspI?JUD_nPQxcV){ zcx)b1n4WjH8f|FAA=_}qq_fMLq z)-Fgs>s|Dyac%7j>9U1#hh39&hj%usy~66JUXFHu(>XM>OH2pfH6LR)=-oA_ZKs{v zzvC)}6`PLXMl_ctD_Bgm(f8kTLN{#b`MT%M?-W&iw?*YS-FPJXO7oMZVf!Vvv00TPGE;Zmrq-ygSYLMF|cIyB%2B=X;*f z@6vs(<%Vur)>e5)2ic+RMvwmW*{HUoH3NE1AFHQl9{AVx4tckR#^~ui`1`}?;XzuM5{eZlGeT|KPUZW^L0>!&68J|pU|^Ne_T=V7*~ z*;1ZMH)cF{ANzDq>4HhxF8;PkR(2-NN|7_aW!FY5&DVTB;bh0!qxyQ^-3oJWo%ZXO zw$I>;iMx4r%rQ&J`*C0H#_wtvUu@WJ;&lCoS6?M=+qI|VpxG=9e7ye3Gr7FVdMRa% zi`5~AQlAD@+U(iAp>S$WRkxPcoE>3tKckf&|7}St^Zd`&PGgnxKV0|T^*{EYdiU0U znExYC+UwH#4}*V@2qfHWhWZ@qQoqf1f9G2>TN0Mpwu;@<){Y1(9Jq4crHq!Z%v`?b zTKh#Vh7)hNNNsiUynOvr%=6-JI~F=NPMEIW6!qgpH~nOeFZ9pd6tz5Zgz}N|Z%Y>c zupN^5J^adkT+Q1_kAL7@vs*8F5v7l2rsOa?U}LWKg1HOwbAf7CB4KIcF6m=bVG& zoO7CUwf(*CH-F8y*36oB)*9C8Zm6!R=RWtj_ndw9-sirP6c;*6aD@Pa!JNfCek6^- zoKV7Gjzs=>0$%y?XDcoI=MRgAIN3kp$Kg+%f8cKtO94eo8MCLBHk#(T7(G)n6J0tB zZF5~+Qwx1F%f(~myznME^d^3DT}?{^Gt=v`1}3@~1znx%Ol;SMtxT^o-DP6AewUGx zg^iPy<+`NU^@lRD+t0t+V=&h-xJM6UUxdyL*r@uAA66}IKG^V${O89vDc5^-LF2;a zPhux_lom>($KNy7g8p;M7dNKIXmB>JSBVYrhaL- zSJigKZrQ@@PQTk?09WI#YL~9zU`gQ(80N1Zop)56oSb6SKW1iv?K^(Iis7b6F)#kl zUoP?IZ=C-9m&@@#VV?f|p}k*y^!M*ijyxp({X6FLUs?b8UD3t+`0qbHAAN%+_SX;b zb)6%>f6u`D-*<`5LbcytiwSD6AK_@|BZ&=Jt|?R_2sfwSux&33cDtQVweomBFe*Cw zgFRtEQ4z19$?wnTBoCf$nwEbR$!K;_n)lKK;c$y;X;93t?xpc3Ms_iu-j09${Z@$* zTdwFo6}?SX3Kfm&N#C-V>9yZl=l{>7y!bKTA#wZ3gS^^Ft^I0|rt|-8R)#f*vM#%R zd?)|=%P@oi$v5iqO#0djE%f|om82UR8_lh)OpS}>hiOGt zv$X>QYF+6XP5!(V!j_gf)Cy@Sua2KK+*}yoV483~+|?*7DoWyaJIBF9_WKeN(WvkSOKR8<%$k*VknC|=EO@GPbFgh; zptvL7Oe2iTMtpx~y>6N*;&OO+IH%KI0p7<)S6kcXmUh|hLh;N%asJ%goVgD7@2?IQ zgs%?ev6nx8{yaWru+%>Ol;Xnr-fEK(j0VjsHxG|RK`o`bpPye!in+Be`_cbw4>H=S zO`Sp;=H0-+z>|3mK9pX<0rX)LikVv9b(n(IT7<}TUo>=QYU?ru`Ldf0o@p8?c+Owp zMySw}rK@XZ#z0O^&T8B(Nu!WfVs>q|GgT&9@Wa^nIE9Le3eg?O`!K^TCAOFp&sI;31(t}~k z#*1HD&HVA*J!F^g%o$(o`gEJnZ66#FwQTj$p!HmLBn&0t#qtmHXV1JNA|eKzc1>U< zQC4hh4vxYC>qwBgW&7eqbxVuXkt0X0u$zX$16bTWIQDD8@0<47Qp*gHKv z-O`35$7aY;;R2<&DDy(0#UzXUhB4ZTj=LKj1d$wn4%ciQgS;!m~q3_ zn0I+*Luo4crjXT?Y2;HRgP3$L5)s9I`g9!v+hcr=?dsDoK4>rXA8qJK^k;)U=iH)U8Jt<-_fniiYa9#;Wc*=F?C&WZE?qP5EV|^{8qt)WEFcFJ8S$>r)eR{+8e! zHa7XmrU-?{kNu)ov2=FX8@m?XuhpcR*tVcdYm9oZ-l%0<1HZ;^RdS`>D`Ta zc&4*UfnRY<9`$+8;em!N1VR9WEiN1N zEo>Uc{IuR1JKhwbQN*>YyEs@notB-SFCnuEn_Ks?D+GI1?Me@pBO){R4!4_}Tj!Z? z;Y@mSaF;T41ebq&XXXxPH&g#`jY}S%qgzLOjn9d@&T(kA{BS>AT3Xtd&)G>VgpF<> zOC7daFo#8)s;VkHluu^m`)q3Dxkg>$mjXGsxRN30v<^gY{JY4;@-FgU*_SDJe=zBC zb!Sd)f7yAadwh$o&7a@n?CKM?_hASll5U&lQXZ?Sl@Hla!vB$pswPzA7|Dtx1+xopUm!q z#T^S!m2~UTV=*45Ai7$jL7q|)xZu<^=Otf5c+Rl3l4ga}PBLwOGd59sx8`!s=3ulf z*DcnO0Gh1DQXz&9rK{VEE{jdcb^X}}3zKfgTI`(G&U0+^B>z|>Z`L!au#zaeQZV*v zFxX0PF})yx;1*%sXqe;7y-5!(vv{5HsvX5Kuog^6BcS zr0k|K)3>Z-b|JLDlhHHSE3su}KTAggnalVbKNG>btefkD5I?Mkf&^?=C*&Z7M>PJ>*S|&H&~0}p=caXAzI|;& zKrZp0=pU2{(tBgVS=nr{MqQL+p)1ARQ!Cw=eU7gh*Np587q?ZElIFkWJ_>tZklJue zWVT-4ne|k4@`+I|qs475dmD*9b2$~yswuA#T`OB-mok0z$8Pik(klbpS`7#KrM&Ag zy=B9ZqY+z1wi0|{<^G>^?bCy*w#KK#{OZl(MIug4`8<8glrk!+^9nB$!%yxf*S@tf zBUvHxQez-7+BG5@4RF^m{E8$)IsDo>@luy*PH#HgXs0|Vo^{IaXwjCf%fll7=BS~x z#K~7V59(cSv9Bq=E$L-XN%8!!)I~mN#&f~`QwOkSwr(9&2 zC@oFqeABPUxYLhD0gJP?w%%E;A}6|h`Od&u2V#2F1TVe=#Rm@_P)mMtsq`SxE<0Em zufzL3_44o6(bm3Yv&j|05^C%t~?fABf#Hx)=cnew87EGHvh*J;uDYSHp;L1PFk`N9kF@>9oRp}j2h>9iFJEFQC@J-J0|V#> zwnv7FM;su4t+z?=QBhM1bJ;Akw?qqBja8pdRmm5Jq}1hogI_jDma25Ql5}NbqqD|` zvSEKLue)1uRoZBC(1(J_-s}>CdcFVhziWN?`I2Q;=fY-$m<4Ubss_2A86U~5!-wan zgNEqELU!MtRXX3_tinSa+E#D!k$Q3V(Qxbpn{l{n*pT(tM)#I%Z=X%(JpvPtwpQjwn>=_Gcgd^U;YWz>O&=rad&yBfr$s z`A2$_Is>-c!5S9u9l!l0$>37;tXp?$A4_LNrdaNOvS*E^6G14D=ivO13!xz9cK8CjoRMp?}T> zaD$dEcKvSo!H$vZ;s{_kmKRG;aMA-sR^yYCdb~D^E2=FmK_TLPc4h$#8uCryJZ%kF zVNp?8z>8L+m1ldpyAvQNcs*12cP)8y8E$dR4u4nSd_KORJv{`AAo!1h>DPk1y~L`5 zhg^32m(nS#dlnie^Ym`EIgy2}F6S6#YXsYp_W zTPoYtLMn20QooHnh3W;PX|9?mj~T_HP32%tvdXFkL5h;O9P^=dmMR8Sk>+rV=Sd@z zYt>e~rce#Cm<_6ym6b7_;fG)^1DmF!*v70Of=>fVw6^|2i;h^4OL8fSQeA0kKGD(9 z2yK>?X;*pTV*&#&1Avmr)@$m7f;3m_J3&XHj1YXxes~Ki*0w&ga)h;~yEL3TpuUk! zSLYE6y!!y(4&T_3Bq#C{RCJ`OC_rG82asqwSVA>0@X4_^$3Qvb$xCdaL0cRi>+I}o zk-=y&AzHe(Qiom#t|89b`!81g=KJsnWL}>*Tc2%7*3lToHNLo*zC2oG1ViX8cplBW zGj&TYRas6-O3K{aymhR`r%lzTsHFt^;WFbx2pug4`@4`G^L9N);e$8$T_59tU5JL@ zZ3H;3x5z4aqA@J_3ag?1bZaa=21=j$687Je5;soz4F3rG-^>mJ!lF`)5-L`XEg}zO z#Pw(2T^{&HqBGBj@k-H;AIEkZW&?%d(*`@=(d1jPG2N*6D{8;KO?k=4H_D8HhOwtP zhwePJ?`Gp5b)&VsU15&-awVZfD&x zC0Lv{ayl|dV?qSqs39V`_;&Ild}DPt*0GFUl{rr^aQ3mIgcBEOJPo^#<$>}}&6(Ri zYqqNouPp5!ryH;k>l($c_x0Rk4KbHCQ`jt7l-88MUmfy^RV_5{Ew#^o_4+ld*&w&T zqeuDx^@Evog^Tiz6I^VDYDF&c;qlc>1r0|z9=o+>_92I8ST(`?0kYrSFLgl#TI4DV z2?;^d4K++0S67~i3h)6ndy54H_r@DS6iyP7$%e3*U~%;H^zYxj`}lnG@CLxlJa|@m zWl!4^q~5!`qtfi+l`Bcj&CM*@ib_g}O4(1%pFgh|$qJbNdsUUu-qvz&nPV{&Y2gzk zfUY5&Fs1w^2gCmWSX!gkd~l{o%uGX8&Cu3BdiLwiSk<%Ka3|r9nKgEqG1;6QYpv}K z3X6Sa!xm{t>R*+{1+V%im-;n26F(U==9P;NR!5N7&e2Ak$~AI^A~ZM6nW|^3u+3CG zUTcPPF(rI^$(x`+d3N;EE9%w!Pmu)yVc~R7(hVc7b@+wglBCF+*H8gxzZw zu9VH-sh!Lf*+*q$Yx~44xQM$fjxUCq{XHC~%d@vOG9!XuXaCiegpSn(!_}{^Hx0In zZ<6IvkD8<>MUZuL1aevJnM+*5x39)J7;?<}I=tSTm2+lKof{8Gi2fiQ)ZP?>#-med1#mZ1ES)k@Kd&MnxG{uQ9X*3WBle>BQDp z5t=)99;+2uehdjwaqVgh=TQMZp<|@Nt-;=NZE;A0QX;(l(}UMz6BBW>U5lcO%2_(^ zl=FThh3i??=RY3J_ZP~XI&})l?7&yAUbO>Bvc0vXqc{X)!upq! zPaAxZ_a7~riJ`V)Z@OSu2?DAd9J zFq(i7by~vWDunO@^hHEPeRHim^_>6B9pTU77Ru`aho>XHgfN@xvugrece$OTy<+*8`c%u0?+Ww%uYh?@B8qcw`1Ur2Qu4| znU^D9cV4evh1KRUHUY9k^8e24XQ*EOcLFj0AJ78+yWEg*u=_Gv$ZJBJ;`a?; zB+kn~75IGdh=M{_e=?GOe*O$oeKFVk{Rig%DV^fKkL~{EDMn*iHT43NEs?FQZB6a_;}_vu zmzw-&4s-2y)(ilVE32!kXJu#q#ApDauHAcfU8akYlCrL&Lk<)Z$GO}%I}kPGfLEtg zy8!CQKmYu>THckaLaCsjkg8s~!zlYFMxwl)mpo0iQ0p8M)9hloPj+9UhKV3nJu#bZaa&7J(k7GBYz9D0qIWZw5t<@JE0-zkT~Q z_5G5DtiFE2iL+N?sAS^qKuSQ==aVO&Ooz($n|WdKL`6kC+e2#m`cwu72ZKzVe|$St zSXgLqu(v&-EiNvO3g*zTFmf3`%+gxz+^S}0iV`a2fG`i5E@R#a3k|y&9hIYBV~%Sb zORr3lbMNx=4NaNna_Tr_Gm+Ag#w+K(Q1dCjLW5Jz(J6%Yl8Mk^Fm*`80?c3Imr1^v zO`T0^+xQgA?A(Qd&fy;%Wt4TG$RLIuNO@u4zgWr1Im}}`$@%EHxQavRsboO7@QvNT z;c!rMiCd(|rz(5xRS{tJWOO&SpVYXqk?e~%ibty0+yO?pA(#!1efw6UbBa+T&fo&~ zGne-lH{`P8KIE9Mdl3v2@uweWbuwl>g2|%i<>l?Fbn0(Ps=s*^jV0?gs0c9&kt-F1 ze0P|bS{?df89++&$3oUZlE`a9-n$Wp6Cq|$y;&{|KUmF#^-y}SGYeXVB*=4Z4zsiQ zLryYK2#$@7#e98xIvG|Gr^STF_MShTifr~%F%C}7B+1B!S6KADfBg87qginxNc1+s z@I*B7zHV-A*hG-z5P533`T9Pr10a199=;_&7sxg2Sc3uphd*)dYJy&bqdb1Ck!umg zWw0^Vqg-sADtg-o9+-BTHqgA(YDGC$uU?e}lt`zNSMNY?6)F`ih`t=jKTs=JSe-hC zd7;X*>W~0ev)h=X!X+tYM!|P9hH^whvQMy@?W9&M$UrhrnS<>4aeP(_ z-Gkir;{k^z;%&FruVC(PppqgAj|;<;Sxq%Rz~?;qaugB4o}Ql6GI1WRgyi8P(#nwfK`mJKWzgV7 z%IAaECngvadFFyF%Jn)b7SNu8@z3|=E40OljSmlh0!9x>nP0wqSy@~24G0J*gC{E5 zVOu_#vOw>s8Y@i1aqnJ&aZi>qs1(7w8Xz?sJ$iI(ZY~AH*BPjRdbVT`b`4jBeb}C? zAdz0W5gaELavO%fy|a@9^B#Ox^Pzv&zFMZ%TO`i{Jg;kOlYudG0ivS79d0@wQeL`r z39Ww(hvm0gT3S+lBy+#L03cFbA2|C2*32gW)l+p0<+4B^ve+!Bf^t#czX^&1i{+Fg zom$aa*{Jj3{wBe>bDi};%vRegx~Qfb85x;ri}xa?RlJUy=}M1y$j=WdTeM}D7x2(9 zQ_@gcvO+ls65V5<+`9lYwdSb6f-2iv5rG#ZocEU9poH{^-8_W}KM`ch>##eYf92k@ zPoRqVfD#Nq4e52j1bqAFd@!$L5lD6&S-K(uf`U(XY*vOGVN5$e+!qGathK zkZyPM-{Q16c*V`bEt~Pl3p+jDo6GXaOyaGZMrVHZ1P&kW7?*=heDZ+Y*6zhrzwJ>A zO!a$UYZ0?zpdN5Ythm^n$)8@b@;)Ucg+;sa3`lDaVYhVv&c))$9hP1?9q!xEDQ4UU z0a^;GPd{JZ7~o;iYJ%EjB9_Jt#5ea#3^S?ugVIo_uY<~*1gN#>#c~t~8EqW_K)gc% zWBB9SyDL0)Io9*NvH62`G%}mkzZOylY-t2*(cK{&ZP=MY#m>&Y58Cg_=BC2o!G1$z z)$5s(AqzIR<_A)CdC+xpo{c<&$>#^|Ij%EZg8_$%Vi?wKBO@cRASQvcq--pQY6yVr zwT*9?Ys$;ZE0;MGqKiXhoNkWfM|I(#?c_DF2wt^f8$BoHVbI$H^@{&Eetfz|FQNlV z!r0HB?|-kXq~_&SchyV)3C3`sD0jPvQM z@5ibR$9yE#dX3U?c(lNwg6FW9xO4AbcS-wwU@?GrNVV*`;u6nVZ~zg*B@3yoQeLkOqz!l;(g5X?M(R!xLE?xMsg`0}i5>ddNA z5i!QQv&?Z9SjWVZdE2nSP}GfZ+QESg460yintEvx(2%nb&t;8`Q~v(@?~CN*>B4^0 ziO)yN{Y_G!I50Lg9vd0abdnFf_xvF+Td<}5;pwk$^qB!+rB32G0P7ft(bm1i{oPF? zU^9eqINPaG2-ma~dU9T5JY+BU60`4XIPY5_whZ5%p~-L3o$&z78D&_5=1&iLOKh{x zUA=c5?)79R1eG}?C1pH$@b=A{>fT;u6f8Cthti*qRwhEILV`CpH}@KB@@nvP;4N1t z#9+J3L~fpgHNib^?r>Wq>5}@32Ou?fhH_X~ZY^nkxXK~zMo2Es{FawSRZUF}l+!R? zN97_?K`a(~=k8s}?bXSy(+nk_ZV7ol#zS6Bn+&&ayqfV?IRBCdRE++W&Y)gGKr<#g z)CA_22$WKY0l{89y}gi%ggKx8_;zfO8D>W$7arv|{A9(;V<$o6W2k}U1V|$I-t#ES z&AuXkyV=xyRJkEKXuQ_XCq6!&cW3XLMwN%ub_ZO+6;F0v()B`089u$L}p~HjtnU3T-m_$0|97%Z2MR_6t^m6}N zC;0gI-nzO{b8v9T+^E~GkyW)eR1+ zgHp-dJ+Tq{t}*98;JzWo zOHc^=dM`L#FoCrX&VUYJ_K^1I2>y=N0Y3k8*EnMktX%h6c@T=7A1GE}WMrIJmLYNd zsA&)J1k4cnz!XkszkBztx7a3K*q?U$aW3X_+a1_a_5-`SxuA2u_wwpWl!>?8S)1N% zd{nX-?8ajRx6GpX^$%od0HstKmMRk7EuJ{19~~UT$GmoH3lF(#kmR&QH9uF;&X(AP z!7x<;jSbWFc(rKrv;g!FuC9JOKUk`AaBwiOs}u;4MG6oZ!9`9zJ|!%MhUT{XL3)P_#Chi^1G~ZlkXXIE{#P z-orf$l%+t~M~0Gvy;TXZaBih0p3P8o+i@bah{0|W%x)Hr1SG&3$fq>DgEV~tV%j^f z62wC9NdeAo2JDvX>w6JNf7B{@DX@IvVJV_8D)9c|N9rDhR=x6wR#HI8{aN?3S>~fIH#(_Hm!DqIK?@$(a7SOuW)QX=TkUp@9U<5RRgm~E;eW~r;-PsT9gOcFMAo}aC zPoq^{BGSP|SSkt%0l0g>cIZwXJ$eHil@ae@hMwobYKmR=zK)gaZpBQyV|X^eFqA%k zBaSg0D57Fwk_HD@7bN|0sE{DoLy;tBH}0pv^5ioH7%!YmoM??S^6Y(IzuB1!m|LJ$+;UAv_@n z(uS8eHZ}wSYJ328iWIo4N}!(3;wmBUwY96}8p=hRkJrLiO|Su7#ain}qj&G#z00hI z?RNpd`%DCb>1U`qggt#^YDzyvwXk(-IzHkIt`e4EgUN02P<>xorPd5c+31rF06Hct zNIF&^QIUcI+OxBYaiJ7=8cqmFQxM?HS&*y1?^N+8AtAdb8INImnp)p8Yil<2;kCJ* zHgBC2jq*W_bQ2mWS5?EUp=+g%TJ~BORaM@M!Dvw>eKHvwbf@hi) zot>SCz6(BR?I^PdXh|Nj7fg3rB)Q=pKr%8C&@lP6f`JtN2x?mFE}Ug7eGTO{+Rf4M z)TTWd;3D2S=u!^GV6v-(l=P&#uaETY=}T<92V2^=sHkf0o~hUZ(C`8B@D(V|U0=U` zeg5)geURL09p-`PJPYh{MP+5>pXbi8MMXtcCzKaA>v4W9*)tC|eRgc55J+>(G3si3W^T@OXb*Xz+(akleLzO zkXtxg+|<+*%j(FY+TtaWz6{OR2)aY<62e|~5;Od*rY)FF+uyc^nSnt9C;jMK*tjMX zSskS!LVjyB;mKCN=)mjtV}Snv2g<;!X@q=#cJ7=dwOW=Aq*pD$;_Nnpn5bo&h0e}& zeOw(l`wyyLAt9~Z0{-wiDF+wF^!igV^Wrl4Zbc`=<4^Mey8|8BfO`pR_-X4`HoSTRU{` z2bPpdShO&;AVzWEaY_nL}E=KQ)}6R{<97d&XBn`F$6Mky9!SGn;Y|ecGIx| zmH>47>5pTckw3>}_FCx{<3H&5t)@Ksj6b`=by1R|Nm!T-pF3M?4R<_Yjr%q861l3U zlptH*@~N>Lf`Ir<`x+l3qm)XXv6QrQtM)ZYt~YPrCW8G4)zuKz9UL6m!CD2iyr}DQ zy}zX)ghHtf8#{QScWLPvgk9v40BkA+01DFnn=@6g+)>R8G1Gjk3^V-T2VN_e{Rewt zpKU^*#VP+k>I7{?<*6rBA1+vv^^z`=J~-_XF9`G+h)!}bkIy5Y5qKGaSTOlD`@yQynVudcO4?`l50&`k;DV8Z#UTwwQ~T zFDLLFZ1Dq&)eK1zsS>D8a3`j#onJxIxaU6JTe%5Ams-*#R)b7udu2Q;GqVLo0ghQL zZed{o6=Go0vH}a*nRG6|ZYZaN+-V2`7l$eARb1n-lYRN}CAD%+0y67C*%XuxD%uA?afuK+YMPoPpjZKpz!gTd@j27; zDn}H^Db>I{!QIFJ@B@1^>$GY2$ihO}*47qF*BS8JGL)|2w}$|N$$(k|^uW(L6>5{| z${NuSB+x_g1pl6H1nf!!@p{^m9L52YCl4s_Pely3Rg|gF&$Vt%?cW!>XLQk;I<8tp zfyj!BDPQD>%Ps;(sK~VVjGuvuQtsu^<2m3uRZTt%H~hK0@4~gL$F0C!tb@sLYOW{y z3X{%15GG^6!yq~2xETiNJsGV41if{}G|10|aaagKwSb(35VqSR`A-6~V+fCi#Pd0D zu}Jl1C|P=iiWBf)Q-jZup?ojv$LMHBj)4sDFZzJnCybziV*$4yvJ~TUz)A~VJ)^I0 zP8B(9X8~zrgvt(|+hR-_K0$1ocJsMiI=Z^CkVyKcfUdFAmJsakc(7-GZKybIo~xLV4X5k#F!6R#YWZ1}mmjMHIe>6VvSqD|$x)LbeTX^YL) z(qWEPTb7%;4+(rkSXjJhaeMFF@rz+E)F4*&KtqB~Jb)db5bu}`mXL(o*w_HfmG$iU z8SQHuykj*hTw%j$1PA2jZ}O+FZfroCfL4(<6cdCcX#jOWMz(jILiy#fJX+R&LUahTMRV zRqM+OC&>yug*vu#P2nXTl^w%=2FZXlb%!UUklobYm50)e9=UG~(yI@25u|C9hmUMS zY6vQK`8iJ|OT zJ)h;qdn{}{Dj@G*Imtmq(^kK8ih!UMmV)I%f1%|*aC+jfasAxgMdD_Uxy)S*xqM5= zDE?%gQifxrV*qB?{_{%2r;#MNomk8HzyH3FGd214%39}N7N5=2?T`7ZRmS-iSIO@j{`?bT5}(-fv?(cR1d5W?zZ$_(o!SIr3r7 zZwuX<z*-m}J|DPF!=bX$LN!TAZ;1Ts zKsbc3mq?%>Hz*L*(joS+nG+%3&NN59W-}X10W5^LFAc|azY}LJ ze**4Z_k|h&cjUI7A1c=XqJW*@cqcg5phgg5DBFqxi+ef@1ljzN?%=dNe(3`_-(b`x zDJF|Q>f?3NpgV+Ox!*m6s>~?x7Q5s=?IQlL3zponAhj zMiuNKzC+0_c3#sTUK0+;9?Z^-m&K<-+fJ%pI)|C zS${z$_#6|#|6Bvq5xDJT!nti*X$`y~Pa{$Yd@Zz~s9H_83V>fy2L8#lTQ@|+`b=vq z80250hBm-(NJ;~TM-)iDN=ixwkmF{0a}i37g|ZxVKOp!A{2C-SvoFPGF+I1wKb8tV z^VDBwY*3Pd=7>94#-p*Jw*syPnmItTX2*=`)i z;oW`Q4dq`*#lH7tZ1T2^Rp!6OWpPie{AC9z&L$vuZbMLlqnk^AGg5lDRX^#-?I>F!d1`tgOD~tEJcU30obC*-%s8VG)%V9Wt*jVt8K8@D zt>=|t2Z$rLGSHZS{9=HtO@_5usD_N7F3y>%JwD@*)w=7|3+m z-$~RccOu!Cotq0?;LihASDbHut?k$>4niM9>|Y&ZW$?Zvjq-zIyVas0_C)Yhp@|7n z3j;&?89tW!2)=UQpCcv$p~~Qejp?}bSbWm}&p+Lm1j%K3yw7v_XH9)QEJI5#&nzTaoFneyap`@|97EV#m znaukIt_>?ue|LC4{lo7xp|Qo%*aIj`dsPf6X zCl+rA%O4}gW#wkdC7(!L|K8uk6k2$m`21}gbzr%7qg#ZWR;$MBA*pNRg-NeEcIOe% zp{|Ond^U40_o2mzSKBUOG2|G_ZnSOiy%$;UiD~^!M&qHLq$Bk)$=m#816q<0tj6Qu z$#sG~nAK*XpG5>p@GLi<57|&=k@wO^-=)YtB9i2kIwYs+5L)Clld@lRD5)hKl{Qci z_jZybDnX57_Eb#&|IZq$ch}QYmoA)#I`4R^RGpE+mgN1ubl7w z?gfEwA?8vVO;w}3WXn90_KlMcX5khi7Uh$DTf_~HGh(bpOS{ZTx4m9GXd@Pt+x(~| zm+&yxpjFVKvdnPvGDS__Olq0Ln*7YP>|2&I9mx`f^E~&9 zofr=OVy%gBA^0-T!>>+1$Z5UtPc(nw$W<=;NAM?B@#keQ^cQf%nEP*~x|B7_b;+b3 zP&J+V;wSfnU|nV6Mn`U^jpdzR@9Vmn2c(Vc9WIIePe)}w?Q~v;G4S8>&Xn+@^=t1g z4vOag#rhOXJfl2~`Sj3WZa`GYHi$FS@5hv6n!Q`Lw69+P?$xiceHO<;zc!IL^Uz<{ zxa@r&)yY}jqY)PZ^`h~9uL?h4X z%*iN=Cn;~`PH1la8lv;jCLoVw_0bT0^t@<3M|&C;bXZ#6>&nsA^P0-9=TDlD52O3~ z>)mM>JT1%)1M6grQ_a0kYb7#C^4}%G>BG%!HoVyLFj83RC!*^%f1EOjVZGjI4Mt(<+m%p1EALycUId*1ekV z(n@6X^0o@gQfC#M^G^JtZ3@0V{;$64?w36O)p0#{AOCBXV4$DRp^5tU=YPciP%6D? z@!Jc4#`QmMguh2+`UIR-NDGgyKrf|{zg`gQ?0S?3&2A$bqqkJ zfX{)KRc&H}nVH!NgnhpAk;sE%YiBnD{MDh%JQ_B8((I17KXe9zu-cktvA@3$c*6O+ zcG2Gl^#$)QYx{S9#m7btXX+Pw1)Fu{ny0Mow$4?U)!Q*ClNQHkk-QIlg0p~jA^vLSTMR~3 zB5mDv4Za%qZm?L}D6o=Y3e;6aX8E0*$_NMuu3ke-^RtTNC7Z0hNxnlVkS)f5A_9_) zikEkAqYe}kN@#hd_{AT9HSQtsfk-yh%~Z66i9$XMVs`<4*E1insHqzm4Lo>jk?sP9 ze<j)i`63|BcTp$163py;C+(K;-EPc?a!WNfO-#co0MpzBzG$70X?9a&AH(@?;-!pUs4MPEpZBP^F<|-qn3W+vye1PAe2ISrR0qYQ8 z3*U!b`1|iDkX&I2CW2o=x!_qOY6c52EkaD-P8HvQraK=Uofv?9dGH(~K?`P!C?sD* zIr_FlcnU1RTA%75C8`Dy5ONd!q5 znWh1ou7i1^Rx48L9vL3-hZ`cW}CxfDQpK}G40<=N=gM%w_y^xF0+fU_nR4q%^04ip;ed5HNgq#rBr zw4hxBYeB!kc^K&(!fqy?Z#sbd56}uAgZg=a$t82%dp_;OcM&==#E{a6+DE|c1U)vW zgB1E{e4(=)_SmOy-yVJc{vC;Qu+$<@y#`JagSDv^Ae28QCmRK64QA=OtAob@wL&Tv znxo!1R#4y^H+uAHYinDN1>hA;vv0%{v1 zvzxks+HioD_QckJ0jtW3TmhQh5YdU;L(qalXBBY(g^m%RN;|j;@(clC7+@EMa5o)T z-vEfVfC6sPG=;((YIaAR(00q;FA-h1z;Ay1{#(hGE;q1W>d$p&0_z>7?zF9oT4oM+ zhYpR$!H6#lHh^^i^weNh1YfB%^hZ^Ck!$>TA)=y!TK_=}6UL*G1|G_QRhL@8+$~mC zIf#+aAdE-dsIXIo(UA{Pix+-|0Gxyb`(#-yYF7IY<6cJ0plQ0N&#(SsLTwY z37oMq5LgZp+(fh&ZdHo{=8XU1W2nNus;6&Pghn}Jh05*08+7)m-kOp$xnOt z&p&tCy5H|Oz#69KNCThRW!wbV{j;y_LJ0bR&4zN^$JbW}8-%PV^6Jtam|=a08tqxxc-3UrKP)-mn}Btly24R&1xJnRbIYu>5`sG`unY&onY97 z+8&J1(tQ_S50sZK4MQR!=8goBqvIV~S{4ZBaWGS86xMtF+vWOB1JH$<%FV{s`NGaF zxWB(&%fdvd(;o=yE4Zg1=Hzh(%tY(&<3vSs{Fti{=y3L|SkN)(&WQ8}3+&wbRJ0dy za<ZrR80Oa2Om9-K@bIV^7#N@)5tDQ0 zpoWKh3x+-s?jdAIGM=s8HhOGlSG2Ra$NcL;)_-q|^h@ zolrP}pyjvifVo3RWb61?LPEjNFbQG@Bq3qr^DtgzL=hbaR`%HgY~!+`8O-!=O$-**x;%6Tmi@O}1{gNxIp6)odd$_R%ja1HT*yQ()+ z+YN=V4`e*b@TDknhV$4X8y1PSufKmB5COf7o1iwJ6L}!K{xk%Fx`5hfjvPBN1%BpE zSP&G6-5d(7U|~YO4G_)s!AraYHWoO4Kr$}VZ({Gc)k41#^IF6s$OON#y?k!!6vw(0C^wW{<>EnVgo`9kc)z zXdOalMF7jy4jK&N`QShaQ9O%&^L21cilOc}9|>M6*Z@d8MadrmFvI1#*iK?NKL^(e z7Egd8@qlwQvb^vUTVT%B7`H*?KtUPDoVb6MK5&v?J&WDjb3oILGD*1Oh7$U6yk#9- z{uDeyoU5+cfWgA*3ipc)B>w@M2_e)}_lk-^BY6N8*|Ba3dNhN<2FX10;Ch8soe`D| zjdcP70@Gj}LPV_bbIj-5gs4D0()^#WJ3xLaY4On zz;>Z4t<}<`CqNUI!k#0{HpUd|zqYofwOJ8S?94dl6A{4xuo^9Dh|kX~?}6M)g-%^S z%NBUshhWw!j;{Ds0Vmw0UW3XT^J%YiwUMj0&>|jUj2|qhQx|Sm13?K--qKPZT?9&C z0;nA^k{;i+T3|=7!x*ZyG82G1gjpM;h#*0@8j%5-#dm-HhW^DRJ9TpCR}l$+$;$pu zs}Ru`|JSNeaslTL4WTo@p(CF=?A45w1u~4}7u2+ev_;5XmTh9}R3Pd=ko!J^j<5m% zgs^J=zyJ|+eZG0~=5#MQX9tB6#Fj&F0Xo(l;;-d{QV5Y#d3~ln9fs&69EcY&8cy4> z55JwjY^ebVsPw#+41uTCFqfK^RurtX)|Nl%57TGk;W|pWhJI|O{RzXv!z&9{U{J`f z2fn3XHj`i^Z32M217-+7atfN7k*Vs?|Gf_5n1Lf`+Mq`@4uo?9kbST4IhCX~Liad$ zo47zxBLNzJv7c6Bn!jY0yI4Hxm}}7uCw}YeH(cInY`%I%batHg=7S~W~L`Q9x7Rrb(Fk#w#R(zCc|ue zeSD%}BH_?Ddq{GDU@`Oa@fpp4l_U+Q2=LhW{Jff0p_iAJw2Vw0&;juC7n%eCCf(YL zh|GrK6QWxLWWk$I0HX&1m>iFVdJZWXaB5Zyq+NROrNSN)g}O%pG_+K8*qBJ*f?Xzn zdI=z=udUQEKx2#&Y8OgX2mh%*gGL(22Q=5O--qnf0R=6KUgK3LbbDtwZn9xMFWL}u za&Vw?#wh&bV`D*!$?qTi$^0!3+e7-ee*3l{pqSV+lFG|qPoGMR50{1$r0A6wQCAbJ ztu-J?;M<3z*1^`z4<(}k7*vSp*)Rnya5{uAlryc+(8_QJ&YLQP_9o#l4HTb;4M)Tg z;|cBFyr{hE&d`kQRDol`THD$>AR$Z7q6R29UCkyD=Mfru75xQS?C1BMN5{)S0+58@ zlR1jc*8*=P?Cxna;jl5gL$6(f{|Y$mOjDW+6rnl^pPZbGvLBjiIAI_K+FeZ6k^F>= z{}AU<+d9DUDDX=gLemz|7x^9b`|DjO=0O~r0t*JRzn}mGeu`FkO4tCfdx~z}yeS(k zcy=F9BXa4Z-h79xXKs}c@dn^CxjHp}ug~?!0NR5Z)gPKW(m{Ph`f?KB;b?wDGCzC$ zlV81yPR4rk<`4Afp`(r9?AZ=zz6QhXrq()Y@rJE!1lAbneUOK$Z4E+S5`?@wPUzL^ z&DQfm4cl-;2YSqK5JPW?twm<(u0-g)NJw*2Z!f7g1GIp%z4&>SJ|D9i`zQpMa_ncM zv#_@Agc!9xm)(>EBn_%yP0O~Qq9z&e#(JJ3gdu)DTd#>o-G6@y{Fg=lb6z2a%lp6n zPsTBnNB{l#|NjS?i2paHgetnEgj-inkBifTR2sNd2tetIDp1krra41NO4GVHez$T8 z4s#qIWO!D3xAG1%b6X2Qr8KCS>vlp>j=-2(;>XbWT-P&H_&u_y6exOZ4x+8XM}>oYzDXE`;Mdu>~1b9K%7A^94z`%aUrIy z#|XJUp%xm^$x9b6Rs&Z9@IZm5^Cs+XX+_0u-7p#TSp@^fqn~r5KmrA}?2;p}wOQX* z>Ge$M?%eSPqaGY4X+tE4?r+#`q8VEUrOh}nq%d8u;D@ss#l*$^0|FE>SE1hqnM9OQ zJ87=ySzG5p$WPY~nG}Bf*c+e?xJE2Gb_(!momTWUP*&=A6y7u$A0JnfR{=~AAmN%QgS1*(X=6ev*^(6Le!j~& z_niB$`>*?P9_Mk-<8hrc*E!Vh_x*l8@6Y@F+CJ|3)1Pj7Xl&_2F>%ba?8;ZNZ*z1u z%%VET{Gx^FK)i!U&ZV!;-R98=67N*))}u$p+MZw4q!z!6@QAUfiQd(4-)m+KWqc{| zlOnq2y!1S+Dh42#muWgOk32We7c6>tlWM$&f8hv)*%&&xaNr1~ANV;o!oz7#QuUk5 z9StIDo(F%$r}@U!zBELGu|Tv|M8w80x(R!K2a!SiGz@2kpiT1d8HMV}>RL*NNZu^L znU>01mb+&R2WrJzr_Ztqpf5iW>JcR{Cit{;{4weDKtQV_F=Dh@cKeZ5DGwBu*-%tj zdb?bCLh`s#z7-LWi+C&BIKbaO%=2AiXwt?!u&bETSCauiDc`#UBnMsFz#?bmF6RFy zRb0844-d%egt$aTcIqnCH-J-`s=qHNXv??rFhQp!k7ibUUJBM zHF)s2=%Of=NWipr`sQhlagKXXjMa_vZ1JYsmLL^QpWC?sn&zXuGZ)(&h&|firRMK? zk|()a;ETdS!?Jh`zhcrueATzG3ag)V2|arBkeQa#Z>+JM&rRYmd-v|GhFFd*Wvi#B zmztf{{zm)HVZ(-jkIVQjc}+k_Anokwo4m}pmoJ?F@NuYR%yaK&skOPz5dCE?jTow) z2g`dV|IndNlv9!b;5)uQAr_r^iX{0qk}zO|LOdgX1`BDQ1 znmzv9m!VGDe0-Ike)d@*{uX(TrY)JphmN*5Bm2Q#_$&C0x>DdS9(mY={G2t*Gj{Hq z9M`95qU(#*5*l=Qb7XdA>$$>%)9lKp@L{ip=q!Z^NHB?EW*wcBzK-ffR?-j}BbpSF zJyVytDHdAjwVrc(SKivzTop|v;P>wX79$<=B@p)1X-=~LOQwJy0c)P%#Y@r^&3(YT z(#g@;tfV4>Ohhq6yC+!#0;GsH39DQoIIp@=AX?h*72G_`P3O7lnFe6wu@3cL2jeb758}pv4nMX?okMGEv)j zc)Xis`G%%l0+t2p=9D)Q4KXoorY#H=qSChJFQ<}atgqT07F*F`v9(rx#*6G>BE1qV z6kBu*Fd_Ji!>IPIZ!;2nH&fvl`wN)mM=Eo#UM+HantlTJ&*&*rl9yGmYBxjB@z2(K zzxLI#DjXSOmXfe61hC$s9coHw0_iZI^CV*C_Z}fL1vz(q93hfEN*0vUKByg$c>(^6 zVeoS)ci2Itp?oGf)!v%WG+r8KyviWl1sEewvNY=i%nFVjV4t2+?W^O2+3OMTvb5D= zFq8U3)0q5tow4Z5sExM@a7m7GClWMF48DSw5F^ip);86-TRe!H${Hxxsn2UM? z5g+i@+Y~=FMWa4Y)6zmbQCPaeB?6dlnpqq+v~T_Cla6(CiXCk@qDY}dFkSsHrk;>! zQ23KrPpvsU5RiWtzX@2m#s#; zo(^|#Y3>Ar8BP0e;QGjaQXT}D`Y==ET)Q^;NwLyPgg+h6_QIWZ-TB?vv*oL(beg}p z07T99Tb^VS+)xU~XUo~>GyaO2x;pSb8!FMCbc_MYwS2&}bf~la`ZEIE#^IWiojtPn z9q)ISS|fk&wl7ckMj={h4fE8($7N@q9xX{2nFL6b?fjT^1l}%Ys_|FOY^cCnfIPyVnvbX(f~lSp8Z$c0S)(yO5Y`j9}I*1?QajE18-7 zmBYu5y-LE-eoE5;n68R`mib)=Z?pfi)I0y+)PlJa;6K$ZqAy-IyZ72&7BadEu zeV?8^SMkFsRS*gS@_R7jKY#gBi#ne)o^o?LcU;k&n~C+{AEPuh&J;~OyW;Nbm(1Tm zm~sCsXI+FtI?eXmK=yD>e!dpelD6MGIJg*(n**gd9pLE?%kddBVL<$PmPpgD7};${dCp>|9pA%7N$#=iFrJ~2iOGJ3N=>C0PeEs_$`u^*03id8%F`nHhAjU@&g7fR$`gmu)s^Z(6uCR?~ z4y@fh)^aB={u{y1p~sn~nsA=i(uOV+DjRjKu6ygg)UkzBtT@VC9r5e1LVwg1$5^LL z4!nge00I?BXO(k)2XWC}^+bPH#u;muST<2ucz6^eaFQj=mod*nzx-nTb)TZl%vm3P z^4SgIMkGn2R-FI5f}Jzcj%2^5EAaFLmab!vzjf=@878{2*B^fHfg$n6tIB7UOi)w1 zZ0yOz4fvtqoOR>D%SBFPfL`)$%lNqbkzIO|vCN#3q9)_$49;~Pf9OuzsavL!kS2); zWf|3SKxk_(W#AImhx{c$U`AKpsebTa^YXSptr3A&DqV{T3Qia547%xuq6V$(k*Dz?$&9MS9`$%#Eo`B zXiNBqa88dhYwUMXRB7A1Q^*`7+5?aGFAe2>9$h9}F*_574lzRHzNC@Mu?eIT$$#xg z&X0o7nT9!<>;V6ekQgwUv_Zc8X-AZ;R5ELwB+qsa)tMgUNe^-b`U1ln1D_Wd8&_>C}tt+%g) z@|oF*f`Y1BkiG!z6Jxhvf$xjPMgnBlN4q?6+Y+fOzm*jzQ~%|DKMt4=X$9`}d$*)d zqIqX(Jk46aMx_$YD$z3Q^Rk2eNR{VzjbUaIg}hk0r3Fj%NvzpqX0zaYX{%9yYmr4w z^YY@UiP;P$VKa-B%{SQM)3K2WtMuhFaC z%hA>4HFpAxf)4I6{h606JbxlKtdPr!P=?}lOpnC<(`lqt*c3jtH4-0uNVs403OC4Q$2H-&pmx|4SLY0S1ca`?IK%Bh{8hI)Ol)IBa zeAWnO{Ej0eNPqp8H{9b}i1Z7R**BXM!Im;R?W5jWyqol~z(Lf>h zlR6XI^+DS_W}DQ03?`1O>~6Un9d>HLKv(@OeQsl;`)9Xq6LGr@|JT1R_#m-=^|qU( zk854z2_JT-gNutcM!%5`RS$pwxyhotWunQrM~?L6!>3O#Pfke*=9Jt|l;D1PbF(j& zD&4Aj44Pgll7Lr^j0PO<;{oBnM(Y!f6>=@->Xm+$V6aztk9O}~1ZD&QE(GyI`jqvZ zIc7}W_p@iK0EAc9*IProttyT+w?;u?^Y-mqLNN}Ag5mjXjal*Z=s^_00sPTkefq2g z#I%ccj9<5nW~FbMv$}Z=FCdsIx&#)p04%PNu)^N;)|iOHshd}<68AIG1#vw}*~H~~ z1FV(TKMK-yPu;VcC*=5N&^4g}3g9oQpFFW+<*dPx6x^*ci)KHVIw8NcfGK$*EGLc7 zlD{_Vu+wW9AD+K>F@Z5Z9NorRc4^WJnx*}0^Xk9;T7@?ww{Q*^!0+DP6FFeD<+@Q2c8P*5Bc-B{jU?PmF5xjdp9Gcm)c>#>{ zy)e*owzuT1c(;m7uGRU2+aF5ALc!5l-IhQ($fKl?|A0$rjdlAfYXhbAk15%F?E`z~ z_b-XN^{^=6q<)P~#`U3n4=nM1SjA5cg0tsEUlln0&qga~BWt?!HT)K7e_T-lYPRTp z=#{SLHaxE-H1t}isY}D1HB1ld<&OX}_t)K)+>r7kUrUN)y6`lauRf=Bb27WqHLyXD z4hEnm>Siq+uY=Q+2Y-R58grBiLQBN0&a{DwQz?CF?t5R2l#vQil7B$JaCCE>3<_M~ zBL6qeKX|2+;&K?Tx#U5hfPTlD1#@x0)o4wMVpH{}4IJ8xd2VF#m(eTJ# zad-cfgL1nRM$wvh^L`!w#{ckAP44)}9sm8ma(Dl&#i;UmFMR&FegfXg4U7SlsaReG zOYRJojXA%5sEANVM4fl$rkf=!sN8a6PEVe-r&0A-Z)hB;B*bPoAal0AszT74sI;El z{j+BtX$4KfskxcSFA-%ZOIYw1R9H9@$8c+fTz(@{x@WuloL@dtMEr~3vPk}qfv@RW zO@hlL&w3L1578>t%ZUY2g5yZtL@DiMZNf26={H)q(Ei)t%vBC^=XLy=$GjiuC7Cw(BM_-Bqoc8JD%WX|TF0Yin=gyw1DteZAe0~Pa87K`}E zdxM)%M?@0{jC#u7G{$(w>$^Woi}JpkrZCp-w!JL3#_*AHP@k}C;f8p8{6J} z`p6>3rz8EOjOuacTcZZXj#e1jkam7kJP)>av^a?(m)&kr_ObMlgAwi|8(2<;Z9GPK zQ&-8i*ZygfK?1{_aI-W4W8M@o@u0z{o&ccE!GG5jig&3#XPiEU>uBjHX}x4S=fwJF;vaztsR zur(EO3VSD|<90Sexh#&ghEfo~m$b^Y{HKVIYttanG}E5;a6u@tkRqn8L}DSiVa&oO zcKYG2b};<6SX{F;q!}Sj>#heY1msmIrO=~gZ zSW`*HyTsDx`T6r`Xm7l7TwXE+*_n8F5m6?oFV`ejFy2yfcLeYvdtRVmss^Ojan{dB z9UW8tmxl8KWOnQtqwpa30Hb}Y_jD*_`SUX6u%%2iauT=}h-NQ8VCAS=G;B>IClixh z2yJW_8!z&YWDkEgzc3n3q3l4Y9seAh@-l1OEXaums(loPe|m-%m~S7aR|a-17$C~m zO__J{uV2qN*;RAStXUH2AhCyX5f+AunJ)Rkz4Lg`miGC$+9-EFP;LoJV?z=)ne zC{c0j(kIL1S2A%(ARk{&^-G@E2ie!I6$4V~Z39o(m!itCE29tH{j@F54*QI+qt#(g zLlgIa|F7julfoEJ8TStj^~{+}1&c$wB!d^fzKH$6w%v+l_e{P+cNML<0{Sz|Go(na zoyfu^5dtb*Zo5OT#oHdqIEB7pA!CWZpWot#x-1XFTdJdFG{82A;BQP>JeZj^v~?uH?Et6W~J8h&4UB`JH5M%i#2Jw>~3>4!!v0 zkS>bRzmZk8p0Q0mpn<$EB9GQsjXQMdskPayRR3k!>+)f7PZ zV92<1HHJ(>n&Sdkj={`!>p4P!75`eZYa@AnA_5$?d-_poj)+DjK9ldFwt)okrnt})eq7C)afsf|>DvT1#x5DLijb|S>TX-+*;cJcCaNA1 zg=G#I)f|=evBGyDDnSz2p8r%0Jnflk`*30BPc>7b4+I|Xg3LI&asy*D({0TC`>V_1 z(T&Q1z^)`LB2<=hQ8hX}4fU7~bQ6MdmeCJ~au#Fn=lX$qCUrTlJ1%EQg+7qW<)FBu zq&8Fgs1_phU@50A8$heJTVN&w%7iu)P$ECoD3jh!yu3oB&fP;4ESe1uFZ zDz>0)vb7{JCJ;`KQ#+0cPVW8`Q4{_3IA!j&Yp|z_aALIdquNJ$|j4rASVNu+Z?%T$NVvfTx39_&md?D6q;7PC*bVWFb;Mcp)lo zpkDBI+~ji-rbsd}{f_evz@g+1AW4zL2n!Ti`Zm|30gs(8D?t$DCnK}fs9+pm5xOl~afE>8IEQ6N@E{PT>TSwHxr>Qwvtv}6o(;#hvE{}m2%$`4g*CMZQNC#m(vCE;sH2WLt4ZjswH>k`+PR~~Jx{ddoJ z74$>D?TgIKZRbv4JR8`?HsN1st=AK8)6b9oeQlwsH-84S^Gi@AKIyp^xnl^Qqeb^^ z6Xna09Fjy+@3{l`NY=;aSl2Z!xX1T)s`eouyo42bC z!#c42`V9mm(^^-!*$o1Rzd0Gd+@)3V{fvx^W3A2hm7svtJ(Bhe?6&RNbNagx?rE*h zW`q0>Y(HN-j$1Ux_W=2xE%#3;mA?aQMlqaodPD=+3M`yH=A-K*rE^G3b+6aJrNaZ3 z*66HnnR{iYR{TPu%KYrbW@e)7K+r%WbFST4QYuYwT`qEUO_5QH({zgJUZSQM3FVR` ziJxY_Jt_?h3W}fy&0c%D7NOLlwQIxC9NU@f04oKe?EU4JM{;xZvW(5mV`jd+*CRZ( zL13*;^^%dXv1q7+RI((mFp{7WCWP+J3ly()x%DLy1*J~XoI$RaH?*S`orFY`@-F_@ z5~@*#<2kB+ZCTB|m@T|tbtN~~I^=hew+fQjgtnkg=35!e-Z#Rc38!4u`4qhO6x42B zN1SGdCz3y2xp-{n`Mth;e@flu$p_|3Xt!GAsZ$GK-4n_h?qDqh12{%y6munK>gZ9U z7A;>MEF#Vm<3T}B(D!a&P_APifaa^or3ed|bFhC%C|s6{DHwpgej>%mK)g3xTO@(# zlD#IEaFSf6!t8Oeu*rDo(r5}ZQxOSdJLc{B;R?#?muXdP3-;{UBZg7>kZ>`}m9})b z>x@QCN%&}7fiBk;0n3Q~h&mw(2#R`yd?>C>mI>w9QxKnHE86OoB7-S}1)s!K$ur)) zu10cwuC|4}B}N>^94piw_(kRMF>D+KuN70Fj0pUIVVAyMooG@YvSMw1&=I_i*Hyqa zd9u)thkblL<5bDc%kwT8-T63YDm1$-N5TXQ!$sPitjS4W*i%+XuFwbYeDEi+W3K&`I*10{s zu4GaJxsBBn_qY7x z*FUY}J0C`1W@71|y*2ROAerluq z{#!$Z{q@wE6@5F+EBx5IpUyYy$foP~B^T0v`_CJJ6c;}F+ciGD{_(%V4(9#s@|mxH z{D1ow0)NrKEg|<;h1fE``s#}C4~7#leGJHMEq$3GzWFh^A1kyDv(H8AMK>)HX`JC` zcQ%%`i*|qoY-nN<#UYu_Ee=vJBqu;;a;%-DMF#^(R&%rfuHbAqK!zT;`ml6kzwI)g z$i=@1^dyf6?Yg0v*|tk26m;;n!62da;mz-7iSAkIL%b{O#GY(qZr*T4ma^Z=z>K%E z#9YQOAR&h0RFmy{Xlval=H~WIvvL$(pPXXliw8{lDheD+R-9F2R*|xOywXzScR0=^ zbZo?kIczorQ;n*s&BirhP{N`X7lHy=kt}OQ`x#iQs4)A~q!pxJ_m{4p^*d_j%oT}= ziDD?Dm92|W$7(D#<&3P5PP*bk#oe{1Z~N2_(CCwAK63*kDLk2Ygtj&_h(w<|XNC!5 zL4!b~On}0kRy3(}QFPx3tSWa2a40`49E6xaI$91XC#wvOEh!Sn1ZwHw;*YsQV^Z8r z(DkbJZ#I4y#%U#yj|hxabevBfGoVuw*AQP`k_)NmqS-Y$v;JOT7F!j_Xdxe~V5-PX zMPesrA320!5PG@17oNNPoM)VH#;&4u`;U z{EMuNIK@RI091_cE@44Ct6&35Z9$j3ihl9|JG^XTN|%xcW4$jf4VHT zIm6M6Ls$fY!sODtw_UUDOpf{HlJ&!#d+#(ji`$6DVYq0~9>yNI6G1RZ5b>zyAYprX zvw(k=KbLeeAYhuJGFa96Ya{)f~oW8=h7Xn~*R;rU6p$z}p?` z4gk%=n#sY@UDwXN(GLUI*|RR`ZE?S<$xwKD97|UmxZJS(V7(66uTn+H*dUFuDZJ!; z$t@0`%rs2O;ppkIcYP5_= z3fPeZN4bZ7&Ktz1Vo?MN%&w}ciWk=la!qm5ae{2zTG9Cqli!&2OfaK0SzwAPj*8Kg zJ#6<}KZ!dPdysr1asj$UeWcJjj!M7)w7-bnrtY!Mw%4cFk&j-x0W|I(Z@GQHR!WPO z^NB0zx6g?dIVx&2fA(r*I_)7<^A_g1`t{r+C^LJd+tV4GuO*S~7zdg-m?94!zOca* zLIDWjC|l6jxic_Gt7rE?337D?EP#l`_9q^ z?%YrZo?eZS4cTlVqbphRe42ewBuuSj@VWXO2b_Gwn>m|!@%bBHw=s==@K6#z0fb;h z4WvQ5iL5LZ&0JJM!eU_1y=q9!=1IW~O#- z6f;AnV*zz|>_Md;dH*WaflD>n!A%*+>KPx{N()n}bNB#f5@IUz}U2N}CqS$ll U#tNehdHKp&3%-y2_sXCC7m`=~WB>pF literal 0 HcmV?d00001 diff --git a/downstream/images/subscriptions_first-page.png b/downstream/images/subscriptions_first-page.png new file mode 100644 index 0000000000000000000000000000000000000000..8a704b779e9cf5ed1f22a97b5a4e3fa661245bc2 GIT binary patch literal 71006 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