From ef9e7ea0743a4b5c46cb26c5b530e1e7cfc84315 Mon Sep 17 00:00:00 2001 From: Dex Date: Mon, 27 May 2024 01:36:37 -0400 Subject: [PATCH] Autopilot Bootstrap --- apps/README.md | 27 +++++++++++ bootstrap/argo-cd.yaml | 38 +++++++++++++++ bootstrap/argo-cd/kustomization.yaml | 17 +++++++ bootstrap/cluster-resources.yaml | 47 +++++++++++++++++++ bootstrap/cluster-resources/in-cluster.json | 1 + .../cluster-resources/in-cluster/README.md | 3 ++ .../in-cluster/argocd-ns.yaml | 9 ++++ bootstrap/root.yaml | 40 ++++++++++++++++ projects/README.md | 21 +++++++++ 9 files changed, 203 insertions(+) create mode 100644 apps/README.md create mode 100644 bootstrap/argo-cd.yaml create mode 100644 bootstrap/argo-cd/kustomization.yaml create mode 100644 bootstrap/cluster-resources.yaml create mode 100644 bootstrap/cluster-resources/in-cluster.json create mode 100644 bootstrap/cluster-resources/in-cluster/README.md create mode 100644 bootstrap/cluster-resources/in-cluster/argocd-ns.yaml create mode 100644 bootstrap/root.yaml create mode 100644 projects/README.md diff --git a/apps/README.md b/apps/README.md new file mode 100644 index 0000000..9750d7c --- /dev/null +++ b/apps/README.md @@ -0,0 +1,27 @@ +# Apps +This directory contains all of the applications you installed by using: +```bash +argocd-autopilot app create --app -p +``` + +## Application Types +> If you don't specify the application `--type` argocd-autopilot will try to clone the source repository and infer the application type [automatically](https://argoproj.github.io/argo-cd/user-guide/tool_detection/#tool-detection) + +* ### Directory application + Such an application references a specific directory at a given repo URL, path and revision. It will be persisted in the GitOps Repository as a single file at `apps///config.json`. + #### Example: + ```bash + argocd-autopilot app create dir-example --app github.com/argoproj-labs/argocd-autopilot/examples/demo-dir/ -p --type dir + ``` + +* ### Kustomize application + A Kustomize application will have exactly one: `apps//base/kustomization.yaml` file, and one or more `apps//overlays//` folders. + + The `apps//base/kustomization.yaml` file is created the first time you create the application. The `apps//overlays//` folder is created for each project you install this application on. So all overlays of the same application are using the same base `kustomization.yaml`. + #### Example: + Try running the following command: + ```bash + argocd-autopilot app create hello-world --app github.com/argoproj-labs/argocd-autopilot/examples/demo-app/ -p --type kustomize + ``` + +###### * If you did not create a project yet take a look at: [creating a project](https://argocd-autopilot.readthedocs.io/en/stable/Getting-Started/#add-a-project-and-an-application). \ No newline at end of file diff --git a/bootstrap/argo-cd.yaml b/bootstrap/argo-cd.yaml new file mode 100644 index 0000000..3ee450a --- /dev/null +++ b/bootstrap/argo-cd.yaml @@ -0,0 +1,38 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + creationTimestamp: null + labels: + app.kubernetes.io/managed-by: argocd-autopilot + app.kubernetes.io/name: argo-cd + name: argo-cd + namespace: argocd +spec: + destination: + namespace: argocd + server: https://kubernetes.default.svc + ignoreDifferences: + - group: argoproj.io + jsonPointers: + - /status + kind: Application + project: default + source: + path: bootstrap/argo-cd + repoURL: https://gitea.simplysyncedllc.com/dex/argocd-configs.git + syncPolicy: + automated: + allowEmpty: true + prune: true + selfHeal: true + syncOptions: + - allowEmpty=true +status: + health: {} + summary: {} + sync: + comparedTo: + destination: {} + source: + repoURL: "" + status: "" diff --git a/bootstrap/argo-cd/kustomization.yaml b/bootstrap/argo-cd/kustomization.yaml new file mode 100644 index 0000000..ee18426 --- /dev/null +++ b/bootstrap/argo-cd/kustomization.yaml @@ -0,0 +1,17 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +configMapGenerator: +- behavior: merge + literals: + - | + repository.credentials=- passwordSecret: + key: git_token + name: autopilot-secret + url: https://gitea.simplysyncedllc.com/ + usernameSecret: + key: git_username + name: autopilot-secret + name: argocd-cm +kind: Kustomization +namespace: argocd +resources: +- github.com/argoproj-labs/argocd-autopilot/manifests/base?ref=v0.4.17 diff --git a/bootstrap/cluster-resources.yaml b/bootstrap/cluster-resources.yaml new file mode 100644 index 0000000..a2d3fbe --- /dev/null +++ b/bootstrap/cluster-resources.yaml @@ -0,0 +1,47 @@ +apiVersion: argoproj.io/v1alpha1 +kind: ApplicationSet +metadata: + annotations: + argocd.argoproj.io/sync-wave: "0" + creationTimestamp: null + name: cluster-resources + namespace: argocd +spec: + generators: + - git: + files: + - path: bootstrap/cluster-resources/*.json + repoURL: https://gitea.simplysyncedllc.com/dex/argocd-configs.git + requeueAfterSeconds: 20 + revision: "" + template: + metadata: {} + spec: + destination: {} + project: "" + syncPolicy: + preserveResourcesOnDeletion: true + template: + metadata: + labels: + app.kubernetes.io/managed-by: argocd-autopilot + app.kubernetes.io/name: cluster-resources-{{name}} + name: cluster-resources-{{name}} + namespace: argocd + spec: + destination: + server: '{{server}}' + ignoreDifferences: + - group: argoproj.io + jsonPointers: + - /status + kind: Application + project: default + source: + path: bootstrap/cluster-resources/{{name}} + repoURL: https://gitea.simplysyncedllc.com/dex/argocd-configs.git + syncPolicy: + automated: + allowEmpty: true + selfHeal: true +status: {} diff --git a/bootstrap/cluster-resources/in-cluster.json b/bootstrap/cluster-resources/in-cluster.json new file mode 100644 index 0000000..259083a --- /dev/null +++ b/bootstrap/cluster-resources/in-cluster.json @@ -0,0 +1 @@ +{"name":"in-cluster","server":"https://kubernetes.default.svc"} \ No newline at end of file diff --git a/bootstrap/cluster-resources/in-cluster/README.md b/bootstrap/cluster-resources/in-cluster/README.md new file mode 100644 index 0000000..6129ae5 --- /dev/null +++ b/bootstrap/cluster-resources/in-cluster/README.md @@ -0,0 +1,3 @@ +# Cluster Resources +This directory contains all cluster resources that should be applied to cluster: `in-cluster`. +For example `Namespace` resources that are shared by multiple applications on the same namespace. diff --git a/bootstrap/cluster-resources/in-cluster/argocd-ns.yaml b/bootstrap/cluster-resources/in-cluster/argocd-ns.yaml new file mode 100644 index 0000000..ba9bb98 --- /dev/null +++ b/bootstrap/cluster-resources/in-cluster/argocd-ns.yaml @@ -0,0 +1,9 @@ +apiVersion: v1 +kind: Namespace +metadata: + annotations: + argocd.argoproj.io/sync-options: Prune=false + creationTimestamp: null + name: argocd +spec: {} +status: {} diff --git a/bootstrap/root.yaml b/bootstrap/root.yaml new file mode 100644 index 0000000..870f1f7 --- /dev/null +++ b/bootstrap/root.yaml @@ -0,0 +1,40 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + creationTimestamp: null + finalizers: + - resources-finalizer.argocd.argoproj.io + labels: + app.kubernetes.io/managed-by: argocd-autopilot + app.kubernetes.io/name: root + name: root + namespace: argocd +spec: + destination: + namespace: argocd + server: https://kubernetes.default.svc + ignoreDifferences: + - group: argoproj.io + jsonPointers: + - /status + kind: Application + project: default + source: + path: projects + repoURL: https://gitea.simplysyncedllc.com/dex/argocd-configs.git + syncPolicy: + automated: + allowEmpty: true + prune: true + selfHeal: true + syncOptions: + - allowEmpty=true +status: + health: {} + summary: {} + sync: + comparedTo: + destination: {} + source: + repoURL: "" + status: "" diff --git a/projects/README.md b/projects/README.md new file mode 100644 index 0000000..baef199 --- /dev/null +++ b/projects/README.md @@ -0,0 +1,21 @@ +# Projects +This directory contains all of your `argocd-autopilot` projects. Projects provide a way to logically group applications and easily control things such as defaults and restrictions. + +### Creating a new project +To create a new project run: +```bash +export GIT_TOKEN= +export GIT_REPO= + +argocd-autopilot project create +``` + +### Creating a new project on different cluster +You can create a project that deploys applications to a different cluster, instead of the cluster where Argo-CD is installed. To do that run: +```bash +export GIT_TOKEN= +export GIT_REPO= + +argocd-autopilot project create --dest-kube-context +``` +Now all applications in this project that do not explicitly specify a different `--dest-server` will be created on the project's destination server.