---
title: Automate an Online Embedded Installation
slug: install-10x/automate-an-online-embedded-installation
docTags: 
createdAt: 2025-07-16T13:29:40.583Z
---

This topic provides automation steps for setting up an online, single-node Swimlane installation on embedded clusters.

## Installation Preparation and Customization

Before you begin, review the [System Requirements for an Embedded Cluster Install](docId\:LD6YzgAX-gPbBdT2c1h3S) to confirm your system's compliance. The Swimlane Platform Installer (SPI) performs several checks in the initial phases of the installation to ensure the underlying host is compatible with the application. To bypass any applicable checks, an installer patch YAML file can be applied at installation time to account for several of these settings. Refer to [Overriding Installer Settings](docId\:X7jKIJjG4IP6y3FqQqxyI) for more options.

### Installer Patch File Example

Here is an example installer patch file:

:::BlockQuote
apiVersion: "cluster.kurl.sh/v1beta1"
kind: "Installer"
metadata:
&#x20; name: "patch"
spec:
&#x20; kubernetes:
&#x20;   HACluster: true
&#x20;   loadBalancerAddress: "\<Load Balancer FQDN or IP>:6443"
&#x20; firewalldConfig:
&#x20;   disableFirewalld: true
&#x20; selinuxConfig:
&#x20;   disableSelinux: true
:::

You also need the following files:

- Swimlane Platform Installer license file (ends with `.yaml`)
- Swimlane license file (ends with `.lic`)

## Embedded Cluster Installation

Once you've accounted for any customizations and system checks, install an embedded cluster by running the following command:

`curl -sSl https://get.swimlane.io/install | bash -s installer-spec-file=<Path to Patch File>.yaml`

## Swimlane Installation and Deployment

After the embedded Kubernetes cluster has been installed, install Swimlane with the following command:

:::BlockQuote
kubectl kots install swimlane-platform \\&#x20;
&#x20; \--namespace default \\&#x20;
&#x20; \--shared-password \<SPI Admin Console Password> \\&#x20;
&#x20; \--license-file \<SPI License File>.yaml \\&#x20;
&#x20; \--port-forward=false \\&#x20;
&#x20; \--config-values \<SPI Config File>.yaml
:::

### Creating an SPI Config File

The `<SPI Config File>.yaml` file is a YAML-formatted file that outlines the specifications of a Swimlane deployment. You can get the .yaml file from a previously configured installation of SPI or by creating a new file manually.

To obtain a file from a previously configured SPI install, run the following command from a system with access to the Kubernetes API and the SPI Kubectl Add-on installed:

`kubectl kots download swimlane-platform -n <namespace>`

This command downloads a copy of the entire SPI deployment specifications to a local folder named `swimlane-platform`.

The config file is located at `./swimlane-platform/upstream/userdata/config.yaml` in the downloaded folder.

To create the file manually, review the configurable options available in the [Embedded Cluster SPI](docId\:uaYKeaEqkgLr5TPEzNLxQ).

Here is a basic version of the config file that you can use for an initial single-node configuration:

:::BlockQuote
apiVersion: kots.io/v1beta1
kind: ConfigValues
metadata:
&#x20; creationTimestamp: null
&#x20; name: swimlane
spec:
&#x20; values:
&#x20;   is\_ha:
&#x20;     value: "0"
&#x20;   mongo\_admin\_user\_password:
&#x20;     value: \<Base64 encoded string>
&#x20;   mongo\_admin\_user\_password\_confirm:
&#x20;     value: \<Base64 encoded string>
&#x20;   mongo\_swimlane\_user\_password:
&#x20;     value: \<Base64 encoded string>
&#x20;   mongo\_swimlane\_user\_password\_confirm:
&#x20;     value: \<Base64 encoded string>
&#x20;   swimlane\_database\_encrypt\_key:
&#x20;     value: \<Base64 encoded string>
&#x20;   swimlane\_database\_encrypt\_key\_confirm:
&#x20;     value: \<Base64 encoded string>
&#x20;   swimlane\_enable\_ingress:
&#x20;     value: "1"
&#x20;   swimlane\_hostname:
&#x20;     value: \<Swimlane Hostname>
:::

## Swimlane Initial Login

It takes a few minutes for Swimlane to initialize all of the required components. However, automation can effectively 'wait' for a ready state by waiting for a ready status from different parts of the deployment. There are multiple ways to accomplish this wait period, the following code block is just one example:

:::BlockQuote
kubectl wait -l statefulset.kubernetes.io/pod-name=swimlane-sw-mongo-0 --for=condition=ready pod --namespace \<Swimlane Namspace> --timeout=240s
export SW\_API=$(kubectl get po -n \<NameSpace> --no-headers -o custom-columns="\:metadata.name" | grep -i api)  
kubectl wait --for=condition=ready pod $SW\_API -n \<NameSpace> --timeout=240s    
:::

Next, continue with the Swimlane installation by creating the first administrative user.

Using your Swimlane license .lic file, first generate the necessary license block for the api call with a curl command:

`curl -kLv -X POST https://<Swimlane URL>/api/settings/license/upload -H 'Content-Type: multipart/form-data' -F file=@<Swimlane License File>.lic`

Then, to create the initial administrative user, insert the returned JSON into the following curl command:

:::BlockQuote
curl -kLv -X POST https\://\<Swimlane URL>/api/settings/install \\
&#x20; \--header "Content-Type: application/json" \\
&#x20; -d '\{"mailSettings":\{},
&#x20;      "password":"\<Admin Password>","confirmPassword":"\<Admin Password>",
&#x20;      "databaseEncryptionKey":"",
&#x20;      "swimlaneUrl":"https\://\<Swimlane URL>",
&#x20;      "license" :\<Generated JSON Data From Previous Step>,
&#x20;      "adminUserName":"\<Admin Username>",
&#x20;      "adminEmail":"\<Admin Email>"}'
:::

