From 54ec38e25633eb4d1fa7a5777693a234ddb3948c Mon Sep 17 00:00:00 2001 From: Drake Finlay Date: Fri, 16 Oct 2020 14:14:57 -0400 Subject: [PATCH] Adding System Config Guide Incorporated patchset 8 review comments from Mary C. Conditionalized vendor-specific terms and converted code-block to parsed-literal as required Reformatted bulleted lists to definition lists Implemented abbreviation substitutions Deleted duplicate content Some minor edits for clarity Merged new abbreviation definitions in strings.txt Responding to Patch 5 comments. Change-Id: If6dd7c4cb802036445cb65853d8de7652df351c0 Signed-off-by: Stone --- doc/source/index.rst | 13 +- doc/source/shared/strings.txt | 55 +- ...c-response-max-timeout-in-neutron-conf.rst | 54 ++ ...pplication-commands-and-helm-overrides.rst | 469 ++++++++++++++++++ ...ing-tarball-to-newly-installed-systems.rst | 20 + ...om-branding-tarball-to-running-systems.rst | 28 ++ ...ed-vlan-id-to-a-target-project-network.rst | 191 +++++++ ...-the-login-banner-during-commissioning.rst | 78 +++ ...-login-banner-on-a-commissioned-system.rst | 107 ++++ ...-mtu-of-an-oam-interface-using-horizon.rst | 52 ++ ...-mtu-of-an-oam-interface-using-the-cli.rst | 62 +++ ...the-oam-ip-configuration-using-horizon.rst | 121 +++++ ...the-oam-ip-configuration-using-the-cli.rst | 70 +++ .../changing-the-timezone-configuration.rst | 57 +++ ...e-migration-completion-timeout-in-nova.rst | 42 ++ .../configuring-a-pci-alias-in-nova.rst | 98 ++++ ...ntp-servers-and-services-using-horizon.rst | 110 ++++ ...ntp-servers-and-services-using-the-cli.rst | 160 ++++++ .../configuring-ptp-service-using-horizon.rst | 114 +++++ .../configuring-ptp-service-using-the-cli.rst | 275 ++++++++++ ...ing-the-rpc-response-timeout-in-cinder.rst | 41 ++ .../console-keyboard-mapping.rst | 57 +++ ...g-a-duplex-system-to-direct-connection.rst | 58 +++ ...plex-system-to-switch-based-connection.rst | 74 +++ .../creating-a-custom-branding-tarball.rst | 130 +++++ .../creating-optional-telemetry-services.rst | 149 ++++++ ...enabling-the-qos-extension-for-neutron.rst | 53 ++ ...abling-the-trunk-extension-for-neutron.rst | 42 ++ .../figures/jow1413850386429.png | Bin 0 -> 23399 bytes .../figures/jow1413850406811.png | Bin 0 -> 8277 bytes .../figures/jow1413850481192.png | Bin 0 -> 12006 bytes .../figures/jow1413850497887.png | Bin 0 -> 58246 bytes .../figures/psa1420751608971.png | Bin 0 -> 3604 bytes .../figures/rst1442611298701.png | Bin 0 -> 38410 bytes doc/source/system_configuration/index.rst | 144 ++++++ .../modifying-oam-firewall-rules.rst | 92 ++++ ...synchronizing-a-host-to-the-ntp-server.rst | 33 ++ .../specifying-dns-servers-using-horizon.rst | 32 ++ .../specifying-dns-servers-using-the-cli.rst | 37 ++ .../system-config-helm-package-manager.rst | 41 ++ ...stem-configuration-management-overview.rst | 14 + .../system-configuration-overview.rst | 103 ++++ ...-starlingx-application-package-manager.rst | 69 +++ ...-helm-overrides-to-enable-internal-dns.rst | 35 ++ 44 files changed, 3372 insertions(+), 8 deletions(-) create mode 100644 doc/source/system_configuration/adding-configuration-rpc-response-max-timeout-in-neutron-conf.rst create mode 100644 doc/source/system_configuration/application-commands-and-helm-overrides.rst create mode 100644 doc/source/system_configuration/applying-a-custom-branding-tarball-to-newly-installed-systems.rst create mode 100644 doc/source/system_configuration/applying-a-custom-branding-tarball-to-running-systems.rst create mode 100644 doc/source/system_configuration/assigning-a-dedicated-vlan-id-to-a-target-project-network.rst create mode 100644 doc/source/system_configuration/branding-the-login-banner-during-commissioning.rst create mode 100644 doc/source/system_configuration/branding-the-login-banner-on-a-commissioned-system.rst create mode 100644 doc/source/system_configuration/changing-the-mtu-of-an-oam-interface-using-horizon.rst create mode 100644 doc/source/system_configuration/changing-the-mtu-of-an-oam-interface-using-the-cli.rst create mode 100644 doc/source/system_configuration/changing-the-oam-ip-configuration-using-horizon.rst create mode 100644 doc/source/system_configuration/changing-the-oam-ip-configuration-using-the-cli.rst create mode 100644 doc/source/system_configuration/changing-the-timezone-configuration.rst create mode 100644 doc/source/system_configuration/configuring-a-live-migration-completion-timeout-in-nova.rst create mode 100644 doc/source/system_configuration/configuring-a-pci-alias-in-nova.rst create mode 100644 doc/source/system_configuration/configuring-ntp-servers-and-services-using-horizon.rst create mode 100644 doc/source/system_configuration/configuring-ntp-servers-and-services-using-the-cli.rst create mode 100644 doc/source/system_configuration/configuring-ptp-service-using-horizon.rst create mode 100644 doc/source/system_configuration/configuring-ptp-service-using-the-cli.rst create mode 100644 doc/source/system_configuration/configuring-the-rpc-response-timeout-in-cinder.rst create mode 100644 doc/source/system_configuration/console-keyboard-mapping.rst create mode 100644 doc/source/system_configuration/converting-a-duplex-system-to-direct-connection.rst create mode 100644 doc/source/system_configuration/converting-a-duplex-system-to-switch-based-connection.rst create mode 100644 doc/source/system_configuration/creating-a-custom-branding-tarball.rst create mode 100644 doc/source/system_configuration/creating-optional-telemetry-services.rst create mode 100644 doc/source/system_configuration/enabling-the-qos-extension-for-neutron.rst create mode 100644 doc/source/system_configuration/enabling-the-trunk-extension-for-neutron.rst create mode 100644 doc/source/system_configuration/figures/jow1413850386429.png create mode 100644 doc/source/system_configuration/figures/jow1413850406811.png create mode 100644 doc/source/system_configuration/figures/jow1413850481192.png create mode 100644 doc/source/system_configuration/figures/jow1413850497887.png create mode 100644 doc/source/system_configuration/figures/psa1420751608971.png create mode 100644 doc/source/system_configuration/figures/rst1442611298701.png create mode 100644 doc/source/system_configuration/index.rst create mode 100644 doc/source/system_configuration/modifying-oam-firewall-rules.rst create mode 100644 doc/source/system_configuration/resynchronizing-a-host-to-the-ntp-server.rst create mode 100644 doc/source/system_configuration/specifying-dns-servers-using-horizon.rst create mode 100644 doc/source/system_configuration/specifying-dns-servers-using-the-cli.rst create mode 100644 doc/source/system_configuration/system-config-helm-package-manager.rst create mode 100644 doc/source/system_configuration/system-configuration-management-overview.rst create mode 100644 doc/source/system_configuration/system-configuration-overview.rst create mode 100644 doc/source/system_configuration/system-configuration-starlingx-application-package-manager.rst create mode 100644 doc/source/system_configuration/using-helm-overrides-to-enable-internal-dns.rst diff --git a/doc/source/index.rst b/doc/source/index.rst index e369979b8..e377b63be 100755 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -75,6 +75,15 @@ Data Network Configuration and Management Guides datanet/index +-------------------- +System Configuration +-------------------- + +.. toctree:: + :maxdepth: 2 + + system_configuration/index + ---------------- Fault Management ---------------- @@ -90,7 +99,7 @@ User Tasks .. toctree:: :maxdepth: 2 - + usertasks/index ---------------- @@ -145,4 +154,4 @@ governance. .. _`OpenStack Foundation Board of Directors`: https://wiki.openstack.org/wiki/Governance/Foundation .. _`StarlingX Technical Steering Committee`: https://docs.starlingx.io/governance/reference/tsc/ -.. _`StarlingX Governance`: https://docs.starlingx.io/governance/ \ No newline at end of file +.. _`StarlingX Governance`: https://docs.starlingx.io/governance/ diff --git a/doc/source/shared/strings.txt b/doc/source/shared/strings.txt index b17177bd1..80e9707d0 100644 --- a/doc/source/shared/strings.txt +++ b/doc/source/shared/strings.txt @@ -1,4 +1,4 @@ -.. Common string substitutions for brand customization. +.. Common string substitutions for brand customization and consistency. .. NOTE: Do not use underscores in these substitution names. .. For more information, see .. https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#substitutions @@ -11,7 +11,7 @@ .. |prod-long| replace:: StarlingX .. |prod-os| replace:: StarlingX OpenStack -.. Guide names, will be formatted in italics by default. +.. Guide names; will be formatted in italics by default. .. |node-doc| replace:: :title:`StarlingX Node Configuration and Management` .. |planning-doc| replace:: :title:`StarlingX Planning` .. |sec-doc| replace:: :title:`StarlingX Security` @@ -41,27 +41,65 @@ .. Name of downloads location .. |dnload-loc| replace:: a StarlingX mirror -.. File name prefix, as in stx-remote-cli-.tgz. May also be -.. used in sample domain names etc. +.. File name prefix, as in stx-remote-cli-.tgz. May also be + used in sample domain names etc. + .. |prefix| replace:: stx +.. space character. Needed for padding in tabular output. Currently + used where |prefix| replacement is a length shorter than 3. + To insert a space, use "replace:: \ \" (with two spaces) + To insert no spaces, use "replace:: \" + +.. |s| replace:: \ + .. Common and domain-specific sbbreviations. .. Plural forms must be defined seperately from singular as .. replacements like |PVC|s won't work. +.. Please keep this list alphabetical. + +.. |AE| replace:: :abbr:`AE (Aggregated Ethernet)` +.. |AIO| replace:: :abbr:`AIO (All-In-One)` +.. |AVS| replace:: :abbr:`AVS (Application Virtual Switch)` .. |BGP| replace:: :abbr:`BGP (Border Gateway Protocol)` +.. |BMC| replace:: :abbr:`BMC (Board Management Controller)` +.. |BMCs| replace:: :abbr:`BMCs (Board Management Controllers)` .. |CNI| replace:: :abbr:`CNI (Container Networking Interface)` +.. |CSK| replace:: :abbr:`CSK (Code Signing Key)` +.. |CSKs| replace:: :abbr:`CSKs (Code Signing Keys)` +.. |DPDK| replace:: :abbr:`DPDK (Data Plane Development Kit)` +.. |FEC| replace:: :abbr:`FEC (Forward Error Correction)` +.. |FPGA| replace:: :abbr:`FPGA (Field Programmable Gate Array)` +.. |GNP| replace:: :abbr:`GNP (Global Network Policy)` .. |IPMI| replace:: :abbr:`IPMI (Intelligent Platform Management Interface)` +.. |LACP| replace:: :abbr:`LACP (Link Aggregation Control Protocol)` .. |LAG| replace:: :abbr:`LAG (Link Aggregation)` .. |LDAP| replace:: :abbr:`LDAP (Lightweight Directory Access Protocol)` +.. |LDPC| replace:: :abbr:`LDPC (Low-Density Parity Check)` +.. |LLDP| replace:: :abbr:`LLDP (Link Layer Discovery Protocol)` +.. |MTU| replace:: :abbr:`MTU (Maximum Transmission Unit)` +.. |MAC| replace:: :abbr:`MAC (Media Access Control)` .. |MEC| replace:: :abbr:`MEC (Multi-access Edge Computing)` -.. |NVMe| replace:: :abbr:`NVMe (Non Volatile Memory express)` +.. |MNFA| replace:: :abbr:`MNFA (Multi-Node Failure Avoidance)` +.. |MOTD| replace:: :abbr:`MOTD (Message of the Day)` +.. |NIC| replace:: :abbr:`NIC (Network Interface Card)` +.. |NICs| replace:: :abbr:`NICs (Network Interface Cards)` +.. |NTP| replace:: :abbr:`NTP (Network Time Protocol)` +.. |NUMA| replace:: :abbr:`NUMA (Non-Uniform Memory Access)` +.. |NVMe| replace:: :abbr:`NVMe (Non-Volatile Memory express)` .. |OAM| replace:: :abbr:`OAM (Operations, administration and management)` .. |OSD| replace:: :abbr:`OSD (Object Storage Device)` .. |OSDs| replace:: :abbr:`OSDs (Object Storage Devices)` +.. |PAC| replace:: :abbr:`PAC (Programmable Acceleration Card)` +.. |PCI| replace:: :abbr:`PCI (Peripheral Component Interconnect)` +.. |PDU| replace:: :abbr:`PDU (Packet Data Unit)` +.. |PTP| replace:: :abbr:`PTP (Precision Time Protocol)` .. |PVC| replace:: :abbr:`PVC (Persistent Volume Claim)` .. |PVCs| replace:: :abbr:`PVCs (Persistent Volume Claims)` .. |PXE| replace:: :abbr:`PXE (Preboot Execution Environment)` +.. |QoS| replace:: :abbr:`QoS (Quality of Service)` +.. |RPC| replace:: :abbr:`RPC (Remote Procedure Call)` .. |SAS| replace:: :abbr:`SAS (Serial Attached SCSI)` .. |SATA| replace:: :abbr:`SATA (Serial AT Attachment)` .. |SNMP| replace:: :abbr:`SNMP (Simple Network Management Protocol)` @@ -69,4 +107,9 @@ .. |SSD| replace:: :abbr:`SSD (Solid State Drive)` .. |SSH| replace:: :abbr:`SSH (Secure Shell)` .. |ToR| replace:: :abbr:`ToR (Top-of-Rack)` - +.. |UDP| replace:: :abbr:`UDP (User Datagram Protocol)` +.. |VLAN| replace:: :abbr:`VLAN (Virtual Local Area Network)` +.. |VM| replace:: :abbr:`VM (Virtual Machine)` +.. |VMs| replace:: :abbr:`VMs (Virtual Machines)` +.. |VNC| replace:: :abbr:`VNC (Virtual Network Computing)` +.. |VXLAN| replace:: :abbr:`VXLAN (Virtual eXtensible Local Area Network)` diff --git a/doc/source/system_configuration/adding-configuration-rpc-response-max-timeout-in-neutron-conf.rst b/doc/source/system_configuration/adding-configuration-rpc-response-max-timeout-in-neutron-conf.rst new file mode 100644 index 000000000..85110216d --- /dev/null +++ b/doc/source/system_configuration/adding-configuration-rpc-response-max-timeout-in-neutron-conf.rst @@ -0,0 +1,54 @@ + +.. gkr1591372948568 +.. _adding-configuration-rpc-response-max-timeout-in-neutron-conf: + +======================================================== +Add Configuration rpc\_response\_max\_timeout in Neutron +======================================================== + +You can add the rpc\_response\_max\_timeout to Neutron using Helm +overrides. + +.. rubric:: |context| + +Maximum rpc timeout is now configurable by rpc\_response\_max\_timeout from +Neutron config instead of being calculated as 10 \* rpc\_response\_timeout. + +This configuration can be used to change the maximum rpc timeout. If the +maximum rpc timeout is too big, some requests which should fail will be held +for a long time before the server returns failure. If this value is too small +and the server is very busy, the requests may need more time than maximum rpc +timeout and the requests will fail though they can succeed with a bigger +maximum rpc timeout. + +.. rubric:: |proc| + +1. Create a yaml file to add configuration rpc\_response\_max\_timeout in + Neutron. + + .. code-block:: none + + ~(keystone_admin)]$ cat > neutron-overrides.yaml < -n openstack – cat /etc/neutron/neutron.conf | grep rpc_response_max_timeout + rpc_response_max_timeout = 600 + $ cat /etc/neutron/neutron.conf | grep rpc_response_max_timeout \ No newline at end of file diff --git a/doc/source/system_configuration/application-commands-and-helm-overrides.rst b/doc/source/system_configuration/application-commands-and-helm-overrides.rst new file mode 100644 index 000000000..6d3d8c67a --- /dev/null +++ b/doc/source/system_configuration/application-commands-and-helm-overrides.rst @@ -0,0 +1,469 @@ + +.. hby1568295041837 +.. _sysconf-application-commands-and-helm-overrides: + +======================================= +Application Commands and Helm Overrides +======================================= + +Use |prod| :command:`system application` and :command:`system helm-override` +commands to manage containerized applications provided as part of |prod|. + +.. rubric:: |proc| + +- Use the following command to list all containerized applications provided + as part of |prod|. + + .. code-block:: none + + ~(keystone_admin)$ system application-list [--nowrap] + + where: + + ``--nowrap`` + prevents line wrapping of the output. + + For example: + + .. parsed-literal:: + + ~(keystone_admin)$ system application-list --nowrap + + +-------------+---------+---------------+----------------+----------+-----------+ + | application | version | manifest name | manifest file | status | progress | + +-------------+---------+---------------+----------------+----------+-----------+ + | platform- | 1.0-7 | platform- | manifest.yaml | applied | completed | + | integ-apps | | integration- | | | | + | | | manifest | | | | + | |prefix|- |s| | 1.0-18 | armada- | |prefix|-openstack |s| | uploaded | completed | + | openstack | | manifest | .yaml | | | + +-------------+---------+---------------+----------------+----------+-----------+ + +- Use the following command to show details for |prod|. + + .. code-block:: none + + ~(keystone_admin)$ system application-show + + where: + + **** + is the name of the application to show details for. + + For example: + + .. parsed-literal:: + + ~(keystone_admin)$ system application-show |prefix|-openstack + + +---------------+----------------------------------+ + | Property | Value | + +---------------+----------------------------------+ + | active | False | + | app_version | 1.0-18 | + | created_at | 2019-09-06T15:34:03.194150+00:00 | + | manifest_file | |prefix|-openstack.yaml |s| | + | manifest_name | armada-manifest | + | name | |prefix|-openstack |s| | + | progress | completed | + | status | uploaded | + | updated_at | 2019-09-06T15:34:46.995929+00:00 | + +---------------+----------------------------------+ + +- Use the following command to upload application helm chart\(s\) and + manifest. + + .. code-block:: none + + ~(keystone_admin)$ system application-upload [-n | --app-name] [-v | --version] + + where the following are optional arguments: + + **** + assigns a custom name for application. You can use this name to + interact with the application in the future. + + **** + is the version of the application. + + and the following is a positional argument: + + **** + is the path to the tar file containing the application to be uploaded. + + For example: + + .. parsed-literal:: + + ~(keystone_admin)$ system application-upload |prefix|-openstack-1.0-18.tgz + +---------------+----------------------------------+ + | Property | Value | + +---------------+----------------------------------+ + | active | False | + | app_version | 1.0-18 | + | created_at | 2019-09-06T15:34:03.194150+00:00 | + | manifest_file | |prefix|-openstack.yaml | + | manifest_name | armada-manifest | + | name | |prefix|-openstack | + | progress | None | + | status | uploading | + | updated_at | None | + +---------------+----------------------------------+ + Please use 'system application-list' or 'system application-show |prefix|-openstack' to view the current progress. + +- To list the helm chart overrides for the |prod|, use the following + command: + + .. code-block:: none + + ~(keystone_admin)$ system helm-override-list + usage: system helm-override-list [--nowrap] [-l | --long] + + where the following is a positional argument: + + **** + The name of the application. + + and the following are optional arguments: + + ``--nowrap`` + No word-wrapping of output. + + ``--long`` + List additional fields in output. + + For example: + + .. parsed-literal:: + + ~(keystone_admin)$ system helm-override-list |prefix|-openstack --long + +---------------------+--------------------------------+---------------+ + | chart name | overrides namespaces | chart enabled | + +---------------------+--------------------------------+---------------+ + | aodh | [u'openstack'] | [False] | + | barbican | [u'openstack'] | [False] | + | ceilometer | [u'openstack'] | [False] | + | ceph-rgw | [u'openstack'] | [False] | + | cinder | [u'openstack'] | [True] | + | garbd | [u'openstack'] | [True] | + | glance | [u'openstack'] | [True] | + | gnocchi | [u'openstack'] | [False] | + | heat | [u'openstack'] | [True] | + | helm-toolkit | [] | [] | + | horizon | [u'openstack'] | [True] | + | ingress | [u'kube-system', u'openstack'] | [True, True] | + | ironic | [u'openstack'] | [False] | + | keystone | [u'openstack'] | [True] | + | keystone-api-proxy | [u'openstack'] | [True] | + | libvirt | [u'openstack'] | [True] | + | mariadb | [u'openstack'] | [True] | + | memcached | [u'openstack'] | [True] | + | neutron | [u'openstack'] | [True] | + | nginx-ports-control | [] | [] | + | nova | [u'openstack'] | [True] | + | nova-api-proxy | [u'openstack'] | [True] | + | openvswitch | [u'openstack'] | [True] | + | panko | [u'openstack'] | [False] | + | placement | [u'openstack'] | [True] | + | rabbitmq | [u'openstack'] | [True] | + | version_check | [] | [] | + +---------------------+--------------------------------+---------------+ + +- To show the overrides for a particular chart, use the following command. + System overrides are displayed in the **system\_overrides** section of + the **Property** column. + + .. code-block:: none + + ~(keystone_admin)$ system helm-override-show + usage: system helm-override-show + + where the following are positional arguments: + + **** + The name of the application. + + **< chart\_name>** + The name of the chart. + + **** + The namespace for chart overrides. + + For example: + + .. code-block:: none + + ~(keystone_admin)$ system helm-override-show |prefix|-openstack glance openstack + +- To modify service configuration parameters using user-specified overrides, + use the following command. To update a single configuration parameter, you + can use ``--set``. To update multiple configuration parameters, use + the ``--values`` option with a **yaml** file. + + .. code-block:: none + + ~(keystone_admin)$ system helm-override-update + usage: system helm-override-update --reuse-values --reset-values --values --set + + where the following are positional arguments: + + **** + The name of the application. + + **** + The name of the chart. + + **** + The namespace for chart overrides. + + and the following are optional arguments: + + ``--reuse-values`` + Reuse existing helm chart user override values. If reset-values is + used, reuse-values is ignored. + + ``--reset-values`` + Replace any existing helm chart overrides with the ones specified. + + ``--values`` + Specify a **yaml** file containing helm chart override values. You can + specify this value multiple times. + + ``--set`` + Set helm chart override values using the command line. Multiple + override values can be specified with multiple :command:`set` + arguments. These are processed after files passed through the + values argument. + + For example, to enable the glance debugging log, use the following + command: + + .. parsed-literal:: + + ~(keystone_admin)$ system helm-override-update |prefix|-openstack glance openstack --set conf.glance.DEFAULT.DEBUG=true + +----------------+-------------------+ + | Property | Value | + +----------------+-------------------+ + | name | glance | + | namespace | openstack | + | user_overrides | conf: | + | | glance: | + | | DEFAULT: | + | | DEBUG: true | + +----------------+-------------------+ + + The user overrides are shown in the **user\_overrides** section of the + **Property** column. + + .. note:: + To apply the updated helm chart ovverrides to the running application, + use the :command:`system application-apply` command. + +- To enable or disable the installation of a particular helm chart within an + application manifest, use the :command:`helm-chart-attribute-modify` + command. This command does not modify a chart or modify chart overrides, + which are managed through the :command:`helm-override-update` command. + + .. code-block:: none + + ~(keystone_admin)$ system helm-chart-attribute-modify [--enabled ] + + where the following is an optional argument: + + ``--enabled`` + determines whether the chart is enabled. + + and the following are positional arguments: + + **** + The name of the application. + + **** + The name of the chart. + + **** + The namespace for chart overrides. + + .. note:: + To apply the updated helm chart attribute to the running application, + use the :command:`system application-apply` command. + +- To delete all the user overrides for a chart, use the following command: + + .. code-block:: none + + ~(keystone_admin)$ system helm-override-delete + usage: system helm-override-delete + + where the following are positional arguments: + + **** + The name of the application. + + **** + The name of the chart. + + **** + The namespace for chart overrides. + + For example: + + .. parsed-literal:: + + ~(keystone_admin)$ system helm-override-delete |prefix|-openstack glance openstack + Deleted chart overrides glance:openstack for application |prefix|-openstack + +- Use the following command to apply or reapply an application, making it + available for service. + + .. code-block:: none + + ~(keystone_admin)$ system application-apply [-m | --mode] + + where the following is an optional argument: + + **mode** + An application-specific mode controlling how the manifest is + applied. This option is used to back-up and restore the + **|prefix|-openstack** application. + + and the following is a positional argument: + + **** + is the name of the application to apply. + + For example: + + .. parsed-literal:: + + ~(keystone_admin)$ system application-apply |prefix|-openstack + +---------------+----------------------------------+ + | Property | Value | + +---------------+----------------------------------+ + | active | False | + | app_version | 1.0-18 | + | created_at | 2019-09-06T15:34:03.194150+00:00 | + | manifest_file | |prefix|-openstack.yaml |s| | + | manifest_name | armada-manifest | + | name | |prefix|-openstack |s| | + | progress | None | + | status | applying | + | updated_at | 2019-09-06T15:34:46.995929+00:00 | + +---------------+----------------------------------+ + Please use 'system application-list' or 'system application-show |prefix|-openstack' to view the current progress. + +- Use the following command to abort the current application. + + .. code-block:: none + + ~(keystone_admin)$ system application-abort + + where: + + **** + is the name of the application to abort. + + For example: + + .. code-block:: none + + ~(keystone_admin)$ system application-abort |prefix|-openstack + Application abort request has been accepted. If the previous operation has not + completed/failed, it will be cancelled shortly. + + Use :command:`application-list` to confirm that the application has been + aborted. + +- Use the following command to update the deployed application to a different + version. + + .. code-block:: none + + ~(keystone_admin)$ system application-update [-n | --app-name] [-v | --app-version] + + where the following are optional arguments: + + **** + The name of the application to update. + + You can look up the name of an application using the :command:`application-list` command: + + .. code-block:: none + + ~(keystone_admin)$ system application-list + +--------------------------+----------+-------------------------------+---------------------------+----------+-----------+ + | application | version | manifest name | manifest file | status | progress | + +--------------------------+----------+-------------------------------+---------------------------+----------+-----------+ + | cert-manager | 20.06-4 | cert-manager-manifest | certmanager-manifest.yaml | applied | completed | + | nginx-ingress-controller | 20.06-1 | nginx-ingress-controller- | nginx_ingress_controller | applied | completed | + | | | -manifest | _manifest.yaml | | | + | oidc-auth-apps | 20.06-26 | oidc-auth-manifest | manifest.yaml | uploaded | completed | + | platform-integ-apps | 20.06-9 | platform-integration-manifest | manifest.yaml | applied | completed | + +--------------------------+----------+-------------------------------+---------------------------+----------+-----------+ + + The output indicates that the currently installed version of **cert-manager** is 20.06-4. + + **** + The version to update the application to. + + and the following is a positional argument which must come last: + + **** + The tar file containing the application manifest, Helm charts and + configuration file. + +- Use the following command to remove an application from service. Removing + an application will clean up related Kubernetes resources and delete all + of its installed helm charts. + + .. code-block:: none + + ~(keystone_admin)$ system application-remove + + where: + + **** + is the name of the application to remove. + + For example: + + .. parsed-literal:: + + ~(keystone_admin)$ system application-remove |prefix|-openstack + +---------------+----------------------------------+ + | Property | Value | + +---------------+----------------------------------+ + | active | False | + | app_version | 1.0-18 | + | created_at | 2019-09-06T15:34:03.194150+00:00 | + | manifest_file | |prefix|-openstack.yaml |s| | + | manifest_name | armada-manifest | + | name | |prefix|-openstack |s| | + | progress | None | + | status | removing | + | updated_at | 2019-09-06T17:39:19.813754+00:00 | + +---------------+----------------------------------+ + Please use 'system application-list' or 'system application-show |prefix|-openstack' to view the current progress. + + This command places the application in the uploaded state. + +- Use the following command to completely delete an application from the + system. + + .. code-block:: none + + ~(keystone_admin)$ system application-delete + + where: + + **** + is the name of the application to delete. + + You must run :command:`application-remove` before deleting an application. + + For example: + + .. parsed-literal:: + + ~(keystone_admin)$ system application-delete |prefix|-openstack + Application |prefix|-openstack deleted. \ No newline at end of file diff --git a/doc/source/system_configuration/applying-a-custom-branding-tarball-to-newly-installed-systems.rst b/doc/source/system_configuration/applying-a-custom-branding-tarball-to-newly-installed-systems.rst new file mode 100644 index 000000000..29f053b86 --- /dev/null +++ b/doc/source/system_configuration/applying-a-custom-branding-tarball-to-newly-installed-systems.rst @@ -0,0 +1,20 @@ + +.. hur1582149306886 +.. _applying-a-custom-branding-tarball-to-newly-installed-systems: + +========================================================== +Apply a Custom Branding Tarball to Newly Installed Systems +========================================================== + +You can apply a custom branding tarball to newly installed systems +prior to running the bootstrap playbook. + +Complete the following steps to apply the custom branding tarball: + +.. rubric:: |proc| + +#. Copy the branding tarball to the /opt/branding directory. + +#. Run the Ansible bootstrap playbook. + + The branding will be automatically updated on the Horizon Web interface. \ No newline at end of file diff --git a/doc/source/system_configuration/applying-a-custom-branding-tarball-to-running-systems.rst b/doc/source/system_configuration/applying-a-custom-branding-tarball-to-running-systems.rst new file mode 100644 index 000000000..6e953b8ae --- /dev/null +++ b/doc/source/system_configuration/applying-a-custom-branding-tarball-to-running-systems.rst @@ -0,0 +1,28 @@ + +.. cmk1582149379500 +.. _applying-a-custom-branding-tarball-to-running-systems: + +================================================== +Apply a Custom Branding Tarball to Running Systems +================================================== + +You can apply the custom branding tarball to running systems. + +Complete the following steps to apply the custom branding tarball: + +.. rubric:: |proc| + +.. _applying-a-custom-branding-tarball-to-running-systems-steps-ayv-tqy-hkb: + +#. Delete any previous branding tarball from /opt/branding. + +#. Copy the new branding tarball to the /opt/branding directory on the + active controller. + +#. Restart the Horizon Web interface. + + .. code-block:: none + + # sudo service horizon restart + +#. Lock, and unlock the inactive controller to apply the new configuration. \ No newline at end of file diff --git a/doc/source/system_configuration/assigning-a-dedicated-vlan-id-to-a-target-project-network.rst b/doc/source/system_configuration/assigning-a-dedicated-vlan-id-to-a-target-project-network.rst new file mode 100644 index 000000000..3c83b05f1 --- /dev/null +++ b/doc/source/system_configuration/assigning-a-dedicated-vlan-id-to-a-target-project-network.rst @@ -0,0 +1,191 @@ + +.. dkn1600946881404 +.. _dkn1600946881404: + +====================================================== +Assign a Dedicated VLAN ID to a Target Project Network +====================================================== + +To assign a dedicated VLAN segment ID you must first enable the Neutron +**segments** plugin. + +.. rubric:: |proc| + +#. Create a Helm overrides file to customize your Neutron configuration. + + The file must load the **segments** plugin. For example: + + .. code-block:: none + + ... + conf: + neutron: + DEFAULT: + service_plugins: + - router + - network_segment_range + - segments + ... + +#. If you have not done so already, upload the |prefix|-openstack application + charts. + + For example: + + .. parsed-literal:: + + ~(keystone_admin)]$ system application-upload |prefix|-openstack-20.10-0.tgz + +#. Update the |prefix|-openstack application using the overrides file created above. + + Assuming you named the file neutron-overrides.yaml, run: + + .. parsed-literal:: + + ~(keystone_admin)]$ system helm-override-update |prefix|-openstack neutron openstack --values neutron-overrides.yaml + + You can check on the status of the update using the + :command:`system helm-override-show` command. For example: + + .. parsed-literal:: + + ~(keystone_admin)]$ system helm-override-show |prefix|-openstack neutron openstack + +--------------------+---------------------------------------------------------------------------------------------------------------------+ + | Property | Value | + +--------------------+---------------------------------------------------------------------------------------------------------------------+ + | attributes | enabled: true | + | | | + | combined_overrides | conf: | + | | dhcp_agent: | + | | DEFAULT: | + | | interface_driver: networking_avs.neutron.agent.avs_manager.interface.VSwitchInterfaceDriver | + | | neutron: | + | | | + | ... | ... | + | | | + | user_overrides | conf: | + | | neutron: | + | | DEFAULT: | + | | service_plugins: | + | | - router | + | | - network_segment_range | + | | - segments | + | | | + +--------------------+---------------------------------------------------------------------------------------------------------------------+ + + +#. Apply the |prefix|-openstack application. + + .. parsed-literal:: + + ~(keystone_admin)]$ system application-apply |prefix|-openstack + +#. You can now assign the VLAN network type to a datanetwork. + + #. Identify the name of the data network to assign. + + List the available data networks and identify one to use in the heat + template as: + + .. code-block:: none + + physical_network: + + In this example, we use **datanet-1**. + + #. Create a heat template. + + For example: + + .. code-block:: none + + ~(keystone_admin)]$ cat < my_heat_template.yml + heat_template_version: 2017-09-01 + + resources: + + external01: + type: OS::Neutron::Net + properties: + name: external001 + shared: "true" + + # Network segement + segement01: + type: OS::Neutron::Segment + properties: + network: { get_resource: external01 } + network_type: "vlan" + physical_network: "datanet-1" + segmentation_id: 2111 + + external01-subnet: + type: OS::Neutron::Subnet + properties: + network: { get_resource: external01 } + name: external02-subnet + cidr: 10.10.10.0/24 + segment: { get_resource: segement01 } + EOF + + #. Apply the template. + + .. code-block:: none + + ~(keystone_admin)]$ OS_AUTH_URL=http://keystone.openstack.svc.cluster.local/v3 + ~(keystone_admin)]$ openstack stack create -t my_heat_template.yml --wait test1-st + 2020-10-16 21:20:34Z [test1-st]: CREATE_IN_PROGRESS Stack CREATE started + 2020-10-16 21:20:34Z [test1-st.external01]: CREATE_IN_PROGRESS state changed + 2020-10-16 21:20:35Z [test1-st.external01]: CREATE_COMPLETE state changed + 2020-10-16 21:20:35Z [test1-st.segement01]: CREATE_IN_PROGRESS state changed + 2020-10-16 21:20:37Z [test1-st.segement01]: CREATE_COMPLETE state changed + 2020-10-16 21:20:37Z [test1-st.external01-subnet]: CREATE_IN_PROGRESS state changed + 2020-10-16 21:20:38Z [test1-st.external01-subnet]: CREATE_COMPLETE state changed + 2020-10-16 21:20:38Z [test1-st]: CREATE_COMPLETE Stack CREATE completed successfully + + +#. Confirm the configuration. + + #. List network segments. + + .. code-block:: none + + ~(keystone_admin)]$ openstack network segment list + +--------------------------------------+--------------------------------------------+--------------------------------------+--------------+---------+ + | ID | Name | Network | Network Type | Segment | + +--------------------------------------+--------------------------------------------+--------------------------------------+--------------+---------+ + | 502e3f4f-6187-4737-b1f5-1be7fd3fc45e | test1-st-segement01-mx6fa5eonzrr | 6bbd3e4e-9419-49c6-a68a-ed51fbc1cab7 | vlan | 2111 | + | faf63edf-63f0-4e9b-b930-5fa8f43b5484 | None | 865b9576-1815-4734-a7e4-c2d0dd31d19c | vlan | 2001 | + +--------------------------------------+--------------------------------------------+--------------------------------------+--------------+---------+ + + #. List subnets. + + .. code-block:: none + + ~(keystone_admin)]$ openstack subnet list + +------------...----+---------------------+---------------...-----+------------------+ + | ID ... | Name | Network ... | Subnet | + +------------...----+---------------------+---------------...-----+------------------+ + | 0f64c277-82...f2f | external01-subnet | 6bbd3e4e-9419-...cab7 | 10.10.10.0/24 | + | bb9848b6-4b...ddc | subnet-temp | 865b9576-1815-...d19c | 192.168.17.0/24 | + +------------...----+---------------------+-----------------------+------------------+ + + In this example, the subnet external01-subnet uses a dedicated segment ID. + + #. Listing details for the subnet shows that it uses the segment ID created earlier. + + .. code-block:: none + + ~(keystone_admin)]$ openstack subnet show 0f64c277-82d7-4161-aa47-fc4cfadacf2f + + The output from this command is a row from ascii table output, it + displays the following: + + .. code-block:: none + + |grep segment | segment_id | 502e3f4f-6187-4737-b1f5-1be7fd3fc45e | + + .. note:: + Dedicated segment IDs should not be in the range created using the + :command:`openstack network segment range create` commands. This can + cause conflict errors. \ No newline at end of file diff --git a/doc/source/system_configuration/branding-the-login-banner-during-commissioning.rst b/doc/source/system_configuration/branding-the-login-banner-during-commissioning.rst new file mode 100644 index 000000000..a7e2e275b --- /dev/null +++ b/doc/source/system_configuration/branding-the-login-banner-during-commissioning.rst @@ -0,0 +1,78 @@ + +.. xjc1559744910969 +.. _branding-the-login-banner-during-commissioning: + +=========================================== +Brand the Login Banner During Commissioning +=========================================== + +You can customize the pre-login message \(issue\) and post-login |MOTD| across +the entire |prod| cluster during system commissioning and installation. + +The following files can be customized to use this feature: + +.. _branding-the-login-banner-during-commissioning-d665e16: + +.. table:: + :widths: auto + + +---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------+ + | /etc/issue | console login banner | + +---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------+ + | /etc/issue.net | ssh login banner | + +---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------+ + | /etc/motd.head | message of the day header | + +---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------+ + | /etc/motd.tail | message of the day footer | + | | | + | | This file is not present by default. You must first create it to apply your customizations. | + +---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------+ + +issue and issue.net are free standing files. /etc/motd is generated +from the following sources in the order presented: + +.. _branding-the-login-banner-during-commissioning-d665e97: + +#. /etc/motd.head + +#. /etc/sysinv/motd.system + +#. /etc/platform/motd.license + +#. /etc/motd.tail + +Complete the following procedure to customize the login banner during +installation and commissioning: + +.. rubric:: |proc| + +#. Provide customization files. + + To customize any of the four customizable banner files listed above, + provide the new files in the following locations: + + - /opt/banner/issue + + - /opt/banner/issue.net + + - /opt/banner/motd.head + + - /opt/banner/motd.tail + + See the :command:`issue` and :command:`motd` man pages for details on + file syntax. + +#. Run Ansible Bootstrap playbook. + + When Ansible Bootstrap playbook is run, these files are moved from + /opt/banner to configuration storage and are applied to the controller + node as it is initialized. All nodes in the cluster which are + subsequently configured will retrieve these custom banners as well. + + .. note:: + In the event that an error is reported for the banner customization, + it can be repeated after running Ansible Bootstrap playbook and + system deployment. Customization errors do not impact Ansible + Bootstrap playbook. + See :ref:`Brand the Login Banner on a Commissioned System ` + for more information. \ No newline at end of file diff --git a/doc/source/system_configuration/branding-the-login-banner-on-a-commissioned-system.rst b/doc/source/system_configuration/branding-the-login-banner-on-a-commissioned-system.rst new file mode 100644 index 000000000..46186d77c --- /dev/null +++ b/doc/source/system_configuration/branding-the-login-banner-on-a-commissioned-system.rst @@ -0,0 +1,107 @@ + +.. oth1559748376782 +.. _branding-the-login-banner-on-a-commissioned-system: + +=============================================== +Brand the Login Banner on a Commissioned System +=============================================== + +You can customize the pre-login message \(issue\) and post-login +|MOTD| on an installed and commissioned |prod| cluster, simplifying propagation +of the customized files. + +.. rubric:: |context| + +The following files can be customized to use this feature: + +.. _branding-the-login-banner-on-a-commissioned-system-d665e16: + +.. table:: + :widths: auto + + +---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------+ + | /etc/issue | console login banner | + +---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------+ + | /etc/issue.net | ssh login banner | + +---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------+ + | /etc/motd.head | message of the day header | + +---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------+ + | /etc/motd.tail | message of the day footer | + | | | + | | This file is not present by default. You must first create it to apply your customizations. | + +---------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------+ + +issue and issue.net are free standing files. /etc/motd is generated from the +following sources in the order presented: + +.. _branding-the-login-banner-on-a-commissioned-system-d665e97: + +#. /etc/motd.head + +#. /etc/sysinv/motd.system + +#. /etc/platform/motd.license + +#. /etc/motd.tail + + +Complete the following procedure to customize the login banner on a +commissioned system: + +.. rubric:: |proc| + +#. Log in to the active controller. + +#. Switch to root user. + + .. code-block:: none + + $ sudo bash + # + +#. Provide any of the customized banner files in a directory of your + choosing. This example uses /opt/banner: + + - /opt/banner/issue + + - /opt/banner/issue.net + + - /opt/banner/motd.head + + - /opt/banner/motd.tail + + See the :command:`issue` and :command:`motd` man pages for details on file + syntax. + +#. Apply the customization using :command:`apply\_banner\_customization`. + + .. code-block:: none + + # apply_banner_customization + + For example: + + .. code-block:: none + + # apply_banner_customization /opt/banner + + The default path, if no parameter is specified, is the current working + directory. + + The banners are applied to the configuration and installed on the current + node, active controller. + +#. Lock and unlock other nodes in the cluster, either from the CLI or the + GUI, to install the customization on each node. + + For example: + + .. code-block:: none + + ~(keystone_admin)$ system host-lock worker-0 + ~(keystone_admin)$ system host-unlock worker-0 + +.. rubric:: |result| + +All subsequently added nodes will automatically inherit the banner +customizations. \ No newline at end of file diff --git a/doc/source/system_configuration/changing-the-mtu-of-an-oam-interface-using-horizon.rst b/doc/source/system_configuration/changing-the-mtu-of-an-oam-interface-using-horizon.rst new file mode 100644 index 000000000..c3325c954 --- /dev/null +++ b/doc/source/system_configuration/changing-the-mtu-of-an-oam-interface-using-horizon.rst @@ -0,0 +1,52 @@ + +.. paa1552672791171 +.. _changing-the-mtu-of-an-oam-interface-using-horizon: + +================================================ +Change the MTU of an OAM Interface Using Horizon +================================================ + +You can change the |MTU| value of an |OAM| interface from the Horizon Web +interface. + +If you prefer, you can use the CLI. See :ref:`Change the MTU of an OAM Interface Using the CLI `. + +Controller configuration changes require each controller to be +locked. This requires a swact during the procedure. + +.. rubric:: |proc| + +#. Lock the standby controller. + + #. From **Admin** \> **Platform** \> **Host Inventory**, select + the **Hosts** tab. + + #. From the **Edit** menu for the standby controller, select **Lock Host**. + + .. figure:: figures/rst1442611298701.png + :scale: 100% + +#. Edit the |OAM| interface to change the |MTU| value. + + #. Click the name of the standby controller, then select + the **Interfaces** tab and click **Edit** for the |OAM| interface. + + #. In the Edit Interface dialog, edit the **MTU** field, and then + click **Save**. + +#. Unlock the standby controller. + + From the **Edit** menu for the standby controller, select **Unlock Host**. + +#. Swact the hosts. + + From the **Edit** menu for the active controller, select **Swact Host**. + + .. figure:: figures/psa1420751608971.png + :scale: 100% + +#. Lock the new standby controller. + +#. Modify the |MTU| of the |OAM| interface on the new standby controller. + +#. Unlock the standby controller. \ No newline at end of file diff --git a/doc/source/system_configuration/changing-the-mtu-of-an-oam-interface-using-the-cli.rst b/doc/source/system_configuration/changing-the-mtu-of-an-oam-interface-using-the-cli.rst new file mode 100644 index 000000000..ad2244e50 --- /dev/null +++ b/doc/source/system_configuration/changing-the-mtu-of-an-oam-interface-using-the-cli.rst @@ -0,0 +1,62 @@ + +.. nnm1552672805879 +.. _changing-the-mtu-of-an-oam-interface-using-the-cli: + +================================================ +Change the MTU of an OAM Interface Using the CLI +================================================ + +You can change the |MTU| value of an |OAM| interface using the CLI. + +If you prefer, you can use the Horizon Web interface; see +:ref:`Change the MTU of an OAM Interface Using Horizon +`. + +Controller configuration changes require each controller to be locked. This +requires a swact. + +.. rubric:: |proc| + +#. Lock the standby controller. + + .. code-block:: none + + ~(keystone_admin)$ system host-lock controller-1 + +#. Use the :command:`system host-if-modify` command to specify the interface + and the new MTU value on the standby controller. This example assumes the + |OAM| interface name as **oam0**. + + .. code-block:: none + + ~(keystone_admin)$ system host-if-modify controller-1 oam0 --imtu 1600 + +#. Unlock the standby controller. + + .. code-block:: none + + ~(keystone_admin)$ system host-unlock controller-1 + +#. Swact the controllers. + + .. code-block:: none + + ~(keystone_admin)$ system host-swact controller-1 + +#. Lock the new standby controller. + + .. code-block:: none + + ~(keystone_admin)$ system host-lock controller-0 + +#. Modify the |MTU| of the corresponding interface on the standby controller. + + .. code-block:: none + + ~(keystone_admin)$ system host-if-modify controller-0 oam0 --imtu 1600 + +#. Unlock the standby controller. + + .. code-block:: none + + ~(keystone_admin)$ system host-unlock controller-0 \ No newline at end of file diff --git a/doc/source/system_configuration/changing-the-oam-ip-configuration-using-horizon.rst b/doc/source/system_configuration/changing-the-oam-ip-configuration-using-horizon.rst new file mode 100644 index 000000000..5df5fe6bf --- /dev/null +++ b/doc/source/system_configuration/changing-the-oam-ip-configuration-using-horizon.rst @@ -0,0 +1,121 @@ + +.. bmj1552672912979 +.. _changing-the-oam-ip-configuration-using-horizon: + +============================================= +Change the OAM IP Configuration Using Horizon +============================================= + +You can change the External |OAM| subnet, floating IP address, controller +addresses, and default gateway at any time after installation. + +During installation, |prod| is configured with an O|AM network subnet and +related IP addresses. You can change these addresses using the Horizon Web +interface or the CLI. You can use IPv4 or IPv6 addresses. + +.. caution:: + Access to the |OAM| network is interrupted during this procedure. When a + swact is performed on the controllers, the newly active controller uses + the changed |OAM| IP addresses. The existing |OAM| IP addresses are no + longer valid, and you must use the new |OAM| IP addresses to reconnect to + the controller. Changes to external |OAM| access routing settings may also + be required. In addition, |VNC| console access to worker-node hosts is + interrupted until the hosts are locked and unlocked. + +.. rubric:: |prereq| + +Before changing the |OAM| IP configuration, review the Fault Management page +and ensure that any existing system alarms are cleared. + +.. rubric:: |proc| + +.. _changing-the-oam-ip-configuration-using-horizon-steps-xfh-24z-5p: + +#. In the |prod| Horizon, open the System Configuration page. + + The System Configuration page is available + from **Admin** \> **Platform** \> **System Configuration** in the + left-hand pane. + +#. Select the OAM IP tab. + + The |OAM| IP page appears, showing the currently defined |OAM| network + configuration. + + .. figure:: figures/jow1413850481192.png + :scale: 100% + +#. Click **Edit OAM IP**. + + The Edit OAM IP dialog box appears. + + .. figure:: figures/jow1413850497887.png + :scale: 100% + +#. Replace the IP Subnet and/or IP addresses with different ones as required. + + .. note:: + If you change the IP address version \(IPv4 or IPv6\), ensure that the + same version is used for the DNS servers + \(see :ref:`Specify DNS Servers Using Horizon `\) + and NTP servers \(see :ref:`Configure NTP Servers and Services Using Horizon `\). + +#. Click **Save**. + + This saves the configuration change and raises + **Config out-of-date** alarms on the controller and worker nodes. + +#. Lock and unlock the standby controller to apply the configuration change. + + + #. Open the Host Inventory page, available + from **Admin** \> **Platform** \> **Host Inventory** in the left-hand + pane, and then select the **Hosts** tab. + + #. In the **Hosts** list, open the drop-down menu for the standby + controller, and then click **Lock Host**. + + The host is reported as locked. + + #. Open the drop-down menu for the standby controller, and then + click **Unlock Host**. + + #. Wait until the standby controller is reported + as **Unlocked**, **Enabled**, and **Available**. + + The **Config-out-of-date alarm** for this controller is cleared. + +#. Perform a swact to change the active controller. + + Open the drop-down menu for the active controller, and then + click **Swact Host**. + + Access to the Horizon Web interface is interrupted as control is + transferred, and Horizon becomes unresponsive. Both controllers now use + IP addresses on the new |OAM| subnet. To restore Horizon access, you must + connect the controllers physically to the new |OAM| subnet. + +#. Update the system switch configurations or controller interface + connections as required to place the controller |OAM| interfaces on the + new |OAM| subnet. + +#. Reconnect to Horizon using the new |OAM| floating IP address. + + The former active controller is now the standby controller. It is shown + with a **Config out-of-date** alarm. + +#. Lock and unlock the new standby controller to clear + the **Config out-of-date** alarm. + + Wait until the standby controller is reported + as **Unlocked**, **Enabled**, and **Available**. + +.. rubric:: |result| + +The worker node **Config out-of-date** alarms are cleared automatically as +the system configuration is updated. + +.. rubric:: |postreq| + +If alarms are not cleared after a few minutes, lock and unlock the worker +nodes to apply any other incomplete configuration changes. \ No newline at end of file diff --git a/doc/source/system_configuration/changing-the-oam-ip-configuration-using-the-cli.rst b/doc/source/system_configuration/changing-the-oam-ip-configuration-using-the-cli.rst new file mode 100644 index 000000000..b2996e66a --- /dev/null +++ b/doc/source/system_configuration/changing-the-oam-ip-configuration-using-the-cli.rst @@ -0,0 +1,70 @@ + +.. jpu1552672927783 +.. _changing-the-oam-ip-configuration-using-the-cli: + +============================================= +Change the OAM IP Configuration Using the CLI +============================================= + +If you prefer, you can use the CLI to view or change the |OAM| IP Configuration. + +To view the existing |OAM| IP configuration, use the following command. + +.. code-block:: none + + ~(keystone_admin)$ system oam-show + +-----------------+--------------------------------------+ + | Property | Value | + +-----------------+--------------------------------------+ + | created_at | 2018-05-16T20:06:25.523495+00:00 | + | isystem_uuid | b0380a56-697c-42f7-97bc-f1e407111416 | + | oam_c0_ip | 10.10.10.3 | + | oam_c1_ip | 10.10.10.4 | + | oam_floating_ip | 10.10.10.2 | + | oam_gateway_ip | 10.10.10.1 | + | oam_subnet | 10.10.10.0/24 | + | updated_at | None | + | uuid | 2818e7c4-f730-43bd-b33d-eaff53a92ee1 | + +-----------------+--------------------------------------+ + +To change the OAM IP subnet, floating IP address, gateway IP address, or +controller IP addresses, use the following command syntax. + +.. code-block:: none + + ~(keystone_admin)$ system oam-modify oam_subnet=/ \ + oam_gateway_ip= \ + oam_floating_ip= \ + oam_c0_ip= \ + oam_c1_ip= + +For example: + +.. code-block:: none + + ~(keystone_admin)$ system oam-modify oam_subnet=10.10.10.0/24 \ + oam_gateway_ip=10.10.10.1 \ + oam_floating_ip=10.10.10.2 \ + oam_c0_ip=10.10.10.3 \ + oam_c1_ip=10.10.10.4 + +.. note:: + On AIO Simplex systems, the + oam\_floating\_ip, oam\_c0\_ip and oam\_c0\_ip parameters are not + supported. To change the |OAM| IP address of a Simplex System, the parameter + oam\_ip must be used in combination with oam\_gateway\_ip and oam\_subnet. + + For example: + + .. code-block:: none + + ~(keystone_admin)$ system oam-modify oam_subnet=10.10.10.0/24 oam_gateway_ip=10.10.10.1 oam_ip=10.10.10.2 + +.. note:: + If you change the IP address version \(IPv4 or IPv6\), ensure that the + same version is used for the DNS and NTP servers. + +After changing the |OAM| server configuration, you must lock and unlock the +controllers. This process requires a swact on the controllers. Then you must +lock and unlock the worker nodes one at a time, ensuring that sufficient +resources are available to migrate any running instances. \ No newline at end of file diff --git a/doc/source/system_configuration/changing-the-timezone-configuration.rst b/doc/source/system_configuration/changing-the-timezone-configuration.rst new file mode 100644 index 000000000..f1dae8996 --- /dev/null +++ b/doc/source/system_configuration/changing-the-timezone-configuration.rst @@ -0,0 +1,57 @@ + +.. nur1552673269771 +.. _changing-the-timezone-configuration: + +================================= +Change the Timezone Configuration +================================= + +You can change the timezone defined for |prod| at any time after installation. + +You can use the CLI to view and change the timezone configuration. + +.. rubric:: |proc| + +- To view the existing timezone configuration, use the following command. + + .. code-block:: none + + $ system show + + +----------------------+--------------------------------------+ + | Property | Value | + --------------------------------------------------------------+ + | contact | None | + | created_at | 2019-12-09T16:08:34.271346+00:00 | + | description | None | + | https_enabled | False | + | location | None | + | name | 468f57ef-34c1-4e00-bba0-fa1b3f134b2b | + | region_name | RegionOne | + | sdn_enabled | False | + | security_feature | spectre_meltdown_v1 | + | service_project_name | services | + | software_version | 20.06 | + | system_mode | duplex | + | system_type | Standard | + | timezone | Canada/Eastern | + | updated_at | 2019-12-09T16:19:56.987581+00:00 | + | uuid | c0e35924-e139-4dfc-945d-47f9a663d710 | + | vswitch_type | none | + +----------------------+--------------------------------------+ + + +- To change the timezone, use the following command syntax: + + :command:`system modify --timezone=` + + For example: + + .. code-block:: none + + $ system modify --timezone=Asia/Hong_Kong + + Check that the timezone name you are using is installed in /usr/share/zoneinfo. + + After this command is executed, a several seconds delay is expected before + the configuration is applied to the system. \ No newline at end of file diff --git a/doc/source/system_configuration/configuring-a-live-migration-completion-timeout-in-nova.rst b/doc/source/system_configuration/configuring-a-live-migration-completion-timeout-in-nova.rst new file mode 100644 index 000000000..3be6271c9 --- /dev/null +++ b/doc/source/system_configuration/configuring-a-live-migration-completion-timeout-in-nova.rst @@ -0,0 +1,42 @@ + +.. err1590511228224 +.. _configuring-a-live-migration-completion-timeout-in-nova: + +===================================================== +Configure a Live Migration Completion Timeout in Nova +===================================================== + +You can configure how long to allow for a compute live migration to +complete before the operation is aborted. + +The following example applies a timeout of 300 seconds to all hosts. + +The same basic workflow of *creating an overrides file*, then +*using it to update helm overrides for the application*, and finally +*reapplying the application to make your changes effective* can be used +to apply other Nova overrides globally. + +.. rubric:: |proc| + +#. Create a yaml configuration file containing the configuration update. + + .. code-block:: none + + ~(keystone_admin)]$ cat << EOF > ./nova_override.yaml + conf: + nova: + libvirt: + live_migration_completion_timeout: 300 + EOF + +#. Update the Helm overrides using the new configuration file. + + .. parsed-literal:: + + ~(keystone_admin)]$ system helm-override-update --values ./nova_override.yaml |prefix|-openstack nova openstack --reuse-values + +#. Apply the changes. + + .. parsed-literal:: + + ~(keystone_admin)]$ system application-apply |prefix|-openstack \ No newline at end of file diff --git a/doc/source/system_configuration/configuring-a-pci-alias-in-nova.rst b/doc/source/system_configuration/configuring-a-pci-alias-in-nova.rst new file mode 100644 index 000000000..9f6a9d32c --- /dev/null +++ b/doc/source/system_configuration/configuring-a-pci-alias-in-nova.rst @@ -0,0 +1,98 @@ + +.. zrf1596656450198 +.. _configuring-a-pci-alias-in-nova: + +============================= +Configure a PCI Alias in Nova +============================= + +|PCI| passthrough devices are exposed to |VMs| using system-wide |PCI| alias. + +.. rubric:: |context| + +Each alias specifies |PCI| matching optional attributes: vendor\_id, product\_id, +and device\_type. + +where + +**name** + is a string identifying the |PCI| alias + +**device\_id** + is the device\_id value obtained from the device list + +**vendor\_id** + is the vendor\_id value obtained from the device list + +**device\_type** + is a string indicating the type of |PCI| device to add \(valid values are: + type-PCI, type-PF, or type-VF\) + +The following command displays the current configured |PCI| aliases: + +.. code-block:: none + + $ kubectl exec -it -n openstack \ + $(kubectl get pod --selector=application=nova,component=os-api -o name -n openstack) -- grep -e '\[pci\]' -e alias /etc/nova/nova.conf + + +By default it contains a list of general |PCI| aliases, such as: + +.. code-block:: none + + [pci] + alias = {"vendor_id": "8086", "product_id": "0435", "name": "qat-dh895xcc-pf"} + alias = {"vendor_id": "8086", "product_id": "0443", "name": "qat-dh895xcc-vf"} + alias = {"vendor_id": "8086", "product_id": "37c8", "name": "qat-c62x-pf"} + alias = {"vendor_id": "8086", "product_id": "37c9", "name": "qat-c62x-vf"} + alias = {"name": "gpu"} + +Additional |PCI| aliases may configured using a helm override for nova. + +The following example replaces the previous list of |PCI| aliases with a custom +list. + +.. rubric:: |proc| + +#. Create a yaml configuration file containing the configuration update. + + .. code-block:: none + + ~(keystone_admin)]$ cat << EOF > ./gpu_override.yaml + conf: + nova: + pci: + alias: + type: multistring + values: + - '{"vendor_id": "8086", "product_id": "0435", "name": + "qat-dh895xcc-pf"}' + - '{"vendor_id": "8086", "product_id": "0443", "name": + "qat-dh895xcc-vf"}' + - '{"vendor_id": "8086", "product_id": "37c8", "name": + "qat-c62x-pf"}' + - '{"vendor_id": "8086", "product_id": "37c9", "name": + "qat-c62x-vf"}' + - '{"name": "gpu"}' + - '{"vendor_id": "102b", "product_id": "0522", "name": + "matrox-g200e"}' + - '{"vendor_id": "10de", "product_id": "13f2", "name": + "nvidia-tesla-m60"}' + - '{"vendor_id": "10de", "product_id": "1b38", "name": + "nvidia-tesla-p40"}' + - '{"vendor_id": "10de", "product_id": "1eb8", + "device_type": + "type-PF", "name": "nvidia-tesla-t4-pf"}' + EOF + +#. Update the Helm overrides using the new configuration file. + + .. parsed-literal:: + + ~(keystone_admin)]$ system helm-override-update --values ./gpu_override.yaml |prefix|-openstack nova openstack --reuse-values + +#. Apply the changes. + + .. parsed-literal:: + + ~(keystone_admin)]$ system application-apply |prefix|-openstack \ No newline at end of file diff --git a/doc/source/system_configuration/configuring-ntp-servers-and-services-using-horizon.rst b/doc/source/system_configuration/configuring-ntp-servers-and-services-using-horizon.rst new file mode 100644 index 000000000..ae5006889 --- /dev/null +++ b/doc/source/system_configuration/configuring-ntp-servers-and-services-using-horizon.rst @@ -0,0 +1,110 @@ + +.. jkm1552673113419 +.. _configuring-ntp-servers-and-services-using-horizon: + +================================================ +Configure NTP Servers and Services Using Horizon +================================================ + +You can add or update a list of external NTP servers for |prod| to use for +time and clock synchronization at any time after installation, using the +Horizon Web interface. + +**NTP Service** + +.. xbooklink For more information on configuring the NTP service for clock + synchronization, see |node-doc|: `Host Inventory `. + +.. note:: + |NTP| and |PTP| are configured per host. The default is |NTP|. + + Lock/unlock the host when updating **clock\_synchronization** for the host. + +**NTP Servers** + +You can specify up to three |NTP| servers using Horizon or the CLI. + +.. note:: + When you change the |NTP|/|PTP| system configuration you have to lock/unlock + all hosts. This process requires a swact on the controllers. During a + host swact the system may raise |NTP| alarms. + +.. rubric:: |prereq| + +Before making changes to the list of |NTP| servers, review the Fault Management +page and ensure that any existing system alarms are cleared. + +.. caution:: + Before you can use fully qualified domain names \(FQDN\) instead of IPv4 + addresses, at least one valid DNS server is required. To add one, see + :ref:`Specify DNS Servers Using Horizon `. + +.. rubric:: |proc| + + +.. _configuring-ntp-servers-and-services-using-horizon-steps-xfh-24z-5p: + +#. In the |prod| Horizon, open the System Configuration page. + + The System Configuration page is available + from **Admin** \> **Platform** \> **System Configuration** in the left-hand pane. + +#. Select the NTP tab. + + The NTP page appears, showing the currently defined |NTP| servers. + + .. figure:: figures/jow1413850406811.png + :scale: 100% + +#. Click **Edit NTP**. + +#. Add or edit the IP addresses or domain names, and then click **Save**. + +#. Click **Save**. + + This raises **250.001 Configuration out-of-date** alarms against the + controllers, workers, and storages nodes. You can view the alarms on the + Fault Management page. + +#. Lock and unlock the controllers, workers, and storage nodes to apply the + configuration and clear the **Configuration out-of-date** alarms. + + Open the Host Inventory page, available + from **Admin** \> **Platform** \> **Host Inventory** in the left-hand + pane, and then select the **Hosts** tab. Hosts requiring attention are + shown with the status **Config out-of-date**. + + To lock or unlock a host, click the **Action Menu** down arrow for the + host and then use the menu selections. + + + #. Lock the standby controller. + + Wait for the lock operation to be completed. + + #. Unlock the standby controller. + + Wait for the host to become available. Its configuration is + updated, and its error message is cleared. + + #. Perform a swact on the active controller. + + Click **Action Menu \(down arrow\)** \> **Swact Host** \> for + the active controller. + + Horizon Web interface access is interrupted, and the |prod| login + screen appears. Wait briefly for the Web service to stabilize, and + then log in again. + + #. Lock the original controller \(now in standby mode\). + + Wait for the lock operation to be completed. + + #. Unlock the original controller. + + Wait for it to become available. Its configuration is updated, and its + error message is cleared. + + +#. Ensure that the **Configuration out-of-date** alarms are cleared for + both controllers. diff --git a/doc/source/system_configuration/configuring-ntp-servers-and-services-using-the-cli.rst b/doc/source/system_configuration/configuring-ntp-servers-and-services-using-the-cli.rst new file mode 100644 index 000000000..4c90f2750 --- /dev/null +++ b/doc/source/system_configuration/configuring-ntp-servers-and-services-using-the-cli.rst @@ -0,0 +1,160 @@ + +.. ktx1552673128591 +.. _configuring-ntp-servers-and-services-using-the-cli: + +================================================ +Configure NTP Servers and Services Using the CLI +================================================ + +You can use the CLI to add or update a list of |NTP| servers and services. + +**NTP Servers** + +You can specify up to three |NTP| servers using the CLI or the Horizon Web +interface. For more information, see :ref:`Configure NTP Servers and Services Using Horizon `. + +To view the existing |NTP| server configuration, use the following command. + +.. code-block:: none + + ~(keystone_admin)$ system ntp-show + +--------------+----------------------------------------------+ + | Property | Value | + +--------------+----------------------------------------------+ + | uuid | c65d5dcd-de6c-4ff9-89a1-c385dd4c7310 | + | ntpservers | 0.pool.ntp.org,1.pool.ntp.org,3.pool.ntp.org | + | isystem_uuid | a16d7b07-1d42-41cf-b001-04bc25216a2b | + | created_at | 2019-12-07T18:31:14.242942+00:00 | + | updated_at | 2019-12-07T18:42:09.244572+00:00 | + +--------------+----------------------------------------------+ + +.. note:: + When you change the |NTP| system configuration you must lock/unlock all + hosts. This process requires a swact on the controllers. During a host + swact the system may raise |NTP| alarms. + +To change the |NTP| server IP addresses, use the following command syntax. The +ntpservers option takes a comma-delimited list of |NTP| server names. + +.. code-block:: none + + ~(keystone_admin)$ system ntp-modify \ + ntpservers= + +For example: + +.. code-block:: none + + ~(keystone_admin)$ system ntp-modify ntpservers=0.pool.ntp.org,1.pool.ntp.org,3.pool.ntp.org + +**NTP Service** + +Clock synchronization, synchronizes time across multiple systems in a +network. The default value for **clock\_synchronization** is **ntp**. + +.. xbooklink For more information on configuring the NTP service for clock + synchronization, see |node-doc|: `Host Inventory `. + +.. note:: + |NTP| and |PTP| is configured per host. Lock/unlock the host when + updating **clock\_synchronization** for the host. + +Use the following command to change the clock synchronization on the host: + +.. code-block:: none + + ~(keystone_admin)$ system host-update controller-0 clock_synchronization=ntp + +-----------------------+--------------------------------------------+ + | Property | Value | + +-----------------------+--------------------------------------------+ + | action | none | + | administrative | unlocked | + | availability | available | + | bm_ip | None | + | bm_type | None | + | bm_username | None | + | boot_device | /dev/disk/by-path/pci-0000:00:1f.2-ata-1.0 | + | capabilities | {u'stor_function': u'monitor'} | + | clock_synchronization | ntp | + | config_applied | 16dfa935-e21e-4737-90f4-1afa83a3091b | + | config_status | None | + | config_target | 16dfa935-e21e-4737-90f4-1afa83a3091b | + | console | ttyS0,115200n8 | + | created_at | 2020-02-27T15:00:07.108865+00:00 | + | hostname | controller-0 | + | id | 1 | + | install_output | text | + | install_state | None | + | install_state_info | None | + | inv_state | inventoried | + | invprovision | provisioned | + | location | {} | + | mgmt_ip | 192.168.204.3 | + | mgmt_mac | 00:00:00:00:00:00 | + | operational | enabled | + | personality | controller | + | reserved | False | + | rootfs_device | /dev/disk/by-path/pci-0000:00:1f.2-ata-1.0 | + | serialid | None | + | software_load | 20.06 | + | subfunction_avail | available | + | subfunction_oper | enabled | + | subfunctions | controller,worker | + | task | | + | tboot | false | + | ttys_dcd | None | + | updated_at | 2020-02-28T17:21:42.374847+00:00 | + | uptime | 7403 | + | uuid | cc870915-b8dd-4989-914c-7095eabe36e8 | + | vim_progress_status | services-enabled | + +-----------------------+--------------------------------------------+ + +To view the |NTP| service configuration, use the following command: + +.. code-block:: none + + ~(keystone_admin)$ system host-show controller-0 + +-----------------------+------------------------------------------------+ + | Property | Value | + +-----------------------+------------------------------------------------+ + | action | none | + | administrative | unlocked | + | availability | available | + | bm_ip | None | + | bm_type | None | + | bm_username | None | + | boot_device | /dev/disk/by-path/pci-0000:04:00.0-sas | + | |-0x5001e6754aa38000-lun-0 | + | capabilities | {u'stor_function': u'monitor', u'Personality': | + | | u'Controller-Active'} | + | clock_synchronization | ntp | + | config_applied | 590f29ad-19e2-43ee-855e-f765814e3ecd | + | config_status | Config out-of-date | + | config_target | cd18ec25-c030-4b0c-862b-c39726275743 | + | console | ttyS0,115200n8 | + | created_at | 2020-02-27T18:32:58.752361+00:00 | + | hostname | controller-0 | + | id | 1 | + | install_output | text | + | install_state | None | + | install_state_info | None | + | inv_state | inventoried | + | invprovision | provisioned | + | location | {} | + | mgmt_ip | 192.168.204.3 | + | mgmt_mac | 00:1e:67:54:aa:39 | + | operational | enabled | + | personality | controller | + | reserved | False | + | rootfs_device | /dev/disk/by-path/pci-0000:04:00.0-sas | + | | -0x5001e6754aa38000-lun-0 | + | serialid | None | + | software_load | 20.06 | + | task | | + | tboot | false | + | ttys_dcd | None | + | updated_at | 2020-02-28T15:17:06.658008+00:00 | + | uptime | 159970 | + | uuid | 92c86da2-adb7-4fb2-92fc-82759e25108d | + | vim_progress_status | services-enabled | + +-----------------------+------------------------------------------------+ diff --git a/doc/source/system_configuration/configuring-ptp-service-using-horizon.rst b/doc/source/system_configuration/configuring-ptp-service-using-horizon.rst new file mode 100644 index 000000000..af087ef57 --- /dev/null +++ b/doc/source/system_configuration/configuring-ptp-service-using-horizon.rst @@ -0,0 +1,114 @@ + +.. pzk1552673010743 +.. _configuring-ptp-service-using-horizon: + +=================================== +Configure PTP Service Using Horizon +=================================== + +The |PTP| is a protocol used to synchronize clocks in a network. You can use +the Horizon Web interface to configure these services on the host. + +|PTP| provides more accurate time synchronization than |NTP|. |NTP| typically +provides time synchronization accuracy on the order of milliseconds, while +|PTP| provides time synchronization accuracy on the order of microseconds. + +.. xbooklink For more information on configuring the PTP service for clock + synchronization, see |node-doc|: `Host Inventory `. + +A |PTP| master must be present on the |OAM| Network, broadcasting |PTP| time +messages. + +.. note:: + |NTP| and |PTP| are configured per host. Lock/unlock the host when + updating **clock\_synchronization** for the host. + +.. rubric:: |prereq| + +Review the Fault Management page and ensure that any existing system alarms +are cleared. + +.. rubric:: |proc| + +.. _configuring-ptp-service-using-horizon-steps-xfh-24z-5p: + +#. In the |prod| Horizon, open the System Configuration page. + + The System Configuration page is available + from **Admin** \> **Platform** \> **System Configuration** in the + left-hand pane. + +#. Select the |PTP| tab. + + The |PTP| page appears. + +#. Click **Edit PTP**. Update the configuration of the |PTP| service. + + - **PTP Time Stamping Mode**: Hardware time stamping is the default + option, and achieves best time syncing. + + - **PTP Network Transport**: Switch between IEEE 802.3 network + transport \(L2\) or |UDP| IPv4/v6 network transport for |PTP| + messaging. + + .. note:: + L2 is the default option. + + If you use |UDP| for |PTP| transport, each |PTP| interface must have + an IP assigned. This is enforced during host unlock, and when + switching |PTP| transport to |UDP|. + + - **PTP Delay Mechanism** + + Set the |PTP| delay mechanism, the options are: + + - E2E: default delay request-response + + - P2P: peer delay + +#. Click **Save**. + + This raises **250.001 Configuration out-of-date** alarms against the + controllers, workers, and storages nodes. You can view the alarms on + the Fault Management page. + +#. Lock and unlock the controllers, workers, and storage nodes to apply the + configuration and clear the **Configuration out-of-date** alarms. + + Open the Host Inventory page, available + from **Admin** \> **Platform** \> **Host Inventory** in the left-hand + pane, and then select the **Hosts** tab. Hosts requiring attention are + shown with the status **Config out-of-date**. + + To lock or unlock a host, click the **Action Menu** down arrow for the + host and then use the menu selections. + + #. Lock the standby controller. + + Wait for the lock operation to be completed. + + #. Unlock the standby controller. + + Wait for the host to become available. Its configuration is + updated, and its error message is cleared. + + #. Perform a swact on the active controller. + + Click **Action Menu \(down arrow\)** \> **Swact Host** \> for + the active controller. + + Horizon Web interface access is interrupted, and the |prod| login + screen appears. Wait briefly for the Web service to stabilize, and + then log in again. + + #. Lock the original controller \(now in standby mode\). + + Wait for the lock operation to be completed. + + #. Unlock the original controller. + + Wait for it to become available. Its configuration is updated, and + its error message is cleared. + +#. Ensure that the **Configuration out-of-date** alarms are cleared for + both controllers. \ No newline at end of file diff --git a/doc/source/system_configuration/configuring-ptp-service-using-the-cli.rst b/doc/source/system_configuration/configuring-ptp-service-using-the-cli.rst new file mode 100644 index 000000000..dfe0a7659 --- /dev/null +++ b/doc/source/system_configuration/configuring-ptp-service-using-the-cli.rst @@ -0,0 +1,275 @@ + +.. cyw1552673027689 +.. _configuring-ptp-service-using-the-cli: + +=================================== +Configure PTP Service Using the CLI +=================================== + +You can use the CLI to configure |PTP| services. + +.. contents:: + :local: + :depth: 1 + +For information on configuring the |PTP| service for clock synchronization +using the Horizon Web interface see +:ref:`Configure PTP Service Using Horizon +`. + +You can also specify the |PTP| service for **clock\_synchronization** using +the web administration interface. + +.. xbooklink For more information, see |node-doc|: `Host Inventory `. + +**PTP Service** + +To view the existing |PTP| status, use the following command. + +.. code-block:: none + + ~(keystone_admin)$ system ptp-show + +--------------+--------------------------------------+ + | Property | Value | + +--------------+--------------------------------------+ + | uuid | 4844eca1-13bb-471e-9162-e5f2bb97d650 | + | mode | hardware | + | transport | l2 | + | mechanism | e2e | + | isystem_uuid | a16d7b07-1d42-41cf-b001-04bc25216a2b | + | created_at | 2019-12-09T16:08:34.319374+00:00 | + | updated_at | None | + +--------------+--------------------------------------+ + +.. warning:: + |NTP| and |PTP| are mutually exclusive on a particular host; only one can be + enabled at any time. + +The default value for **clock\_synchronization** is **ntp**. Use the +following command to change the clock synchronization on the host. |NTP| +and |PTP| are configured per host. Lock/unlock the host when updating. + +.. code-block:: none + + ~(keystone_admin)$ system host-update controller-0 clock_synchronization=ptp + +-----------------------+---------------------------------------+ + | Property | Value | + +-----------------------+---------------------------------------+ + | action | none | + | administrative | unlocked | + | availability | available | + | bm_ip | None | + | bm_type | None | + | bm_username | None | + | boot_device | /dev/disk/by-path/pci-0000:04:00.0-sas| + | | -0x5001e6754aa38000-lun-0 | + | capabilities | {u'stor_function': u'monitor'} | + | clock_synchronization | ptp | + | config_applied | 590f29ad-19e2-43ee-855e-f765814e3ecd | + | config_status | None | + | config_target | 590f29ad-19e2-43ee-855e-f765814e3ecd | + | console | ttyS0,115200n8 | + | created_at | 2019-12-07T18:32:58.752361+00:00 | + | hostname | controller-0 | + | id | 1 | + | install_output | text | + | install_state | None | + | install_state_info | None | + | inv_state | inventoried | + | invprovision | provisioned | + | location | {} | + | mgmt_ip | 192.168.204.3 | + | mgmt_mac | 00:1e:67:54:aa:39 | + | operational | enabled | + | personality | controller | + | reserved | False | + | rootfs_device | /dev/disk/by-path/pci-0000:04:00.0 | + | | -sas-0x5001e6754aa38000-lun-0 | + | serialid | None | + | software_load | 20.06 | + | task | | + | tboot | false | + | ttys_dcd | None | + | updated_at | 2019-12-07T21:17:28.627489+00:00 | + | uptime | 9020 | + | uuid | 92c86da2-adb7-4fb2-92fc-82759e25108d | + | vim_progress_status | services-enabled | + +-----------------------+---------------------------------------+ + +To view the |PTP| service configuration, use the following command: + +.. code-block:: none + + ~(keystone_admin)$ system host-show controller-0 + +-----------------------+------------------------------------------------+ + | Property | Value | + +-----------------------+------------------------------------------------+ + | action | none | + | administrative | unlocked | + | availability | available | + | bm_ip | None | + | bm_type | None | + | bm_username | None | + | boot_device | /dev/disk/by-path/pci-0000:04:00.0-sas | + | |-0x5001e6754aa38000-lun-0 | + | capabilities | {u'stor_function': u'monitor', u'Personality': | + | | u'Controller-Active'} | + | clock_synchronization | ptp | + | config_applied | 590f29ad-19e2-43ee-855e-f765814e3ecd | + | config_status | Config out-of-date | + | config_target | cd18ec25-c030-4b0c-862b-c39726275743 | + | console | ttyS0,115200n8 | + | created_at | 2019-12-09T16:10:19.143372+00:00 | + | hostname | controller-0 | + | id | 1 | + | install_output | text | + | install_state | None | + | install_state_info | None | + | inv_state | inventoried | + | invprovision | provisioned | + | location | {} | + | mgmt_ip | 192.168.204.3 | + | mgmt_mac | 00:1e:67:54:aa:39 | + | operational | enabled | + | personality | controller | + | reserved | False | + | rootfs_device | /dev/disk/by-path/pci-0000:04:00.0-sas | + | | -0x5001e6754aa38000-lun-0 | + | serialid | None | + | software_load | 20.06 | + | task | | + | tboot | false | + | ttys_dcd | None | + | updated_at | 2019-12-10T14:55:58.595239+00:00 | + | uptime | 159970 | + | uuid | 92c86da2-adb7-4fb2-92fc-82759e25108d | + | vim_progress_status | services-enabled | + +-----------------------+------------------------------------------------+ + + +.. _configuring-ptp-service-using-the-cli-ul-srp-rnn-3jb: + +- **PTP Time Stamping Mode**: |NTP| and |PTP| are configured per host. + Lock/unlock the host when Hardware time stamping is the default + option, and achieves best time synching. Use the following command: + + .. code-block:: none + + ~(keystone_admin)$ system ptp-modify --mode= + +- **PTP Network Transport**: Switch between IEEE 802.3 network + transport \(L2\) or |UDP| IPv4/v6 network transport for |PTP| + messaging. Use the following command: + + .. code-block:: none + + ~(keystone_admin)$ system ptp-modify --transport= + + .. note:: + L2 is the default option. + + If you use |UDP| for |PTP| transport, each |PTP| interface must have an + IP assigned. This is enforced during host unlock, and when switching + |PTP| transport to |UDP|. + +- **PTP Delay Mechanism** + + Set the |PTP| delay mechanism, the options are: + + - E2E: default delay request-response + + - P2P: peer delay + + Use the following command: + + .. code-block:: none + + ~(keystone_admin)$ system ptp-modify --mechanism= + +- **PTP Role** + + |PTP| master/slave interfaces are not defined by default. They must be + specified by the administrator for each host. + + The **ptp\_role** option can be added to interfaces, and can be defined + for master, slave, and none. This option allows administrators to + configure interfaces that can be used for |PTP| services. The master and + slave roles are limited to platform, |SRIOV|, and VF interfaces. Any number + of master and slave interfaces can be specified per host. + + If a host has **clock\_synchronization=ptp**, there must be at least one + host interface with a |PTP| role specified. This is enforced during host + unlock. + + For example, this service can be specified using the following commands: + + .. code-block:: none + + ~(keystone_admin)$ system host-if-modify compute-3 ens803f0 -n sriovptp --ptp-role slave + +To apply changes to hosts, use the following command: + +.. code-block:: none + + ~(keystone_admin)$ system ptp-apply + +|PTP| changes will be applied to all unlocked hosts configured with ptp +clock\_synchronization. + +.. _configuring-ptp-service-using-the-cli-section-qn1-p3d-vkb: + +---------------------- +Advanced Configuration +---------------------- + +Using service parameters, you can customize a wide range of linuxptp module +settings to use the system in a much wider range of |PTP| configurations. + +.. caution:: + These parameters are written to the ptp4l configuration file without error + checking. Caution must be taken to ensure that parameter names and + values are correct as errors will cause ptp4l launch failures. + +The following service parameters are available: + +**ptp global =** + This service parameter allows you to write or overwrite values found + in the global section of the ptp4l configuration file. For example, + the command + + .. code-block:: none + + ~(keystone_admin)$ system service-parameter-add ptp global domainNumber=24 + + results in the following being written to the configuration file: + + .. code-block:: none + + domainNumber 24 + + ptp global service parameters take precedence over the system ptp + values. For example, if the system ptp delay mechanism is + **E2E**, and you subsequently run the command + + .. code-block:: none + + ~(keystone_admin)$ system service-parameter-add ptp global delay_mechanism=P2P + + Then the **P2P** will be used instead. + +**ptp phc2sys update-rate=** + This parameter controls the update-rate of the phc2sys service, in + seconds. + +**ptp phc2sys summary-updates=** + This parameter controls the number of clock updates to be included in + summary statistics. + +To apply service parameter changes to hosts, use the following command: + +.. code-block:: none + + ~(keystone_admin)$ system service-parameter-apply ptp + +|PTP| changes will be applied to all unlocked hosts configured with +ptp clock\_synchronization. \ No newline at end of file diff --git a/doc/source/system_configuration/configuring-the-rpc-response-timeout-in-cinder.rst b/doc/source/system_configuration/configuring-the-rpc-response-timeout-in-cinder.rst new file mode 100644 index 000000000..cd3889b2f --- /dev/null +++ b/doc/source/system_configuration/configuring-the-rpc-response-timeout-in-cinder.rst @@ -0,0 +1,41 @@ + +.. apa1590511404706 +.. _configuring-the-rpc-response-timeout-in-cinder: + +============================================ +Configure the RPC Response Timeout in Cinder +============================================ + +You can change the Cinder |RPC| response timeout for all hosts using a helm +override. + +.. rubric:: |proc| + +#. Create the Cinder overrides files. + + .. code-block:: none + + ~(keystone_admin)]$ cat < ~/cinder-overrides.yaml + conf: + cinder: + DEFAULT: + rpc_response_timeout: 30 + EOF + +#. Update the Cinder overrides. + + .. parsed-literal:: + + ~(keystone_admin)]$ system helm-override-update --values /home/sysadmin/cinder-overrides.yaml |prefix|-openstack cinder openstack --reuse-values + +#. Update |prefix|-openstack to apply the update. + + .. parsed-literal:: + + ~(keystone_admin)]$ system application-apply |prefix|-openstack + +#. Confirm that the update has applied successfully. + + .. code-block:: none + + ~(keystone_admin)]$ kubectl exec -n openstack -- grep rpc_response_timeout /etc/cinder/cinder.conf \ No newline at end of file diff --git a/doc/source/system_configuration/console-keyboard-mapping.rst b/doc/source/system_configuration/console-keyboard-mapping.rst new file mode 100644 index 000000000..e81ce230d --- /dev/null +++ b/doc/source/system_configuration/console-keyboard-mapping.rst @@ -0,0 +1,57 @@ + +.. rws1552674043508 +.. _console-keyboard-mapping: + +======================== +Console Keyboard Mapping +======================== + +You can change the keyboard layout settings used on the text console for +a |prod| node. + +You can log in to the console using the US keyboard layout and then change +the keyboard settings, if required. Use the following CLI commands to change +the keyboard layout settings on your keyboard: + +To display the current console keyboard settings that are configured for the +virtual console: + +.. code-block:: none + + $ localectl status + +For example, + +.. code-block:: none + + System Locale:LANG=en_US.UTF-8 + VC Keymap:us + X11 Layout:n/a + +To check if a keyboard layout can be configured on your system, for example: + +.. code-block:: none + + $ localectl list-keymaps|fgrep 106 + jp 106 + +To set the console keyboard layout, use the following syntax: + +.. code-block:: none + + $ sudo localectl set-keymap + +For example, to use jp106: + +.. code-block:: none + + $ sudo localectl set-keycap jp106 + +.. code-block:: none + + $ localectl status + System Locale:LANG=en_US.UTF-8 + VC Keymap:jp106 + X11 Layout:jp + X11 Model:jp106 + X11 Options:terminate:ctrl_alt_bksp \ No newline at end of file diff --git a/doc/source/system_configuration/converting-a-duplex-system-to-direct-connection.rst b/doc/source/system_configuration/converting-a-duplex-system-to-direct-connection.rst new file mode 100644 index 000000000..856c5b558 --- /dev/null +++ b/doc/source/system_configuration/converting-a-duplex-system-to-direct-connection.rst @@ -0,0 +1,58 @@ + +.. uyd1552672677585 +.. _converting-a-duplex-system-to-direct-connection: + +============================================ +Convert a Duplex System to Direct Connection +============================================ + +On a |prod| |AIO| system configured to use switch-based network connection for +the management and cluster host networks, you can convert to direct +\(peer-to-peer\) connection. + +The connection type is initially configured at installation. You can change +it at any time. You must use the CLI to make the change. + +.. xbooklinkFor more about the available connection modes, + see |planning-doc|: `Networks for a Duplex System `. + +.. rubric:: |proc| + +#. Use the :command:`system modify` command to specify direct + connection \(**duplex-direct**\). + + .. code-block:: none + + ~(keystone_admin)$ system modify --system_mode=duplex-direct + + This raises **Config-out-of-date** alarm messages on both controllers. + +#. Lock and then unlock the standby controller to update its configuration. + + Wait for the controller to be reported as **Unlocked**, **Available**, + and **Online**, and its **Config-out-of-date** alarm message to be + cleared. + +#. Swact the controllers. + +#. Lock the new standby controller. + +#. Disconnect the management and infrastructure cables from the |ToR| switch. + + This raises **Port failed** and **Interface failed** alarms on the + active controller for the management and infrastructure interfaces. + +#. Reconnect the cables in a peer-to-peer configuration. + + Wait for the network interface alarms to be cleared. + +#. Unlock the standby controller to update its configuration. + + Wait for the controller to be reported as **Unlocked**, **Available**, + and **Online**, and its **Config-out-of-date** alarm message to be + cleared. + +.. rubric:: |result| + +The system is now reconfigured to use direct connections for the internal +networks. diff --git a/doc/source/system_configuration/converting-a-duplex-system-to-switch-based-connection.rst b/doc/source/system_configuration/converting-a-duplex-system-to-switch-based-connection.rst new file mode 100644 index 000000000..ca551fa25 --- /dev/null +++ b/doc/source/system_configuration/converting-a-duplex-system-to-switch-based-connection.rst @@ -0,0 +1,74 @@ + +.. egs1552672694354 +.. _converting-a-duplex-system-to-switch-based-connection: + +================================================== +Convert a Duplex System to Switch-Based Connection +================================================== + +On a |prod| |AIO| Duplex system configured to use direct connections for +the management and cluster host networks, you can convert to switch-based +connections. + +The connection type is initially configured at installation. You can change +it at any time. You must use the CLI to make the change. + +.. xbooklink For more about the available connection modes, + see |planning-doc|: `Networks for a Duplex System `. + +.. rubric:: |prereq| + +Extra network cables are required to connect both controllers to the |ToR| +switch. + +The |ToR| switch must be configured correctly for communication with the +controllers. + +.. rubric:: |proc| + +#. Use the :command:`system modify` command to specify switch-based + connection \(**duplex**\). + + .. code-block:: none + + ~(keystone_admin)$ system modify --system_mode=duplex + + + This raises **Config-out-of-date** alarm messages on both controllers. + +#. Lock the standby controller. + +#. Disconnect the management and infrastructure cables from the standby + controller. + + This raises **Port failed** and **Interface failed** alarms on the active + controller for the management and infrastructure interfaces. + +#. Connect both controllers to the |ToR| switch. + + Connect the existing cables from the active controller to the |ToR| switch. + Use additional cables to connect the standby controller to the |ToR| + switch. + + Wait for the network interface alarms on the active controller to be + cleared. + +#. Unlock the standby controller to update its configuration. + + Wait for the controller to be reported as **Unlocked**, **Available**, + and **Online**, and for its **Config-out-of-date** alarm message to be + cleared. + +#. Swact the controllers. + +#. Lock and then unlock the new standby controller to update its + configuration. + + Wait for the controller to be reported as **Unlocked**, **Available**, + and **Online**, and for its **Config-out-of-date** alarm message to be + cleared. + +.. rubric:: |result| + +The system is now reconfigured to use switch-based connections for the +internal networks. \ No newline at end of file diff --git a/doc/source/system_configuration/creating-a-custom-branding-tarball.rst b/doc/source/system_configuration/creating-a-custom-branding-tarball.rst new file mode 100644 index 000000000..b5d9a9805 --- /dev/null +++ b/doc/source/system_configuration/creating-a-custom-branding-tarball.rst @@ -0,0 +1,130 @@ + +.. ngt1557520137257 +.. _creating-a-custom-branding-tarball: + +================================ +Create a Custom Branding Tarball +================================ + +This section contains instructions and examples for creating and applying a +tarball containing a custom Horizon Web interface theme, and associated +branding files, for the |prod|. + +You can modify the existing style sheet, font, and image files to develop +your own branding, package it, and then apply the branding by installing the +tarball that includes the modified files along with a manifest. To create a +custom branding tarball, with a new custom theme, and package it, follow the +steps below: + +.. rubric:: |proc| + +#. You can use the existing default Horizon theme as a starting point for the + creation of your custom theme or for the directory structure. + +#. Customize the styles and color scheme using the **\_styles.scss**, + and **\_variables.scss** files. Image overrides can be placed in the + **static/img/** folder, and template overrides can be placed in the + **templates** folder. This theme can be found in the Horizon repository, + at `GitHub `__ + or on a controller host, at /usr/share/openstack-dashboard/openstack\_dashboard/themes/default/. + +#. Copy the theme and modify it to fit your requirements. + + For more information on customizing your theme, see the OpenStack + documentation at, `https://docs.openstack.org/horizon/latest/configuration/branding.html `__ + + .. note:: + + - You can use the **example** theme as a guide to where + customized templates and javascript must be located in a custom + theme, and can be found next to the default theme. + + - The name of the custom theme is **custom** and must be used in the + source paths of new images or javascript, for example, + **/static/themes/custom/img/extra\_img.png**. + + - If a static folder is used, the **\_styles.scss**, and + **\_variables.scss** files must be located in the static folder + and not in the root of the theme. + +#. You must add a **manifest.py** file to your theme directory that is used + to overwrite Horizon's branding-related settings. This file should + specify the following information: + + .. code-block:: none + + # SITE_BRANDING = "Sample System Name" + + where + **Sample System Name** is the name that will be used in the site title + + .. code-block:: none + + # HORIZON_CONFIG["help_url"] = "https://www.openstack.org/" + + where + the **help\_url** is the help link for users. + + The theme directory should have the following files, depending on how + extensive the theme is. Use the following command to find the files: + + .. code-block:: none + + # find . + ./manifest.py + ./static + ./static/img + ./static/img/logo-splash.svg + ./static/img/logo.svg + ./static/_styles.scss + ./static/_variables.scss + ./templates + ./templates/auth + ./templates/auth/login.html + ./templates/auth/_login_form.html + ./templates/base.html + +#. Compress this directory into a tarball that can then be deployed in + running systems. + + .. note:: + This tarball must have the extension **.tgz**. There are no + limitations on the name of this file. + + .. code-block:: none + + # ls manifest.py static templates + + .. code-block:: none + + # tar czfv new_branding.tgz * + manifest.py + static/ + static/img/ + static/img/favicon.png + static/img/logo-splash.svg + static/img/logo.png + static/img/logo.svg + static/_styles.scss + static/_variables.scss + templates/ + templates/auth/ + templates/auth/login.html + templates/auth/_login_form.html + templates/base.html + +.. rubric:: |postreq| + +After creating your custom branding tarball containing a customized Horizon Web +interface theme and associated branding files, you cqn apply it to both newly +installed and running systems. You can apply it to different stages in your +installation. + +For more information on applying the tarball to newly installed systems prior +to running the bootstrap playbook, +see :ref:`Apply a Custom Branding Tarball to Newly Installed Systems +`. + +For more information on applying the tarball to running systems, +see :ref:`Apply a Custom Branding Tarball to Running Systems +`. \ No newline at end of file diff --git a/doc/source/system_configuration/creating-optional-telemetry-services.rst b/doc/source/system_configuration/creating-optional-telemetry-services.rst new file mode 100644 index 000000000..9ee91d4e3 --- /dev/null +++ b/doc/source/system_configuration/creating-optional-telemetry-services.rst @@ -0,0 +1,149 @@ + +.. swo1591098193543 +.. _creating-optional-telemetry-services: + +================================== +Enable Optional Telemetry Services +================================== + +By default in |prod-os|, Telemetry services are disabled. These +services are optional and includes Ceilometer \(Data collection service\), +Panko \(Event storage service\), Gnocchi +\(Time series metric storage service\), and Aodh \(Alarming service\). + +You can use the following procedure to enable these optional telemetry +services on the active controller. + +.. rubric:: |proc| + +#. To enable telemetry services, use the following command: + + .. code-block:: none + + $ system help helm-chart-attribute-modify + + Usage: system helm-chart-attribute-modify + [--enabled ] + + + Modify helm chart attributes. This function is provided to modify system + behavioral attributes related to a chart. This does not modify a chart, nor + does it modify chart overrides which are managed through the helm-override- + update command. + + Positional arguments: + Name of the application + Name of the chart + Namespace of the chart + + Optional arguments: + --enabled + Chart enabled. + + #. Run the following command to enable Ceilometer service. + + .. parsed-literal:: + + ~(keystone_admin)]$ system helm-chart-attribute-modify |prefix|-openstack ceilometer openstack --enabled true + +------------+--------------------+ + | Property | Value | + +------------+--------------------+ + | attributes | {u'enabled': True} | + | name | ceilometer | + | namespace | openstack | + +------------+--------------------+ + + #. Run the following command to enable Gnocchi service. + + .. parsed-literal:: + + ~(keystone_admin)]$ system helm-chart-attribute-modify |prefix|-openstack gnocchi openstack --enabled true + +------------+--------------------+ + | Property | Value | + +------------+--------------------+ + | attributes | {u'enabled': True} | + | name | gnocchi | + | namespace | openstack | + +------------+--------------------+ + + #. Run the following command to enable Aodh service. + + .. parsed-literal:: + + ~(keystone_admin)]$ system helm-chart-attribute-modify |prefix|-openstack aodh openstack --enabled true + +------------+--------------------+ + | Property | Value | + +------------+--------------------+ + | attributes | {u'enabled': True} | + | name | aodh | + | namespace | openstack | + +------------+--------------------+ + + #. Run the following command to enable Panko service. + + .. parsed-literal:: + + ~(keystone_admin)]$ system helm-chart-attribute-modify |prefix|-openstack panko openstack --enabled true + +------------+--------------------+ + | Property | Value | + +------------+--------------------+ + | attributes | {u'enabled': True} | + | name | panko | + | namespace | openstack | + +------------+--------------------+ + +#. Run the following command to verify that all services are enabled. + + .. parsed-literal:: + + ~(keystone_admin)]$ system helm-override-list |prefix|-openstack -l + +---------------------+--------------------------------+---------------+ + | chart name | overrides namespaces | chart enabled | + +---------------------+--------------------------------+---------------+ + | aodh | [u'openstack'] | [True] | + | barbican | [u'openstack'] | [False] | + | ceilometer | [u'openstack'] | [True] | + | ceph-rgw | [u'openstack'] | [False] | + | cinder | [u'openstack'] | [True] | + | dcdbsync | [u'openstack'] | [True] | + | fm-rest-api | [u'openstack'] | [True] | + | garbd | [u'openstack'] | [True] | + | glance | [u'openstack'] | [True] | + | gnocchi | [u'openstack'] | [True] | + | heat | [u'openstack'] | [True] | + | helm-toolkit | [] | [] | + | horizon | [u'openstack'] | [True] | + | ingress | [u'kube-system', u'openstack'] | [True, True] | + | ironic | [u'openstack'] | [False] | + | keystone | [u'openstack'] | [True] | + | keystone-api-proxy | [u'openstack'] | [True] | + | libvirt | [u'openstack'] | [True] | + | mariadb | [u'openstack'] | [True] | + | memcached | [u'openstack'] | [True] | + | networking-avs | [u'openstack'] | [True] | + | neutron | [u'openstack'] | [True] | + | nginx-ports-control | [] | [] | + | nova | [u'openstack'] | [True] | + | nova-api-proxy | [u'openstack'] | [True] | + | openvswitch | [u'openstack'] | [True] | + | panko | [u'openstack'] | [True] | + | placement | [u'openstack'] | [True] | + | rabbitmq | [u'openstack'] | [True] | + | version_check | [] | [] | + +---------------------+--------------------------------+---------------+ + +#. To reapply these changes to the |prefix|-openstack application, run + the following command. + + .. parsed-literal:: + + ~(keystone_admin)]$ system application-apply |prefix|-openstack + + Once |prefix|-openstack is applied successfully, telemetry services + will be available. + +#. Run the following helm command to verify the updates. + + .. code-block:: none + + ~(keystone_admin)]$ helm list | grep -E ceilometer|gnocchi|panko|aodh diff --git a/doc/source/system_configuration/enabling-the-qos-extension-for-neutron.rst b/doc/source/system_configuration/enabling-the-qos-extension-for-neutron.rst new file mode 100644 index 000000000..53c274864 --- /dev/null +++ b/doc/source/system_configuration/enabling-the-qos-extension-for-neutron.rst @@ -0,0 +1,53 @@ + +.. mup1591370716032 +.. _enabling-the-qos-extension-for-neutron: + +==================================== +Enable the QoS Extension for Neutron +==================================== + +You can use Helm overrides to enable the |QoS| Neutron extension. + +.. rubric:: |proc| + +#. Create a yaml file to enable the qos extension for neutron. + + .. code-block:: none + + ~(keystone_admin)]$ cat > neutron-overrides.yaml <` for instructions on setting + up the admin credentials for the containerized OpenStack application. \ No newline at end of file diff --git a/doc/source/system_configuration/enabling-the-trunk-extension-for-neutron.rst b/doc/source/system_configuration/enabling-the-trunk-extension-for-neutron.rst new file mode 100644 index 000000000..f796fad69 --- /dev/null +++ b/doc/source/system_configuration/enabling-the-trunk-extension-for-neutron.rst @@ -0,0 +1,42 @@ + +.. jvu1591371696823 +.. _enabling-the-trunk-extension-for-neutron: + +====================================== +Enable the Trunk Extension for Neutron +====================================== + +You can use Helm overrides to enable the Trunk Neutron extension. + +.. rubric:: |proc| + +#. Create a yaml file to enable the trunk extension for neutron. + + .. code-block:: none + + ~(keystone_admin)]$ cat > neutron-overrides.yaml < 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 literal 0 HcmV?d00001 diff --git a/doc/source/system_configuration/figures/jow1413850406811.png b/doc/source/system_configuration/figures/jow1413850406811.png new file mode 100644 index 0000000000000000000000000000000000000000..11ec71b558e1f924030eaf34fc26b335f37dbe64 GIT binary patch literal 8277 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 literal 0 HcmV?d00001 diff --git a/doc/source/system_configuration/figures/jow1413850481192.png b/doc/source/system_configuration/figures/jow1413850481192.png new file mode 100644 index 0000000000000000000000000000000000000000..6ac62e0becd28dbd87fbf8910476ae96f8054fa5 GIT binary patch literal 12006 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 H`uKkV0ZTvs literal 0 HcmV?d00001 diff --git a/doc/source/system_configuration/figures/jow1413850497887.png b/doc/source/system_configuration/figures/jow1413850497887.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b21c7c8d7b49ac5f6558b477e54f728d5c3af5 GIT binary patch literal 58246 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 literal 0 HcmV?d00001 diff --git a/doc/source/system_configuration/figures/rst1442611298701.png b/doc/source/system_configuration/figures/rst1442611298701.png new file mode 100644 index 0000000000000000000000000000000000000000..6a760f964dcb3992e16ea364f5c1da38923b19cd GIT binary patch literal 38410 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

