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/apps/gethomepage/base/configmap.yaml b/apps/gethomepage/base/configmap.yaml new file mode 100644 index 0000000..3c4720a --- /dev/null +++ b/apps/gethomepage/base/configmap.yaml @@ -0,0 +1,61 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: homepage + labels: + app.kubernetes.io/name: homepage + app.kubernetes.io/instance: homepage + app.kubernetes.io/version: "v0.6.10" + +data: + bookmarks.yaml: | + - Developer: + - Github: + - abbr: GH + href: https://github.com/ + docker.yaml: "" + kubernetes.yaml: | + mode: cluster + services.yaml: | + layout: + Files: + Media: + Games: + Manage Homelab: + Manage Media: + settings.yaml: | + layout: + Games: + columns: 4 + style: row + Manage Library: + columns: 4 + style: row + Files: + Manage Homelab: + Media: + columns: 4 + style: row + widgets.yaml: | + - datetime: + format: + dateStyle: long + hour12: true + timeStyle: short + text_size: xl + - kubernetes: + cluster: + cpu: true + label: cluster + memory: true + show: true + showLabel: true + nodes: + cpu: true + memory: true + show: true + showLabel: true + - search: + provider: duckduckgo + target: _blank diff --git a/apps/gethomepage/base/deployment.yaml b/apps/gethomepage/base/deployment.yaml new file mode 100644 index 0000000..524b81f --- /dev/null +++ b/apps/gethomepage/base/deployment.yaml @@ -0,0 +1,84 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: homepage + labels: + app.kubernetes.io/instance: homepage + app.kubernetes.io/name: homepage + app.kubernetes.io/version: v0.6.10 +spec: + revisionHistoryLimit: 3 + replicas: 1 + strategy: + type: RollingUpdate + selector: + matchLabels: + app.kubernetes.io/name: homepage + app.kubernetes.io/instance: homepage + template: + metadata: + labels: + app.kubernetes.io/name: homepage + app.kubernetes.io/instance: homepage + spec: + serviceAccountName: homepage + automountServiceAccountToken: true + dnsPolicy: ClusterFirst + enableServiceLinks: true + containers: + - name: homepage + image: "ghcr.io/benphelps/homepage:v0.6.10" + imagePullPolicy: + ports: + - name: http + containerPort: 3000 + protocol: TCP + volumeMounts: + - name: homepage-config + subPath: bookmarks.yaml + mountPath: /app/config/bookmarks.yaml + - name: homepage-config + subPath: docker.yaml + mountPath: /app/config/docker.yaml + - name: homepage-config + subPath: kubernetes.yaml + mountPath: /app/config/kubernetes.yaml + - name: homepage-config + subPath: services.yaml + mountPath: /app/config/services.yaml + - name: homepage-config + subPath: settings.yaml + mountPath: /app/config/settings.yaml + - name: homepage-config + subPath: widgets.yaml + mountPath: /app/config/widgets.yaml + - name: logs + mountPath: /app/config/logs + livenessProbe: + failureThreshold: 3 + initialDelaySeconds: 0 + periodSeconds: 10 + tcpSocket: + port: 3000 + timeoutSeconds: 1 + readinessProbe: + failureThreshold: 3 + initialDelaySeconds: 0 + periodSeconds: 10 + tcpSocket: + port: 3000 + timeoutSeconds: 1 + startupProbe: + failureThreshold: 30 + initialDelaySeconds: 0 + periodSeconds: 5 + tcpSocket: + port: 3000 + timeoutSeconds: 1 + volumes: + - name: homepage-config + configMap: + name: homepage + - name: logs + emptyDir: {} diff --git a/apps/gethomepage/icons/fvtt-d20.png b/apps/gethomepage/base/icons/fvtt-d20.png similarity index 100% rename from apps/gethomepage/icons/fvtt-d20.png rename to apps/gethomepage/base/icons/fvtt-d20.png diff --git a/apps/gethomepage/base/ingress.yaml b/apps/gethomepage/base/ingress.yaml new file mode 100644 index 0000000..8899953 --- /dev/null +++ b/apps/gethomepage/base/ingress.yaml @@ -0,0 +1,26 @@ +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: homepage + labels: + app.kubernetes.io/instance: homepage + app.kubernetes.io/name: homepage + app.kubernetes.io/version: v0.6.10 + annotations: + cert-manager.io/cluster-issuer: letsencrypt-issuer +spec: + tls: + - hosts: + - "dashboard.int.nc.landry.land" + rules: + - host: "dashboard.int.nc.landry.land" + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: homepage + port: + number: 3000 diff --git a/apps/gethomepage/base/kustomization.yaml b/apps/gethomepage/base/kustomization.yaml new file mode 100644 index 0000000..735a2f5 --- /dev/null +++ b/apps/gethomepage/base/kustomization.yaml @@ -0,0 +1,9 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - configmap.yaml + - deployment.yaml + - ingress.yaml + - rbac.yaml + - sa.yaml + - service.yaml diff --git a/apps/gethomepage/base/rbac.yaml b/apps/gethomepage/base/rbac.yaml new file mode 100644 index 0000000..cb5c979 --- /dev/null +++ b/apps/gethomepage/base/rbac.yaml @@ -0,0 +1,68 @@ +--- +# Source: gethomepage/charts/homepage/templates/rbac.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: homepage + labels: + app.kubernetes.io/instance: homepage + app.kubernetes.io/name: homepage + app.kubernetes.io/version: v0.6.10 +rules: + - apiGroups: + - "" + resources: + - namespaces + - pods + - nodes + verbs: + - get + - list + - apiGroups: + - extensions + - networking.k8s.io + resources: + - ingresses + verbs: + - get + - list + - apiGroups: + - traefik.containo.us + - traefik.io + resources: + - ingressroutes + verbs: + - get + - list + - apiGroups: + - metrics.k8s.io + resources: + - nodes + - pods + verbs: + - get + - list + - apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions/status + verbs: + - get +--- +# Source: gethomepage/charts/homepage/templates/rbac.yaml +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: homepage + labels: + app.kubernetes.io/instance: homepage + app.kubernetes.io/name: homepage + app.kubernetes.io/version: v0.6.10 +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: homepage +subjects: + - kind: ServiceAccount + name: homepage + namespace: argocd diff --git a/apps/gethomepage/base/sa.yaml b/apps/gethomepage/base/sa.yaml new file mode 100644 index 0000000..4d2f616 --- /dev/null +++ b/apps/gethomepage/base/sa.yaml @@ -0,0 +1,23 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: homepage + labels: + app.kubernetes.io/instance: homepage + app.kubernetes.io/name: homepage + app.kubernetes.io/version: v0.6.10 +secrets: + - name: homepage-sa-token +--- +apiVersion: v1 +kind: Secret +type: kubernetes.io/service-account-token +metadata: + name: homepage-sa-token + labels: + app.kubernetes.io/instance: homepage + app.kubernetes.io/name: homepage + app.kubernetes.io/version: v0.6.10 + annotations: + kubernetes.io/service-account.name: homepage diff --git a/apps/gethomepage/base/service.yaml b/apps/gethomepage/base/service.yaml new file mode 100644 index 0000000..87dff27 --- /dev/null +++ b/apps/gethomepage/base/service.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: homepage + labels: + app.kubernetes.io/service: homepage + app.kubernetes.io/instance: homepage + app.kubernetes.io/name: homepage + app.kubernetes.io/version: v0.6.10 + annotations: +spec: + type: ClusterIP + ports: + - port: 3000 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/instance: homepage + app.kubernetes.io/name: homepage diff --git a/apps/gethomepage/overlays/system/config.json b/apps/gethomepage/overlays/system/config.json new file mode 100644 index 0000000..08c9232 --- /dev/null +++ b/apps/gethomepage/overlays/system/config.json @@ -0,0 +1,11 @@ +{ + "appName": "gethomepage", + "userGivenName": "gethomepage", + "destNamespace": "homepage", + "destServer": "https://kubernetes.default.svc", + "srcPath": "apps/gethomepage/overlays/system", + "srcRepoURL": "ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.git", + "srcTargetRevision": "", + "labels": null, + "annotations": null +} diff --git a/apps/gethomepage/overlays/system/kustomization.yaml b/apps/gethomepage/overlays/system/kustomization.yaml new file mode 100644 index 0000000..4e4f197 --- /dev/null +++ b/apps/gethomepage/overlays/system/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- ../../base diff --git a/apps/kavita/email-claim-pvc.yaml b/apps/kavita/base/email-claim-pvc.yaml similarity index 100% rename from apps/kavita/email-claim-pvc.yaml rename to apps/kavita/base/email-claim-pvc.yaml diff --git a/apps/kavita/email-deployment.yaml b/apps/kavita/base/email-deployment.yaml similarity index 100% rename from apps/kavita/email-deployment.yaml rename to apps/kavita/base/email-deployment.yaml diff --git a/apps/kavita/email-service.yaml b/apps/kavita/base/email-service.yaml similarity index 100% rename from apps/kavita/email-service.yaml rename to apps/kavita/base/email-service.yaml diff --git a/apps/kavita/kavita-comics-pv.yaml b/apps/kavita/base/kavita-comics-pv.yaml similarity index 100% rename from apps/kavita/kavita-comics-pv.yaml rename to apps/kavita/base/kavita-comics-pv.yaml diff --git a/apps/kavita/kavita-comics-pvc.yaml b/apps/kavita/base/kavita-comics-pvc.yaml similarity index 100% rename from apps/kavita/kavita-comics-pvc.yaml rename to apps/kavita/base/kavita-comics-pvc.yaml diff --git a/apps/kavita/kavita-config-pvc.yaml b/apps/kavita/base/kavita-config-pvc.yaml similarity index 100% rename from apps/kavita/kavita-config-pvc.yaml rename to apps/kavita/base/kavita-config-pvc.yaml diff --git a/apps/kavita/kavita-deployment.yaml b/apps/kavita/base/kavita-deployment.yaml similarity index 100% rename from apps/kavita/kavita-deployment.yaml rename to apps/kavita/base/kavita-deployment.yaml diff --git a/apps/kavita/kavita-ebooks-pv.yaml b/apps/kavita/base/kavita-ebooks-pv.yaml similarity index 100% rename from apps/kavita/kavita-ebooks-pv.yaml rename to apps/kavita/base/kavita-ebooks-pv.yaml diff --git a/apps/kavita/kavita-ebooks-pvc.yaml b/apps/kavita/base/kavita-ebooks-pvc.yaml similarity index 100% rename from apps/kavita/kavita-ebooks-pvc.yaml rename to apps/kavita/base/kavita-ebooks-pvc.yaml diff --git a/apps/kavita/kavita-ingress.yaml b/apps/kavita/base/kavita-ingress.yaml similarity index 100% rename from apps/kavita/kavita-ingress.yaml rename to apps/kavita/base/kavita-ingress.yaml diff --git a/apps/kavita/kavita-service.yaml b/apps/kavita/base/kavita-service.yaml similarity index 100% rename from apps/kavita/kavita-service.yaml rename to apps/kavita/base/kavita-service.yaml diff --git a/apps/kavita/base/kustomization.yaml b/apps/kavita/base/kustomization.yaml new file mode 100644 index 0000000..88008f8 --- /dev/null +++ b/apps/kavita/base/kustomization.yaml @@ -0,0 +1,14 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - email-claim-pvc.yaml + - email-deployment.yaml + - email-service.yaml + - kavita-comics-pv.yaml + - kavita-comics-pvc.yaml + - kavita-config-pvc.yaml + - kavita-deployment.yaml + - kavita-ebooks-pv.yaml + - kavita-ebooks-pvc.yaml + - kavita-ingress.yaml + - kavita-service.yaml diff --git a/apps/kavita/overlays/media/config.json b/apps/kavita/overlays/media/config.json new file mode 100644 index 0000000..75b4f7e --- /dev/null +++ b/apps/kavita/overlays/media/config.json @@ -0,0 +1,11 @@ +{ + "appName": "kavita", + "userGivenName": "kavita", + "destNamespace": "media", + "destServer": "https://kubernetes.default.svc", + "srcPath": "apps/kavita/overlays/media", + "srcRepoURL": "ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.git", + "srcTargetRevision": "", + "labels": null, + "annotations": null +} diff --git a/apps/kavita/overlays/media/kustomization.yaml b/apps/kavita/overlays/media/kustomization.yaml new file mode 100644 index 0000000..4e4f197 --- /dev/null +++ b/apps/kavita/overlays/media/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- ../../base diff --git a/apps/metallb/base/kustomization.yaml b/apps/metallb/base/kustomization.yaml new file mode 100644 index 0000000..8845009 --- /dev/null +++ b/apps/metallb/base/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - github.com/metallb/metallb/config/native?ref=v0.13.12 diff --git a/apps/metallb/overlays/system/config.json b/apps/metallb/overlays/system/config.json new file mode 100644 index 0000000..19f619a --- /dev/null +++ b/apps/metallb/overlays/system/config.json @@ -0,0 +1,11 @@ +{ + "appName": "metallb", + "userGivenName": "metallb", + "destNamespace": "metallb-system", + "destServer": "https://kubernetes.default.svc", + "srcPath": "apps/metallb/overlays/system", + "srcRepoURL": "ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.git", + "srcTargetRevision": "", + "labels": null, + "annotations": null +} diff --git a/apps/metallb/overlays/system/kustomization.yaml b/apps/metallb/overlays/system/kustomization.yaml new file mode 100644 index 0000000..4e4f197 --- /dev/null +++ b/apps/metallb/overlays/system/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- ../../base diff --git a/apps/minio/base/kustomization.yaml b/apps/minio/base/kustomization.yaml new file mode 100644 index 0000000..09d5ddb --- /dev/null +++ b/apps/minio/base/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./minio-dev.yaml diff --git a/apps/minio/base/minio-dev.yaml b/apps/minio/base/minio-dev.yaml new file mode 100644 index 0000000..b98aa62 --- /dev/null +++ b/apps/minio/base/minio-dev.yaml @@ -0,0 +1,40 @@ +# Deploys a new Namespace for the MinIO Pod +apiVersion: v1 +kind: Namespace +metadata: + name: minio-dev # Change this value if you want a different namespace name + labels: + name: minio-dev # Change this value to match metadata.name +--- +# Deploys a new MinIO Pod into the metadata.namespace Kubernetes namespace +# +# The `spec.containers[0].args` contains the command run on the pod +# The `/data` directory corresponds to the `spec.containers[0].volumeMounts[0].mountPath` +# That mount path corresponds to a Kubernetes HostPath which binds `/data` to a local drive or volume on the worker node where the pod runs +# +apiVersion: v1 +kind: Pod +metadata: + labels: + app: minio + name: minio + namespace: minio-dev # Change this value to match the namespace metadata.name +spec: + containers: + - name: minio + image: quay.io/minio/minio:latest + command: + - /bin/bash + - -c + args: + - minio server /data --console-address :9090 + volumeMounts: + - mountPath: /data + name: localvolume # Corresponds to the `spec.volumes` Persistent Volume + nodeSelector: + kubernetes.io/hostname: elli # Specify a node label associated to the Worker Node on which you want to deploy the pod. + volumes: + - name: localvolume + hostPath: # MinIO generally recommends using locally-attached volumes + path: /storage/local-k8s/minio # Specify a path to a local drive or volume on the Kubernetes worker node + type: DirectoryOrCreate # The path to the last directory must exist diff --git a/apps/minio/overlays/system/config.json b/apps/minio/overlays/system/config.json new file mode 100644 index 0000000..2a32404 --- /dev/null +++ b/apps/minio/overlays/system/config.json @@ -0,0 +1,11 @@ +{ + "appName": "minio", + "userGivenName": "minio", + "destNamespace": "minio-dev", + "destServer": "https://kubernetes.default.svc", + "srcPath": "apps/minio/overlays/system", + "srcRepoURL": "ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.git", + "srcTargetRevision": "", + "labels": null, + "annotations": null +} diff --git a/apps/minio/overlays/system/kustomization.yaml b/apps/minio/overlays/system/kustomization.yaml new file mode 100644 index 0000000..4e4f197 --- /dev/null +++ b/apps/minio/overlays/system/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- ../../base diff --git a/bootstrap/argo-cd.yaml b/bootstrap/argo-cd.yaml new file mode 100644 index 0000000..53cd569 --- /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: ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.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..922c21a --- /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://git.nc.landry.land/ + 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..6c56f50 --- /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: ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.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: ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.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..90f8444 --- /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: ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.git + syncPolicy: + automated: + allowEmpty: true + prune: true + selfHeal: true + syncOptions: + - allowEmpty=true +status: + health: {} + summary: {} + sync: + comparedTo: + destination: {} + source: + repoURL: "" + status: "" diff --git a/apps/gethomepage/Chart.yaml b/old/apps/gethomepage/Chart.yaml similarity index 100% rename from apps/gethomepage/Chart.yaml rename to old/apps/gethomepage/Chart.yaml diff --git a/old/apps/gethomepage/icons/fvtt-d20.png b/old/apps/gethomepage/icons/fvtt-d20.png new file mode 100644 index 0000000..23fa8aa Binary files /dev/null and b/old/apps/gethomepage/icons/fvtt-d20.png differ diff --git a/apps/gethomepage/values.yaml b/old/apps/gethomepage/values.yaml similarity index 100% rename from apps/gethomepage/values.yaml rename to old/apps/gethomepage/values.yaml diff --git a/old/apps/kavita/email-claim-pvc.yaml b/old/apps/kavita/email-claim-pvc.yaml new file mode 100644 index 0000000..0d3bc5d --- /dev/null +++ b/old/apps/kavita/email-claim-pvc.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + creationTimestamp: null + labels: + io.kompose.service: kavita-email-config-pvc + name: kavita-email-config-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Mi +status: {} diff --git a/old/apps/kavita/email-deployment.yaml b/old/apps/kavita/email-deployment.yaml new file mode 100644 index 0000000..4b10c48 --- /dev/null +++ b/old/apps/kavita/email-deployment.yaml @@ -0,0 +1,52 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml + kompose.version: 1.31.2 (HEAD) + creationTimestamp: null + labels: + io.kompose.service: kavita-email + name: kavita-email +spec: + replicas: 0 + selector: + matchLabels: + io.kompose.service: kavita-email + strategy: + type: Recreate + template: + metadata: + annotations: + kompose.cmd: kompose convert -f docker-compose.yml + kompose.version: 1.31.2 (HEAD) + creationTimestamp: null + labels: + io.kompose.network/ebooks-default: "true" + io.kompose.service: kavita-email + app.kubernetes.io/name: kavita-email + spec: + containers: + - image: jvmilazz0/kavitaemail:latest + name: kavita-email + ports: + - name: http + protocol: TCP + containerPort: 5003 + readinessProbe: + httpGet: + path: /api/test + port: http + initialDelaySeconds: 30 + failureThreshold: 5 + periodSeconds: 5 + resources: {} + volumeMounts: + - mountPath: /app/config + name: email-config + restartPolicy: Always + volumes: + - name: email-config + persistentVolumeClaim: + claimName: kavita-email-config-pvc +status: {} diff --git a/old/apps/kavita/email-service.yaml b/old/apps/kavita/email-service.yaml new file mode 100644 index 0000000..ed97c7f --- /dev/null +++ b/old/apps/kavita/email-service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: kavita-email + labels: + name: kavita-email +spec: + ports: + - port: 5003 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: kavita-email + #publishNotReadyAddresses: true diff --git a/old/apps/kavita/kavita-comics-pv.yaml b/old/apps/kavita/kavita-comics-pv.yaml new file mode 100644 index 0000000..b4ce4ad --- /dev/null +++ b/old/apps/kavita/kavita-comics-pv.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + annotations: + pv.kubernetes.io/provisioned-by: cluster.local/nfs-subdir-external-provisioner + name: media-library-comics +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 100Gi + nfs: + path: /export/comics + server: 192.168.1.215 + persistentVolumeReclaimPolicy: Retain + storageClassName: nfs-client + volumeMode: Filesystem diff --git a/old/apps/kavita/kavita-comics-pvc.yaml b/old/apps/kavita/kavita-comics-pvc.yaml new file mode 100644 index 0000000..872a216 --- /dev/null +++ b/old/apps/kavita/kavita-comics-pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: kavita-comics-pvc + namespace: media +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Gi + volumeName: media-library-comics diff --git a/old/apps/kavita/kavita-config-pvc.yaml b/old/apps/kavita/kavita-config-pvc.yaml new file mode 100644 index 0000000..2020fb7 --- /dev/null +++ b/old/apps/kavita/kavita-config-pvc.yaml @@ -0,0 +1,14 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + creationTimestamp: null + labels: + io.kompose.service: kavita-config-pvc + name: kavita-config-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Mi +status: {} diff --git a/old/apps/kavita/kavita-deployment.yaml b/old/apps/kavita/kavita-deployment.yaml new file mode 100644 index 0000000..aa3184e --- /dev/null +++ b/old/apps/kavita/kavita-deployment.yaml @@ -0,0 +1,91 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + gethompage.dev/enabled: "true" + gethomepage.dev/group: Media + gethomepage.dev/name: Books + gethomepage.dev/description: Ebooks and graphic novels + gethomepage.dev/href: https://library.nc.landry.land + gethomepage.dev/icon: kavita + creationTimestamp: null + labels: + io.kompose.service: kavita + name: kavita +spec: + replicas: 1 + selector: + matchLabels: + io.kompose.service: kavita + strategy: + type: Recreate + template: + metadata: + annotations: + gethompage.dev/enabled: "true" + gethomepage.dev/group: Media + gethomepage.dev/name: Books + gethomepage.dev/description: Ebooks and graphic novels + gethomepage.dev/href: https://library.nc.landry.land + gethomepage.dev/icon: kavita + traefik.enable: "true" + traefik.http.routers.library.entrypoints: websecure + traefik.http.routers.library.rule: Host(`library.nc.landry.land`) + traefik.http.routers.library.service: library + traefik.http.routers.library.tls.certresolver: leresolver + traefik.http.services.library.loadbalancer.server.port: "5000" + creationTimestamp: null + labels: + io.kompose.network/ebooks-default: "true" + io.kompose.network/public: "true" + io.kompose.service: kavita + app.kubernetes.io/name: kavita + spec: + containers: + - env: + - name: TZ + value: America/New_York + image: jvmilazz0/kavita:latest + ports: + - name: http + protocol: TCP + containerPort: 5000 + livenessProbe: + httpGet: + path: /api/health + port: http + failureThreshold: 5 + initialDelaySeconds: 90 + periodSeconds: 10 + readinessProbe: + httpGet: + path: /api/health + port: http + failureThreshold: 5 + periodSeconds: 10 + name: kavita + resources: {} + volumeMounts: + - mountPath: /kavita/config + name: kavita-config-pvc + - mountPath: /books + name: kavita-ebooks-pvc + - mountPath: /comics + name: + kavita-comics-pvc + # - mountPath: /manga + # name: kavita-claim2 + # - mountPath: /ttrpg + # name: kavita-claim3 + restartPolicy: Always + volumes: + - name: kavita-config-pvc + persistentVolumeClaim: + claimName: kavita-config-pvc + - name: kavita-ebooks-pvc + persistentVolumeClaim: + claimName: kavita-ebooks-pvc + - name: kavita-comics-pvc + persistentVolumeClaim: + claimName: kavita-comics-pvc +status: {} diff --git a/old/apps/kavita/kavita-ebooks-pv.yaml b/old/apps/kavita/kavita-ebooks-pv.yaml new file mode 100644 index 0000000..79de27e --- /dev/null +++ b/old/apps/kavita/kavita-ebooks-pv.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + annotations: + pv.kubernetes.io/provisioned-by: cluster.local/nfs-subdir-external-provisioner + name: media-library-ebooks +spec: + accessModes: + - ReadWriteOnce + capacity: + storage: 100Gi + nfs: + path: /export/ebooks + server: 192.168.1.215 + persistentVolumeReclaimPolicy: Retain + storageClassName: nfs-client + volumeMode: Filesystem diff --git a/old/apps/kavita/kavita-ebooks-pvc.yaml b/old/apps/kavita/kavita-ebooks-pvc.yaml new file mode 100644 index 0000000..624de08 --- /dev/null +++ b/old/apps/kavita/kavita-ebooks-pvc.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: kavita-ebooks-pvc + namespace: media +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 100Gi + volumeName: media-library-ebooks diff --git a/old/apps/kavita/kavita-ingress.yaml b/old/apps/kavita/kavita-ingress.yaml new file mode 100644 index 0000000..ad24bd2 --- /dev/null +++ b/old/apps/kavita/kavita-ingress.yaml @@ -0,0 +1,30 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + cert-manager.io/cluster-issuer: letsencrypt-issuer + gethomepage.dev/enabled: "true" + gethomepage.dev/name: "Books" + gethomepage.dev/description: "Ebooks and graphic novels by Kavita" + gethomepage.dev/group: "Media" + gethomepage.dev/icon: "kavita.png" + name: kavita + labels: + name: kavita +spec: + rules: + - host: library.nc.landry.land + http: + paths: + - backend: + service: + name: kavita + port: + number: 5000 + path: / + pathType: Prefix + + tls: + - hosts: + - library.nc.landry.land + secretName: kavita-tls diff --git a/old/apps/kavita/kavita-service.yaml b/old/apps/kavita/kavita-service.yaml new file mode 100644 index 0000000..7984487 --- /dev/null +++ b/old/apps/kavita/kavita-service.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + name: kavita + labels: + name: kavita +spec: + ports: + - port: 5000 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: kavita + #publishNotReadyAddresses: true diff --git a/apps/plex/.keep b/old/apps/plex/.keep similarity index 100% rename from apps/plex/.keep rename to old/apps/plex/.keep diff --git a/charts/app-of-apps/Chart.yaml b/old/charts/app-of-apps/Chart.yaml similarity index 100% rename from charts/app-of-apps/Chart.yaml rename to old/charts/app-of-apps/Chart.yaml diff --git a/charts/app-of-apps/templates/app-template.yaml b/old/charts/app-of-apps/templates/app-template.yaml similarity index 100% rename from charts/app-of-apps/templates/app-template.yaml rename to old/charts/app-of-apps/templates/app-template.yaml diff --git a/projects/media/.helmignore b/old/projects/media/.helmignore similarity index 100% rename from projects/media/.helmignore rename to old/projects/media/.helmignore diff --git a/projects/media/Chart.yaml b/old/projects/media/Chart.yaml similarity index 100% rename from projects/media/Chart.yaml rename to old/projects/media/Chart.yaml diff --git a/projects/media/values.yaml b/old/projects/media/values.yaml similarity index 100% rename from projects/media/values.yaml rename to old/projects/media/values.yaml diff --git a/projects/system/Chart.yaml b/old/projects/system/Chart.yaml similarity index 100% rename from projects/system/Chart.yaml rename to old/projects/system/Chart.yaml diff --git a/projects/system/values.yaml b/old/projects/system/values.yaml similarity index 100% rename from projects/system/values.yaml rename to old/projects/system/values.yaml 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. diff --git a/projects/games.yaml b/projects/games.yaml new file mode 100644 index 0000000..1daa4b0 --- /dev/null +++ b/projects/games.yaml @@ -0,0 +1,93 @@ +apiVersion: argoproj.io/v1alpha1 +kind: AppProject +metadata: + annotations: + argocd-autopilot.argoproj-labs.io/default-dest-server: https://kubernetes.default.svc + argocd.argoproj.io/sync-options: PruneLast=true + argocd.argoproj.io/sync-wave: "-2" + creationTimestamp: null + name: games + namespace: argocd +spec: + clusterResourceWhitelist: + - group: "*" + kind: "*" + description: games project + destinations: + - namespace: "*" + server: "*" + namespaceResourceWhitelist: + - group: "*" + kind: "*" + sourceRepos: + - "*" +status: {} + +--- +apiVersion: argoproj.io/v1alpha1 +kind: ApplicationSet +metadata: + annotations: + argocd.argoproj.io/sync-wave: "0" + creationTimestamp: null + name: games + namespace: argocd +spec: + generators: + - git: + files: + - path: apps/**/games/config.json + repoURL: ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.git + requeueAfterSeconds: 20 + revision: "" + template: + metadata: {} + spec: + destination: {} + project: "" + - git: + files: + - path: apps/**/games/config_dir.json + repoURL: ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.git + requeueAfterSeconds: 20 + revision: "" + template: + metadata: {} + spec: + destination: {} + project: "" + source: + directory: + exclude: "{{ exclude }}" + include: "{{ include }}" + jsonnet: {} + recurse: true + repoURL: "" + syncPolicy: {} + template: + metadata: + labels: + app.kubernetes.io/managed-by: argocd-autopilot + app.kubernetes.io/name: "{{ appName }}" + name: games-{{ userGivenName }} + namespace: argocd + spec: + destination: + namespace: "{{ destNamespace }}" + server: "{{ destServer }}" + ignoreDifferences: + - group: argoproj.io + jsonPointers: + - /status + kind: Application + project: games + source: + path: "{{ srcPath }}" + repoURL: "{{ srcRepoURL }}" + targetRevision: "{{ srcTargetRevision }}" + syncPolicy: + automated: + allowEmpty: true + prune: true + selfHeal: true +status: {} diff --git a/projects/media.yaml b/projects/media.yaml new file mode 100644 index 0000000..a84bc19 --- /dev/null +++ b/projects/media.yaml @@ -0,0 +1,93 @@ +apiVersion: argoproj.io/v1alpha1 +kind: AppProject +metadata: + annotations: + argocd-autopilot.argoproj-labs.io/default-dest-server: https://kubernetes.default.svc + argocd.argoproj.io/sync-options: PruneLast=true + argocd.argoproj.io/sync-wave: "-2" + creationTimestamp: null + name: media + namespace: argocd +spec: + clusterResourceWhitelist: + - group: "*" + kind: "*" + description: media project + destinations: + - namespace: "*" + server: "*" + namespaceResourceWhitelist: + - group: "*" + kind: "*" + sourceRepos: + - "*" +status: {} + +--- +apiVersion: argoproj.io/v1alpha1 +kind: ApplicationSet +metadata: + annotations: + argocd.argoproj.io/sync-wave: "0" + creationTimestamp: null + name: media + namespace: argocd +spec: + generators: + - git: + files: + - path: apps/**/media/config.json + repoURL: ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.git + requeueAfterSeconds: 20 + revision: "" + template: + metadata: {} + spec: + destination: {} + project: "" + - git: + files: + - path: apps/**/media/config_dir.json + repoURL: ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.git + requeueAfterSeconds: 20 + revision: "" + template: + metadata: {} + spec: + destination: {} + project: "" + source: + directory: + exclude: "{{ exclude }}" + include: "{{ include }}" + jsonnet: {} + recurse: true + repoURL: "" + syncPolicy: {} + template: + metadata: + labels: + app.kubernetes.io/managed-by: argocd-autopilot + app.kubernetes.io/name: "{{ appName }}" + name: media-{{ userGivenName }} + namespace: argocd + spec: + destination: + namespace: "{{ destNamespace }}" + server: "{{ destServer }}" + ignoreDifferences: + - group: argoproj.io + jsonPointers: + - /status + kind: Application + project: media + source: + path: "{{ srcPath }}" + repoURL: "{{ srcRepoURL }}" + targetRevision: "{{ srcTargetRevision }}" + syncPolicy: + automated: + allowEmpty: true + prune: true + selfHeal: true +status: {} diff --git a/projects/system.yaml b/projects/system.yaml new file mode 100644 index 0000000..ee4e730 --- /dev/null +++ b/projects/system.yaml @@ -0,0 +1,93 @@ +apiVersion: argoproj.io/v1alpha1 +kind: AppProject +metadata: + annotations: + argocd-autopilot.argoproj-labs.io/default-dest-server: https://kubernetes.default.svc + argocd.argoproj.io/sync-options: PruneLast=true + argocd.argoproj.io/sync-wave: "-2" + creationTimestamp: null + name: system + namespace: argocd +spec: + clusterResourceWhitelist: + - group: "*" + kind: "*" + description: system project + destinations: + - namespace: "*" + server: "*" + namespaceResourceWhitelist: + - group: "*" + kind: "*" + sourceRepos: + - "*" +status: {} + +--- +apiVersion: argoproj.io/v1alpha1 +kind: ApplicationSet +metadata: + annotations: + argocd.argoproj.io/sync-wave: "0" + creationTimestamp: null + name: system + namespace: argocd +spec: + generators: + - git: + files: + - path: apps/**/system/config.json + repoURL: ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.git + requeueAfterSeconds: 20 + revision: "" + template: + metadata: {} + spec: + destination: {} + project: "" + - git: + files: + - path: apps/**/system/config_dir.json + repoURL: ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.git + requeueAfterSeconds: 20 + revision: "" + template: + metadata: {} + spec: + destination: {} + project: "" + source: + directory: + exclude: "{{ exclude }}" + include: "{{ include }}" + jsonnet: {} + recurse: true + repoURL: "" + syncPolicy: {} + template: + metadata: + labels: + app.kubernetes.io/managed-by: argocd-autopilot + app.kubernetes.io/name: "{{ appName }}" + name: system-{{ userGivenName }} + namespace: argocd + spec: + destination: + namespace: "{{ destNamespace }}" + server: "{{ destServer }}" + ignoreDifferences: + - group: argoproj.io + jsonPointers: + - /status + kind: Application + project: system + source: + path: "{{ srcPath }}" + repoURL: "{{ srcRepoURL }}" + targetRevision: "{{ srcTargetRevision }}" + syncPolicy: + automated: + allowEmpty: true + prune: true + selfHeal: true +status: {}