# Environment setup for ISD-Argo

### **Pre-requisites**

You should have internet access and should be able to access github.com, docker.io, and quay.io. You should have the following tools installed on your system.&#x20;

* curl&#x20;
* git&#x20;
* kubectl-cli&#x20;
* kubectl-helm&#x20;
* choco package manager (only for windows)&#x20;
* In addition, you need to create a GitHub repository

### Setup Laptop/machine used for ISD installation&#x20;

Follow the instructions that are specific to your laptop/machine operating system.

**Mac:**

* **curl, git :** Mac comes preinstalled with these commands
* **kubectl:** Install using instructions[ **here**](https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/)**,** using homebrew is generally easier
* **Helm:** Install using instructions[ **here**](https://helm.sh/docs/intro/install/)**,** using homebrew is generally easier

**Windows:**&#x20;

* Execute the following command in Powershell (running in administrator mode)

  <pre data-overflow="wrap"><code>Set-ExecutionPolicy Bypass -Scope Process -Force; `iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
  </code></pre>
* **curl**: Execute this command at the power shell prompt: `choco install curl`&#x20;
* **git**: Execute this command at the power shell prompt: `choco install git`&#x20;
* **kubectl**: Execute the following command at the power shell prompt:

  <pre data-overflow="wrap"><code>choco install Kubernetes-cli
  </code></pre>
* **helm:** Execute the following command at the power shell prompt:&#x20;

  <pre data-overflow="wrap"><code>choco install kubernetes-helm
  </code></pre>

**Ubuntu/Linux:**

* **Curl**: install using instructions [**here** ](https://linuxize.com/post/how-to-install-and-use-curl-on-ubuntu-20-04/)
* **git**: Install using instructions [**here**](https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-20-04)
* **kubectl**: Install using instructions [**here**](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/), go with “using native package manager” if you are not sure.&#x20;
* **Helm**: Install helm using the instructions [**here**](https://helm.sh/docs/intro/install/), using a package manager is generally easier

**Verification**:&#x20;

Execute the following commands to verify that the commands are functional:

```
curl -version
git -version
kubectl version
helm version
```

**Ensure working “kubectl” command:**

Execute the following commands to make sure whether “**Kubectl**” command is working

```
kubectl get no # to see the nodes
kubectl get ns # to see the namespaces
```

These commands should show some output. Kubeconfig file is not in the right place If you get the following error:&#x20;

"***The connection to the server localhost:8080 was refused - did you specify the right host or port?**"*

Rename the kubeconfig file as "config" and copy to /.kube folder in your machine. If that still does not work, try giving the –kubeconfig option to all kubectl commands. For example, refer to the following command.

```
kubectl -kubeconfig <full path to the kubeconfig file> get no
```

**Creating a GitHub repo (“\<gitops-repo>”)**

Github.com provides a free account for personal use. If you don’t have an account, create an account on Github by following the instructions mentioned [**here**](https://docs.github.com/en/get-started/signing-up-for-github/signing-up-for-a-new-github-account)**.**

Login to GitHub (github.com) with your own credentials.

* Create a new private repository, instructions are[ **here**](https://docs.github.com/en/get-started/quickstart/create-a-repo). While creating:
  * Choose Private&#x20;
  * Check “Add a README file”
  * Rename “main” branch as “master” branch by following the instructions[ **here**](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/renaming-a-branch)**.**
* Generate a **personal access token** by following the instructions[ **here**](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)**.** Save this token to be updated in values.yaml later.

{% hint style="info" %}
**Note**: If the token contains ‘/’ or ‘\’, please generate another token as these special characters may create an issue during installation.
{% endhint %}

### Installing nginx ingress controller

If you are using any other ingress controller such as one provided by the cloud provider, you can skip this section.&#x20;

* kubectl create ns ingress-nginx&#x20;
* helm repo add ingress-nginx <https://kubernetes.github.io/ingress-nginx&#x20>;
* helm repo update&#x20;
* helm install ingress-nginx ingress-nginx/ingress-nginx -n ingress-nginx&#x20;
* Check whether it is installed correctly or not, use$kubectl get svc -n ingress-nginx&#x20;
* **Note down the IP Address (or hostname)** of the “ingress-nginx-controller” service in the output of the command above. This is required for making DNS or host entries as mentioned in the section below.

### **Installing cert-manager**

If you create your own TLS certificates or the cluster does not have inbound port 80 access, you can skip this section.&#x20;

* kubectl create namespace cert-manager&#x20;
* helm repo add jetstack <https://charts.jetstack.io&#x20>;
* helm repo update&#x20;
* helm install cert-manager jetstack/cert-manager --set installCRDs=true -n cert-manager

### **Adding entries to “hosts” file**

Using DNS to map URL-hostnames to IP addresses is the preferred method. However, in case you don’t have access to a DNS server, for trial purposes, we can access the ISD by manually adding the IP->host mapping in the “hosts” file as follows:

### **Mac/Ubuntu/Linux**

This section provides instructions for modifying your hosts file

1. Follow the instructions[ **here**](https://docs.rackspace.com/support/how-to/modify-your-hosts-file/)**.**
2. Create three entries as follows. The IP address is the “ingress-nginx-controller” service external IP address (as mentioned in the Nginx section above) and map them to the hostnames you defined for ISD.
   * Ip-address oes.com&#x20;
   * Ip-address oes-gate.com&#x20;
   * Ip-address spin...com \[Example: oes.opsmx-isd.opsmx.com]
3. **If you skipped the step in defining host names**, create these entries, replacing the “ip-address” as explained above:
   * Ip-address oes.isd-pov.example.com&#x20;
   * Ip-address oes-gate.isd-pov.example.com&#x20;
   * Ip-address spin.isd-pov.example.com

### **Windows**

If you do NOT have DNS, follow the instructions[ **here**](https://docs.rackspace.com/support/how-to/modify-your-hosts-file/) to add lines in hosts file as shown below:

* Create and add these three lines replacing the “ip-address” with the **IP-address is the “ingress-nginx-controller” service external IP address**
  * Ip-address oes.isd-pov.example.com&#x20;
  * Ip-address oes-gate.isd-pov.example.com&#x20;
  * Ip-address spin.isd-pov.example.com \[Example: 35.22.105.22 oes.isd-pov.example.com]
* **If using DNS**, follow the instructions [**here** ](https://docs.rackspace.com/support/how-to/modify-your-hosts-file/)to add the entries in host file as shown below:
  * Create three entries as follows. The IP address is the “ingress-nginx-controller” service external IP address (as mentioned in the Nginx section above) and maps them to the hostnames you defined for ISD.&#x20;
    * Ip-address oes.com&#x20;
    * Ip-address oes-gate.com
