diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 708ff272becf..e7733f6ceb43 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,6 +1,6 @@ { "image":"mcr.microsoft.com/devcontainers/universal:2", - "postCreateCommand": "sleep 30 && docker run --rm -it -v `pwd`:/docs:Z quay.io/openshift-cs/asciibinder sh -c \"git config --global --add safe.directory /docs && asciibinder build --distro openshift-rosa && asciibinder build --distro openshift-enterprise\" && python3 -m http.server -d ./_preview", + "postCreateCommand": "sleep 60 && docker run --rm -it -v `pwd`:/docs:Z quay.io/openshift-cs/asciibinder sh -c \"git config --global --add safe.directory /docs && asciibinder build --distro openshift-rosa && asciibinder build --distro openshift-enterprise\" && python3 -m http.server -d ./_preview", "customizations": { "vscode": { "settings": { diff --git a/.komment/00000.json b/.komment/00000.json new file mode 100644 index 000000000000..35037e0ea561 --- /dev/null +++ b/.komment/00000.json @@ -0,0 +1,449 @@ +[ + { + "name": "build_for_portal.py", + "path": "build_for_portal.py", + "content": { + "structured": { + "description": "A tool that builds and synchronizes documentation files from an upstream source repository into a local directory structure for distribution in various formats such as HTML, PDF, and EPUB. The process involves fetching the latest sources, filtering books based on the specified distribution, building master files, reformating data for Drupal, and pushing changes back to GitLab repositories.", + "items": [ + { + "id": "6483b725-6e6f-b3af-7249-43be1b68f367", + "ancestors": [], + "description": "Defines and returns an instance of an ArgumentParser, which allows for parsing command-line arguments. It sets up various command-line options with default values and descriptions, enabling the user to customize the behavior of a program or script.", + "params": [], + "returns": { + "type_name": "argparseArgumentParser", + "description": "An instance of ArgumentParser. This object will be used to parse command-line arguments and provide help messages when necessary." + }, + "usage": { + "language": "python", + "code": "parser = setup_parser()\nargs = parser.parse_args([\"--distro\", \"openshift-enterprise\"])\n", + "description": "" + }, + "name": "setup_parser", + "location": { + "start": 126, + "insert": 127, + "offset": " ", + "indent": 4, + "comment": null + }, + "item_type": "function", + "length": 40, + "docLength": null + }, + { + "id": "e1320c24-5e9f-23ae-3347-d0fc4de67b9f", + "ancestors": [ + "1cd2200b-fb3f-4eb6-9147-990d3b577a0a" + ], + "description": "Constructs a string representing a directory entry based on its name and depth. It appends this string to the `master_entries` list if either the `include_name` flag is set or the depth exceeds zero.", + "params": [ + { + "name": "dir_node", + "type_name": "Dict[str, Any]", + "description": "Expected to contain directory information, specifically 'Name' attribute which represents the name of the directory." + }, + { + "name": "parent_dir", + "type_name": "str", + "description": "Passed as an argument to this callback function, representing the current directory being processed." + }, + { + "name": "depth", + "type_name": "int", + "description": "0-based, indicating the current directory level being processed. It affects the indentation of the directory name in the output list by adding leading spaces based on its value." + } + ], + "returns": null, + "usage": { + "language": "python", + "code": "dir_node = {\"Name\": \"Documents\"}\nparent_dir = \"\"\ndepth = 0\ndir_callback(dir_node, parent_dir, depth)\nmaster_entries.append(...)", + "description": "" + }, + "name": "dir_callback", + "location": { + "start": 387, + "insert": 388, + "offset": " ", + "indent": 8, + "comment": null + }, + "item_type": "function", + "length": 5, + "docLength": null + }, + { + "id": "09ffafc5-fda6-5bb7-404d-af1a905ce7bc", + "ancestors": [ + "1cd2200b-fb3f-4eb6-9147-990d3b577a0a" + ], + "description": "Processes a topic node and adds its book file path to the master entries list as an include statement. It handles specific cases for all-in-one mode and comment files, appending additional comments as needed.", + "params": [ + { + "name": "topic_node", + "type_name": "Dict[any, any]", + "description": "Expected to contain information about a topic node." + }, + { + "name": "parent_dir", + "type_name": "str", + "description": "Used as the parent directory to construct the full path for the book file. It is joined with the topic node's \"File\" attribute and \".adoc\" extension to form the full file path." + }, + { + "name": "depth", + "type_name": "int", + "description": "Used to calculate the level offset for an Asciidoctor include directive. This level offset determines the nesting level of included files in the generated documentation." + } + ], + "returns": null, + "usage": { + "language": "python", + "code": "topic_node = {\"File\": \"main\"}\nparent_dir = \"/path/to/main\"\nbook_dir = \"/path/to/book\"\nall_in_one = True\nCOMMENT_FILES = [\"file1\", \"file2\"]\n\ntopic_callback(topic_node, parent_dir, 0)", + "description": "" + }, + "name": "topic_callback", + "location": { + "start": 393, + "insert": 394, + "offset": " ", + "indent": 8, + "comment": null + }, + "item_type": "function", + "length": 11, + "docLength": null + }, + { + "id": "a211b250-8c76-b3be-8449-7f822234c1cb", + "ancestors": [ + "c24a6808-bdb8-f38e-1041-7a069d23c354" + ], + "description": "Traverses a directory tree and copies all image files from subdirectories to a specified destination directory (`dest_dir`). It takes three parameters: the current directory node, its parent directory, and the current depth.", + "params": [ + { + "name": "dir_node", + "type_name": "Dict[any, any]", + "description": "Expected to contain information about a directory node in a file system tree structure. It is assumed that this dictionary contains key-value pairs for \"Dir\" and possibly other relevant details." + }, + { + "name": "parent_dir", + "type_name": "str", + "description": "The directory path from which the current directory node (`dir_node`) is located, used as the base for constructing file paths." + }, + { + "name": "depth", + "type_name": "int", + "description": "Used to track the level of recursion when traversing directory trees." + } + ], + "returns": null, + "usage": { + "language": "python", + "code": "dir_nodes = [{\"Dir\": \"dir1\"}, {\"Dir\": \"dir2\"}]\ndest_dir = \"/path/to/destination\"\nfor node in dir_nodes:\n dir_callback(node, \"/\", 0)\n", + "description": "" + }, + "name": "dir_callback", + "location": { + "start": 470, + "insert": 471, + "offset": " ", + "indent": 8, + "comment": null + }, + "item_type": "function", + "length": 8, + "docLength": null + }, + { + "id": "ca792679-ca97-4a84-de47-06200812ffaf", + "ancestors": [ + "b7b7e365-d519-ef80-c44c-a0aa63921384" + ], + "description": "Creates a destination directory path by joining the `dest_dir`, `parent_dir`, and `dir_node[\"Dir\"]`. It then ensures that the created directory exists using the `ensure_directory` function.", + "params": [ + { + "name": "dir_node", + "type_name": "Dict[any, any]", + "description": "Assumed to be a node from a directory tree, containing information such as the name of the directory (`\"Dir\"`), its children, and possibly other relevant data." + }, + { + "name": "parent_dir", + "type_name": "str", + "description": "Used to construct the destination directory path by joining it with the current directory (`dir_node`) and the destination root directory (`dest_dir`)." + }, + { + "name": "depth", + "type_name": "int", + "description": "Used to represent the level of depth for the current directory being processed. It does not seem to have any direct effect on the function's behavior, but it might be used elsewhere in the code." + } + ], + "returns": null, + "usage": { + "language": "python", + "code": "dir_node = {\"Dir\": \"new_dir\"}\nparent_dir = \"source\"\ndest_dir = \"destination\"\ndepth = 1\ndir_callback(dir_node, parent_dir, depth)", + "description": "" + }, + "name": "dir_callback", + "location": { + "start": 488, + "insert": 489, + "offset": " ", + "indent": 8, + "comment": null + }, + "item_type": "function", + "length": 3, + "docLength": null + }, + { + "id": "59a30cb9-bbe4-3a8e-c241-1ed7911ead22", + "ancestors": [ + "b7b7e365-d519-ef80-c44c-a0aa63921384" + ], + "description": "Copies an Adoc file from a source directory to a destination directory based on topic and parent directory information provided in the `topic_node` dictionary. It also maintains the directory structure during the copying process.", + "params": [ + { + "name": "topic_node", + "type_name": "Dict", + "description": "Expected to contain keys \"File\" that specifies the name of an Asciidoc file, representing a topic or chapter within the document." + }, + { + "name": "parent_dir", + "type_name": "str", + "description": "Used as a directory name within both source (`node_src_dir`) and destination (`node_dest_dir`) paths, allowing for hierarchical organization of files in the topic node." + }, + { + "name": "depth", + "type_name": "int", + "description": "Used to calculate the path of the source directory for each topic node based on its depth from the root." + } + ], + "returns": null, + "usage": { + "language": "python", + "code": "topic_node = {\"File\": \"my_file\"}\nparent_dir = \"path/to/parent\"\ndepth = 1\ntopic_callback(topic_node, parent_dir, depth)", + "description": "" + }, + "name": "topic_callback", + "location": { + "start": 492, + "insert": 493, + "offset": " ", + "indent": 8, + "comment": null + }, + "item_type": "function", + "length": 8, + "docLength": null + }, + { + "id": "e5a5f5a5-c911-958e-7a4f-bf0f9cdce980", + "ancestors": [], + "description": "Retrieves the name of a book from a specified directory. It searches through a list of book nodes and returns the matching book name if found; otherwise, it logs an error and returns the directory path.", + "params": [ + { + "name": "dir", + "type_name": "str", + "description": "Expected to match with the \"Dir\" key value in one of the book nodes in the `info[\"book_nodes\"]` list." + }, + { + "name": "src_file", + "type_name": "str", + "description": "Passed to the log error message. It represents the source file name, used as context for error logging when a book is not found for a given directory." + }, + { + "name": "info", + "type_name": "Dict[any, any]", + "description": "Expected to have a key named \"book_nodes\" with values that are dictionaries having keys \"Dir\" and \"Name\"." + } + ], + "returns": { + "type_name": "str|None", + "description": "1) the name of a book if the directory is found, or 2) the directory itself if no matching book is found and an error message has been logged." + }, + "usage": { + "language": "python", + "code": "info = {\"book_nodes\": [{\"Dir\": \"dir1\", \"Name\": \"Book1\"}, {\"Dir\": \"dir2\", \"Name\": \"Book2\"}]}\nsrc_file = \"file.txt\"\nresult = dir_to_book_name(\"dir1\", src_file, info)\n", + "description": "" + }, + "name": "dir_to_book_name", + "location": { + "start": 739, + "insert": 741, + "offset": " ", + "indent": 4, + "comment": null + }, + "item_type": "function", + "length": 12, + "docLength": null + }, + { + "id": "5527b173-9819-8288-bb4a-0cb5b2b70b61", + "ancestors": [ + "0da26043-68d2-308e-2043-8ae56108c114" + ], + "description": "Extracts file IDs from a source file and appends them to a list called `book_ids`. The file is located by joining a parent directory with the name of a topic node, adding \".adoc\" as the file extension.", + "params": [ + { + "name": "topic_node", + "type_name": "Dict", + "description": "Expected to contain a set of key-value pairs, where at least one key is \"File\", which represents the path of an AsciiDoc file." + }, + { + "name": "parent_dir", + "type_name": "str", + "description": "Used to construct the path to a source file by joining it with the \"File\" attribute of the `topic_node`." + }, + { + "name": "depth", + "type_name": "int", + "description": "Used as an input for the recursive callback process to traverse the topic tree, representing the current level of nesting." + } + ], + "returns": null, + "usage": { + "language": "python", + "code": "topic_node = {\"File\": \"my_topic\"}\nparent_dir = \"/path/to/my/adoc/files\"\nbook_ids = []\ntopic_callback(topic_node, parent_dir, 0)", + "description": "" + }, + "name": "topic_callback", + "location": { + "start": 910, + "insert": 911, + "offset": " ", + "indent": 8, + "comment": null + }, + "item_type": "function", + "length": 4, + "docLength": null + }, + { + "id": "b7b3ec81-e926-1092-eb47-8bd398ba8a47", + "ancestors": [ + "6d8ae864-af5c-bdbc-f74e-3a7f52dda325" + ], + "description": "Generates a source file path and maps it to an ID based on the topic node's name. It uses the parent directory and topic node's \"File\" attribute to create the source file path, then associates it with an ID using the `build_file_id` function.", + "params": [ + { + "name": "topic_node", + "type_name": "Dict[str, Any]", + "description": "Assumed to contain key-value pairs representing metadata about a topic in an AsciiDoc document." + }, + { + "name": "parent_dir", + "type_name": "str", + "description": "Used to construct the full path of the source file by joining it with the topic node's \"File\" attribute." + }, + { + "name": "depth", + "type_name": "int", + "description": "Not used within the given code snippet. It likely serves as an optional input to control recursion or indentation in the file generation process, but its purpose remains unclear without additional context." + } + ], + "returns": null, + "usage": { + "language": "python", + "code": "topic_node = {\"File\": \"main\", \"Name\": \"Introduction\"}\nparent_dir = \"/path/to/parent/directory\"\ndepth = 0\nfile_to_id_map = {}\nexisting_ids = set()\ntopic_callback(topic_node, parent_dir, depth)\n", + "description": "" + }, + "name": "topic_callback", + "location": { + "start": 926, + "insert": 927, + "offset": " ", + "indent": 8, + "comment": null + }, + "item_type": "function", + "length": 5, + "docLength": null + }, + { + "id": "481aba77-e533-89bf-ca48-8aafbab2b315", + "ancestors": [], + "description": "Synchronizes directories by removing files and subdirectories from the right directory that exist only on the left side, copying or moving files and subdirectories that are common or exist only on the left side to the right side.", + "name": "_sync_directories_dircmp", + "location": { + "start": 1064, + "insert": 1066, + "offset": " ", + "indent": 4, + "comment": null + }, + "item_type": "function", + "length": 18, + "docLength": null + }, + { + "id": "e2e45fd8-6bb8-aeb3-6742-87fe4cf73a64", + "ancestors": [], + "description": "Reads a configuration file and parses its contents based on the provided distribution and version. It extracts relevant information from the configuration file into a dictionary, which represents the repository URLs for the specified combination of distro and version.", + "params": [ + { + "name": "config_file", + "type_name": "str", + "description": "The path to the configuration file that needs to be read for parsing the repository configuration." + }, + { + "name": "distro", + "type_name": "str", + "description": "Expected to be a name of a distribution, for example, \"ubuntu\" or \"centos\". It is used to construct a section name for parsing configuration from the config file." + }, + { + "name": "version", + "type_name": "str", + "description": "Used as part of the name of a section in the config file that it reads from." + } + ], + "returns": { + "type_name": "Dict[str,str]", + "description": "A dictionary containing URLs for different repository keys. The keys are obtained from the section name specified by the distro and version parameters." + }, + "usage": { + "language": "python", + "code": "parse_repo_config('path/to/config/file', 'ubuntu', '20.04')", + "description": "" + }, + "name": "parse_repo_config", + "location": { + "start": 1113, + "insert": 1115, + "offset": " ", + "indent": 4, + "comment": null + }, + "item_type": "function", + "length": 15, + "docLength": null + }, + { + "id": "0c6d6139-3e8c-fb9b-194c-1f6969f91c94", + "ancestors": [], + "description": "Processes command-line arguments to build and package Drupal files. It fetches upstream sources, parses a configuration file, builds files, reorganizes them for Drupal, and pushes changes back to GitLab if necessary.", + "params": [], + "returns": null, + "usage": { + "language": "python", + "code": "if __name__ == \"__main__\":\n main(title='Sample Title', \n author='Author Name', \n product='Product Name', \n distro='Distro', \n version='Version Number', \n no_upstream_fetch=False, \n all_in_one=True, \n push=True)\n", + "description": "" + }, + "name": "main", + "location": { + "start": 1131, + "insert": 1132, + "offset": " ", + "indent": 4, + "comment": null + }, + "item_type": "function", + "length": 74, + "docLength": null + } + ] + } + } + } +] \ No newline at end of file diff --git a/.komment/komment.json b/.komment/komment.json new file mode 100644 index 000000000000..784618b26367 --- /dev/null +++ b/.komment/komment.json @@ -0,0 +1,15 @@ +{ + "meta": { + "version": "1", + "updated_at": "2024-08-16T07:41:03.395Z", + "created_at": "2024-08-16T07:41:06.570Z", + "pipelines": [ + "91c685cd-989b-4cc4-9eef-cf2b8ab8d14d" + ] + }, + "lookup": [ + [ + "build_for_portal.py" + ] + ] +} \ No newline at end of file diff --git a/.s2i/httpd-cfg/01-commercial.conf b/.s2i/httpd-cfg/01-commercial.conf index 1b6f7314daa6..0d375cf38e95 100644 --- a/.s2i/httpd-cfg/01-commercial.conf +++ b/.s2i/httpd-cfg/01-commercial.conf @@ -138,13 +138,13 @@ AddType text/vtt vtt # ACS Redirects to go to the latest version - change here when a new version drops # it should probably be best to combine the next few lines in one reg exp but for clarity keeping them separate # the first one redirects - RewriteRule ^acs/?$ /acs/4.4/welcome/index.html [R=301] + RewriteRule ^acs/?$ /acs/4.5/welcome/index.html [R=301] # redirect to the latest release notes - RewriteRule ^acs/release_notes/?$ /acs/4.4/release_notes/44-release-notes.html [R=301,NE] + RewriteRule ^acs/release_notes/?$ /acs/4.5/release_notes/45-release-notes.html [R=301,NE] # redirect from ACS CLoud Service page - RewriteRule ^acs/installing/install-ocp-operator.html /acs/4.4/installing/installing_ocp/init-bundle-ocp.html [NE,R=301] - RewriteRule ^acs/(\D.*)$ /acs/4.4/$1 [NE,R=301] - RewriteRule ^acs/(3\.65|3\.66|3\.67|3\.68|3\.69|3\.70|3\.71|3\.72|3\.73|3\.74|4\.0|4\.1|4\.2|4\.3|4\.4)/?$ /acs/$1/welcome/index.html [L,R=301] + RewriteRule ^acs/installing/install-ocp-operator.html /acs/4.5/installing/installing_ocp/init-bundle-ocp.html [NE,R=301] + RewriteRule ^acs/(\D.*)$ /acs/4.5/$1 [NE,R=301] + RewriteRule ^acs/(3\.65|3\.66|3\.67|3\.68|3\.69|3\.70|3\.71|3\.72|3\.73|3\.74|4\.0|4\.1|4\.2|4\.3|4\.4|4\.5)/?$ /acs/$1/welcome/index.html [L,R=301] #redirect for 4.0 Manage vulneribility page RewriteRule ^(acs/(?:4\.0/)?)?operating/manage-vulnerabilities\.html$ /acs/4.0/operating/manage-vulnerabilities/vulnerability-management.html [NE,R=301] #redirect for missing 4.3 page @@ -153,8 +153,10 @@ AddType text/vtt vtt RewriteRule ^(acs/(?:4\.4/)?)?installing/acs-installation-platforms\.html$ /acs/4.4/installing/acs-high-level-overview.html [NE,R=301] #redirect Architecture page for ACS Cloud into Cloud directory RewriteRule ^acs/(4\.4)/architecture/acscs-architecture\.html$ /acs/latest/cloud_service/acscs-architecture.html [NE,R=302] + #redirect Managing compliance and Compliance Operator pages as per https://github.com/openshift/openshift-docs/pull/78035 + RewriteRule ^acs/(4\.5)/operating/manage-compliance-operator/compliance-operator-rhacs\.html$ /acs/latest/operating/compliance-operator-rhacs.html [NE,R=302] - # remove aro docs to just the welcome page + #remove aro docs to just the welcome page RewriteRule aro/4/(?!welcome)(.*)?$ /container-platform/latest/$1 [L,R=301] # Redirects for "latest" version @@ -173,6 +175,9 @@ AddType text/vtt vtt # Redirect for renamed external DNS page RewriteRule ^container-platform/4\.10/networking/external_dns_operator/nw-installing-external-dns-operator.html /container-platform/4.10/networking/external_dns_operator/nw-installing-external-dns-operator-on-cloud-providers.html [NE,R=301] + # Redirect for renamed Ingress Controller document + RewriteRule ^container-platform/(4\.1[2-6])/networking/nw-ingress-controller-endpoint-publishing-strategies\.html$ /container-platform/$1/networking/nw-configuring-ingress-controller-endpoint-publishing-strategy.html [NE,R=302,L] + # Redirect for cluster logging per Ashleigh Brennan RewriteRule ^container-platform/(4\.11|4\.12|4\.13)/logging/troubleshooting/cluster-logging-must-gather.html /container-platform/$1/logging/cluster-logging-support.html [NE,R=302] RewriteRule ^container-platform/(4\.11|4\.12|4\.13)/logging/config/cluster-logging-maintenance-support.html /container-platform/$1/logging/cluster-logging-support.html [NE,R=302] @@ -182,42 +187,32 @@ AddType text/vtt vtt RewriteRule ^(rosa|dedicated)/logging/config/cluster-logging-moving-nodes.html /$1/logging/scheduling_resources/logging-node-selectors.html [NE,R=302] RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/logging/config/cluster-logging-log-store.html /container-platform/$1/logging/log_storage/logging-config-es-store.html [NE,R=302] - # Redirects for observability rework per https://github.com/openshift/openshift-docs/pull/71248 - RewriteRule ^container-platform/4.14/power_monitoring/(.*)$ /container-platform/4.14/observability/power_monitoring/$1 [NE,R=302,L] - - # Redirects for observability/monitoring per https://github.com/openshift/openshift-docs/pull/74679/ - RewriteRule ^container-platform/(4\.12|4\.13|4\.14|4\.15)/observability/monitoring/cluster_observability_operator/configuring-the-cluster-observability-operator-to-monitor-a-service.html /container-platform/$1/observability/cluster_observability_operator/configuring-the-cluster-observability-operator-to-monitor-a-service.html [NE,R=302] - RewriteRule ^container-platform/(4\.12|4\.13|4\.14|4\.15)/observability/monitoring/cluster_observability_operator/installing-the-cluster-observability-operator.html /container-platform/$1/observability/cluster_observability_operator/installing-the-cluster-observability-operator.html [NE,R=302] - RewriteRule ^container-platform/(4\.12|4\.13|4\.14|4\.15)/observability/monitoring/cluster_observability_operator/cluster-observability-operator-overview.html /container-platform/$1/observability/cluster_observability_operator/cluster-observability-operator-overview.html [NE,R=302] - RewriteRule ^container-platform/(4\.12|4\.13|4\.14|4\.15)/observability/monitoring/cluster_observability_operator/cluster-observability-operator-release-notes.html /container-platform/$1/observability/cluster_observability_operator/cluster-observability-operator-release-notes.html [NE,R=302] - - # Redirects for observability reorg per mleonov and https://github.com/openshift/openshift-docs/pull/74104 - # including logging per https://github.com/openshift/openshift-docs/pull/74819 - RewriteRule ^container-platform/(4\.12|4\.13|4\.14|4\.15)/distr_tracing/distr_tracing_rn/distr-tracing-rn-?(.*)$ /container-platform/$1/observability/distr_tracing/distr_tracing_rn/distr-tracing-rn-past-releases.html [NE,R=302] - RewriteRule ^container-platform/(4\.12|4\.13|4\.14|4\.15)/otel/otel_rn/otel-rn-?(.*)$ /container-platform/$1/observability/otel/otel_rn/otel-rn-past-releases.html [NE,R=302] - RewriteRule ^container-platform/(4\.12|4\.13|4\.14|4\.15)/(logging|monitoring|distr_tracing|otel)/?(.*)$ /container-platform/$1/observability/$2/$3 [NE,R=302] - RewriteRule ^container-platform/4.13/distr_tracing/distr_tracing_otel/distr-tracing-otel-installing.html /container-platform/4.13/observability/otel/otel-installing.html [NE,R=302] - RewriteRule ^container-platform/4.13/distr_tracing/distr_tracing_install/distr-tracing-deploying-otel.html /container-platform/4.13/observability/otel/otel-installing.html [NE,R=302] - RewriteRule ^container-platform/4.9/distr_tracing/distributed-tracing-release-notes.html /container-platform/latest/observability/distr_tracing/distr_tracing_rn/distr-tracing-rn-past-releases.html [NE,R=302] - RewriteRule ^container-platform/4.9/distr_tracing/distr_tracing_install/distr-tracing-installing.html /container-platform/latest/observability/distr_tracing/distr_tracing_tempo/distr-tracing-tempo-installing.html [NE,R=302] + # Consolidated redirects for observability, monitoring, logging, and network observability + + # Generic rule for moving sections under observability + RewriteRule ^container-platform/(4\.1[2-5]|latest)/(logging|monitoring|distr_tracing|otel|network_observability)/?(.*)$ /container-platform/$1/observability/$2/$3 [NE,R=302] + + # Generic rule for ROSA and OpenShift Dedicated RewriteRule ^(rosa|dedicated)/(logging|monitoring)/?(.*)$ /$1/observability/$2/$3 [NE,R=302] + # Specific rules for Cluster Observability Operator + RewriteRule ^container-platform/(4\.1[2-5]|latest)/monitoring/cluster_observability_operator/(.*)$ /container-platform/$1/observability/cluster_observability_operator/$2 [NE,R=302] - # Redirects for network observability per https://github.com/openshift/openshift-docs/pull/73554 - RewriteRule ^container-platform/(4\.12|4\.13|4\.14|4\.15)/network_observability/?(.*)$ /container-platform/$1/observability/network_observability/$2 [NE,R=302] + # Specific redirects for distributed tracing and OpenTelemetry + RewriteRule ^container-platform/(4\.1[2-5]|latest)/distr_tracing/distr_tracing_rn/distr-tracing-rn-?(.*)$ /container-platform/$1/observability/distr_tracing/distr_tracing_rn/distr-tracing-rn-past-releases.html [NE,R=302] + RewriteRule ^container-platform/(4\.1[2-5]|latest)/otel/otel_rn/otel-rn-?(.*)$ /container-platform/$1/observability/otel/otel_rn/otel-rn-past-releases.html [NE,R=302] - # Redirect for log collection forwarding per https://github.com/openshift/openshift-docs/pull/64406 - RewriteRule ^container-platform/(4\.11|4\.12|4\.13)/logging/config/cluster-logging-collector.html /container-platform/$1/logging/log_collection_forwarding/cluster-logging-collector.html [NE,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13)/logging/cluster-logging-eventrouter.html /container-platform/$1/logging/log_collection_forwarding/cluster-logging-eventrouter.html [NE,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13)/logging/cluster-logging-enabling-json-logging.html /container-platform/$1/logging/log_collection_forwarding/cluster-logging-enabling-json-logging.html [NE,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13)/logging/cluster-logging-external.html /container-platform/$1/logging/log_collection_forwarding/log-forwarding.html [NE,R=302] + # Specific redirects for older versions and special cases + RewriteRule ^container-platform/(4\.13|latest)/distr_tracing/distr_tracing_otel/distr-tracing-otel-installing.html /container-platform/$1/observability/otel/otel-installing.html [NE,R=302] + RewriteRule ^container-platform/(4\.13|latest)/distr_tracing/distr_tracing_install/distr-tracing-deploying-otel.html /container-platform/$1/observability/otel/otel-installing.html [NE,R=302] + RewriteRule ^container-platform/4.9/distr_tracing/distributed-tracing-release-notes.html /container-platform/latest/observability/distr_tracing/distr_tracing_rn/distr-tracing-rn-past-releases.html [NE,R=302] + RewriteRule ^container-platform/4.9/distr_tracing/distr_tracing_install/distr-tracing-installing.html /container-platform/latest/observability/distr_tracing/distr_tracing_tempo/distr-tracing-tempo-installing.html [NE,R=302] + + # Redirects for log collection forwarding (for versions 4.11 to 4.13 and latest) + RewriteRule ^container-platform/(4\.1[1-3]|latest)/logging/(.*)$ /container-platform/$1/logging/log_collection_forwarding/$2 [NE,R=302] - # Redirect for network observability per https://github.com/openshift/openshift-docs/pull/65770 - RewriteRule ^container-platform/(4\.11|4\.12|4\.13)/networking/network_observability/network-observability-operator-release-notes.html /container-platform/$1/network_observability/network-observability-operator-release-notes.html [NE,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13)/networking/network_observability/installing-operators.html /container-platform/$1/network_observability/installing-operators.html [NE,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13)/networking/network_observability/observing-network-traffic.html /container-platform/$1/network_observability/observing-network-traffic.html [NE,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13)/networking/network_observability/understanding-network-observability-operator.html /container-platform/$1/network_observability/understanding-network-observability-operator.html [NE,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13)/networking/network_observability/configuring-operator.html /container-platform/$1/network_observability/configuring-operator.html [NE,R=302] + # Redirect for power monitoring (specific to 4.14 and latest) + RewriteRule ^container-platform/(4\.14|latest)/power_monitoring/(.*)$ /container-platform/$1/observability/power_monitoring/$2 [NE,R=302,L] # Redirects for Telco ZTP changes delivered in https://github.com/openshift/openshift-docs/pull/35889 RewriteRule ^container-platform/(4\.10|4\.11)/scalability_and_performance/ztp-deploying-disconnected.html /container-platform/$1/scalability_and_performance/ztp_far_edge/ztp-deploying-far-edge-clusters-at-scale.html [NE,R=302] @@ -236,6 +231,17 @@ AddType text/vtt vtt RewriteRule ^container-platform/(4\.12|4\.13)/scalability_and_performance/low_latency_tuning/cnf-tuning-low-latency-nodes-with-perf-profile.html /container-platform/$1/scalability_and_performance/cnf-low-latency-tuning.html [NE,R=302] RewriteRule ^container-platform/(4\.12|4\.13)/scalability_and_performance/low_latency_tuning/cnf-provisioning-low-latency-workloads.html /container-platform/$1/scalability_and_performance/cnf-low-latency-tuning.html [NE,R=302] + #Install redirects per https://github.com/openshift/openshift-docs/pull/79711 + RewriteRule ^container-platform/(4\.1[2-6]|latest)/installing/index.html /container-platform/$1/installing/overview/index.html [NE,R=302] + RewriteRule ^container-platform/(4\.1[2-6]|latest)/installing/installing-preparing.html /container-platform/$1/installing/overview/installing-preparing.html [NE,R=302] + RewriteRule ^container-platform/(4\.1[2-6]|latest)/installing/cluster-capabilities.html /container-platform/$1/installing/overview/cluster-capabilities.html [NE,R=302] + RewriteRule ^container-platform/(4\.1[2-6]|latest)/installing/installing-fips.html /container-platform/$1/installing/overview/installing-fips.html [NE,R=302] + RewriteRule ^container-platform/(4\.1[2-6]|latest)/installing/validating-an-installation.html /container-platform/$1/installing/validation_and_troubleshooting/validating-an-installation.html [NE,R=302] + RewriteRule ^container-platform/(4\.1[2-6]|latest)/installing/installing-troubleshooting.html /container-platform/$1/installing/validation_and_troubleshooting/installing-troubleshooting.html [NE,R=302] + + + # ingress sharding redirect per https://github.com/openshift/openshift-docs/pull/76916 + RewriteRule ^container-platform/(4\.1[2-6]|latest)/networking/ingress-sharding.html /container-platform/$1/networking/configuring_ingress_cluster_traffic/configuring-ingress-cluster-traffic-ingress-controller.html [NE,R=302] # Redirects for new ZTP edge computing section RewriteRule ^container-platform/(4\.15|4\.16)/scalability_and_performance/ztp_far_edge/cnf-talm-for-cluster-upgrades.html /container-platform/$1/edge_computing/cnf-talm-for-cluster-upgrades.html [NE,R=302] @@ -322,39 +328,49 @@ AddType text/vtt vtt # Builds using Shipwright landing page RewriteRule ^container-platform/(4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/builds_using_shipwright/overview-openshift-builds.html /builds/latest/about/overview-openshift-builds.html [L,R=302] - # redirect gitops latest to 1.12 + # redirect gitops latest to 1.13 RewriteRule ^gitops/?$ /gitops/latest [R=302] - RewriteRule ^gitops/latest/?(.*)$ /gitops/1\.12/$1 [NE,R=302] + RewriteRule ^gitops/latest/?(.*)$ /gitops/1\.13/$1 [NE,R=302] # redirect top-level without filespec to the about file - RewriteRule ^gitops/(1\.8|1\.9|1\.10|1\.11|1\.12)/?$ /gitops/$1/understanding_openshift_gitops/about-redhat-openshift-gitops.html [L,R=302] + RewriteRule ^gitops/(1\.8|1\.9|1\.10|1\.11|1\.12|1\.13)/?$ /gitops/$1/understanding_openshift_gitops/about-redhat-openshift-gitops.html [L,R=302] # GitOps landing page RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/about-redhat-openshift-gitops.html /gitops/latest/understanding_openshift_gitops/about-redhat-openshift-gitops.html [L,R=302] # redirect any links to existing OCP embedded content to standalone equivalent for each assembly - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/gitops-release-notes.html/ /gitops/latest/release_notes/gitops-release-notes.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/understanding-openshift-gitops.html /gitops/latest/understanding_openshift_gitops/about-redhat-openshift-gitops.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/installing-openshift-gitops.html /gitops/latest/installing_gitops/installing-openshift-gitops.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/uninstalling-openshift-gitops.html /gitops/latest/removing_gitops/uninstalling-openshift-gitops.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/setting-up-argocd-instance.html /gitops/latest/argocd_instance/setting-up-argocd-instance.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/monitoring-argo-cd-instances.html /gitops/latest/observability/monitoring/monitoring-argo-cd-instances.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/using-argo-rollouts-for-progressive-deployment-delivery.html /gitops/latest/argo_rollouts/using-argo-rollouts-for-progressive-deployment-delivery.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/configuring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations.html /gitops/latest/declarative_clusterconfig/configuring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/deploying-a-spring-boot-application-with-argo-cd.html /gitops/latest/argocd_applications/deploying-a-spring-boot-application-with-argo-cd.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/argo-cd-custom-resource-properties.html /gitops/latest/argocd_instance/argo-cd-cr-component-properties.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/configuring-secure-communication-with-redis.html /gitops/latest/securing_openshift_gitops/configuring-secure-communication-with-redis.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/health-information-for-resources-deployment.html /gitops/latest/observability/monitoring/health-information-for-resources-deployment.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/configuring-sso-on-argo-cd-using-dex.html /gitops/latest/accesscontrol_usermanagement/configuring-sso-on-argo-cd-using-dex.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/configuring-sso-for-argo-cd-using-keycloak.html /gitops/latest/accesscontrol_usermanagement/configuring-sso-for-argo-cd-using-keycloak.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/configuring-argo-cd-rbac.html /gitops/latest/accesscontrol_usermanagement/configuring-argo-cd-rbac.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/configuring-resource-quota.html /gitops/latest/managing_resource/configuring-resource-quota.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/monitoring-argo-cd-custom-resource-workloads.html /gitops/latest/observability/monitoring/monitoring-argo-cd-custom-resource-workloads.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/viewing-argo-cd-logs.html /gitops/latest/observability/logging/viewing-argo-cd-logs.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/run-gitops-control-plane-workload-on-infra-nodes.html /gitops/latest/gitops_workloads_infranodes/run-gitops-control-plane-workload-on-infra-nodes.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/about-sizing-requirements-gitops.html /gitops/latest/installing_gitops/preparing-gitops-install.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/collecting-debugging-data-for-support.html /gitops/latest/understanding_openshift_gitops/gathering-gitops-diagnostic-information-for-support.html [L,R=302] - RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14)/cicd/gitops/troubleshooting-issues-in-GitOps.html /gitops/latest/troubleshooting_gitops_issues/auto-reboot-during-argo-cd-sync-with-machine-configurations.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/gitops-release-notes.html/ /gitops/latest/release_notes/gitops-release-notes.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/understanding-openshift-gitops.html /gitops/latest/understanding_openshift_gitops/about-redhat-openshift-gitops.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/installing-openshift-gitops.html /gitops/latest/installing_gitops/installing-openshift-gitops.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/uninstalling-openshift-gitops.html /gitops/latest/removing_gitops/uninstalling-openshift-gitops.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/setting-up-argocd-instance.html /gitops/latest/argocd_instance/setting-up-argocd-instance.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/monitoring-argo-cd-instances.html /gitops/latest/observability/monitoring/monitoring-argo-cd-instances.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/using-argo-rollouts-for-progressive-deployment-delivery.html /gitops/latest/argo_rollouts/using-argo-rollouts-for-progressive-deployment-delivery.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/configuring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations.html /gitops/latest/declarative_clusterconfig/configuring-an-openshift-cluster-by-deploying-an-application-with-cluster-configurations.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/deploying-a-spring-boot-application-with-argo-cd.html /gitops/latest/argocd_applications/deploying-a-spring-boot-application-with-argo-cd.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/argo-cd-custom-resource-properties.html /gitops/latest/argocd_instance/argo-cd-cr-component-properties.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/configuring-secure-communication-with-redis.html /gitops/latest/securing_openshift_gitops/configuring-secure-communication-with-redis.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/health-information-for-resources-deployment.html /gitops/latest/observability/monitoring/health-information-for-resources-deployment.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/configuring-sso-on-argo-cd-using-dex.html /gitops/latest/accesscontrol_usermanagement/configuring-sso-on-argo-cd-using-dex.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/configuring-sso-for-argo-cd-using-keycloak.html /gitops/latest/accesscontrol_usermanagement/configuring-sso-for-argo-cd-using-keycloak.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/configuring-argo-cd-rbac.html /gitops/latest/accesscontrol_usermanagement/configuring-argo-cd-rbac.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/configuring-resource-quota.html /gitops/latest/managing_resource/configuring-resource-quota.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/monitoring-argo-cd-custom-resource-workloads.html /gitops/latest/observability/monitoring/monitoring-argo-cd-custom-resource-workloads.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/viewing-argo-cd-logs.html /gitops/latest/observability/logging/viewing-argo-cd-logs.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/run-gitops-control-plane-workload-on-infra-nodes.html /gitops/latest/gitops_workloads_infranodes/run-gitops-control-plane-workload-on-infra-nodes.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/about-sizing-requirements-gitops.html /gitops/latest/installing_gitops/preparing-gitops-install.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/collecting-debugging-data-for-support.html /gitops/latest/understanding_openshift_gitops/gathering-gitops-diagnostic-information-for-support.html [L,R=302] + RewriteRule ^container-platform/(4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/cicd/gitops/troubleshooting-issues-in-GitOps.html /gitops/latest/troubleshooting_gitops_issues/auto-reboot-during-argo-cd-sync-with-machine-configurations.html [L,R=302] + + +# Lightspeed handling unversioned and latest links + RewriteRule ^lightspeed/?$ /lightspeed/latest [R=302] + RewriteRule ^lightspeed/latest/?(.*)$ /lightspeed/1\.0tp1/$1 [NE,R=302] + + # Lightspeed landing page + + RewriteRule ^container-platform/(4\.9|4\.10|4\.11|4\.12|4\.13|4\.14|4\.15|4\.16|4\.17|4\.18)/lightspeed/about/ols-openshift-lightspeed-overview.html /lightspeed/latest/about/ols-about-openshift-lightspeed.html [NE,R=302] + # Pipelines handling unversioned and latest links RewriteRule ^pipelines/?$ /pipelines/latest [R=302] @@ -506,14 +522,14 @@ AddType text/vtt vtt # The following rule prevents an infinite redirect loop when browsing to /container-platform/4.16/virt/about_virt/about-virt.html - RewriteRule ^container-platform/4\.16/virt/about_virt/about-virt.html$ - [L] + #RewriteRule ^container-platform/4\.16/virt/about_virt/about-virt.html$ - [L] # OpenShift Virtualization (CNV) catchall redirect; use when CNV releases asynchronously from OCP. Do not change the 302 to a 301. # When uncommented, this redirects all `virt` directory traffic to the about-virt page. # Pay mind to the redirect directly above this which prevents redirect loops. # To activate the redirects, uncomment the next and previous lines and update the version number to the pending release. - RewriteRule container-platform/4\.16/virt/(?!about-virt\.html)(.+)$ /container-platform/4.16/virt/about_virt/about-virt.html [NE,R=302] + #RewriteRule container-platform/4\.16/virt/(?!about-virt\.html)(.+)$ /container-platform/4.16/virt/about_virt/about-virt.html [NE,R=302] # Red Hat OpenShift support for Windows Containers (WMCO) catchall redirect; use when WMCO releases asynchronously from OCP. Do not change the 302 to a 301. diff --git a/.s2i/httpd-cfg/01-community.conf b/.s2i/httpd-cfg/01-community.conf index 209f6f561549..da610fe5860c 100644 --- a/.s2i/httpd-cfg/01-community.conf +++ b/.s2i/httpd-cfg/01-community.conf @@ -160,13 +160,13 @@ AddType text/vtt vtt RewriteRule ^latest/install_config/upgrading/(.*)$ /latest/upgrading/$1 [NE,R=301] # The following rule prevents an infinite redirect loop when browsing to /(latest|4\.16)/virt/about_virt/about-virt.html - RewriteRule ^(latest|4\.16)/virt/about_virt/about-virt.html$ - [L] + #RewriteRule ^(latest|4\.16)/virt/about_virt/about-virt.html$ - [L] # OpenShift Virtualization (CNV) catchall redirect; use when CNV releases asynchronously from OCP. Do not change the 302 to a 301. # When uncommented, this redirects all `virt` directory traffic to the about-virt page. # Pay mind to the redirect directly above this which prevents redirect loops. # To activate the redirects, uncomment the next and previous lines and update the version number to the pending release. - RewriteRule ^(latest|4\.16)/virt/(?!about-virt\.html)(.+)$ /$1/virt/about_virt/about-virt.html [NE,R=302] + #RewriteRule ^(latest|4\.16)/virt/(?!about-virt\.html)(.+)$ /$1/virt/about_virt/about-virt.html [NE,R=302] # Red Hat OpenShift support for Windows Containers (WMCO) catchall redirect; use when WMCO releases asynchronously from OCP. Do not change the 302 to a 301. # When uncommented, this redirects all `windows_containers` directory traffic to the /windows_containers/index.html page. diff --git a/404-commercial.html b/404-commercial.html index 28058c3c38d1..21599e7c3c2c 100644 --- a/404-commercial.html +++ b/404-commercial.html @@ -167,7 +167,7 @@