From 9a18ce6b56719149d025994b87e410c0594c8fff Mon Sep 17 00:00:00 2001 From: brian-armory Date: Fri, 7 May 2021 16:52:46 -0700 Subject: [PATCH] docs(migration): fix imgs and links --- config.toml | 6 ----- content/en/docs/concepts/providers/_index.md | 2 +- content/en/docs/guides/spin/_index.md | 2 +- content/en/docs/guides/spin/app/index.md | 2 +- .../appengine-source-to-prod/index.md | 2 +- .../codelabs/artifactory-to-cf/index.md | 3 ++- .../codelabs/dcos-source-to-prod/index.md | 2 +- .../kubernetes-v2-source-to-prod/index.md | 8 +++--- .../oracle-kubernetes-source-to-prod/index.md | 2 +- .../codelabs/pubsub-to-appengine/index.md | 2 +- .../guides/user/applications/configure.md | 15 ++++++------ .../docs/guides/user/applications/create.md | 9 +++---- .../docs/guides/user/applications/delete.md | 2 +- .../user/canary/best-practices/_index.md | 2 +- .../guides/user/canary/canary-overview.md | 4 +-- .../user/canary/config/canary-config.md | 19 ++++++--------- .../user/canary/config/filter-templates.md | 2 +- .../docs/guides/user/canary/judge/_index.md | 2 +- .../docs/guides/user/canary/stage/_index.md | 4 +-- .../en/docs/guides/user/get-started/index.md | 2 +- .../automated-rollbacks/index.md | 4 +-- .../user/kubernetes-v2/deploy-helm/index.md | 2 +- .../kubernetes-v2/deploy-manifest/index.md | 4 +-- .../parameterize-manifests/index.md | 4 +-- .../kubernetes-v2/patch-manifest/_index.md | 4 +-- .../kubernetes-v2/run-job-manifest/index.md | 2 +- .../managed-delivery/resource-status/index.md | 4 +-- .../user/pipeline/expressions/_index.md | 9 ++++--- .../images/evaluate-variables-stage.png | Bin 0 -> 76403 bytes .../expressions/images/parameters.png | Bin 0 -> 23546 bytes .../pipeline/pipeline-templates/_index.md | 2 +- .../pipeline/pipeline-templates/create.md | 10 ++++---- .../pipeline/triggers/artifactory/_index.md | 8 ++---- .../user/pipeline/triggers/gcs/_index.md | 4 +-- .../user/pipeline/triggers/github/_index.md | 2 +- .../user/pipeline/triggers/pubsub/_index.md | 2 +- .../user/pipeline/triggers/webhooks/_index.md | 7 +++--- .../architecture/microservices-overview.md | 2 +- .../artifacts-legacy/from-build-triggers.md | 7 +++--- .../in-kubernetes-v2/index.md | 5 ++-- .../artifacts/from-build-triggers.md | 4 +-- .../artifacts/in-kubernetes-v2/index.md | 4 +-- .../artifacts/in-pipelines/_index.md | 2 +- .../artifacts/types/gcs-object/index.md | 2 +- .../docs/reference/pipeline/stages/_index.md | 2 +- content/en/docs/reference/providers/_index.md | 2 +- .../en/docs/reference/providers/appengine.md | 2 +- content/en/docs/reference/providers/azure.md | 2 +- content/en/docs/reference/providers/gce.md | 2 +- content/en/docs/reference/providers/oracle.md | 4 +-- .../en/docs/setup/install/configuration.md | 2 +- content/en/docs/setup/install/deploy.md | 14 +---------- content/en/docs/setup/install/environment.md | 2 +- content/en/docs/setup/install/faq.md | 18 +++----------- .../en/docs/setup/install/providers/_index.md | 2 +- .../docs/setup/install/providers/appengine.md | 2 +- .../setup/install/providers/aws/_index.md | 6 ++--- .../install/providers/aws/aws-concepts.md | 2 +- .../setup/install/providers/aws/aws-ec2.md | 7 +++--- .../setup/install/providers/aws/aws-ecs.md | 2 +- .../en/docs/setup/install/providers/azure.md | 2 +- .../en/docs/setup/install/providers/dcos.md | 4 +-- .../install/providers/docker-registry.md | 2 +- .../en/docs/setup/install/providers/gce.md | 2 +- .../install/providers/kubernetes-v2/_index.md | 6 ++--- .../providers/kubernetes-v2/k8s-provider.md | 8 +++--- .../providers/kubernetes-v2/oke/index.md | 2 +- .../setup/install/providers/kubernetes.md | 10 +++----- .../en/docs/setup/install/providers/oracle.md | 2 +- .../en/docs/setup/install/storage/_index.md | 4 +-- .../en/docs/setup/install/storage/redis.md | 2 +- content/en/docs/setup/install/storage/s3.md | 2 +- .../setup/install/storage/storage-overview.md | 2 +- .../docs/setup/other_config/artifacts/gcs.md | 2 +- .../setup/other_config/artifacts/github.md | 2 +- .../setup/other_config/artifacts/gitlab.md | 2 +- .../setup/other_config/artifacts/gitrepo.md | 2 +- .../docs/setup/other_config/artifacts/http.md | 2 +- .../setup/other_config/artifacts/maven.md | 2 +- .../setup/other_config/artifacts/oracle.md | 2 +- .../docs/setup/other_config/artifacts/s3.md | 2 +- .../features/notifications/index.md | 2 +- .../features/notifications/ms-teams.png | Bin 0 -> 33509 bytes .../setup/other_config/security/_index.md | 23 ------------------ .../authentication/{index.md => _index.md} | 8 +++--- .../oauth/{index.md => _index.md} | 2 +- .../docs/setup/other_config/security/ssl.md | 7 +----- .../other_config/triggers/github/_index.md | 2 +- content/en/docs/setup/productionize/_index.md | 2 +- .../setup/quickstart/halyard-gke/_index.md | 2 +- 90 files changed, 150 insertions(+), 219 deletions(-) create mode 100644 content/en/docs/guides/user/pipeline/expressions/images/evaluate-variables-stage.png create mode 100644 content/en/docs/guides/user/pipeline/expressions/images/parameters.png create mode 100644 content/en/docs/setup/other_config/features/notifications/ms-teams.png rename content/en/docs/setup/other_config/security/authentication/{index.md => _index.md} (83%) rename content/en/docs/setup/other_config/security/authentication/oauth/{index.md => _index.md} (98%) diff --git a/config.toml b/config.toml index 7870d717..72aba7b7 100644 --- a/config.toml +++ b/config.toml @@ -227,13 +227,7 @@ enable = false url = "/docs/" # Add your release versions here -[[params.versions]] - version = "v1.19" - url = "/docs/" -[[params.versions]] - version = "v1.20" - url = "/docs/v1.20/" # baseURL = "/" # languageCode = "en-us" diff --git a/content/en/docs/concepts/providers/_index.md b/content/en/docs/concepts/providers/_index.md index 20e6ea52..12817f60 100644 --- a/content/en/docs/concepts/providers/_index.md +++ b/content/en/docs/concepts/providers/_index.md @@ -45,7 +45,7 @@ These are the cloud providers currently supported by Spinnaker: * Kubernetes * Oracle -Setup instructions for providers are [here](/docs/setup/providers/) +Setup instructions for providers are [here](/docs/setup/install/providers/) If you see a provider missing from this list that you feel Spinnaker should support, we gladly welcome your contributions. Please reach out to us on diff --git a/content/en/docs/guides/spin/_index.md b/content/en/docs/guides/spin/_index.md index 6203a067..29c1d6b7 100644 --- a/content/en/docs/guides/spin/_index.md +++ b/content/en/docs/guides/spin/_index.md @@ -6,5 +6,5 @@ description: > You can edit pipelines, applications, and configs using the Spinnaker Command Line Interface (`spin` CLI). --- -Before you begin, see [Install and Configure Spin CLI](/docs/spin/other_config/spin). +Before you begin, see [Install and Configure Spin CLI](/docs/setup/other_config/spin/). diff --git a/content/en/docs/guides/spin/app/index.md b/content/en/docs/guides/spin/app/index.md index 3e7b2adc..b4d98e7a 100644 --- a/content/en/docs/guides/spin/app/index.md +++ b/content/en/docs/guides/spin/app/index.md @@ -3,7 +3,7 @@ title: "Manage Applications" linkTitle: "Manage Apps" weight: 2 description: > - Once you have `spin` [installed and configured](/docs/spin/other_config/spin), you can use it to manage your Spinnaker application's lifecycle. + Once you have `spin` installed and configured, you can use it to manage your Spinnaker application's lifecycle. --- diff --git a/content/en/docs/guides/tutorials/codelabs/appengine-source-to-prod/index.md b/content/en/docs/guides/tutorials/codelabs/appengine-source-to-prod/index.md index 640f039a..8f221847 100644 --- a/content/en/docs/guides/tutorials/codelabs/appengine-source-to-prod/index.md +++ b/content/en/docs/guides/tutorials/codelabs/appengine-source-to-prod/index.md @@ -30,7 +30,7 @@ gcloud services enable compute.googleapis.com We're going to trigger our Spinnaker pipelines using Github webhooks. In order to do so, we will have to expose Spinnaker's API gateway to external traffic. -If you are going to use this installation beyond this codelab, you should follow the [guides](/docs/setup/security) for securing Spinnaker. +If you are going to use this installation beyond this codelab, you should follow the [guides](/docs/setup/other_config/security/) for securing Spinnaker. Create a new firewall rule for your GCP project. Github sends webhooks from IPs in the [CIDR ranges](https://help.github.com/articles/github-s-ip-addresses/#service-hook-ip-addresses) queried below. diff --git a/content/en/docs/guides/tutorials/codelabs/artifactory-to-cf/index.md b/content/en/docs/guides/tutorials/codelabs/artifactory-to-cf/index.md index 9108a88e..dbf51f59 100644 --- a/content/en/docs/guides/tutorials/codelabs/artifactory-to-cf/index.md +++ b/content/en/docs/guides/tutorials/codelabs/artifactory-to-cf/index.md @@ -11,7 +11,8 @@ In this codelab, you will deploy an artifact to Cloud Foundry via a Spinnaker pi This codelab assumes you have the following: -* Artifact support [enabled](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +* Artifact support [enabled](/docs/reference/artifacts/#enabling-artifact-support). +* * An Artifactory repository configured to accept a Maven artifact—the JAR for your application * A GitHub repository containing a manifest with which to deploy your application diff --git a/content/en/docs/guides/tutorials/codelabs/dcos-source-to-prod/index.md b/content/en/docs/guides/tutorials/codelabs/dcos-source-to-prod/index.md index 39191aed..af02674b 100644 --- a/content/en/docs/guides/tutorials/codelabs/dcos-source-to-prod/index.md +++ b/content/en/docs/guides/tutorials/codelabs/dcos-source-to-prod/index.md @@ -55,7 +55,7 @@ If you've deployed your Spinnaker instance with Halyard, configuring Spinnaker r #### Enable Docker -[Configure a docker registry with halyard](/docs/setup/providers/docker-registry/) +[Configure a docker registry with halyard](/docs/setup/install/providers/docker-registry/) #### Set up the DC/OS provider diff --git a/content/en/docs/guides/tutorials/codelabs/kubernetes-v2-source-to-prod/index.md b/content/en/docs/guides/tutorials/codelabs/kubernetes-v2-source-to-prod/index.md index de0d1638..80bf3b73 100644 --- a/content/en/docs/guides/tutorials/codelabs/kubernetes-v2-source-to-prod/index.md +++ b/content/en/docs/guides/tutorials/codelabs/kubernetes-v2-source-to-prod/index.md @@ -124,7 +124,7 @@ will allow us to fetch the manifests later. ### Configure Docker Registry account -Make sure to [add a Docker Registry provider account](/setup/install/providers/docker-registry). +Make sure to [add a Docker Registry provider account](/docs/setup/install/providers/docker-registry). This will allow us to configure a Spinnaker pipeline to trigger on a Docker image update. @@ -216,9 +216,9 @@ kubectl describe node $NODE_NAME For the purposes of this codelab, we'll be sending external webhooks to `$NODE_PORT` on that node. In order for these webhooks to work, for this codelab only, open your firewall on that node to all addresses for TCP connections on -`$NODE_PORT`. If you were running Spinnaker in production with [authentication](/setup/security), +`$NODE_PORT`. If you were running Spinnaker in production with [authentication](/docs/setup/other_config/security), only webhooks would be allowed, which you can reject by header or payload. See -[the webhook guide for more details](/guides/user/triggers/webhooks). +[the webhook guide for more details](/docs/guides/user/pipeline/triggers/). ### Allow Docker to post build events @@ -520,7 +520,7 @@ At this point there are few things you can play with: * Roll back a "broken" change either in prod or staging using the "Undo Rollout" stage. -* Insert [pipeline expressions](/docs/v1/guides/user/pipeline-expressions) into +* Insert [pipeline expressions](/docs/guides/user/pipeline/expressions) into your manifest files. ## 10. Teardown diff --git a/content/en/docs/guides/tutorials/codelabs/oracle-kubernetes-source-to-prod/index.md b/content/en/docs/guides/tutorials/codelabs/oracle-kubernetes-source-to-prod/index.md index 6643eefa..1b8c6c7c 100644 --- a/content/en/docs/guides/tutorials/codelabs/oracle-kubernetes-source-to-prod/index.md +++ b/content/en/docs/guides/tutorials/codelabs/oracle-kubernetes-source-to-prod/index.md @@ -119,7 +119,7 @@ Create a new pipeline by navigating to the PIPELINES tab and clicking the *New* ### Set up Deploy stage -There are multiple ways to deploy Kubernetes manifests using the Kubernetes provider. More details can be found in this [Deploying Kubernetes Manifests](/docs/v1/guides/user/kubernetes-v2/deploy-manifest/) guide. +There are multiple ways to deploy Kubernetes manifests using the Kubernetes provider. More details can be found in this [Deploying Kubernetes Manifests](/docs/guides/user/kubernetes-v2/deploy-manifest/) guide. It is preferred to use artifacts as manifests. However, in this tutorial, the manifest is supplied statically to a pipeline as text for simplicity. diff --git a/content/en/docs/guides/tutorials/codelabs/pubsub-to-appengine/index.md b/content/en/docs/guides/tutorials/codelabs/pubsub-to-appengine/index.md index 1fe96a9d..f9ff92f7 100644 --- a/content/en/docs/guides/tutorials/codelabs/pubsub-to-appengine/index.md +++ b/content/en/docs/guides/tutorials/codelabs/pubsub-to-appengine/index.md @@ -88,7 +88,7 @@ We'll need this service account later, so keep these environment variables handy First, configure your GCS artifact provider. -1. Enable [artifact support](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +1. Enable [artifact support](/docs/reference/artifacts/#enabling-artifact-support). 2. Enable the GCS artifact provider: `hal config artifact gcs enable` diff --git a/content/en/docs/guides/user/applications/configure.md b/content/en/docs/guides/user/applications/configure.md index a2ec3796..cabb6ae1 100644 --- a/content/en/docs/guides/user/applications/configure.md +++ b/content/en/docs/guides/user/applications/configure.md @@ -7,7 +7,7 @@ description: > --- -Once you've [created an application](/docs/v1/guides/user/applications/create/), you can +Once you've [created an application](/docs/guides/user/applications/create/), you can finish configuring it before adding infrastructure and pipelines. ## Start configuring @@ -15,8 +15,7 @@ finish configuring it before adding infrastructure and pipelines. 1. From within the application, click **CONFIG** at the top right of the Spinnaker screen. - The application attributes you [defined when you created the - app](/docs/v1/guides/user/applications/create/) are shown at the top. + The application attributes you [defined when you created the app](/docs/guides/user/applications/create/) are shown at the top. > **Note** Spinnaker can infer applications based on existing infrastructure. > In these cases, there are no application attributes. For applications that @@ -53,7 +52,7 @@ activity. These notifications are optional. "Congratulations, your pipeline has finished!" Custom notification text is optional. - ![](/docs/v1/guides/user/applications/event_notification_prefs.png) + ![](/docs/guides/user/applications/event_notification_prefs.png) 1. Click Update @@ -82,7 +81,7 @@ to information related to the instance, like logs, health, and so on. > **Note**: Custom instance links don't currently work for Kubernetes resources. -![](/docs/v1/guides/user/applications/instance_with_links.png) +![](/docs/guides/user/applications/instance_with_links.png) These links are resolved using the public IP address of the instance, if available, or the private IP otherwise. The default port is 80; if you want to @@ -95,12 +94,12 @@ use a different port, begin the path with `:`. 1. In the **Links** fields, type the text that you want to display, and the path to the link target. - You can reference [these specific instance attributes](/docs/v1/guides/user/instance-links/#available-template-fields) + You can reference [these specific instance attributes](/docs/guides/user/instance-links/#available-template-fields) by wrapping them in curly braces. For example, to include the region where the instance lives, for a GCE or AWS instance, use `{region}`. These are for the path only, not the link display text. - ![](/docs/v1/guides/user/applications/app_config_add_link.png) + ![](/docs/guides/user/applications/app_config_add_link.png) 1. Click **Add Link** for each additional link you want displayed in this section. @@ -114,7 +113,7 @@ section. 1. Click **Save Changes** when you're finished. Note that you can set default links across all applications, as described -[here](/docs/v1/guides/user/instance-links/#default-links). +[here](/docs/guides/user/instance-links/#default-links). ## Refresh caches diff --git a/content/en/docs/guides/user/applications/create.md b/content/en/docs/guides/user/applications/create.md index 77dc49c3..e04d7864 100644 --- a/content/en/docs/guides/user/applications/create.md +++ b/content/en/docs/guides/user/applications/create.md @@ -23,9 +23,9 @@ applications available, the first thing you're going to do is create one. 1. Click **Actions**, then **Create Application**. - ![](/docs/v1/guides/user/applications/create_application.png) + ![](/docs/guides/user/applications/create_application.png) -1. Provide the application attributes in the **New Application** dialog. +2. Provide the application attributes in the **New Application** dialog. | Field | Required | Description | | --- | --- | --- | @@ -38,11 +38,10 @@ applications available, the first thing you're going to do is create one. | Instance port | No | This field is used to generate links from Spinnaker instance details to a running instance. The instance port can be used or overridden for specific links configured for your application (via the Config screen). | | Enable restarting running pipelines | Bool, default=no | If enabled, users can restart pipeline stages while a pipeline is still running. This behavior is not recommended. | -1. Click **Create**. +3. Click **Create**. ## Next steps You now have an application in which to start adding infrastructure and creating pipelines. These application attributes are the minimum configuration, but you -will probably want to [finish configuring the -application](/docs/v1/guides/user/applications/configure/). +will probably want to [finish configuring the application](/docs/guides/user/applications/configure/). diff --git a/content/en/docs/guides/user/applications/delete.md b/content/en/docs/guides/user/applications/delete.md index 80419be8..fec82282 100644 --- a/content/en/docs/guides/user/applications/delete.md +++ b/content/en/docs/guides/user/applications/delete.md @@ -16,4 +16,4 @@ first. 1. Scroll to the bottom of the application configuration screen, and click **Delete Application**. -![](/docs/v1/guides/user/applications/delete_application.png) +![](/docs/guides/user/applications/delete_application.png) diff --git a/content/en/docs/guides/user/canary/best-practices/_index.md b/content/en/docs/guides/user/canary/best-practices/_index.md index 433d6b9b..90a6e57b 100644 --- a/content/en/docs/guides/user/canary/best-practices/_index.md +++ b/content/en/docs/guides/user/canary/best-practices/_index.md @@ -106,7 +106,7 @@ analysis](#run-the-canary-for-enough-time) you have to wait a long time for the analysis to finish before you can refine it. Fortunately, a Canary Analysis stage can be configured to use a [retrospective -analysis](/docs/v1/guides/user/canary/stage/#real-time-versus-retrospective-analysis) +analysis](/docs/guides/user/canary/stage/#real-time-versus-retrospective-analysis) instead of a real-time analysis. This analysis is based on past monitoring data, without having to wait for the data points to be generated. With this mode, you can iterate more quickly on the development of the canary configuration. diff --git a/content/en/docs/guides/user/canary/canary-overview.md b/content/en/docs/guides/user/canary/canary-overview.md index d0cb745f..b597c161 100644 --- a/content/en/docs/guides/user/canary/canary-overview.md +++ b/content/en/docs/guides/user/canary/canary-overview.md @@ -41,7 +41,7 @@ installation](/docs/setup/other_config/canary/). ## How to make Canary work in Spinnaker—the high-level process 1. In Spinnaker, [create one or more canary -configurations](/docs/v1/guides/user/canary/config/). +configurations](/docs/guides/user/canary/config/). The configuration provides the set of metrics for use in all pipeline canary stages that reference it, plus default scoring thresholds and @@ -57,7 +57,7 @@ configurations](/docs/v1/guides/user/canary/config/). your metric store. 1. In any deployment pipeline that will use canary, [add one or more canary -stages](/docs/v1/guides/user/canary/stage/). +stages](/docs/guides/user/canary/stage/). The canary stage includes information that scopes the templated query (canary config) to a specified set of resources and time boundaries. diff --git a/content/en/docs/guides/user/canary/config/canary-config.md b/content/en/docs/guides/user/canary/config/canary-config.md index a589f662..6901b311 100644 --- a/content/en/docs/guides/user/canary/config/canary-config.md +++ b/content/en/docs/guides/user/canary/config/canary-config.md @@ -109,8 +109,7 @@ compared to the baseline. Or select __either__, in which case it fails on deviation in either direction. -1. Optionally, choose a [filter -template](/docs/v1/guides/user/canary/config/filter_templates/). +1. Optionally, choose a [filter template](/docs/guides/user/canary/config/filter-templates/). This is only available if your Spinnaker is [configured for it](/docs/reference/halyard/commands/#hal-config-canary-edit). @@ -122,7 +121,7 @@ template](/docs/v1/guides/user/canary/config/filter_templates/). resource.labels.zone = starts_with("${zone}") ``` -1. Identify the specific metric you're including in the analysis configuration: +2. Identify the specific metric you're including in the analysis configuration: * In the __Metric Type__ field type at least 3 characters to populate the field with available metrics. @@ -132,7 +131,7 @@ template](/docs/v1/guides/user/canary/config/filter_templates/). ![List of available metrics](/docs/guides/user/canary/config/metric_type_list_cpu.png) -1. Optionally, if your telemetry provider supports aggregation of results, click +3. Optionally, if your telemetry provider supports aggregation of results, click __Group by__ and enter the metric metadata attribute by which to group and aggregate the data. @@ -145,7 +144,7 @@ aggregate the data. > __Metric groups versus grouping metrics__ > > When you create a canary configuration, you [create metric - > groups](/docs/v1/guides/user/canary/config/#create-metric-groups-and-add-metrics), + > groups](/docs/guides/user/canary/config/#create-metric-groups-and-add-metrics), > and scoring thresholds and weights are applied to groups (rather than to > specific metrics). But the grouping described in this step is for aggregating metrics before they're returned to Kayenta. @@ -157,25 +156,23 @@ aggregate the data. ### Add filter templates -If your telemetry provider is Stackdriver or Prometheus, you can add [filter -templates](/docs/v1/guides/user/canary/config/filter_templates/) and then assign each +If your telemetry provider is Stackdriver or Prometheus, you can add [filter templates](/docs/guides/user/canary/config/filter-templates/) and then assign each metric a filter template, if you want. 1. Click __Add Template__. -1. Provide a __Name__. +2. Provide a __Name__. This is the name by which you can select it when configuring the specific metric. -1. In the __Template__ field, enter an expression using the [FreeMarker](https://freemarker.apache.org/) +3. In the __Template__ field, enter an expression using the [FreeMarker](https://freemarker.apache.org/) template language. See the interpolation syntax [here](https://freemarker.apache.org/docs/dgui_quickstart_template.html). The expression is expanded using the variable bindings specified via the __Extended - Params__ in any [canary - stage](/docs/v1/guides/user/canary/stage/#define-the-canary-stage) that uses this + Params__ in any [canary stage](/docs/guides/user/canary/stage/#define-the-canary-stage) that uses this configuration. These variable bindings are also implicitly available: `project`, `resourceType`, `scope`, `location` diff --git a/content/en/docs/guides/user/canary/config/filter-templates.md b/content/en/docs/guides/user/canary/config/filter-templates.md index 274d6f22..780803d1 100644 --- a/content/en/docs/guides/user/canary/config/filter-templates.md +++ b/content/en/docs/guides/user/canary/config/filter-templates.md @@ -61,6 +61,6 @@ Params__, click __Add Field__. this stage is using. 3. Add the value you want for that variable. You can use any literal or - [pipeline expression](/docs/guides/user/pipeline-expressions/). + [pipeline expression](/docs/guides/user/pipeline/expressions/). ![](/docs/guides/user/canary/config/extended_params.png) diff --git a/content/en/docs/guides/user/canary/judge/_index.md b/content/en/docs/guides/user/canary/judge/_index.md index ef023dd3..5830fa12 100644 --- a/content/en/docs/guides/user/canary/judge/_index.md +++ b/content/en/docs/guides/user/canary/judge/_index.md @@ -83,7 +83,7 @@ the ratio of "Pass" metrics out of the total number of metrics. For example, if 9 of 10 metrics are classified as “Pass,” the score is 90%. The threshold score for overall canary pass, marginal, or fail is specified in the -[canary configuration](/docs/v1/guides/user/canary/config/). +[canary configuration](/docs/guides/user/canary/config/). While there are more complex scoring methodologies, the default judge (NetflixACAJudge) is biased toward techniques that are simple to interpret and diff --git a/content/en/docs/guides/user/canary/stage/_index.md b/content/en/docs/guides/user/canary/stage/_index.md index 8913883d..614aad0f 100644 --- a/content/en/docs/guides/user/canary/stage/_index.md +++ b/content/en/docs/guides/user/canary/stage/_index.md @@ -42,7 +42,7 @@ other permutations, like multiple stages? --> 1. In the pipeline in which you will run the canary, click __Add stage__. This pipeline needs to be in an application that has access to the [canary - configuration](/docs/v1/guides/user/canary/config/) you want to use. + configuration](/docs/guides/user/canary/config/) you want to use. 1. For __Type__ select __Canary__. @@ -143,7 +143,7 @@ downstream of its dependencies. which can be used to refine the scope of the analysis. These parameters can provide variable bindings for use in the expansion of custom filter templates [specified in the canary - config](/docs/v1/guides/user/canary/config/filter_templates/). + config](/docs/guides/user/canary/config/filter-templates/). ![Canary stage declaration](/docs/guides/user/canary/stage/metric_scope.png) diff --git a/content/en/docs/guides/user/get-started/index.md b/content/en/docs/guides/user/get-started/index.md index 73eebad2..1898b3f9 100644 --- a/content/en/docs/guides/user/get-started/index.md +++ b/content/en/docs/guides/user/get-started/index.md @@ -23,7 +23,7 @@ started. some things to check out: - [Advanced configuration](/docs/setup/other_config/) - - [Productionize Spinnaker](/docs/etup/productionize/) + - [Productionize Spinnaker](/docs/setup/productionize/) ### Users (deploying with Spinnaker) diff --git a/content/en/docs/guides/user/kubernetes-v2/automated-rollbacks/index.md b/content/en/docs/guides/user/kubernetes-v2/automated-rollbacks/index.md index 702ca8ba..45196f5f 100644 --- a/content/en/docs/guides/user/kubernetes-v2/automated-rollbacks/index.md +++ b/content/en/docs/guides/user/kubernetes-v2/automated-rollbacks/index.md @@ -67,11 +67,11 @@ And roll back by "1" revision, (Revision 4) will be active again. Roll back by It's worth mentioning that you can parameterize the target resource to roll back. It can point to something specified using pipeline parameters, and upstream deploy stage, or another stage's outputs. See more details in the -[pipeline expressions guide](/docs/v1/guides/user/pipeline-expressions). +[pipeline expressions guide](/docs/guides/user/pipeline/expressions). ## Pitfalls If the artifacts deployed in your manifest (Docker image, ConfigMap, Secret, ...) are not versioned, rolling back your manifest will likely not roll back your code or config changes. See more details -[here](/docs/v1/guides/user/kubernetes-v2/best-practices#version-your-configmaps-and-secrets). +[here](/docs/guides/user/kubernetes-v2/best-practices#version-your-configmaps-and-secrets). diff --git a/content/en/docs/guides/user/kubernetes-v2/deploy-helm/index.md b/content/en/docs/guides/user/kubernetes-v2/deploy-helm/index.md index bc3ef4f2..df0fe2be 100644 --- a/content/en/docs/guides/user/kubernetes-v2/deploy-helm/index.md +++ b/content/en/docs/guides/user/kubernetes-v2/deploy-helm/index.md @@ -16,7 +16,7 @@ For more details, see `helm template --help`. > `helm install` once when > bootstrapping your Kubernetes cluster. -> Note: Make sure that you have configured [artifact support](/docs/setup/artifacts) +> Note: Make sure that you have configured [artifact support](/docs/setup/other_config/artifacts/) > in Spinnaker first. All Helm charts are fetched/stored as artifacts in > Spinnaker. Read more in the [reference pages](/docs/reference/artifacts). diff --git a/content/en/docs/guides/user/kubernetes-v2/deploy-manifest/index.md b/content/en/docs/guides/user/kubernetes-v2/deploy-manifest/index.md index ecb01983..2cf3540f 100644 --- a/content/en/docs/guides/user/kubernetes-v2/deploy-manifest/index.md +++ b/content/en/docs/guides/user/kubernetes-v2/deploy-manifest/index.md @@ -76,8 +76,8 @@ This can be stored in GitHub or an object store (like GCS). Changes to manifests can trigger pipelines. For more information: -* [Consuming GitHub Artifacts](/docs/guides/user/triggers/github) -* [Consuming GCS Artifacts](/docs/guides/user/triggers/gcs) +* [Consuming GitHub Artifacts](/docs/guides/user/pipeline/triggers/github) +* [Consuming GCS Artifacts](/docs/guides/user/pipeline/triggers/gcs) Assuming you have declared an expected artifact upstream to your Deploy manifest stage, you can reference it in the Deploy configuration: diff --git a/content/en/docs/guides/user/kubernetes-v2/parameterize-manifests/index.md b/content/en/docs/guides/user/kubernetes-v2/parameterize-manifests/index.md index f1802fc3..f169039c 100644 --- a/content/en/docs/guides/user/kubernetes-v2/parameterize-manifests/index.md +++ b/content/en/docs/guides/user/kubernetes-v2/parameterize-manifests/index.md @@ -22,7 +22,7 @@ pipeline editor (only the __Name__ is required): {{< figure src="./parameter.png" >}} > See more details on how to provide parameters to pipelines programmatically in -> the [webhooks](/docs/guides/user/triggers/webhooks) page. +> the [webhooks](/docs/guides/user/pipeline/triggers/webhooks) page. > Warning: there are several reserved parameter keys (names) that cause unexpected behavior and failures > if overwritten by a pipeline parameter definition. @@ -66,4 +66,4 @@ spec: ## More advanced parameterization -Please read the [pipeline expressions guide](/docs/guides/user/pipeline-expressions). +Please read the [pipeline expressions guide](/docs/guides/user/pipeline/expressions). diff --git a/content/en/docs/guides/user/kubernetes-v2/patch-manifest/_index.md b/content/en/docs/guides/user/kubernetes-v2/patch-manifest/_index.md index b5540c8f..9ca35986 100644 --- a/content/en/docs/guides/user/kubernetes-v2/patch-manifest/_index.md +++ b/content/en/docs/guides/user/kubernetes-v2/patch-manifest/_index.md @@ -65,8 +65,8 @@ Like the [Deploy (Manifest) stage](/docs/guides/user/kubernetes-v2/deploy-manife You can also set up the pipeline to trigger based on changes to the patch content: -* [Consuming GitHub Artifacts](/docs/guides/user/triggers/github) -* [Consuming GCS Artifacts](/docs/guides/user/triggers/gcs) +* [Consuming GitHub Artifacts](/docs/guides/user/pipeline/triggers/github/) +* [Consuming GCS Artifacts](/docs/guides/user/pipeline/triggers/gcs/) Assuming you have declared an expected artifact upstream to your Patch (Manifest) stage, you can reference it in the Patch configuration: diff --git a/content/en/docs/guides/user/kubernetes-v2/run-job-manifest/index.md b/content/en/docs/guides/user/kubernetes-v2/run-job-manifest/index.md index 1eeaba3d..899b09a6 100644 --- a/content/en/docs/guides/user/kubernetes-v2/run-job-manifest/index.md +++ b/content/en/docs/guides/user/kubernetes-v2/run-job-manifest/index.md @@ -105,7 +105,7 @@ If you source JSON from a file (`SPINNAKER_CONFIG_JSON=$(cat file.json)`), be su [Artifacts](/docs/reference/artifacts) are a mechanism within Spinnaker that enables pipelines to reference resources stored in external systems. Artifacts can be anything — Docker images, Kubernetes manifests, and in this case, data produced by the Run Job stage. As mentioned above, if your job is producing so many logs that parsing them for output data would be an expensive operation, utilizing artifacts would be the best solution. -In order to use artifacts to capture output data, your job needs to push output to one of Spinnaker's [supported artifact stores](/docs/reference/artifacts/types/overview). This output is captured at the end of the job execution and injected into the pipeline for use in downstream stages via SpEL. Artifacts captured as output must be in JSON format. +In order to use artifacts to capture output data, your job needs to push output to one of Spinnaker's [supported artifact stores](/docs/reference/artifacts/types/). This output is captured at the end of the job execution and injected into the pipeline for use in downstream stages via SpEL. Artifacts captured as output must be in JSON format. As an example, let's imagine you are running a job which pushes output into an S3 bucket at the end of its execution. diff --git a/content/en/docs/guides/user/managed-delivery/resource-status/index.md b/content/en/docs/guides/user/managed-delivery/resource-status/index.md index aa33a809..4582526f 100644 --- a/content/en/docs/guides/user/managed-delivery/resource-status/index.md +++ b/content/en/docs/guides/user/managed-delivery/resource-status/index.md @@ -6,7 +6,7 @@ description: Learn how to find resources' status. --- ->If you're not sure what a managed resource is, check out our [Overview of Managed Delivery](/docs/guides/user/managed-delivery/managed-deliver-overview) first. +>If you're not sure what a managed resource is, check out our [Overview of Managed Delivery](/docs/guides/user/managed-delivery/managed-delivery-overview) first. ## Overview @@ -21,7 +21,7 @@ Managed resources always have a **status**, which describes the current state of On the Infrastructure views (Clusters, Load Balancers, Firewalls), you'll see a color-coded "M" logo attached to any resources that are managed by Spinnaker. Hovering over the logo reveals additional context about the current status and what it means. Example on a cluster: -{{< figure src=="./cluster-resource-status-ui.png" >}} +{{< figure src="./cluster-resource-status-ui.png" >}} ### API diff --git a/content/en/docs/guides/user/pipeline/expressions/_index.md b/content/en/docs/guides/user/pipeline/expressions/_index.md index f3a9e0ae..d556fe6b 100644 --- a/content/en/docs/guides/user/pipeline/expressions/_index.md +++ b/content/en/docs/guides/user/pipeline/expressions/_index.md @@ -55,8 +55,7 @@ However, expressions can be used with Expected Artifacts, just enable "Use Default Artifact" and write the expression in the Object path. If you want to set the value of a field using a pipeline expression but there is -no text box available, you can use the [Edit as -JSON](/docs/guides/user/pipeline/managing-pipelines/#edit-a-pipeline-as-json) +no text box available, you can use the [Edit as JSON](/docs/guides/user/pipeline/managing-pipelines/#edit-a-pipeline-as-json) pipeline feature. ### When are pipeline expressions evaluated? @@ -77,7 +76,8 @@ runtime of the pipeline. > Warning: there are several reserved parameter keys (names) that cause unexpected behavior and failures > if overwritten by a pipeline parameter definition. > See the [list of reserved parameter and evaluate variable key names](#list-of-reserved-parameter-and-evaluate-variable-key-names). -![](images/parameters.png) + +![](/docs/guides/user/pipeline/expressions/images/parameters.png) Any parameter set in the pipeline configuration can be accessed using one of the following pipeline expression syntax: @@ -105,7 +105,8 @@ or values as the result of a pipeline expression. > Warning: there are several reserved parameter keys (names) that cause unexpected behavior and failures > if overwritten by a pipeline parameter definition. > See the [list of reserved parameter and evaluate variable key names](#list-of-reserved-parameter-and-evaluate-variable-key-names). -![](images/evaluate-variables-stage.png) +> +![](./images/evaluate-variables-stage.png) Any variable set in an Evaluate Variables stage can be accessed using one of the following pipeline expression syntax assuming the following scenario: diff --git a/content/en/docs/guides/user/pipeline/expressions/images/evaluate-variables-stage.png b/content/en/docs/guides/user/pipeline/expressions/images/evaluate-variables-stage.png new file mode 100644 index 0000000000000000000000000000000000000000..9cd605b064e65dc3cced34d544a19248837cf77c GIT binary patch literal 76403 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 TvJ7kL7=Xaj)z4*}Q$iB}^zzHu literal 0 HcmV?d00001 diff --git a/content/en/docs/guides/user/pipeline/expressions/images/parameters.png b/content/en/docs/guides/user/pipeline/expressions/images/parameters.png new file mode 100644 index 0000000000000000000000000000000000000000..1f087c2195d9ad7306c35496b620b8a77b1b157a GIT binary patch literal 23546 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 X^XHC^^oGgwerbat^Sw5G{@#B9=+=e* literal 0 HcmV?d00001 diff --git a/content/en/docs/guides/user/pipeline/pipeline-templates/_index.md b/content/en/docs/guides/user/pipeline/pipeline-templates/_index.md index 51a9e118..90d2981d 100644 --- a/content/en/docs/guides/user/pipeline/pipeline-templates/_index.md +++ b/content/en/docs/guides/user/pipeline/pipeline-templates/_index.md @@ -13,7 +13,7 @@ Spinnaker itself. Templates can be managed using [spin](/docs/guides/spin/pipeline-templates/) or the UI. To manage templates through the UI, enable the requisite feature flag: `hal config features edit --managed-pipeline-templates-v2-ui true` > **Note**: You can use `spin` CLI to manage pipelines and pipeline templates, -> but first you need to [install it](/docs/guides/spin/cli/). +> but first you need to [install it](/docs/setup/other_config/spin/). > **Note**: You first need to [enable the feature](/docs/guides/user/pipeline/pipeline-templates/enable/) if you haven't done it yet. diff --git a/content/en/docs/guides/user/pipeline/pipeline-templates/create.md b/content/en/docs/guides/user/pipeline/pipeline-templates/create.md index b5389b14..619973db 100644 --- a/content/en/docs/guides/user/pipeline/pipeline-templates/create.md +++ b/content/en/docs/guides/user/pipeline/pipeline-templates/create.md @@ -15,9 +15,9 @@ Use `spin` CLI to get the JSON of an existing pipeline that is close to what your template will be. Altenatively, you can create a new pipeline in the model of your intended template. -1. [Install `spin` CLI](/docs/v1/guides/spin/cli/), if you haven't already done so. +1. Install the [spin CLI](/docs/guides/spin/), if you haven't already done so. -1. Get the pipeline. +2. Get the pipeline. ``` spin pipeline get --name --application @@ -156,7 +156,7 @@ spin pipeline-templates save --file my_template.txt Spinnaker uses the value of the `id` field in the JSON as the name of the pipeline template. That's the name you use when you [reference the template -from a pipeline instance](/docs/v1/guides/user/pipeline/pipeline-templates/instantiate/), +from a pipeline instance](/docs/guides/user/pipeline/pipeline-templates/instantiate/), and the name a user looks for when listing pipeline templates. So it's a good practice to give your templates descriptive names. You might also institute a naming convention for your team or teams that makes it even clearer what each @@ -165,6 +165,6 @@ template is meant for. ## Next steps -* [Visualize a hydrated pipeline](/docs/v1/guides/user/pipeline/pipeline-templates/plan/) -* [Create a pipeline from the template](/docs/v1/guides/user/pipeline/pipeline-templates/instantiate/) +* [Visualize a hydrated pipeline](/docs/guides/user/pipeline/pipeline-templates/plan/) +* [Create a pipeline from the template](/docs/guides/user/pipeline/pipeline-templates/instantiate/) diff --git a/content/en/docs/guides/user/pipeline/triggers/artifactory/_index.md b/content/en/docs/guides/user/pipeline/triggers/artifactory/_index.md index 35c34fe6..30083244 100644 --- a/content/en/docs/guides/user/pipeline/triggers/artifactory/_index.md +++ b/content/en/docs/guides/user/pipeline/triggers/artifactory/_index.md @@ -15,13 +15,9 @@ Artifactory](https://jfrog.com/artifactory/) trigger to your pipeline. This guide assumes you have the following: -* An Artifactory search configured in Spinnaker (see the [documentation for the - `hal config repository artifactory` Halyard -commands](/docs/reference/halyard/commands/#hal-config-repository-artifactory)) +* An Artifactory search configured in Spinnaker (see the documentation for the [hal config repository artifactory](/docs/reference/halyard/commands/#hal-config-repository-artifactory) Halyard commands). -* A Maven account configured in Spinnaker (see the [documentation for the `hal - config artifact maven` Halyard -commands](/rdocs/reference/halyard/commands/#hal-config-artifact-maven)) +* A Maven account configured in Spinnaker (see the documentation for the [hal config artifact maven](/docs/reference/halyard/commands/#hal-config-artifact-maven) Halyard commands). * Artifact support [enabled](/docs/reference/artifacts/#enabling-artifact-support). diff --git a/content/en/docs/guides/user/pipeline/triggers/gcs/_index.md b/content/en/docs/guides/user/pipeline/triggers/gcs/_index.md index 70b53f67..6a64d27d 100644 --- a/content/en/docs/guides/user/pipeline/triggers/gcs/_index.md +++ b/content/en/docs/guides/user/pipeline/triggers/gcs/_index.md @@ -25,7 +25,7 @@ You need the following: This will be referred to as `$PROJECT` from now on. -* [`gcloud`](https://cloud.google.com/sdk/gcloud/). Make sure to run `gcloud +* [gcloud](https://cloud.google.com/sdk/gcloud/). Make sure to run `gcloud auth login` if you have installed `gcloud` for the first time. * [A running Spinnaker instance](/docs/setup/install/). This guide shows you how @@ -99,8 +99,6 @@ To configure the artifact, go to the __Artifact Constraints__ dropdown for the Pub/Sub trigger configuration, and select __"Define a new artifact..."__ to bring up the __Expected Artifact__ form. -{{< figure src=="./expected-artifact.png" >}} - Enter a __Display Name__, or leave the autogenerated default. In the __Account__ dropdown, select your GCS account. Enter the fully qualified GCS path in the __Object path__ field. Note: this path can be a regular expression. You can, for diff --git a/content/en/docs/guides/user/pipeline/triggers/github/_index.md b/content/en/docs/guides/user/pipeline/triggers/github/_index.md index c3b81495..c766bfc0 100644 --- a/content/en/docs/guides/user/pipeline/triggers/github/_index.md +++ b/content/en/docs/guides/user/pipeline/triggers/github/_index.md @@ -32,7 +32,7 @@ You need the following: * [A running Spinnaker instance](/docs/setup/install/). This guide shows you how to update it to accept messages from GitHub. -* Artifact support [enabled](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +* Artifact support [enabled](/docs/reference/artifacts/#enabling-artifact-support). At this point, we will configure GitHub webhooks and a GitHub artifact account. diff --git a/content/en/docs/guides/user/pipeline/triggers/pubsub/_index.md b/content/en/docs/guides/user/pipeline/triggers/pubsub/_index.md index a589e98f..d61d75ea 100644 --- a/content/en/docs/guides/user/pipeline/triggers/pubsub/_index.md +++ b/content/en/docs/guides/user/pipeline/triggers/pubsub/_index.md @@ -69,7 +69,7 @@ Say your pipeline accepted some parameters (for example, the desired stack to deploy to), you can make this explicit by adding a pipeline parameter on the same configuration screen as the Pub/Sub trigger: -{{< figure src="./parameters.png" caption="For more information on how to use pipeline parameters, see the [pipeline expressions guide](/docs/guides/user/pipeline-expressions)." >}} +{{< figure src="./parameters.png" caption="For more information on how to use pipeline parameters, see the [pipeline expressions guide](/docs/guides/user/pipeline/expressions)." >}} > Warning: there are several reserved parameter keys (names) that cause unexpected behavior and failures > if overwritten by a pipeline parameter definition. diff --git a/content/en/docs/guides/user/pipeline/triggers/webhooks/_index.md b/content/en/docs/guides/user/pipeline/triggers/webhooks/_index.md index d27cbb36..eee5977a 100644 --- a/content/en/docs/guides/user/pipeline/triggers/webhooks/_index.md +++ b/content/en/docs/guides/user/pipeline/triggers/webhooks/_index.md @@ -20,7 +20,7 @@ If you're triggering from a *GitHub* webhook, see the instructions [here](/docs/setup/other_config/triggers/github/) to set up that webhook. If you're triggering to a Spinnaker with authentication, see the -instructions [here](/setup/security/authorization/#automated-pipeline-triggers) to set up the +instructions [here](/docs/setup/other_config/security/authorization/#automated-pipeline-triggers) to set up the automated trigger. ## Prerequisites @@ -40,8 +40,7 @@ __Source__ field as shown here: Notice that in the above image below the __Type__ dropdown, the webhook configuration points out that we can hit `http://localhost:8084/webhooks/webhook/demo` to trigger the pipeline. The -endpoint depends on how you've configured your [Spinnaker -endpoints](/docs/setup/security) -- if you're running on a different endpoint, for +endpoint depends on how you've configured your [Spinnaker endpoints](/docs/setup/other_config/security/) -- if you're running on a different endpoint, for example `https://api.spinnaker-prod.net`, that'll be shown instead. Keeping track of that endpoint as `$ENDPOINT` (it will depend on where @@ -87,7 +86,7 @@ Say your pipeline accepted some parameters (for example, the desired stack to deploy to), you can make this explicit by adding a pipeline parameter on the same configuration screen as the webhook trigger: -{{< figure src="./parameters.png" caption="For more information on how to use pipeline parameters, see the [pipeline expressions guide](/docs/guides/user/pipeline-expressions)." >}} +{{< figure src="./parameters.png" caption="For more information on how to use pipeline parameters, see the [pipeline expressions guide](/docs/guides/user/pipeline/expressions)." >}} > Warning: there are several reserved parameter keys (names) that cause unexpected behavior and failures > if overwritten by a pipeline parameter definition. diff --git a/content/en/docs/reference/architecture/microservices-overview.md b/content/en/docs/reference/architecture/microservices-overview.md index c978fbe7..34b1f9d4 100644 --- a/content/en/docs/reference/architecture/microservices-overview.md +++ b/content/en/docs/reference/architecture/microservices-overview.md @@ -122,7 +122,7 @@ typical for services to resolve their dependencies via load balancers or discovery systems (for example [Eureka](https://github.com/Netflix/eureka) or [Consul](https://www.consul.io/)). -![](graph.png) +![](/docs/reference/architecture/graph.png) ## Port mappings diff --git a/content/en/docs/reference/artifacts-legacy/from-build-triggers.md b/content/en/docs/reference/artifacts-legacy/from-build-triggers.md index 0ad51f0e..967b617e 100644 --- a/content/en/docs/reference/artifacts-legacy/from-build-triggers.md +++ b/content/en/docs/reference/artifacts-legacy/from-build-triggers.md @@ -6,8 +6,8 @@ title: "Artifacts from Build Triggers" When an external CI system triggers a pipeline, Spinnaker can use the CI build information to inject relevant artifacts into the pipeline. The instructions here assume that you have -[set up a CI system](/setup/ci/) and are familiar with using -[property files](/guides/user/pipeline/expressions/#property-files) to pass variables from +[set up a CI system](/docs/setup/other_config/ci/) and are familiar with using +[property files](/docs/guides/user/pipeline/expressions/#property-files) to pass variables from CI builds to Spinnaker pipelines. The extraction of artifacts from the build information is done via a Jinja template; the @@ -29,8 +29,7 @@ properties from your CI job: messageFormat=JAR ``` -The recommended way to configure artifact templates is by using the `hal config artifact templates` - [Halyard command](/docs/reference/halyard/commands/#hal-config-artifact-templates): +The recommended way to configure artifact templates is by using the `hal config artifact templates` [Halyard command](/docs/reference/halyard/commands/#hal-config-artifact-templates): ``` hal config artifact templates add --template-path ``` diff --git a/content/en/docs/reference/artifacts-legacy/in-kubernetes-v2/index.md b/content/en/docs/reference/artifacts-legacy/in-kubernetes-v2/index.md index de214c42..b9125011 100644 --- a/content/en/docs/reference/artifacts-legacy/in-kubernetes-v2/index.md +++ b/content/en/docs/reference/artifacts-legacy/in-kubernetes-v2/index.md @@ -72,8 +72,7 @@ well. Luckily, Spinnaker makes handling these updates easy, as explained Generally, artifacts represent resources that you update as a part of your deployment/delivery pipelines. Given that Docker images and ConfigMaps are what will likely be updated within a manifest, we provide easy, first-class ways of -injecting them into your manifests. If you're familiar with [Pipeline -Expressions](/guides/user/pipeline-expressions) and are curious why we don't +injecting them into your manifests. If you're familiar with [Pipeline Expressions](/docs/guides/user/pipeline/expressions) and are curious why we don't just rely on those, read [why not pipeline expressions](#why-not-pipeline-expressions) below. @@ -180,7 +179,7 @@ spec: ## Why not pipeline expressions? -[Pipeline Expressions](/guides/user/pipeline-expressions) offer a great way to +[Pipeline Expressions](/docs/guides/user/pipeline/expressions) offer a great way to reference pipeline context programmatically using short snippets of code. Of course, it's possible to construct expressions that allow you to reference the Docker image's reference that triggered a pipeline, or the name diff --git a/content/en/docs/reference/artifacts/from-build-triggers.md b/content/en/docs/reference/artifacts/from-build-triggers.md index d523544a..47e8a64b 100644 --- a/content/en/docs/reference/artifacts/from-build-triggers.md +++ b/content/en/docs/reference/artifacts/from-build-triggers.md @@ -19,8 +19,8 @@ artifact extraction, which users can augment with custom templates. ## Requirements The instructions here assume that you have -[set up a CI system](/setup/ci/) and are familiar with using -[property files](/guides/user/pipeline/expressions/#property-files) to pass variables from +[set up a CI system](/docs/setup/other_config/ci/) and are familiar with using +[property files](/docs/guides/user/pipeline/expressions/#property-files) to pass variables from CI builds to Spinnaker pipelines. ## Select a template diff --git a/content/en/docs/reference/artifacts/in-kubernetes-v2/index.md b/content/en/docs/reference/artifacts/in-kubernetes-v2/index.md index 892d57aa..9ff407c2 100644 --- a/content/en/docs/reference/artifacts/in-kubernetes-v2/index.md +++ b/content/en/docs/reference/artifacts/in-kubernetes-v2/index.md @@ -67,7 +67,7 @@ Generally, artifacts represent resources that you update as a part of your deployment/delivery pipelines. Given that Docker images and ConfigMaps are what will likely be updated within a manifest, we provide easy, first-class ways of injecting them into your manifests. If you're familiar with [Pipeline -Expressions](/docs/guides/user/pipeline-expressions) and are curious why we don't +Expressions](/docs/guides/user/pipeline/expressions) and are curious why we don't just rely on those, read [why not pipeline expressions](#why-not-pipeline-expressions) below. @@ -174,7 +174,7 @@ spec: ## Why not pipeline expressions? -[Pipeline Expressions](/docs/guides/user/pipeline-expressions) offer a great way to +[Pipeline Expressions](/docs/guides/user/pipeline/expressions) offer a great way to reference pipeline context programmatically using short snippets of code. Of course, it's possible to construct expressions that allow you to reference the Docker image's reference that triggered a pipeline, or the name diff --git a/content/en/docs/reference/artifacts/in-pipelines/_index.md b/content/en/docs/reference/artifacts/in-pipelines/_index.md index 8fd8cf4e..c13df2ed 100644 --- a/content/en/docs/reference/artifacts/in-pipelines/_index.md +++ b/content/en/docs/reference/artifacts/in-pipelines/_index.md @@ -121,7 +121,7 @@ To allow you to promote artifacts between executions, you can make use of the "Find Artifact from Execution" stage. All that's required is the pipeline ID whose execution history to search, and an expected artifact to bind. -{{< figure src="./find-artifact-from-execution.png" >}} +{{< figure src="./find-artifacts-from-execution.png" >}} A common use case would be to "promote" the image deployed to staging to a pipeline that's deploying to production. diff --git a/content/en/docs/reference/artifacts/types/gcs-object/index.md b/content/en/docs/reference/artifacts/types/gcs-object/index.md index 374dc573..1ae3ba34 100644 --- a/content/en/docs/reference/artifacts/types/gcs-object/index.md +++ b/content/en/docs/reference/artifacts/types/gcs-object/index.md @@ -34,7 +34,7 @@ The pipeline UI exposes the following fields for the GCS object artifact: When configuring certain triggers (such as a Pub/Sub trigger with __Pub/Sub System Type__ "Google"), you can use a GCS object as an expected artifact. -{{< figure src=="./expected-artifact-gcs-object.png" caption="Configuring GCS object fields in a pipeline trigger's expected artifact settings." >}} +{{< figure src="./expected-artifact-gcs-object.png" caption="Configuring GCS object fields in a pipeline trigger's expected artifact settings." >}} ### In a pipeline stage diff --git a/content/en/docs/reference/pipeline/stages/_index.md b/content/en/docs/reference/pipeline/stages/_index.md index a5fb5fbb..934b0d50 100644 --- a/content/en/docs/reference/pipeline/stages/_index.md +++ b/content/en/docs/reference/pipeline/stages/_index.md @@ -46,7 +46,7 @@ For a step-by-step explanation of how to set up a Canary Analysis stage see the ### Check Preconditions Check for preconditions before continuing. For example, you can check that your cluster is a particular size, or add a pipeline expression. See the -[pipeline expressions guide](/docs/guides/user/pipeline-expressions/) for more +[pipeline expressions guide](/docs/guides/user/pipeline/expressions/) for more information about creating and using pipeline expressions. ### Clone Server Group diff --git a/content/en/docs/reference/providers/_index.md b/content/en/docs/reference/providers/_index.md index 9c5fcf29..067e1566 100644 --- a/content/en/docs/reference/providers/_index.md +++ b/content/en/docs/reference/providers/_index.md @@ -3,7 +3,7 @@ title: "Providers" description: Information on how Spinnaker concepts map to those of the Cloud Provider, as well as how the various Spinnaker operations are performed at the Cloud Provider level. --- -> To setup a cloud provier, see [Cloud Provider](/docs/setup/providers/). +> To setup a cloud provier, see [Cloud Provider](/docs/setup/install/providers/). ## Supported providers diff --git a/content/en/docs/reference/providers/appengine.md b/content/en/docs/reference/providers/appengine.md index dbf9eaa5..33abe526 100644 --- a/content/en/docs/reference/providers/appengine.md +++ b/content/en/docs/reference/providers/appengine.md @@ -12,7 +12,7 @@ description: Learn how Spinnaker functionality maps to Google App Engine. A Spinnaker **account** maps to a single App Engine **application**, a top-level resource that contains services, versions, and instances. Spinnaker authenticates itself with App Engine using service account credentials for a Google Cloud Platform project - -see the [setup guide](/docs/setup/providers/appengine). +see the [setup guide](/docs/setup/install/providers/appengine). ### Load Balancer A Spinnaker **load balancer** maps to an App Engine **service**. diff --git a/content/en/docs/reference/providers/azure.md b/content/en/docs/reference/providers/azure.md index 8b3ae24a..30d41ae6 100644 --- a/content/en/docs/reference/providers/azure.md +++ b/content/en/docs/reference/providers/azure.md @@ -12,7 +12,7 @@ description: Learn how Spinnaker features map to Azure. ### Account In [Azure](https://azure.microsoft.com/) (AZ), an [Account](/docs/concepts/providers/#accounts) maps to a credential able to authenticate against a given [Azure](https://azure.microsoft.com/) (AZ) -project - see the [setup guide](/docs/setup/providers/azure). +project - see the [setup guide](/docs/setup/install/providers/azure). ### Load Balancer A Spinnaker **load balancer** maps to an Azure [Application Gateway](https://azure.microsoft.com/services/application-gateway/). diff --git a/content/en/docs/reference/providers/gce.md b/content/en/docs/reference/providers/gce.md index 0a5f772d..db068e1b 100644 --- a/content/en/docs/reference/providers/gce.md +++ b/content/en/docs/reference/providers/gce.md @@ -14,7 +14,7 @@ Compute Engine's [reference documentation](https://cloud.google.com/compute). ### Account In [Google Compute Engine](https://cloud.google.com/compute) (GCE), an [Account](/docs/concepts/providers/#accounts) maps to a credential able to authenticate against a given [Google Cloud Platform](https://cloud.google.com/) (GCP) -project - see the [setup guide](/docs/setup/providers/gce). +project - see the [setup guide](/docs/setup/install/providers/gce). ### Load Balancer A Spinnaker **load balancer** maps to a GCE [load balancer](https://cloud.google.com/compute/docs/load-balancing/). diff --git a/content/en/docs/reference/providers/oracle.md b/content/en/docs/reference/providers/oracle.md index 314e0d44..e330bd93 100644 --- a/content/en/docs/reference/providers/oracle.md +++ b/content/en/docs/reference/providers/oracle.md @@ -10,11 +10,11 @@ For more information about Oracle Cloud or any of the terms used below, please c ## Resource mapping ### Account -The Oracle Cloud provider in Spinnaker maps a Spinnaker [__Account__](/docs/concepts/providers/#accounts) +The Oracle Cloud provider in Spinnaker maps a Spinnaker [Account](/docs/concepts/providers/#accounts) to an [Oracle Cloud Infrastructure user](https://docs.cloud.oracle.com/iaas/Content/GSG/Tasks/addingusers.htm) in [Oracle Cloud Infrastructure](https://cloud.oracle.com/) (OCI). Spinnaker authenticates itself with Oracle Cloud using OCI user credentials - -see the [setup guide](/docs/setup/providers/oracle). +see the [setup guide](/docs/setup/install/providers/oracle). ### Load Balancer A Spinnaker **load balancer** maps to an [OCI Load Balancer](https://docs.cloud.oracle.com/iaas/Content/Balance/Concepts/balanceoverview.htm). diff --git a/content/en/docs/setup/install/configuration.md b/content/en/docs/setup/install/configuration.md index 3fbe5876..b0a4a9a4 100644 --- a/content/en/docs/setup/install/configuration.md +++ b/content/en/docs/setup/install/configuration.md @@ -15,7 +15,7 @@ hal deploy apply ### Deploy to more environments -[Documentation](/docs/setup/providers/) -- `hal config provider` +[Documentation](/docs/setup/install/providers/) -- `hal config provider` You can add more Accounts to as many Providers as you want. There is nothing preventing you from deploying to two Kubernetes clusters, one Google Compute diff --git a/content/en/docs/setup/install/deploy.md b/content/en/docs/setup/install/deploy.md index d3e1eb94..15dfcba5 100644 --- a/content/en/docs/setup/install/deploy.md +++ b/content/en/docs/setup/install/deploy.md @@ -7,7 +7,7 @@ aliases: weight: 50 --- -Now that we've enabled one or more [Cloud Providers](/docs/setup/providers/), picked a [Deployment Environment](/docs/setup/install/environment/), and configured +Now that we've enabled one or more [Cloud Providers](/docs/setup/install/providers/), picked a [Deployment Environment](/docs/setup/install/environment/), and configured [Persistent Storage](/docs/setup/install/storage/), we're ready to pick a version of Spinnaker, deploy it, and connect to it. ## Pick a version @@ -60,18 +60,6 @@ it may be that all of the containers are not yet available. You can either wait, or check the status of all of the containers using the commands for your cloud provider (such as `kubectl get pods --namespace spinnaker`). - -### Alternatives - -* You can make Spinnaker publicly reachable without running this command, -as described -[here](/docs/setup/quickstart/faq//#i-want-to-expose-localdebian-spinnaker-on-a-public-ip-address-but-it-always-binds-to-localhost) -(for local Debian) and -[here](/docs/setup/quickstart/faq/#i-want-to-expose-the-distributed-kubernetes-hosted-spinnaker-publicly) -(for Kubernetes). - -* You can [set up authentication](/docs/setup/other_config/security/authentication/). - ## Troubleshooting If this command fails, and it's the first time you've run this command please diff --git a/content/en/docs/setup/install/environment.md b/content/en/docs/setup/install/environment.md index 865f44c7..52ffc7ac 100644 --- a/content/en/docs/setup/install/environment.md +++ b/content/en/docs/setup/install/environment.md @@ -56,7 +56,7 @@ which you will install Spinnaker. We recommend at least 4 cores and 16GB of RAM available in the cluster where you will deploy Spinnaker. -1. Make sure [`kubectl` is installed](https://kubernetes.io/docs/tasks/tools/install-kubectl/) +1. Make sure [kubectl is installed](https://kubernetes.io/docs/tasks/tools/install-kubectl/) on the machine running Halyard. After you install it, you might need to update the `$PATH` to ensure Halyard diff --git a/content/en/docs/setup/install/faq.md b/content/en/docs/setup/install/faq.md index c386ec0b..c28b877f 100644 --- a/content/en/docs/setup/install/faq.md +++ b/content/en/docs/setup/install/faq.md @@ -9,10 +9,10 @@ weight: 70 After installing Spinnaker and navigating to the Applications screen, you may see one of following issues: - * The loading indicator spins continuously (prior to release 1.9) - * The following error message is displayed (release 1.9 and later): - ![Error fetching applications. Check that your gate endpoint is accessible. Further information on troubleshooting this error is available here](applications-error.png) - + * The following error message is displayed: + ``` + Error fetching applications. Check that your gate endpoint is accessible. Further information on troubleshooting this error is available here +``` The most common cause of this error is that your browser can't communicate with your Gate endpoint. (This endpoint defaults to `http://localhost:8084`, but can be customized.) @@ -50,16 +50,6 @@ two solutions. This makes sense if you're running Spinnaker in a private network, or have another form of authentication fronting Spinnaker. -## I want to expose the distributed, Kubernetes hosted Spinnaker publicly - -There is [a guide](/docs/setup/quickstart/halyard-gke-public/) for doing this using -Google's authentication & domain registrar. If this doesn't match your -environment, it may still be helpful to read. The key point is, Halyard does -_not_ touch any of the Kubernetes Service objects once they are created. You -can change their type to `NodePort`, or `LoadBalancer`, front them with Ingress -resources, or manage them like any other Kubernetes service and expose them -however you like. - ## Halyard times out during a config change Odds are Halyard can't connect to the configuration & version bucket (in Google diff --git a/content/en/docs/setup/install/providers/_index.md b/content/en/docs/setup/install/providers/_index.md index ba7ae985..668b673b 100644 --- a/content/en/docs/setup/install/providers/_index.md +++ b/content/en/docs/setup/install/providers/_index.md @@ -6,7 +6,7 @@ description: In Spinnaker, providers are integrations to the Cloud platforms you aliases: - /docs/target-deployment-setup - /setup/providers/ - - /docs/setup/providers/ + - /docs/setup/install/providers/ --- In this section, you'll register credentials for your Cloud platforms. Those diff --git a/content/en/docs/setup/install/providers/appengine.md b/content/en/docs/setup/install/providers/appengine.md index f2696012..4ac3bb66 100644 --- a/content/en/docs/setup/install/providers/appengine.md +++ b/content/en/docs/setup/install/providers/appengine.md @@ -8,7 +8,7 @@ aliases: In [Google App Engine](https://cloud.google.com/appengine), an -[__Account__](/docs/concepts/providers/#accounts) maps to a credential able to +[Account](/docs/concepts/providers/#accounts) maps to a credential able to authenticate against a given [Google Cloud Platform](https://cloud.google.com) project. diff --git a/content/en/docs/setup/install/providers/aws/_index.md b/content/en/docs/setup/install/providers/aws/_index.md index 33a0acd8..9c2018e5 100644 --- a/content/en/docs/setup/install/providers/aws/_index.md +++ b/content/en/docs/setup/install/providers/aws/_index.md @@ -11,9 +11,9 @@ The AWS Cloud Provider allows Spinnaker to release artifacts in some of the [AWS There are several ways to configure the Amazon Web Services (AWS) Cloud Provider. Choose one or more based on your requirements: -* [Amazon Elastic Compute Cloud (EC2)](/setup/install/providers/aws/aws-ec2/) - - Use this option, if you want to manage [AWS EC2](https://aws.amazon.com/ec2/) via Spinnaker -* [Amazon Elastic Container Service (ECS)](/setup/install/providers/aws/aws-ecs/) - - Use this option, if you want to manage containers in [AWS ECS](https://aws.amazon.com/ecs/) -* [Amazon Elastic Kubernetes Service (EKS)](/setup/install/providers/kubernetes-v2/aws-eks/) - Use this option, if you want to manage containers in [AWS EKS](https://aws.amazon.com/eks/). This option uses [Kubernetes V2 (manifest based) Clouddriver](/setup/install/providers/kubernetes-v2) +* [Amazon Elastic Compute Cloud (EC2)](/docs/setup/install/providers/aws/aws-ec2/) - - Use this option, if you want to manage [AWS EC2](https://aws.amazon.com/ec2/) via Spinnaker +* [Amazon Elastic Container Service (ECS)](/docs/setup/install/providers/aws/aws-ecs/) - - Use this option, if you want to manage containers in [AWS ECS](https://aws.amazon.com/ecs/) +* [Amazon Elastic Kubernetes Service (EKS)](/docs/setup/install/providers/kubernetes-v2/aws-eks/) - Use this option, if you want to manage containers in [AWS EKS](https://aws.amazon.com/eks/). This option uses [Kubernetes V2 (manifest based) Clouddriver](/docs/setup/install/providers/kubernetes-v2) * [Amazon Lambda (Lambda)](https://aws.amazon.com/blogs/opensource/how-to-integrate-aws-lambda-with-spinnaker/) - Use this option, if you want to enable [AWS Lambda](https://aws.amazon.com/lambda/) support ## AWS IAM Permissions with the AWS Cloud Provider diff --git a/content/en/docs/setup/install/providers/aws/aws-concepts.md b/content/en/docs/setup/install/providers/aws/aws-concepts.md index 894f7ae5..ba44c3aa 100644 --- a/content/en/docs/setup/install/providers/aws/aws-concepts.md +++ b/content/en/docs/setup/install/providers/aws/aws-concepts.md @@ -29,7 +29,7 @@ Refer to [AWS IAM Providing Access to multiple AWS Accounts](https://docs.aws.am __Example:__ AWS __Managing__ account `spinnakermanaging` can assume the __Managed__ role in the accounts __*accountdev*__, __*accountstaging*__, __*accountprod*__ and deploy a baked AMI in the pipeline. -![Example diagram of managing and managed roles](concepts.png) +![Example diagram of managing and managed roles](/docs/setup/install/providers/aws/concepts.png) There are several ways to configure the Amazon Web Services (AWS) Cloud Provider. Choose one or more based on your requirements: diff --git a/content/en/docs/setup/install/providers/aws/aws-ec2.md b/content/en/docs/setup/install/providers/aws/aws-ec2.md index bcd04350..6353ae85 100644 --- a/content/en/docs/setup/install/providers/aws/aws-ec2.md +++ b/content/en/docs/setup/install/providers/aws/aws-ec2.md @@ -19,7 +19,7 @@ Spinnaker will use an [AWS IAM structure](https://aws.amazon.com/iam/) with user 2. AWS CloudFormation templates deployed with AWS CLI 3. Manually creating the IAM structure with the AWS IAM Console -In [AWS](https://aws.amazon.com/), an [__Account__](/docs/concepts/providers/#accounts) +In [AWS](https://aws.amazon.com/), an [Account](/docs/concepts/providers/#accounts) maps to a credential able to authenticate against a given [AWS account](https://aws.amazon.com/account/). @@ -52,7 +52,7 @@ Use this option to deploy Spinnaker, if you are familar with deployment using [A * Enter __Stack Name__ as spinnaker-**managed**-infrastructure-setup and follow the prompts on screen to create the stack * Enter __AuthArn__ and __ManagingAccountId__ as the value noted above and follow the prompts on screen to create the stack -![](../outputs_cloudformation.png) +![Cloudformation](/docs/setup/install/providers/aws/outputs_cloudformation.png) ## Option 2: Configure with AWS CLI @@ -116,7 +116,8 @@ For the example below, the AWS Account **spinnakerManaging** assumes the **spinn A great use case for this set up is to deploy pre-built AWS AMIs to AWS EC2. -![Example AWS IAM structure for Spinnaker AWS Provider](/docs/setup/install/providers/images/example-aws-provider.svg) +![Example AWS IAM structure for Spinnaker AWS Provider](/docs/setup/install/providers/aws/example-aws-provider.svg) + Before you start, create a table that maps the account names to account IDs for your desired set up. An example table is shown: diff --git a/content/en/docs/setup/install/providers/aws/aws-ecs.md b/content/en/docs/setup/install/providers/aws/aws-ecs.md index c27cf976..61ca02b8 100644 --- a/content/en/docs/setup/install/providers/aws/aws-ecs.md +++ b/content/en/docs/setup/install/providers/aws/aws-ecs.md @@ -6,7 +6,7 @@ description: Deploy Spinnaker to ECS. -In the Amazon ECS cloud provider, an [__Account__](/docs/concepts/providers/#accounts) +In the Amazon ECS cloud provider, an [Account](/docs/concepts/providers/#accounts) maps to a Spinnaker AWS account, which itself is able to authenticate against a given [AWS account](https://aws.amazon.com/account/). diff --git a/content/en/docs/setup/install/providers/azure.md b/content/en/docs/setup/install/providers/azure.md index b8ecb908..8fa072cb 100644 --- a/content/en/docs/setup/install/providers/azure.md +++ b/content/en/docs/setup/install/providers/azure.md @@ -9,7 +9,7 @@ aliases: In [Azure](https://azure.microsoft.com/), an -[__Account__](/docs/concepts/providers/#accounts) maps to a credential able to +[Account](/docs/concepts/providers/#accounts) maps to a credential able to authenticate against a given [Azure subscription](https://azure.microsoft.com/free/). ## Prerequisites diff --git a/content/en/docs/setup/install/providers/dcos.md b/content/en/docs/setup/install/providers/dcos.md index 58742eff..739e4f9b 100644 --- a/content/en/docs/setup/install/providers/dcos.md +++ b/content/en/docs/setup/install/providers/dcos.md @@ -12,7 +12,7 @@ aliases: DC/OS configuration for Spinnaker consists of a set of DC/OS clusters and a set of [Accounts](/docs/concepts/providers/#accounts) that have credentials to authenticate to one or more of those clusters. -Additionally, each account has a set of [Docker Registry](/docs/setup/providers/docker-registry) +Additionally, each account has a set of [Docker Registry](/docs/setup/install/providers/docker-registry/) accounts to be used as a source of images. ## Prerequisites @@ -29,7 +29,7 @@ has not been extensively tested. ### Docker registries -Follow the steps under the [Docker Registry](/docs/setup/providers/docker-registry) +Follow the steps under the [Docker Registry](/docs/setup/install/providers/docker-registry/) provider to add any registries containing images you want to deploy. If you have already done so, you can verify that these accounts exist by running: diff --git a/content/en/docs/setup/install/providers/docker-registry.md b/content/en/docs/setup/install/providers/docker-registry.md index 1d63b6d3..9c573948 100644 --- a/content/en/docs/setup/install/providers/docker-registry.md +++ b/content/en/docs/setup/install/providers/docker-registry.md @@ -12,7 +12,7 @@ aliases: > for deploying Docker images. When configuring Docker Registries, an -[__Account__](/docs/concepts/providers/#accounts) maps to a credential able to +[Account](/docs/concepts/providers/#accounts) maps to a credential able to authenticate against a certain set of [Docker repositories](https://docs.docker.com/glossary/?term=repository). diff --git a/content/en/docs/setup/install/providers/gce.md b/content/en/docs/setup/install/providers/gce.md index 8d0f8954..602bb0f1 100644 --- a/content/en/docs/setup/install/providers/gce.md +++ b/content/en/docs/setup/install/providers/gce.md @@ -9,7 +9,7 @@ aliases: In [Google Compute Engine](https://cloud.google.com/compute) -(GCE), an [__Account__](/docs/concepts/providers/#accounts) maps to a credential able +(GCE), an [Account](/docs/concepts/providers/#accounts) maps to a credential able to authenticate against a given [Google Cloud Platform](https://cloud.google.com/) (GCP) project. diff --git a/content/en/docs/setup/install/providers/kubernetes-v2/_index.md b/content/en/docs/setup/install/providers/kubernetes-v2/_index.md index ef29f4c2..9b93978d 100644 --- a/content/en/docs/setup/install/providers/kubernetes-v2/_index.md +++ b/content/en/docs/setup/install/providers/kubernetes-v2/_index.md @@ -11,21 +11,21 @@ is [scheduled for removal](https://github.com/spinnaker/governance/blob/master/r ## Accounts -A Spinnaker [Account](/concepts/providers/#accounts) maps to a +A Spinnaker [Account](/docs/concepts/providers/#accounts) maps to a credential that can authenticate against your Kubernetes Cluster. ## Prerequisites The Kubernetes provider has two requirements: -* A [`kubeconfig`](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file +* A [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file The `kubeconfig` file allows Spinnaker to authenticate against your cluster and to have read/write access to any resources you expect it to manage. You can think of it as private key file to let Spinnaker connect to your cluster. You can request this from your Kubernetes cluster administrator. -* [`kubectl`](https://kubernetes.io/docs/user-guide/kubectl/) CLI tool +* [kubectl](https://kubernetes.io/docs/user-guide/kubectl/) CLI tool Spinnaker relies on `kubectl` to manage all API access. It's installed along with Spinnaker. diff --git a/content/en/docs/setup/install/providers/kubernetes-v2/k8s-provider.md b/content/en/docs/setup/install/providers/kubernetes-v2/k8s-provider.md index fa5a2d71..759e20e7 100644 --- a/content/en/docs/setup/install/providers/kubernetes-v2/k8s-provider.md +++ b/content/en/docs/setup/install/providers/kubernetes-v2/k8s-provider.md @@ -18,14 +18,14 @@ credential that can authenticate against your Kubernetes Cluster. The Kubernetes provider has two requirements: -* A [`kubeconfig`](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file +* A [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file The `kubeconfig` file allows Spinnaker to authenticate against your cluster and to have read/write access to any resources you expect it to manage. You can think of it as private key file to let Spinnaker connect to your cluster. You can request this from your Kubernetes cluster administrator. -* [`kubectl`](https://kubernetes.io/docs/user-guide/kubectl/) CLI tool +* [kubectl](https://kubernetes.io/docs/user-guide/kubectl/) CLI tool Spinnaker relies on `kubectl` to manage all API access. It's installed along with Spinnaker. @@ -186,7 +186,7 @@ For any V1 account you have running, you can add a V2 account following the steps [below](#adding-an-account). This will surface your infrastructure twice (once per account) helping your pipeline & operation migration. -{{< figure src="./v1v2.png" caption="A V1 and V2 provider surfacing the same infrastructure" >}} +![A V1 and V2 provider surfacing the same infrastructure](/docs/setup/install/providers/kubernetes-v2/v1v2.png) @@ -207,7 +207,7 @@ hal config provider kubernetes account add my-k8s-account \ --context $CONTEXT ``` -Finally, enable [artifact support](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +Finally, enable [artifact support](/docs/reference/artifacts/#enabling-artifact-support). ## Advanced account settings diff --git a/content/en/docs/setup/install/providers/kubernetes-v2/oke/index.md b/content/en/docs/setup/install/providers/kubernetes-v2/oke/index.md index 863b38c8..1b4ebf05 100644 --- a/content/en/docs/setup/install/providers/kubernetes-v2/oke/index.md +++ b/content/en/docs/setup/install/providers/kubernetes-v2/oke/index.md @@ -35,4 +35,4 @@ Enable the Kubernetes provider: hal config provider kubernetes enable ``` -Finally, enable [artifact support](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +Finally, enable [artifact support](/docs/reference/artifacts/#enabling-artifact-support). diff --git a/content/en/docs/setup/install/providers/kubernetes.md b/content/en/docs/setup/install/providers/kubernetes.md index 05ff464a..d0824693 100644 --- a/content/en/docs/setup/install/providers/kubernetes.md +++ b/content/en/docs/setup/install/providers/kubernetes.md @@ -13,12 +13,10 @@ aliases: For the Kubernetes provider, a Spinnaker [Account](/docs/concepts/providers/#accounts) maps to a credential that can authenticate against your Kubernetes Cluster. It also includes a set of one or more [Docker -Registry](/docs/setup/providers/docker-registry) accounts that are used as a source +Registry](/docs/setup/install/providers/docker-registry) accounts that are used as a source of images. -When setting up your Kubernetes provider account, you will [use halyard to add -the account](#add-a-kubernetes-account) and provide any Docker registries that -you'll use. +When setting up your Kubernetes provider account, you will [use halyard to add the account](#add-a-kubernetes-account) and provide any Docker registries that you'll use. ## Prerequisites @@ -30,7 +28,7 @@ You need a running Kubernetes cluster, with corresponding credentials in a [kubeconfig file](https://kubernetes.io/docs/concepts/cluster-administration/authenticate-across-clusters-kubeconfig/). If you have these, and you have -[`kubectl`](https://kubernetes.io/docs/user-guide/kubectl-overview/) +[kubectl](https://kubernetes.io/docs/user-guide/kubectl-overview/) installed on the machine where you have your `kubeconfig`, you can verify the credentials work by running this command: @@ -90,7 +88,7 @@ However, [you can also use RBAC and a service account](#optional-configure-kuber To use the Kubernetes (legacy) provider, you need a Docker registry as a source of images. To enable this, [set up a Docker registry as another -provider](/docs/setup/providers/docker-registry), and add any registries that +provider](/docs/setup/install/providers/docker-registry), and add any registries that contain images you want to deploy. You can verify your Docker registry accounts using this command: diff --git a/content/en/docs/setup/install/providers/oracle.md b/content/en/docs/setup/install/providers/oracle.md index 2c9312c0..b800d203 100644 --- a/content/en/docs/setup/install/providers/oracle.md +++ b/content/en/docs/setup/install/providers/oracle.md @@ -9,7 +9,7 @@ aliases: In [Oracle Cloud](https://cloud.oracle.com/), a Spinnaker -[__Account__](/docs/concepts/providers/#accounts) maps to an [Oracle Cloud Infrastructure user]( https://cloud.oracle.com/en_US/tryit). +[Account](/docs/concepts/providers/#accounts) maps to an [Oracle Cloud Infrastructure user]( https://cloud.oracle.com/en_US/tryit). When setting up your Oracle Cloud provider account, you will [use halyard to add the account](#add-an-oracle-cloud-account). diff --git a/content/en/docs/setup/install/storage/_index.md b/content/en/docs/setup/install/storage/_index.md index 787157e1..4a238937 100644 --- a/content/en/docs/setup/install/storage/_index.md +++ b/content/en/docs/setup/install/storage/_index.md @@ -13,7 +13,7 @@ costly to lose, we recommend you use a hosted storage solution you are confident in. Spinnaker supports the storage providers listed below. Whichever option you -choose does not affect your choice of [Cloud Provider](/docs/setup/providers/). +choose does not affect your choice of [Cloud Provider](/docs/setup/install/providers/). That is, you can use [Google Cloud Storage](https://cloud.google.com/storage/) as a storage source but still deploy to [Microsoft Azure](https://azure.microsoft.com/). @@ -26,7 +26,7 @@ completed the section, return to this page. * [Azure Storage](/docs/setup/install/storage/azs) * [Google Cloud Storage](/docs/setup/install/storage/gcs) * [Minio](/docs/setup/install/storage/minio) -* [Redis](/docs/setup/install/storage/redis) :warning: Unsupported and not recommended for production environments +* [Redis](/docs/setup/install/storage/redis) (Not recommended for production environments) * [S3](/docs/setup/install/storage/s3) * [Oracle Object Storage](/docs/setup/install/storage/oracle) diff --git a/content/en/docs/setup/install/storage/redis.md b/content/en/docs/setup/install/storage/redis.md index 816ded47..b441680a 100644 --- a/content/en/docs/setup/install/storage/redis.md +++ b/content/en/docs/setup/install/storage/redis.md @@ -6,7 +6,7 @@ aliases: - /setup/storage/redis/ --- -> We _highly_ recommend relying on [Minio](/docs/setup/storage/minio) instead of Redis if you are looking for a local persistant storage solution for Spinnaker. The Redis storage implementation is untested and unsupported by anyone in the Spinnaker community." +> We _highly_ recommend relying on [Minio](/docs/setup/install/storage/minio) instead of Redis if you are looking for a local persistant storage solution for Spinnaker. The Redis storage implementation is untested and unsupported by anyone in the Spinnaker community." > Redis can be used as Spinnaker's persistent storage source, but it is unsupported and __not__ recommended for production use-cases because it mixes fungible, short-lived cache entries with the Pipeline and Application data that deploy all of your infrastructure. This means you will have to be extra careful when clearing your Spinnaker Redis cache. diff --git a/content/en/docs/setup/install/storage/s3.md b/content/en/docs/setup/install/storage/s3.md index f857272c..df3243bc 100644 --- a/content/en/docs/setup/install/storage/s3.md +++ b/content/en/docs/setup/install/storage/s3.md @@ -6,7 +6,7 @@ aliases: - /setup/storage/s3/ --- -> Alternatively, it is possible to use [Minio](/docs/setup/storage/minio) +> Alternatively, it is possible to use [Minio](/docs/setup/install/storage/minio) > instead of the real S3 if you are looking for a local persistant storage solution > for Spinnaker that is compatible with the S3 API. diff --git a/content/en/docs/setup/install/storage/storage-overview.md b/content/en/docs/setup/install/storage/storage-overview.md index a1356a91..3aba5058 100644 --- a/content/en/docs/setup/install/storage/storage-overview.md +++ b/content/en/docs/setup/install/storage/storage-overview.md @@ -11,7 +11,7 @@ costly to lose, we recommend you use a hosted storage solution you are confident in. Spinnaker supports the storage providers listed below. Whichever option you -choose does not affect your choice of [Cloud Provider](/docs/setup/providers/). +choose does not affect your choice of [Cloud Provider](/docs/setup/install/providers/). That is, you can use [Google Cloud Storage](https://cloud.google.com/storage/) as a storage source but still deploy to [Microsoft Azure](https://azure.microsoft.com/). diff --git a/content/en/docs/setup/other_config/artifacts/gcs.md b/content/en/docs/setup/other_config/artifacts/gcs.md index 444b5409..637261b8 100644 --- a/content/en/docs/setup/other_config/artifacts/gcs.md +++ b/content/en/docs/setup/other_config/artifacts/gcs.md @@ -64,7 +64,7 @@ SERVICE_ACCOUNT_DEST=~/.gcp/gcs-artifacts-account.json ARTIFACT_ACCOUNT_NAME=my-gcs-artifact-account ``` -First, enable [artifact support](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +First, enable [artifact support](/docs/reference/artifacts/#enabling-artifact-support). Next, add an artifact account: diff --git a/content/en/docs/setup/other_config/artifacts/github.md b/content/en/docs/setup/other_config/artifacts/github.md index 55551080..912c16b1 100644 --- a/content/en/docs/setup/other_config/artifacts/github.md +++ b/content/en/docs/setup/other_config/artifacts/github.md @@ -30,7 +30,7 @@ TOKEN_FILE= ARTIFACT_ACCOUNT_NAME=my-github-artifact-account ``` -First, enable [artifact support](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +First, enable [artifact support](/docs/reference/artifacts/#enabling-artifact-support). Next, enable the GitHub artifact provider: diff --git a/content/en/docs/setup/other_config/artifacts/gitlab.md b/content/en/docs/setup/other_config/artifacts/gitlab.md index 7bcba5e1..a1d22c54 100644 --- a/content/en/docs/setup/other_config/artifacts/gitlab.md +++ b/content/en/docs/setup/other_config/artifacts/gitlab.md @@ -30,7 +30,7 @@ TOKEN_FILE= ARTIFACT_ACCOUNT_NAME=my-gitlab-artifact-account ``` -First, enable [artifact support](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +First, enable [artifact support](/docs/reference/artifacts/#enabling-artifact-support). Next, enable the GitLab artifact provider: diff --git a/content/en/docs/setup/other_config/artifacts/gitrepo.md b/content/en/docs/setup/other_config/artifacts/gitrepo.md index 7540fe24..5278365d 100644 --- a/content/en/docs/setup/other_config/artifacts/gitrepo.md +++ b/content/en/docs/setup/other_config/artifacts/gitrepo.md @@ -16,7 +16,7 @@ Spinnaker 1.26+ includes a feature for caching a Git repo artifact. Clouddriver ## Enable Git Repo artifacts -First, enable [artifact support](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +First, enable [artifact support](/docs/reference/artifacts/#enabling-artifact-support). Next, enable the Git Repo artifact provider: diff --git a/content/en/docs/setup/other_config/artifacts/http.md b/content/en/docs/setup/other_config/artifacts/http.md index d6387eff..cf4fda6e 100644 --- a/content/en/docs/setup/other_config/artifacts/http.md +++ b/content/en/docs/setup/other_config/artifacts/http.md @@ -29,7 +29,7 @@ config for this is hidden, and the single account is automatically used. 1. Collect the `$USERNAME_PASSWORD_FILE` value returned from the [prerequisites](#prerequisites) section above. -2. Enable [artifact support](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +2. Enable [artifact support](/docs/reference/artifacts/#enabling-artifact-support). 3. Enable the HTTP artifact provider: diff --git a/content/en/docs/setup/other_config/artifacts/maven.md b/content/en/docs/setup/other_config/artifacts/maven.md index dccb8f82..206f20e0 100644 --- a/content/en/docs/setup/other_config/artifacts/maven.md +++ b/content/en/docs/setup/other_config/artifacts/maven.md @@ -16,7 +16,7 @@ that reads the data. ## Edit your artifact settings -1. Enable [artifact support](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +1. Enable [artifact support](/docs/reference/artifacts/#enabling-artifact-support). 2. Enable the Maven artifact provider: diff --git a/content/en/docs/setup/other_config/artifacts/oracle.md b/content/en/docs/setup/other_config/artifacts/oracle.md index 5208e4e6..cd356e25 100644 --- a/content/en/docs/setup/other_config/artifacts/oracle.md +++ b/content/en/docs/setup/other_config/artifacts/oracle.md @@ -46,7 +46,7 @@ If you have enabled [Oracle Cloud provider](/docs/setup/install/providers/oracle ## Add Oracle Object Storage Artifact to Spinnaker -First, enable [artifact support](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +First, enable [artifact support](/docs/reference/artifacts/#enabling-artifact-support). Next, add an artifact account: diff --git a/content/en/docs/setup/other_config/artifacts/s3.md b/content/en/docs/setup/other_config/artifacts/s3.md index e1a943bf..0165741a 100644 --- a/content/en/docs/setup/other_config/artifacts/s3.md +++ b/content/en/docs/setup/other_config/artifacts/s3.md @@ -14,7 +14,7 @@ API_REGION= REGION= ARTIFACT_ACCOUNT_NAME=my-s3-account ``` -1. Enable [artifact support](/docs/reference/artifacts-with-artifactsrewrite//#enabling-artifact-support). +1. Enable [artifact support](/docs/reference/artifacts/#enabling-artifact-support). 2. Enable the S3 artifact provider: diff --git a/content/en/docs/setup/other_config/features/notifications/index.md b/content/en/docs/setup/other_config/features/notifications/index.md index 8c5de50c..b63da95b 100644 --- a/content/en/docs/setup/other_config/features/notifications/index.md +++ b/content/en/docs/setup/other_config/features/notifications/index.md @@ -97,7 +97,7 @@ Spinnaker supports sending notifications to Microsoft Teams using Incoming Webho To create a custom incoming webhook in Teams, follow the instructions provided here: [Add an incoming webhook to a Teams channel](https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook#add-an-incoming-webhook-to-a-teams-channel) When configuring a Microsoft Teams notification, enter the full incoming webhook URL in the `Teams Webhook URL` text box. -![](ms-teams.png) +![In the Edit Notification window, specify Microsoft Teams in the Notify via field and provide your Teams webhook URL. Then, select what events trigger notifications.](ms-teams.png) ## Slack diff --git a/content/en/docs/setup/other_config/features/notifications/ms-teams.png b/content/en/docs/setup/other_config/features/notifications/ms-teams.png new file mode 100644 index 0000000000000000000000000000000000000000..baa5dc74710b6d6bc959dbc6212f68360dc69cb2 GIT binary patch literal 33509 zcmdRWWmr{P*e$6bASD9QAfPmefOI1Q0us`Vbl0ZCO}BJQDJ9+A-GX!r2uOF|xjjcc z_ujwXpU(##w`;F8*X%jQc*kp?+-nJpdynqH!NFljz7%}}2Zvw)2M6znatB;#UWb-| ze+Zd~h{#Ebh>*+KTD>zdH-v+G5~;7FgY%N%Nw==9j!yRg{nLB4PHzGNLf+_jwl?>W z_cnLvw2;TgYiKMIU@amlw!&q~w^W&-hmc>CGIbZ|tCG;O=e^!6=^tih*}gRL$|Xg% z&dz#Bi?|^mm>jJkr`X!u91mwe9~bw)Ym!m0@+J1Lyx<8s77t0Q7NQ=l(B$1_Q(>QE z@1OL7m4de7diNr(k-EQ03ggI1=!tA2!{0Zevg6d3LPK~>O%k1@9PMSie&y4f(SHo9NKA<8>< z8l6yBmE6g1IS|{@%YE82M5_@Ano1sgCL|J?oSh*gQ2Bg)d;22U+gmfrdujLh_SVzt z_V#v{?arMwb#(N*jqq^hpS8tyRavJ&pDG)wNWPPifujSTQQ+YHP2iBgCwTDt2>imq zA%5_Ky9@rt0l%Uj5q^J*VDJ&~_h)!V*o{I8B9fBeZv}l@LqkhDV=H@XB?k*o)Hf4F z6?+vKX>NTh3npCyD?LLdh=n!m5jb85H~45_Xs=5Su`su^G$ zi@g~irHYIkxrmjmA^CGAb|w}|{(I!)zFc2xfq^1B>SLpyz26Ki`DD@$@%xw?8* z4)%PMl&}~5`SVXb4Iw6f-(+d`Z?ixHnPJ~Bvof(T|0x?h$_u;7EoTBTG*=Ndu>joz z-oeko%EtTa{{Qcrzi<5KNhLc&TM;V@@Sr{a-~Rpg;s1X5|33KZm8ySV`HYkOzpwny zH~&7#%M5Gze|qAdZvJ%@^fUiGUgkez#((eh<*W)EoFJT}sE{HA{%6YFWZdxyKjsb} z35BdpR8 zX$S8|nU^O0eCM=qIAi{4_M-ps;aW0}(`LbB#&Nwfg=u6(_wv;PG>d?D<*TI%4AEjl zqJl{O{(Lk>9qXwzEQ!umzEwZB%FS9trazWK%lT08hUnFo{skqMuRb(1mi@Koubv=K zlK=bD@rqn^HTr`RO~GdLLwV{%Q=vz$nbGH4T3YsY*XJqP#eE74PllECXL_M{hgC5N zTB!edBR5t~nV^oUx&nfUN1v4Px>Z8jJC9LhlQ*sXhgY=y8qqN*rHZK3$b+)Rx3`z4 zWEt_3iD?&2bJ=lhyNoHyW`AlyDOZ5>5TzvkzFP5dlX%j-q$1BXT1H7-Pc(MvcwTmFRJ?xB-0qtF*Vvgh^2j$p7s;%7}z!Hw&eVvRBLTpK2anX_GfI*v;LxtMqWA zu7B>=C_M@CLJ9c&V<6UC9)reE9=jTJuh2QYFu2@TQC(T-N#x&K0tDY7j2Ih8_C`OX zS5+xCr;xf=a(s@%WS1~a|98wNBM{-Caju=+4})LE{$#>7Fi%UfzA3$)5WvQQ|NZ0b zhQ(6!R#Hg5!S_j7>G~}*s_KQ`IVzRexv@|0e{NHgX)edpD`@|D>$8d+)L(hKPGOhL zA<(cr_J5Uj59i5<@*#;9gQ%uBsxf8OI}=zWyu z*}TK!=Xrb0+0U4ekalYF^;1l50p9QWfr@$`;2JlHB@JguM#)uK&dG%*TuRMn7I9O5 zJ)21J-(onS^Ni_z`k!`VQF{%xZs1L*H@;RQ5?Ld<;!_KV{qO60Wt)#XQd3|?$&ir9@gq=boeRCmqY|Bf~ul~-esnp=wdJymg36V*S<=^J*uI%WJI*^SBB z$!XKW&CB+M8}#)?0jB=*s`4DQC%S$ZJ9`JGSy{)KL{Sga?VJ8nlaDmmf*~aPYd`jm z-bS@O)Al60v(u=g;=Vy$5FAjVdC`DR6NB=+eY%au5@$1J7F(4x*pvbP-H1hYXGF|r zgjMXnHQ#)-n1P*^K#+O8z<{MwFVR78naYT5mh~l|1}ivrY37x4_e(4#vk`Q)hkqYR z6kq&toRmaG-dP$SRKGhv zhh-?w+Q~1RFv6b75qFxy63nC^o-1@+^B}MMZ?DPWqAXquM}K*UZ8*=2Z_Z!XU$uU* zgAn4R9Tr78si|HY5t zM)%9%B5i?u$8QCy-WDl5P8>oC2^KvSg>SXppWFYOWSs@GD7&=r>Yz`zi^K`NZnx2O z(z0&5HAg;^u0fV_&OXY9gxlUYx6(xH-{CXmfhX%H!%*PHB~uVjJWvDerVvt|@69;B zIc>W2t+be-X&mG`oi!fyjRl3D?yaYJ`gz`*cb&*2uu;36E%~1eA7WF9XN@-PwW2M7 zW?+^X4ZXGqX1+T5Dx1r}d$#yK+cBK@#pnseN85^`rkm-_Pnz;ze?M(K+W0Dx#_#?n z$=Uew`GkhP`*KT$SwV@oifs=y?qzhZqBk-Uz6OnKYBHTKF1$R-#DtbBV}&N#zuhZ0 zgIc|~JQvDhXkSlo$$dhW$R(Swp8Mlc*hy8nyt(v%xwM!6t~?+vzRWI#QO@` zGhA-+wYcMvrXmH%DKIjTrIgq$VO!w0PTM<41KHFK6IsJ2%v)E^=V3Lz7wcS$if zlqGrbe zO&yJNyw27@;&Z7$R*v>dMLLC^SGBc#nzh#<3Q}xPeMR2RuUYiWsbLObZ)^2qqP1pz zpM@%@8l~qhG_~;rvEG*>fx3i0b~DVIDiZIEKJ0y{Ea6;WG9reL5zO2OnZ`ktoww~{ z^e%Zzuu|}DFjOK&ZB|AUFboruHVU4vqWK1fDbDLH^YrI&W%Ys4{)A^;^~TXc0{fK? zKZYrYZQ8NZh2G!sj(FnWb~GaKt@0tG8dN{*MQ3NW`{4lR(#2L0=1OO1S*d09lAmCF zrNZaex(n{7&oK!Ncd8aVyg90|d)<};XXzoe%P1%T?%A$DbzA4d41?4X;~X6ClWEeKcq4RH<$2YMvJFo#yju8L z@`u5k`uPL};V-QZy{{SvdFBa_P&o8ELs%R($Hus4G`z4zrH!DdPIC?uf?T^hb-VZD zG#yp--n0|=bnsb!r{Z-6E6zW^u$Jy;`PbJ=DNgf}t766b2R7zkKgpC;vWlZ8v75Zf zEzvkaEP1$#>x2IKbE=Ce0f%|~YPMykH{bQqSDGCD+p9zC-lw0lPD!KU zo_lmTfs(|~X?K3^L#o~2i=_!|&x+d0sdq#(odj%~9zW9k&G~M^_i`56z3@ZJA%h>x zo4w$l3U!=Sx4gfbw7yw6V~GY8##V-m?;Vt24n5p%H{NpD`eL-|Iu&A**{C1R_l+~g zg*JLq4_#g&0dk}P&pnB>Vg9BR4`o#xp4QL#t|1 z*0AYNL`=AV*Eb(eb=@J{9M3m$B4=v4I>==|*DxN-iNt9AEG_&&GF|c1gOv~Y{VgG_ zSisj%p?%-d(*@6kAiplK51IFweW_5+Wnn-l)@}1!I-bzx)Ll!h`9TshRmtq)|AW-^ zr|#6=7&b>IR;CSAbRd`cY;{SX`3V@&p?w22{NE>AcckF;M%g=mPpMXaD3#`8~$8a89=C%*7ZB+EN&eWO<`e0Dn`xe@$imh=>Qt{LE)ztQx8Fn(vH z80A_l)ZKD~!$u+-?RmY3FWY*{*_X#FYjEuZ^WvZOAYgI|1Ng&`8{Q|?8)un>M%TGW zaWbnxfTI`l=f#Tmy?y){zB;_OCKe|czI*Zv<>qp?Nj8qUVy=t1M0dG8Fn4>3fn^TK ziMF%N4Jz$^!$Ko_9B4v#cfE3_c56B#eD1*U@+PSMGWr2}y%C&%-|5CmxIm>LzUiz( z&Bmvs#DG_MX%Vy!@nR||PKNGYmN|DvP*lbdQ4vV_iJi{ex&DKuo)CEZ%p3ODKjhE$ zJ@vvOe7~3w)N(iGnKfx-^kWuY?V}V{>C{y3odCiesJ%R{43V}t#D-IURLAL46~VK2 zA#*i>r-3#G{2j=vb^ho}osWx92-isTf8r_FDz?|!Z|ET&qvDa;c2jW7-RXl$66y?n zbfg4V#4V2t!XF_v{fEv~+75j_33t@K)z#@H$nHbEv6Jj7(M|AG23n?eC^OYEwdGv*T z`p(eqhFgl0aKP9A#(jdX7UZ4Aw20@}=1g4sdaOHryOSZ`x`>T-gbW^`r`>DY3aMPL zKO97Ba5*l$Aow0mAd+K)PoIH*=vJBG`3GnrQ^*?Z%yu9!dS){ zOFPXqrMR~}QC{ZGEgx@u{20nM?&-CNcu!@8e_E1+84f3SV;=uS_RrJ2kW>c*Iyck*fW%1L2y*%Z#H_VH zOJK|m0mtC^EkVBjpZ*bhE$CCwjTw>nd#9$9J4AgMF@B|AK>CMzJ$M0+T1qJ(Xqx(` z@BvzKA?3sH5|=+rSnfO0?|dA{gm-mBlIf*{fdl$R0I@*^C7Ib4n?7?T(j zb*2A2hy%L&G2MUP8}kwj6OL{^-QNdaQj!bBii-UPY=FCe#6ca?b}SKVovm?DDDr%m z`!;a=zfWL!w+HI_{s#Ckphqr%6szhsQhbFI?C)~CIhF5meUWZCSDWh)i&xr@X%<8I zx9O`iV8ku$d;bhLIl?&wr~+9S-G7Sgl>rr<{Shtyx6KD4f<6oa#7aTGCyy6ObP|}Y zH6u?m|6cm;@Aavn8&e|YgLgBT=M^@MOyUC%fCBe+n{MB|%+>sj?TL}%gEHhZ#dRyj zmC>Y_Y7AP4sD+fR+bil2+9%^#^@R`D2HK|0iY)93$1Eu~8-Be((1D!AX=ip1?AO!J z3zYJek?{@hsVe)IWjw0F9wN{)&yG?4K#3`duM+IM~8^d~|>Qlg- zN@7~}yP<-iVAzy1?|yLYjy(aBLd=7Up2`x#r#J6&w@v=< zRV7Came~Q+eZJn=`|a3=O0mGsA|uklBxtiUyU zveUft(rTRcYl~Di!yrbgR+f4dqhuR#oohfL(fTQqF@q7N97bl# zw%aoUJSYjB>w^u}TB7*K)V*ky%0Hq#~bSi`}^=p*o9Oe(QP3(6Uup-D2wxj5ZTqeB!o4}K(k1ek!N1tp)m z`CM(q+>w`HYc)K=$z3wHVjEo|Qju?x!RxzaL;U(>gy}j5#kY?(dTb*Cox<{48&F_Xzg7ofIgtK{E{YB%Y&?)qSrFv5U_ccQr0Ze!L~ z(rMXbJHhq`^25w1f2U3-68EDK<8A zGyNI=whK}UG|nly`Eo$xx?0=868c1*6^QM@w~-aa@H5Do!rTq8IX|Vhn&YAvtwvzR zV4`p#J*3dCPhxI7(=#5=Q`#h;Y@YP1uKE5!ih;p>zXM;L1X5GHGgp^HFaxw4MzYor zi>YZMt9sq@{g15oBX5qkXC_Li0#M(772y2>b=i9e*A>}lD0QUKBPs9qK`M#8$zb6xUxg~sC z&FqWewkVuDhYu6J>t^of{=SKHk-L3<{-HJ=AyRg_{x9uzpK1*Po~NqTdA@YqrXvx6 zFCS`yzK^5ld3_w`Y)UJeYVLgK@VOAL@E7EkGeEj>`LWceho`R-(3IEx<9!{x0RZSd-CfIA8q@0(e2Zx&r?P3{#Mzq9xTV>RdpBH?(CI=D|7 z{2w#LL+=%f7PH<#XC@(Ks`m*wZR1k5ge90(?2xZ+)Wcc(Q!;8~}* z4m5SnxQ@t&r?#>69(`6P*_%70e4k{!OVFMVel{@;v?ff^v z+W{m^-n#EGI9TL6Q;HzCV1IHvbfNr|xs1mA$ZxVIj`j8ZNa*4L{*p>-CFI<3-q{H4 zMJiBY(NJ&9XT0QA{7|3-=@#`K8=scCE2V$&2yZ=FuP1g^swI`jO=;sD)2*h%Os!h{ zB=0%nY+lu8_*LuHqVf`H5M(0mVw*!h?+vn`EOZIhybZPmw6V^2^Bf%1j2b;2yj(jq zx_p+B+mA6EM7M+r*DBg83Qtn`UAj5L_h2AuKUY+f8+%Ew82F)VTb5jGSndPOUeSOJQgK59J zVIDS2ixnMg&R~{hyZ>`EoKpeNDiEt0*Y5kgr<&#BtT5|Za;7>zDpA9|wZsE{(rZixnw7y6MA^h|emlf-@8`bln;MqBTAwzZI<#$d)Qq zQ)~KFd#^Oz_B)Zw-w5?vOh*tloBaUPGATTvb7!qU) zQLd4_@~TMH5UP87S@rjv|Q8Z|%(Gb<-UFarO zGpXqbJA?(B3xkN`NG8|GvR3f%C*1K|C^Z^{8CAPWq<@56vTv5yM<;`9q>|cMIqD#; zBJ{=f51#pk9BX>|v=bOS6||t18!;oqZMk&fUf2@VKD#kY!0$VVP+BQN!+dC`-Lr