eE;XuMYtne}0)nQm=r?zP-o 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 fCF~Yy$vUZ&n0#Sx*~lFd{E`s6b}2`__. + +Use the following command to edit the globalnetworkpolicy and modify the +|OAM| Firewall according to the above |GNP| syntax: + +.. code-block:: none + + kubectl edit globalnetworkpolicy + +.. xbooklink For more information about the |prod| firewall, + see |sec-doc|: `Firewall Options `. diff --git a/doc/source/system_configuration/resynchronizing-a-host-to-the-ntp-server.rst b/doc/source/system_configuration/resynchronizing-a-host-to-the-ntp-server.rst new file mode 100644 index 000000000..465023813 --- /dev/null +++ b/doc/source/system_configuration/resynchronizing-a-host-to-the-ntp-server.rst @@ -0,0 +1,33 @@ + +.. sod1552673143944 +.. _resynchronizing-a-host-to-the-ntp-server: + +====================================== +Resynchronize a Host to the NTP Server +====================================== + +If host synchronization is lost for any reason, you must lock and then +unlock the host to restore the synchronization safely. + +If a large time discrepancy \(greater than 1000 seconds, or about 17 +minutes\) develops between the clock time on a host and the time as reported +by an |NTP| server, the **ntpd** service on the host stops, and Alarm +200.006 \( 'ntpd' process has failed\) is logged in the Alarm Log +and the Customer Log. This can occur if the clock on the host is +inadvertently set incorrectly, or cannot access the |NTP| server for the +correct time at initialization and defaults to an incorrect time. + +.. rubric:: |proc| + +.. _resynchronizing-a-host-to-the-ntp-server-steps-rl4-xmy-hkb: + +- To recover, lock and then unlock the host. + + .. caution:: + Do not attempt to recover by restarting the **ntpd** service. This + can cause problems for other running services. + +.. rubric:: |result| + +The time is automatically synchronized to the |NTP| server when the host is +unlocked and alarm 200.006 for this host will be cleared. diff --git a/doc/source/system_configuration/specifying-dns-servers-using-horizon.rst b/doc/source/system_configuration/specifying-dns-servers-using-horizon.rst new file mode 100644 index 000000000..36e409a96 --- /dev/null +++ b/doc/source/system_configuration/specifying-dns-servers-using-horizon.rst @@ -0,0 +1,32 @@ + +.. kjm1552673210981 +.. _specifying-dns-servers-using-horizon: + +================================= +Specify DNS Servers Using Horizon +================================= + +You can add or update a list of external DNS servers for |prod| to use for +domain name resolution at any time after installation. + +You can specify up to three DNS servers using the Horizon Web interface. + +.. rubric:: |proc| + +#. In the |prod| Horizon Web interface, open the System Configuration page. + + The System Configuration page is available + from **Admin** \> **Platform** \> **System Configuration** in the + left-hand pane. + +#. Select the DNS tab. + + The DNS page appears, showing the currently defined DNS servers. + +#. Click **Edit DNS**. + +#. In the Edit DNS dialog box, add or edit the IP addresses, and then + click **Save**. + + .. figure:: figures/jow1413850386429.png + :scale: 100% \ No newline at end of file diff --git a/doc/source/system_configuration/specifying-dns-servers-using-the-cli.rst b/doc/source/system_configuration/specifying-dns-servers-using-the-cli.rst new file mode 100644 index 000000000..7fd4a4b57 --- /dev/null +++ b/doc/source/system_configuration/specifying-dns-servers-using-the-cli.rst @@ -0,0 +1,37 @@ + +.. ocy1552673225265 +.. _specifying-dns-servers-using-the-cli: + +================================= +Specify DNS Servers Using the CLI +================================= + +You can use the CLI to add or update up to three DNS servers. + +To view the existing DNS server configuration, use the following command: + +.. code-block:: none + + ~(keystone_admin)$ system dns-show + +--------------+--------------------------------------+ + | Property | Value | + +--------------+--------------------------------------+ + | uuid | cffcde8c-2124-4d19-881f-764ddafc8558 | + | nameservers | 8.8.8.8 | + | isystem_uuid | e1f955a1-2dee-492e-8c72-8b88a8b08558 | + | created_at | 2017-06-23T00:34:38.353023+00:00 | + | updated_at | 2017-06-24T20:52:13.307660+00:00 | + +--------------+--------------------------------------+ + +To change the list of DNS servers, use the following command syntax. The +nameservers option takes a comma-delimited list of IP addresses. + +.. code-block:: none + + ~(keystone_admin)$ system dns-modify nameservers= + +For example: + +.. code-block:: none + + ~(keystone_admin)$ system dns-modify nameservers=8.8.8.8,8.8.4.4 diff --git a/doc/source/system_configuration/system-config-helm-package-manager.rst b/doc/source/system_configuration/system-config-helm-package-manager.rst new file mode 100644 index 000000000..95f246c21 --- /dev/null +++ b/doc/source/system_configuration/system-config-helm-package-manager.rst @@ -0,0 +1,41 @@ + +.. emk1568230814240 +.. _system-config-helm-package-manager: + +==================== +Helm Package Manager +==================== + +|prod-long| supports Helm v2 with Tiller, the Kubernetes package manager +that can be used to manage the lifecycle of end-user hosted applications +within the Kubernetes cluster. + +Helm packages are defined by Helm charts with container information sufficient +for managing a Kubernetes application. You can configure, install, and +upgrade your Kubernetes applications using Helm charts. Helm charts are +defined with a default set of values that describe the behavior of the +service installed within the Kubernetes cluster. + +Upon system installation, the official curated helm chart repository is added +to the local helm repo list, in addition, a number of local repositories +\(containing optional |prod-long| packages\) are created and added to the +helm repo list. For more information, +see `https://github.com/helm/charts `__. + +Use the following command to list the helm repositories: + +.. parsed-literal:: + + ~(keystone_admin)$ helm repo list + NAME URL + stable https://kubernetes-charts.storage.googleapis.com + local http://127.0.0.1:8879/charts + starlingx http://127.0.0.1:8080/helm_charts/starlingx + |prefix|-platform |s| http://127.0.0.1:8080/helm_charts/|prefix|-platform + +For more information on Helm, see the documentation +at `https://helm.sh/docs/ `__. + +**Tiller** is a component of Helm. Tiller interacts directly with the +Kubernetes API server to install, upgrade, query, and remove Kubernetes +resources. diff --git a/doc/source/system_configuration/system-configuration-management-overview.rst b/doc/source/system_configuration/system-configuration-management-overview.rst new file mode 100644 index 000000000..79bafda42 --- /dev/null +++ b/doc/source/system_configuration/system-configuration-management-overview.rst @@ -0,0 +1,14 @@ + +.. ewz1552673812105 +.. _system-configuration-management-overview: + +======================================== +System Configuration Management Overview +======================================== + +|prod-long| system configuration can be done any time after installation +to change system configuration data specified during system installation, +and to set additional system configuration data. + +.. xbooklink For details on accessing the system, + see |sec-doc|: `Access the System ` \ No newline at end of file diff --git a/doc/source/system_configuration/system-configuration-overview.rst b/doc/source/system_configuration/system-configuration-overview.rst new file mode 100644 index 000000000..a3a28238f --- /dev/null +++ b/doc/source/system_configuration/system-configuration-overview.rst @@ -0,0 +1,103 @@ + +.. eqg1590091622329 +.. _system-configuration-overview: + +=========================================== +Overview of Configuring StarlingX OpenStack +=========================================== + +|prod-os| is installed and managed as an Armada application. + +See |prod| System Configuration: :ref:`Application Management +`, for a description of the application +lifecycle commands for managing an Armada application. + +Armada Applications are a set of one or more interdependent Application Helm +Charts. In the case of |prod|, there is generally a Helm Chart for every +OpenStack service. + +.. parsed-literal:: + + ~(keystone_admin)]$ system helm-override-list |prefix|-openstack + +---------------------------+--------------------------------+ + | chart name | overrides namespaces | + +---------------------------+--------------------------------+ + | aodh | [u'openstack'] | + | barbican | [u'openstack'] | + | ceilometer | [u'openstack'] | + | ceph-rgw | [u'openstack'] | + | cinder | [u'openstack'] | + | dcdbsync | [u'openstack'] | + | fm-rest-api | [u'openstack'] | + | garbd | [u'openstack'] | + | glance | [u'openstack'] | + | gnocchi | [u'openstack'] | + | heat | [u'openstack'] | + | horizon | [u'openstack'] | + | ingress | [u'kube-system', u'openstack'] | + | ironic | [u'openstack'] | + | keystone | [u'openstack'] | + | keystone-api-proxy | [u'openstack'] | + | libvirt | [u'openstack'] | + | mariadb | [u'openstack'] | + | memcached | [u'openstack'] | + | networking-avs | [u'openstack'] | + | neutron | [u'openstack'] | + | nginx-ports-control | [] | + | nova | [u'openstack'] | + | nova-api-proxy | [u'openstack'] | + | openstack-helm-toolkit | [] | + | openstack-psp-rolebinding | [u'openstack'] | + | openvswitch | [u'openstack'] | + | panko | [u'openstack'] | + | placement | [u'openstack'] | + | rabbitmq | [u'openstack'] | + +---------------------------+--------------------------------+ + +The attribute values of an OpenStack Service's Helm chart represents the +configurable parameters of the OpenStack Service. The OpenStack Services' helm +charts are defined upstream +here: `https://opendev.org/openstack/openstack-helm `__. +The specific attribute values supported by a helm chart can be found in the +values.yaml file under the particular OpenStack Service, +e.g. `https://opendev.org/openstack/openstack-helm/src/branch/master/nova/values.yaml `__. + +After uploading the |prod| application, |prod| applies 'system' overrides +to the OpenStack helm charts, to specify a default configuration of +containerized |prod| on |prod|. To display those 'system' overrides: + +.. parsed-literal:: + + ~(keystone_admin)]$ system helm-override-show |prefix|-openstack nova openstack + +You can specify helm overrides to update additional helm chart values and/or +modify the overrides made by the system. The command syntax is: + +.. code-block:: none + + system helm-override-update [--reuse-values] [--reset-values] [--values ] [--set ] app-name chart-name namespace + +The optional arguments are: + +``--reuse-values`` + Determines if we should reuse existing helm chart user override values. + If ``--reset-values`` is set, then this argument is ignored. + +``--reset-values`` + Replace any existing helm chart overrides with the ones specified. + +``--values `` + Specify a YAML file containing helm chart override values. Can specify + multiple times. + +``--set `` + Set helm chart override values on the command line. Multiple override + values can be specified with multiple ``--set`` arguments. These are + processed after ``--values`` files. + +The updated overridden helm chart values are applied to the OpenStack +Application the next time |prefix|-openstack is run. + +As some examples of using helm chart overrides to configure OpenStack services +of |prod|, the following sections show a few examples of some +typical configurable changes to |prod|. diff --git a/doc/source/system_configuration/system-configuration-starlingx-application-package-manager.rst b/doc/source/system_configuration/system-configuration-starlingx-application-package-manager.rst new file mode 100644 index 000000000..59afa2dce --- /dev/null +++ b/doc/source/system_configuration/system-configuration-starlingx-application-package-manager.rst @@ -0,0 +1,69 @@ + +.. gsl1568831180133 +.. _system-configuration-starlingx-application-package-manager: + +===================================== +StarlingX Application Package Manager +===================================== + +Use the |prod| system application commands to manage containerized +applications provided as part of |prod|. + +StarlingX application management provides a wrapper around Airship Armada +\(see `https://opendev.org/airship/armada.git `__\) +and Kubernetes Helm \(see `https://github.com/helm/helm `__\) +for managing containerized applications. Armada is a tool for managing +multiple Helm charts with dependencies by centralizing all configurations +in a single Armada YAML definition and providing life-cycle hooks for all +Helm releases. + +A StarlingX application package is a compressed tarball containing a +metadata.yaml file, a manifest.yaml Armada manifest file, and a charts +directory containing helm charts and a checksum.md5 file. The metadata.yaml +file contains the application name, version, and optional helm repository +and disabled charts information. + +StarlingX application package management provides a set of :command:`system` +CLI commands for managing the lifecycle of an Application, which includes +managing overrides to the helm charts within the application. + +.. _system-configuration-starlingx-application-package-manager-d123e61: + +.. table:: Table 1. Application Package Manager Commands + :widths: auto + + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | Command | Description | + +========================================+=============================================================================================================================================================================================================================================================+ + | :command:`application-list` | List all applications. | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :command:`application-show` | Show application details such as name, status, and progress. | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :command:`application-upload` | Upload a new application package. | + | | | + | | This command loads the application's armada manifest and helm charts into an internal database and automatically applies system overrides for well-known helm charts, allowing the helm chart to be applied optimally to the current cluster configuration. | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :command:`helm-override-list` | List system helm charts and the namespaces with helm chart overrides for each helm chart. | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :command:`helm-override-show` | Show a helm chart's overrides for a particular namespace. | + | | | + | | This command displays system-overrides, user-overrides and the combined system and user overrides. | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :command:`helm-override-update` | Update helm chart user-overrides for a particular namespace. | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :command:`helm-chart-attribute-modify` | Enable or disable the installation of a particular helm chart within an application manifest. | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :command:`helm-override-delete` | Delete a helm chart's user-overrides for a particular namespace. | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :command:`application-apply` | Apply or reapply the application manifest and helm charts. | + | | | + | | This command will install or update the existing installation of the application based on its armada manifest, helm charts and helm charts' combined system and user overrides. | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :command:`application-abort` | Abort the current application operation. | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :command:`application-update` | Update the deployed application to a different version | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :command:`application-remove` | Uninstall an application. | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ + | :command:`application-delete` | Remove the uninstalled application's definition, including manifest and helm charts and helm chart overrides, from the system. | + +----------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ diff --git a/doc/source/system_configuration/using-helm-overrides-to-enable-internal-dns.rst b/doc/source/system_configuration/using-helm-overrides-to-enable-internal-dns.rst new file mode 100644 index 000000000..46421fae1 --- /dev/null +++ b/doc/source/system_configuration/using-helm-overrides-to-enable-internal-dns.rst @@ -0,0 +1,35 @@ + +.. bbr1591372608382 +.. _using-helm-overrides-to-enable-internal-dns: + +============================== +Enable Internal DNS in Neutron +============================== + +You can use Helm overrides to enable internal DNS support. + +.. rubric:: |proc| + +#. Create a yaml file to enable internal dns resolution for neutron. + + .. code-block:: none + + ~(keystone_admin)]$ cat > neutron-overrides.yaml <