W@O# 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 G1^yqLTwc`x literal 0 HcmV?d00001 diff --git a/content/en/docs/setup/other_config/security/_index.md b/content/en/docs/setup/other_config/security/_index.md index 81636082..82f6828f 100644 --- a/content/en/docs/setup/other_config/security/_index.md +++ b/content/en/docs/setup/other_config/security/_index.md @@ -15,29 +15,6 @@ have set up, including Google Groups, GitHub Teams, SAML Roles, or LDAP groups. See also [hal config security](/docs/reference/halyard/commands/#hal-config-security). -## Contents - -* Overview (this page) -* [SSL](./ssl) -* Authentication - * [Overview](./authentication/) - * Methods - * [OAuth 2.0](./authentication/oauth/) - * [SAML](./authentication/saml/) - * [LDAP](./authentication/ldap/) - * [X.509](./authentication/x509/) -* Authorization - * [Overview](./authorization/) - * Role Providers - * [Google Groups](./authorization/google-groups/) - * [GitHub Teams](./authorization/github-teams/) - * [LDAP](./authorization/ldap/) - * [SAML](./authorization/saml/) - * [Service Accounts](./authorization/service-accounts/) - * [Pipeline Permissions](./authorization/pipeline-permissions/) -* [Administrator functionality](./admin/) - - ## For reference... [Authorization and Authentication Architecture and workflow](/docs/reference/architecture/authz_authn/) diff --git a/content/en/docs/setup/other_config/security/authentication/index.md b/content/en/docs/setup/other_config/security/authentication/_index.md similarity index 83% rename from content/en/docs/setup/other_config/security/authentication/index.md rename to content/en/docs/setup/other_config/security/authentication/_index.md index 1e0b29d1..aab1e547 100644 --- a/content/en/docs/setup/other_config/security/authentication/index.md +++ b/content/en/docs/setup/other_config/security/authentication/_index.md @@ -64,10 +64,10 @@ A common issue with Incognito windows is that they _all share the same cookie ja ## Available Options * Methods - * [OAuth 2.0/OIDC](./oauth/) - The main examples are Google & GitHub endpoints. - * [SAML](./saml/) - Lots of examples on this with one of the most prevalent being Okta. - * [LDAP](./ldap/) - This covers Active Directory and other LDAP servers, such as OpenLDAP. - * [X.509](./x509/) - Often used for client or application communications. Can operate in conjunction with other authentication methods. + * [OAuth 2.0/OIDC](/docs/setup/other_config/security/authentication/oauth/) - The main examples are Google & GitHub endpoints. + * [SAML](/docs/setup/other_config/security/authentication/saml/) - Lots of examples on this with one of the most prevalent being Okta. + * [LDAP](/docs/setup/other_config/security/authentication/ldap/) - This covers Active Directory and other LDAP servers, such as OpenLDAP. + * [X.509](/docs/setup/other_config/security/authentication/x509/) - Often used for client or application communications. Can operate in conjunction with other authentication methods. ## Next steps diff --git a/content/en/docs/setup/other_config/security/authentication/oauth/index.md b/content/en/docs/setup/other_config/security/authentication/oauth/_index.md similarity index 98% rename from content/en/docs/setup/other_config/security/authentication/oauth/index.md rename to content/en/docs/setup/other_config/security/authentication/oauth/_index.md index f6baa1db..470a7306 100644 --- a/content/en/docs/setup/other_config/security/authentication/oauth/index.md +++ b/content/en/docs/setup/other_config/security/authentication/oauth/_index.md @@ -8,7 +8,7 @@ OAuth 2.0 is the preferred way to authenticate and authorize third parties acces ## Configuration All of the OAuth 2.0 fields that can be configured in Halyard are detailed -[here](config.md). The documentation on this page frequently refers back to +[here](./config). The documentation on this page frequently refers back to these fields. ## OAuth 2.0 providers diff --git a/content/en/docs/setup/other_config/security/ssl.md b/content/en/docs/setup/other_config/security/ssl.md index ec701249..8daab6b5 100644 --- a/content/en/docs/setup/other_config/security/ssl.md +++ b/content/en/docs/setup/other_config/security/ssl.md @@ -402,9 +402,4 @@ new trust/key store by default. ## Next steps -Choose an authentication method: - -* [OAuth 2.0](/docs/setup/other_config/security/authentication/oauth/) -* [SAML](/docs/setup/other_config/security/authentication/saml/) -* [LDAP](/docs/setup/other_config/security/authentication/ldap/) -* [X.509](/docs/setup/other_config/security/authentication/x509/) +Choose an [authentication method](/docs/setup/other_config/security/authentication/). \ No newline at end of file diff --git a/content/en/docs/setup/other_config/triggers/github/_index.md b/content/en/docs/setup/other_config/triggers/github/_index.md index e20af635..8d21cf3a 100644 --- a/content/en/docs/setup/other_config/triggers/github/_index.md +++ b/content/en/docs/setup/other_config/triggers/github/_index.md @@ -40,4 +40,4 @@ Webhook__. Here, provide the following values to the form shown below: You do not need to configure Spinnaker via Halyard at this point -- all that's needed is pipeline trigger configuration. An example of that can be found in -[this guide](/docs/guides/user/artifacts/github). +[this guide](/docs/guides/user/pipeline/triggers/github/). \ No newline at end of file diff --git a/content/en/docs/setup/productionize/_index.md b/content/en/docs/setup/productionize/_index.md index 51e858ab..5807341b 100644 --- a/content/en/docs/setup/productionize/_index.md +++ b/content/en/docs/setup/productionize/_index.md @@ -34,5 +34,5 @@ metrics. * __Metrics__ - Follow the [monitoring setup instructions](/docs/setup/monitoring) to export + Follow the [monitoring setup instructions](/docs/setup/other_config/monitoring/) to export Spinnaker's metrics into a metric store of your choice. diff --git a/content/en/docs/setup/quickstart/halyard-gke/_index.md b/content/en/docs/setup/quickstart/halyard-gke/_index.md index 13ba32fb..ab641851 100644 --- a/content/en/docs/setup/quickstart/halyard-gke/_index.md +++ b/content/en/docs/setup/quickstart/halyard-gke/_index.md @@ -260,7 +260,7 @@ authorization if necessary. Then re-run `hal deploy apply`. > :point_right: Halyard will warn you that you have deployed Spinnaker remotely > without configuring an authentication mechanism. This is OK, but cumbersome, > since we can connect via SSH tunnels. If you want to configure -> authentication, read more in the [security documentation](/docs/setup/security). +> authentication, read more in the [security documentation](/docs/setup/other_config/security/). Now, to connect to Spinnaker, run: