┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ The following files will be updated: ┃ ┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩ │ stages/03-kubernetes-initialize/_nebari.tf.json │ │ stages/04-kubernetes-ingress/_nebari.tf.json │ │ stages/05-kubernetes-keycloak/_nebari.tf.json │ │ stages/07-kubernetes-services/_nebari.tf.json │ │ stages/08-nebari-tf-extensions/_nebari.tf.json │ └─────────────────────────────────────────────────┘ [terraform]: [terraform]: Initializing the backend... [terraform]: [terraform]: Initializing provider plugins... [terraform]: - Finding gavinbunney/kubectl versions matching ">= 1.7.0"... [terraform]: - Finding latest version of hashicorp/local... [terraform]: - Finding latest version of hashicorp/kubernetes... [terraform]: - Finding kyma-incubator/kind versions matching "0.0.11"... [terraform]: - Finding kreuzwerker/docker versions matching "2.16.0"... [terraform]: - Installing gavinbunney/kubectl v1.14.0... [terraform]: - Installed gavinbunney/kubectl v1.14.0 (self-signed, key ID AD64217B5ADD572F) [terraform]: - Installing hashicorp/local v2.4.0... [terraform]: - Installed hashicorp/local v2.4.0 (signed by HashiCorp) [terraform]: - Installing hashicorp/kubernetes v2.19.0... [terraform]: - Installed hashicorp/kubernetes v2.19.0 (signed by HashiCorp) [terraform]: - Installing kyma-incubator/kind v0.0.11... [terraform]: - Installed kyma-incubator/kind v0.0.11 (self-signed, key ID A17DE2A95A6EFA9F) [terraform]: - Installing kreuzwerker/docker v2.16.0... [terraform]: - Installed kreuzwerker/docker v2.16.0 (self-signed, key ID BD080C4571C6104C) [terraform]: [terraform]: Partner and community providers are signed by their developers. [terraform]: If you'd like to know more about provider signing, you can read about it here: [terraform]: https://www.terraform.io/docs/cli/plugins/signing.html [terraform]: [terraform]: Terraform has created a lock file .terraform.lock.hcl to record the provider [terraform]: selections it made above. Include this file in your version control repository [terraform]: so that Terraform can guarantee to make the same selections by default when [terraform]: you run "terraform init" in the future. [terraform]: [terraform]: Terraform has been successfully initialized! [terraform]:  [terraform]: You may now begin working with Terraform. Try running "terraform plan" to see [terraform]: any changes that are required for your infrastructure. All Terraform commands [terraform]: should now work. [terraform]: [terraform]: If you ever set or change modules or backend configuration for Terraform, [terraform]: rerun this command to reinitialize your working directory. If you forget, other [terraform]: commands will detect it and remind you to do so if necessary. [terraform]: [terraform]: Terraform used the selected providers to generate the following execution [terraform]: plan. Resource actions are indicated with the following symbols: [terraform]: + create [terraform]: <= read (data resources) [terraform]:  [terraform]: Terraform will perform the following actions: [terraform]: [terraform]:  # data.docker_network.kind will be read during apply [terraform]: # (config refers to values not yet known) [terraform]:  <= data "docker_network" "kind" { [terraform]: + driver = (known after apply) [terraform]: + id = (known after apply) [terraform]: + internal = (known after apply) [terraform]: + ipam_config = (known after apply) [terraform]: + name = "kind" [terraform]: + options = (known after apply) [terraform]: + scope = (known after apply) [terraform]: } [terraform]: [terraform]:  # kind_cluster.default will be created [terraform]:  + resource "kind_cluster" "default" { [terraform]: + client_certificate = (known after apply) [terraform]: + client_key = (known after apply) [terraform]: + cluster_ca_certificate = (known after apply) [terraform]: + endpoint = (known after apply) [terraform]: + id = (known after apply) [terraform]: + kubeconfig = (known after apply) [terraform]: + kubeconfig_path = (known after apply) [terraform]: + name = "test-cluster" [terraform]: + node_image = (known after apply) [terraform]: + wait_for_ready = true [terraform]: [terraform]: + kind_config { [terraform]: + api_version = "kind.x-k8s.io/v1alpha4" [terraform]: + kind = "Cluster" [terraform]: [terraform]: + node { [terraform]: + image = "kindest/node:v1.21.10" [terraform]: + role = "general" [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.load-balancer will be created [terraform]:  + resource "kubectl_manifest" "load-balancer" { [terraform]: + api_version = (known after apply) [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = (known after apply) [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = (known after apply) [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: apps/v1\nkind: DaemonSet\nmetadata:\n labels:\n app: metallb\n component: speaker\n name: speaker\n namespace: metallb-system\nspec:\n selector:\n matchLabels:\n app: metallb\n component: speaker\n template:\n metadata:\n annotations:\n prometheus.io/port: '7472'\n prometheus.io/scrape: 'true'\n labels:\n app: metallb\n component: speaker\n spec:\n containers:\n - args:\n - --port=7472\n - --config=config\n - --log-level=info\n env:\n - name: METALLB_NODE_NAME\n valueFrom:\n fieldRef:\n fieldPath: spec.nodeName\n - name: METALLB_HOST\n valueFrom:\n fieldRef:\n fieldPath: status.hostIP\n - name: METALLB_ML_BIND_ADDR\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n # needed when another software is also using memberlist / port 7946\n # when changing this default you also need to update the container ports definition\n # and the PodSecurityPolicy hostPorts definition\n #- name: METALLB_ML_BIND_PORT\n # value: \"7946\"\n - name: METALLB_ML_LABELS\n value: \"app=metallb,component=speaker\"\n - name: METALLB_ML_SECRET_KEY\n valueFrom:\n secretKeyRef:\n name: memberlist\n key: secretkey\n image: quay.io/metallb/speaker:v0.12.1\n name: speaker\n ports:\n - containerPort: 7472\n name: monitoring\n - containerPort: 7946\n name: memberlist-tcp\n - containerPort: 7946\n name: memberlist-udp\n protocol: UDP\n livenessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n readinessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n securityContext:\n allowPrivilegeEscalation: false\n capabilities:\n add:\n - NET_RAW\n drop:\n - ALL\n readOnlyRootFilesystem: true\n hostNetwork: true\n nodeSelector:\n kubernetes.io/os: linux\n serviceAccountName: speaker\n terminationGracePeriodSeconds: 2\n tolerations:\n - effect: NoSchedule\n key: node-role.kubernetes.io/master\n operator: Exists"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "apps/v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "DaemonSet" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "speaker" [terraform]: + namespace = "metallb-system" [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: apps/v1 [terraform]: kind: DaemonSet [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: component: speaker [terraform]: name: speaker [terraform]: namespace: metallb-system [terraform]: spec: [terraform]: selector: [terraform]: matchLabels: [terraform]: app: metallb [terraform]: component: speaker [terraform]: template: [terraform]: metadata: [terraform]: annotations: [terraform]: prometheus.io/port: "7472" [terraform]: prometheus.io/scrape: "true" [terraform]: labels: [terraform]: app: metallb [terraform]: component: speaker [terraform]: spec: [terraform]: containers: [terraform]: - args: [terraform]: - --port=7472 [terraform]: - --config=config [terraform]: - --log-level=info [terraform]: env: [terraform]: - name: METALLB_NODE_NAME [terraform]: valueFrom: [terraform]: fieldRef: [terraform]: fieldPath: spec.nodeName [terraform]: - name: METALLB_HOST [terraform]: valueFrom: [terraform]: fieldRef: [terraform]: fieldPath: status.hostIP [terraform]: - name: METALLB_ML_BIND_ADDR [terraform]: valueFrom: [terraform]: fieldRef: [terraform]: fieldPath: status.podIP [terraform]: - name: METALLB_ML_LABELS [terraform]: value: app=metallb,component=speaker [terraform]: - name: METALLB_ML_SECRET_KEY [terraform]: valueFrom: [terraform]: secretKeyRef: [terraform]: key: secretkey [terraform]: name: memberlist [terraform]: image: quay.io/metallb/speaker:v0.12.1 [terraform]: livenessProbe: [terraform]: failureThreshold: 3 [terraform]: httpGet: [terraform]: path: /metrics [terraform]: port: monitoring [terraform]: initialDelaySeconds: 10 [terraform]: periodSeconds: 10 [terraform]: successThreshold: 1 [terraform]: timeoutSeconds: 1 [terraform]: name: speaker [terraform]: ports: [terraform]: - containerPort: 7472 [terraform]: name: monitoring [terraform]: - containerPort: 7946 [terraform]: name: memberlist-tcp [terraform]: - containerPort: 7946 [terraform]: name: memberlist-udp [terraform]: protocol: UDP [terraform]: readinessProbe: [terraform]: failureThreshold: 3 [terraform]: httpGet: [terraform]: path: /metrics [terraform]: port: monitoring [terraform]: initialDelaySeconds: 10 [terraform]: periodSeconds: 10 [terraform]: successThreshold: 1 [terraform]: timeoutSeconds: 1 [terraform]: securityContext: [terraform]: allowPrivilegeEscalation: false [terraform]: capabilities: [terraform]: add: [terraform]: - NET_RAW [terraform]: drop: [terraform]: - ALL [terraform]: readOnlyRootFilesystem: true [terraform]: hostNetwork: true [terraform]: nodeSelector: [terraform]: kubernetes.io/os: linux [terraform]: serviceAccountName: speaker [terraform]: terminationGracePeriodSeconds: 2 [terraform]: tolerations: [terraform]: - effect: NoSchedule [terraform]: key: node-role.kubernetes.io/master [terraform]: operator: Exists [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: apps/v1\nkind: Deployment\nmetadata:\n labels:\n app: metallb\n component: controller\n name: controller\n namespace: metallb-system\nspec:\n revisionHistoryLimit: 3\n selector:\n matchLabels:\n app: metallb\n component: controller\n template:\n metadata:\n annotations:\n prometheus.io/port: '7472'\n prometheus.io/scrape: 'true'\n labels:\n app: metallb\n component: controller\n spec:\n containers:\n - args:\n - --port=7472\n - --config=config\n - --log-level=info\n env:\n - name: METALLB_ML_SECRET_NAME\n value: memberlist\n - name: METALLB_DEPLOYMENT\n value: controller\n image: quay.io/metallb/controller:v0.12.1\n name: controller\n ports:\n - containerPort: 7472\n name: monitoring\n livenessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n readinessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n securityContext:\n allowPrivilegeEscalation: false\n capabilities:\n drop:\n - all\n readOnlyRootFilesystem: true\n nodeSelector:\n kubernetes.io/os: linux\n securityContext:\n runAsNonRoot: true\n runAsUser: 65534\n fsGroup: 65534\n serviceAccountName: controller\n terminationGracePeriodSeconds: 0"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "apps/v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "Deployment" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "controller" [terraform]: + namespace = "metallb-system" [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: apps/v1 [terraform]: kind: Deployment [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: component: controller [terraform]: name: controller [terraform]: namespace: metallb-system [terraform]: spec: [terraform]: revisionHistoryLimit: 3 [terraform]: selector: [terraform]: matchLabels: [terraform]: app: metallb [terraform]: component: controller [terraform]: template: [terraform]: metadata: [terraform]: annotations: [terraform]: prometheus.io/port: "7472" [terraform]: prometheus.io/scrape: "true" [terraform]: labels: [terraform]: app: metallb [terraform]: component: controller [terraform]: spec: [terraform]: containers: [terraform]: - args: [terraform]: - --port=7472 [terraform]: - --config=config [terraform]: - --log-level=info [terraform]: env: [terraform]: - name: METALLB_ML_SECRET_NAME [terraform]: value: memberlist [terraform]: - name: METALLB_DEPLOYMENT [terraform]: value: controller [terraform]: image: quay.io/metallb/controller:v0.12.1 [terraform]: livenessProbe: [terraform]: failureThreshold: 3 [terraform]: httpGet: [terraform]: path: /metrics [terraform]: port: monitoring [terraform]: initialDelaySeconds: 10 [terraform]: periodSeconds: 10 [terraform]: successThreshold: 1 [terraform]: timeoutSeconds: 1 [terraform]: name: controller [terraform]: ports: [terraform]: - containerPort: 7472 [terraform]: name: monitoring [terraform]: readinessProbe: [terraform]: failureThreshold: 3 [terraform]: httpGet: [terraform]: path: /metrics [terraform]: port: monitoring [terraform]: initialDelaySeconds: 10 [terraform]: periodSeconds: 10 [terraform]: successThreshold: 1 [terraform]: timeoutSeconds: 1 [terraform]: securityContext: [terraform]: allowPrivilegeEscalation: false [terraform]: capabilities: [terraform]: drop: [terraform]: - all [terraform]: readOnlyRootFilesystem: true [terraform]: nodeSelector: [terraform]: kubernetes.io/os: linux [terraform]: securityContext: [terraform]: fsGroup: 65534 [terraform]: runAsNonRoot: true [terraform]: runAsUser: 65534 [terraform]: serviceAccountName: controller [terraform]: terminationGracePeriodSeconds: 0 [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: policy/v1beta1\nkind: PodSecurityPolicy\nmetadata:\n labels:\n app: metallb\n name: controller\nspec:\n allowPrivilegeEscalation: false\n allowedCapabilities: []\n allowedHostPaths: []\n defaultAddCapabilities: []\n defaultAllowPrivilegeEscalation: false\n fsGroup:\n ranges:\n - max: 65535\n min: 1\n rule: MustRunAs\n hostIPC: false\n hostNetwork: false\n hostPID: false\n privileged: false\n readOnlyRootFilesystem: true\n requiredDropCapabilities:\n - ALL\n runAsUser:\n ranges:\n - max: 65535\n min: 1\n rule: MustRunAs\n seLinux:\n rule: RunAsAny\n supplementalGroups:\n ranges:\n - max: 65535\n min: 1\n rule: MustRunAs\n volumes:\n - configMap\n - secret\n - emptyDir"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "policy/v1beta1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "PodSecurityPolicy" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "controller" [terraform]: + namespace = (known after apply) [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: policy/v1beta1 [terraform]: kind: PodSecurityPolicy [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: controller [terraform]: spec: [terraform]: allowPrivilegeEscalation: false [terraform]: allowedCapabilities: [] [terraform]: allowedHostPaths: [] [terraform]: defaultAddCapabilities: [] [terraform]: defaultAllowPrivilegeEscalation: false [terraform]: fsGroup: [terraform]: ranges: [terraform]: - max: 65535 [terraform]: min: 1 [terraform]: rule: MustRunAs [terraform]: hostIPC: false [terraform]: hostNetwork: false [terraform]: hostPID: false [terraform]: privileged: false [terraform]: readOnlyRootFilesystem: true [terraform]: requiredDropCapabilities: [terraform]: - ALL [terraform]: runAsUser: [terraform]: ranges: [terraform]: - max: 65535 [terraform]: min: 1 [terraform]: rule: MustRunAs [terraform]: seLinux: [terraform]: rule: RunAsAny [terraform]: supplementalGroups: [terraform]: ranges: [terraform]: - max: 65535 [terraform]: min: 1 [terraform]: rule: MustRunAs [terraform]: volumes: [terraform]: - configMap [terraform]: - secret [terraform]: - emptyDir [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: policy/v1beta1\nkind: PodSecurityPolicy\nmetadata:\n labels:\n app: metallb\n name: speaker\nspec:\n allowPrivilegeEscalation: false\n allowedCapabilities:\n - NET_RAW\n allowedHostPaths: []\n defaultAddCapabilities: []\n defaultAllowPrivilegeEscalation: false\n fsGroup:\n rule: RunAsAny\n hostIPC: false\n hostNetwork: true\n hostPID: false\n hostPorts:\n - max: 7472\n min: 7472\n - max: 7946\n min: 7946\n privileged: true\n readOnlyRootFilesystem: true\n requiredDropCapabilities:\n - ALL\n runAsUser:\n rule: RunAsAny\n seLinux:\n rule: RunAsAny\n supplementalGroups:\n rule: RunAsAny\n volumes:\n - configMap\n - secret\n - emptyDir"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "policy/v1beta1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "PodSecurityPolicy" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "speaker" [terraform]: + namespace = (known after apply) [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: policy/v1beta1 [terraform]: kind: PodSecurityPolicy [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: speaker [terraform]: spec: [terraform]: allowPrivilegeEscalation: false [terraform]: allowedCapabilities: [terraform]: - NET_RAW [terraform]: allowedHostPaths: [] [terraform]: defaultAddCapabilities: [] [terraform]: defaultAllowPrivilegeEscalation: false [terraform]: fsGroup: [terraform]: rule: RunAsAny [terraform]: hostIPC: false [terraform]: hostNetwork: true [terraform]: hostPID: false [terraform]: hostPorts: [terraform]: - max: 7472 [terraform]: min: 7472 [terraform]: - max: 7946 [terraform]: min: 7946 [terraform]: privileged: true [terraform]: readOnlyRootFilesystem: true [terraform]: requiredDropCapabilities: [terraform]: - ALL [terraform]: runAsUser: [terraform]: rule: RunAsAny [terraform]: seLinux: [terraform]: rule: RunAsAny [terraform]: supplementalGroups: [terraform]: rule: RunAsAny [terraform]: volumes: [terraform]: - configMap [terraform]: - secret [terraform]: - emptyDir [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n labels:\n app: metallb\n name: metallb-system:controller\nrules:\n- apiGroups:\n - ''\n resources:\n - services\n verbs:\n - get\n - list\n - watch\n- apiGroups:\n - ''\n resources:\n - services/status\n verbs:\n - update\n- apiGroups:\n - ''\n resources:\n - events\n verbs:\n - create\n - patch\n- apiGroups:\n - policy\n resourceNames:\n - controller\n resources:\n - podsecuritypolicies\n verbs:\n - use"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "rbac.authorization.k8s.io/v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "ClusterRole" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "metallb-system:controller" [terraform]: + namespace = (known after apply) [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: rbac.authorization.k8s.io/v1 [terraform]: kind: ClusterRole [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: metallb-system:controller [terraform]: rules: [terraform]: - apiGroups: [terraform]: - "" [terraform]: resources: [terraform]: - services [terraform]: verbs: [terraform]: - get [terraform]: - list [terraform]: - watch [terraform]: - apiGroups: [terraform]: - "" [terraform]: resources: [terraform]: - services/status [terraform]: verbs: [terraform]: - update [terraform]: - apiGroups: [terraform]: - "" [terraform]: resources: [terraform]: - events [terraform]: verbs: [terraform]: - create [terraform]: - patch [terraform]: - apiGroups: [terraform]: - policy [terraform]: resourceNames: [terraform]: - controller [terraform]: resources: [terraform]: - podsecuritypolicies [terraform]: verbs: [terraform]: - use [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n labels:\n app: metallb\n name: metallb-system:speaker\nrules:\n- apiGroups:\n - ''\n resources:\n - services\n - endpoints\n - nodes\n verbs:\n - get\n - list\n - watch\n- apiGroups: [\"discovery.k8s.io\"]\n resources:\n - endpointslices\n verbs:\n - get\n - list\n - watch\n- apiGroups:\n - ''\n resources:\n - events\n verbs:\n - create\n - patch\n- apiGroups:\n - policy\n resourceNames:\n - speaker\n resources:\n - podsecuritypolicies\n verbs:\n - use"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "rbac.authorization.k8s.io/v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "ClusterRole" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "metallb-system:speaker" [terraform]: + namespace = (known after apply) [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: rbac.authorization.k8s.io/v1 [terraform]: kind: ClusterRole [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: metallb-system:speaker [terraform]: rules: [terraform]: - apiGroups: [terraform]: - "" [terraform]: resources: [terraform]: - services [terraform]: - endpoints [terraform]: - nodes [terraform]: verbs: [terraform]: - get [terraform]: - list [terraform]: - watch [terraform]: - apiGroups: [terraform]: - discovery.k8s.io [terraform]: resources: [terraform]: - endpointslices [terraform]: verbs: [terraform]: - get [terraform]: - list [terraform]: - watch [terraform]: - apiGroups: [terraform]: - "" [terraform]: resources: [terraform]: - events [terraform]: verbs: [terraform]: - create [terraform]: - patch [terraform]: - apiGroups: [terraform]: - policy [terraform]: resourceNames: [terraform]: - speaker [terraform]: resources: [terraform]: - podsecuritypolicies [terraform]: verbs: [terraform]: - use [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n labels:\n app: metallb\n name: metallb-system:controller\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: metallb-system:controller\nsubjects:\n- kind: ServiceAccount\n name: controller\n namespace: metallb-system"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "rbac.authorization.k8s.io/v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "ClusterRoleBinding" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "metallb-system:controller" [terraform]: + namespace = (known after apply) [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: rbac.authorization.k8s.io/v1 [terraform]: kind: ClusterRoleBinding [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: metallb-system:controller [terraform]: roleRef: [terraform]: apiGroup: rbac.authorization.k8s.io [terraform]: kind: ClusterRole [terraform]: name: metallb-system:controller [terraform]: subjects: [terraform]: - kind: ServiceAccount [terraform]: name: controller [terraform]: namespace: metallb-system [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n labels:\n app: metallb\n name: metallb-system:speaker\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: metallb-system:speaker\nsubjects:\n- kind: ServiceAccount\n name: speaker\n namespace: metallb-system"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "rbac.authorization.k8s.io/v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "ClusterRoleBinding" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "metallb-system:speaker" [terraform]: + namespace = (known after apply) [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: rbac.authorization.k8s.io/v1 [terraform]: kind: ClusterRoleBinding [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: metallb-system:speaker [terraform]: roleRef: [terraform]: apiGroup: rbac.authorization.k8s.io [terraform]: kind: ClusterRole [terraform]: name: metallb-system:speaker [terraform]: subjects: [terraform]: - kind: ServiceAccount [terraform]: name: speaker [terraform]: namespace: metallb-system [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n labels:\n app: metallb\n name: config-watcher\n namespace: metallb-system\nrules:\n- apiGroups:\n - ''\n resources:\n - configmaps\n verbs:\n - get\n - list\n - watch"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "rbac.authorization.k8s.io/v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "Role" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "config-watcher" [terraform]: + namespace = "metallb-system" [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: rbac.authorization.k8s.io/v1 [terraform]: kind: Role [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: config-watcher [terraform]: namespace: metallb-system [terraform]: rules: [terraform]: - apiGroups: [terraform]: - "" [terraform]: resources: [terraform]: - configmaps [terraform]: verbs: [terraform]: - get [terraform]: - list [terraform]: - watch [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n labels:\n app: metallb\n name: controller\n namespace: metallb-system\nrules:\n- apiGroups:\n - ''\n resources:\n - secrets\n verbs:\n - create\n- apiGroups:\n - ''\n resources:\n - secrets\n resourceNames:\n - memberlist\n verbs:\n - list\n- apiGroups:\n - apps\n resources:\n - deployments\n resourceNames:\n - controller\n verbs:\n - get"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "rbac.authorization.k8s.io/v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "Role" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "controller" [terraform]: + namespace = "metallb-system" [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: rbac.authorization.k8s.io/v1 [terraform]: kind: Role [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: controller [terraform]: namespace: metallb-system [terraform]: rules: [terraform]: - apiGroups: [terraform]: - "" [terraform]: resources: [terraform]: - secrets [terraform]: verbs: [terraform]: - create [terraform]: - apiGroups: [terraform]: - "" [terraform]: resourceNames: [terraform]: - memberlist [terraform]: resources: [terraform]: - secrets [terraform]: verbs: [terraform]: - list [terraform]: - apiGroups: [terraform]: - apps [terraform]: resourceNames: [terraform]: - controller [terraform]: resources: [terraform]: - deployments [terraform]: verbs: [terraform]: - get [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n labels:\n app: metallb\n name: pod-lister\n namespace: metallb-system\nrules:\n- apiGroups:\n - ''\n resources:\n - pods\n verbs:\n - list"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "rbac.authorization.k8s.io/v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "Role" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "pod-lister" [terraform]: + namespace = "metallb-system" [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: rbac.authorization.k8s.io/v1 [terraform]: kind: Role [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: pod-lister [terraform]: namespace: metallb-system [terraform]: rules: [terraform]: - apiGroups: [terraform]: - "" [terraform]: resources: [terraform]: - pods [terraform]: verbs: [terraform]: - list [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n labels:\n app: metallb\n name: config-watcher\n namespace: metallb-system\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: config-watcher\nsubjects:\n- kind: ServiceAccount\n name: controller\n- kind: ServiceAccount\n name: speaker"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "rbac.authorization.k8s.io/v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "RoleBinding" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "config-watcher" [terraform]: + namespace = "metallb-system" [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: rbac.authorization.k8s.io/v1 [terraform]: kind: RoleBinding [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: config-watcher [terraform]: namespace: metallb-system [terraform]: roleRef: [terraform]: apiGroup: rbac.authorization.k8s.io [terraform]: kind: Role [terraform]: name: config-watcher [terraform]: subjects: [terraform]: - kind: ServiceAccount [terraform]: name: controller [terraform]: - kind: ServiceAccount [terraform]: name: speaker [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n labels:\n app: metallb\n name: controller\n namespace: metallb-system\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: controller\nsubjects:\n- kind: ServiceAccount\n name: controller"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "rbac.authorization.k8s.io/v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "RoleBinding" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "controller" [terraform]: + namespace = "metallb-system" [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: rbac.authorization.k8s.io/v1 [terraform]: kind: RoleBinding [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: controller [terraform]: namespace: metallb-system [terraform]: roleRef: [terraform]: apiGroup: rbac.authorization.k8s.io [terraform]: kind: Role [terraform]: name: controller [terraform]: subjects: [terraform]: - kind: ServiceAccount [terraform]: name: controller [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n labels:\n app: metallb\n name: pod-lister\n namespace: metallb-system\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: pod-lister\nsubjects:\n- kind: ServiceAccount\n name: speaker"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "rbac.authorization.k8s.io/v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "RoleBinding" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "pod-lister" [terraform]: + namespace = "metallb-system" [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: rbac.authorization.k8s.io/v1 [terraform]: kind: RoleBinding [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: pod-lister [terraform]: namespace: metallb-system [terraform]: roleRef: [terraform]: apiGroup: rbac.authorization.k8s.io [terraform]: kind: Role [terraform]: name: pod-lister [terraform]: subjects: [terraform]: - kind: ServiceAccount [terraform]: name: speaker [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: v1\nkind: ServiceAccount\nmetadata:\n labels:\n app: metallb\n name: controller\n namespace: metallb-system"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "ServiceAccount" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "controller" [terraform]: + namespace = "metallb-system" [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: v1 [terraform]: kind: ServiceAccount [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: controller [terraform]: namespace: metallb-system [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubectl_manifest.metallb["apiVersion: v1\nkind: ServiceAccount\nmetadata:\n labels:\n app: metallb\n name: speaker\n namespace: metallb-system"] will be created [terraform]:  + resource "kubectl_manifest" "metallb" { [terraform]: + api_version = "v1" [terraform]: + apply_only = false [terraform]: + force_conflicts = false [terraform]: + force_new = false [terraform]: + id = (known after apply) [terraform]: + kind = "ServiceAccount" [terraform]: + live_manifest_incluster = (sensitive value) [terraform]: + live_uid = (known after apply) [terraform]: + name = "speaker" [terraform]: + namespace = "metallb-system" [terraform]: + server_side_apply = false [terraform]: + uid = (known after apply) [terraform]: + validate_schema = true [terraform]: + wait = true [terraform]: + wait_for_rollout = true [terraform]: + yaml_body = (sensitive value) [terraform]: + yaml_body_parsed = <<-EOT [terraform]: apiVersion: v1 [terraform]: kind: ServiceAccount [terraform]: metadata: [terraform]: labels: [terraform]: app: metallb [terraform]: name: speaker [terraform]: namespace: metallb-system [terraform]: EOT [terraform]: + yaml_incluster = (sensitive value) [terraform]: } [terraform]: [terraform]:  # kubernetes_namespace.metallb will be created [terraform]:  + resource "kubernetes_namespace" "metallb" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "metallb-system" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # local_file.default will be created [terraform]:  + resource "local_file" "default" { [terraform]: + content = (known after apply) [terraform]: + content_base64sha256 = (known after apply) [terraform]: + content_base64sha512 = (known after apply) [terraform]: + content_md5 = (known after apply) [terraform]: + content_sha1 = (known after apply) [terraform]: + content_sha256 = (known after apply) [terraform]: + content_sha512 = (known after apply) [terraform]: + directory_permission = "0777" [terraform]: + file_permission = "0777" [terraform]: + filename = "/tmp/NEBARI_KUBECONFIG" [terraform]: + id = (known after apply) [terraform]: } [terraform]: [terraform]: Plan: 20 to add, 0 to change, 0 to destroy. [terraform]:  [terraform]: Changes to Outputs: [terraform]: + kubeconfig_filename = "/tmp/NEBARI_KUBECONFIG" [terraform]: + kubernetes_credentials = (sensitive value) [terraform]: kind_cluster.default: Creating... [terraform]: kind_cluster.default: Still creating... [10s elapsed] [terraform]: kind_cluster.default: Still creating... [20s elapsed] [terraform]: kind_cluster.default: Still creating... [30s elapsed] [terraform]: kind_cluster.default: Creation complete after 36s [id=test-cluster-] [terraform]: data.docker_network.kind: Reading... [terraform]: data.docker_network.kind: Read complete after 0s [id=8b8eaef305f6c2413f7caee95adf6c8b9d41f83f1aa0246b0d18e49590835b75] [terraform]: local_file.default: Creating... [terraform]: local_file.default: Creation complete after 0s [id=d7494ca9f418b48ed3918f0436a9e4496fb801ba] [terraform]: kubernetes_namespace.metallb: Creating... [terraform]: kubernetes_namespace.metallb: Creation complete after 0s [id=metallb-system] [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n labels:\n app: metallb\n name: pod-lister\n namespace: metallb-system\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: pod-lister\nsubjects:\n- kind: ServiceAccount\n name: speaker"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n labels:\n app: metallb\n name: config-watcher\n namespace: metallb-system\nrules:\n- apiGroups:\n - ''\n resources:\n - configmaps\n verbs:\n - get\n - list\n - watch"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: policy/v1beta1\nkind: PodSecurityPolicy\nmetadata:\n labels:\n app: metallb\n name: speaker\nspec:\n allowPrivilegeEscalation: false\n allowedCapabilities:\n - NET_RAW\n allowedHostPaths: []\n defaultAddCapabilities: []\n defaultAllowPrivilegeEscalation: false\n fsGroup:\n rule: RunAsAny\n hostIPC: false\n hostNetwork: true\n hostPID: false\n hostPorts:\n - max: 7472\n min: 7472\n - max: 7946\n min: 7946\n privileged: true\n readOnlyRootFilesystem: true\n requiredDropCapabilities:\n - ALL\n runAsUser:\n rule: RunAsAny\n seLinux:\n rule: RunAsAny\n supplementalGroups:\n rule: RunAsAny\n volumes:\n - configMap\n - secret\n - emptyDir"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n labels:\n app: metallb\n name: controller\n namespace: metallb-system\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: controller\nsubjects:\n- kind: ServiceAccount\n name: controller"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n labels:\n app: metallb\n name: pod-lister\n namespace: metallb-system\nrules:\n- apiGroups:\n - ''\n resources:\n - pods\n verbs:\n - list"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: v1\nkind: ServiceAccount\nmetadata:\n labels:\n app: metallb\n name: controller\n namespace: metallb-system"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: policy/v1beta1\nkind: PodSecurityPolicy\nmetadata:\n labels:\n app: metallb\n name: controller\nspec:\n allowPrivilegeEscalation: false\n allowedCapabilities: []\n allowedHostPaths: []\n defaultAddCapabilities: []\n defaultAllowPrivilegeEscalation: false\n fsGroup:\n ranges:\n - max: 65535\n min: 1\n rule: MustRunAs\n hostIPC: false\n hostNetwork: false\n hostPID: false\n privileged: false\n readOnlyRootFilesystem: true\n requiredDropCapabilities:\n - ALL\n runAsUser:\n ranges:\n - max: 65535\n min: 1\n rule: MustRunAs\n seLinux:\n rule: RunAsAny\n supplementalGroups:\n ranges:\n - max: 65535\n min: 1\n rule: MustRunAs\n volumes:\n - configMap\n - secret\n - emptyDir"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n labels:\n app: metallb\n name: metallb-system:speaker\nrules:\n- apiGroups:\n - ''\n resources:\n - services\n - endpoints\n - nodes\n verbs:\n - get\n - list\n - watch\n- apiGroups: [\"discovery.k8s.io\"]\n resources:\n - endpointslices\n verbs:\n - get\n - list\n - watch\n- apiGroups:\n - ''\n resources:\n - events\n verbs:\n - create\n - patch\n- apiGroups:\n - policy\n resourceNames:\n - speaker\n resources:\n - podsecuritypolicies\n verbs:\n - use"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n labels:\n app: metallb\n name: metallb-system:controller\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: metallb-system:controller\nsubjects:\n- kind: ServiceAccount\n name: controller\n namespace: metallb-system"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: v1\nkind: ServiceAccount\nmetadata:\n labels:\n app: metallb\n name: speaker\n namespace: metallb-system"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: policy/v1beta1\nkind: PodSecurityPolicy\nmetadata:\n labels:\n app: metallb\n name: speaker\nspec:\n allowPrivilegeEscalation: false\n allowedCapabilities:\n - NET_RAW\n allowedHostPaths: []\n defaultAddCapabilities: []\n defaultAllowPrivilegeEscalation: false\n fsGroup:\n rule: RunAsAny\n hostIPC: false\n hostNetwork: true\n hostPID: false\n hostPorts:\n - max: 7472\n min: 7472\n - max: 7946\n min: 7946\n privileged: true\n readOnlyRootFilesystem: true\n requiredDropCapabilities:\n - ALL\n runAsUser:\n rule: RunAsAny\n seLinux:\n rule: RunAsAny\n supplementalGroups:\n rule: RunAsAny\n volumes:\n - configMap\n - secret\n - emptyDir"]: Creation complete after 3s [id=/apis/policy/v1beta1/podsecuritypolicys/speaker] [terraform]: kubectl_manifest.metallb["apiVersion: v1\nkind: ServiceAccount\nmetadata:\n labels:\n app: metallb\n name: speaker\n namespace: metallb-system"]: Creation complete after 3s [id=/api/v1/namespaces/metallb-system/serviceaccounts/speaker] [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n labels:\n app: metallb\n name: metallb-system:speaker\nrules:\n- apiGroups:\n - ''\n resources:\n - services\n - endpoints\n - nodes\n verbs:\n - get\n - list\n - watch\n- apiGroups: [\"discovery.k8s.io\"]\n resources:\n - endpointslices\n verbs:\n - get\n - list\n - watch\n- apiGroups:\n - ''\n resources:\n - events\n verbs:\n - create\n - patch\n- apiGroups:\n - policy\n resourceNames:\n - speaker\n resources:\n - podsecuritypolicies\n verbs:\n - use"]: Creation complete after 3s [id=/apis/rbac.authorization.k8s.io/v1/clusterroles/metallb-system:speaker] [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n labels:\n app: metallb\n name: metallb-system:speaker\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: metallb-system:speaker\nsubjects:\n- kind: ServiceAccount\n name: speaker\n namespace: metallb-system"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n labels:\n app: metallb\n name: config-watcher\n namespace: metallb-system\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: config-watcher\nsubjects:\n- kind: ServiceAccount\n name: controller\n- kind: ServiceAccount\n name: speaker"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: v1\nkind: ServiceAccount\nmetadata:\n labels:\n app: metallb\n name: controller\n namespace: metallb-system"]: Creation complete after 3s [id=/api/v1/namespaces/metallb-system/serviceaccounts/controller] [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n labels:\n app: metallb\n name: pod-lister\n namespace: metallb-system\nrules:\n- apiGroups:\n - ''\n resources:\n - pods\n verbs:\n - list"]: Creation complete after 3s [id=/apis/rbac.authorization.k8s.io/v1/namespaces/metallb-system/roles/pod-lister] [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n labels:\n app: metallb\n name: config-watcher\n namespace: metallb-system\nrules:\n- apiGroups:\n - ''\n resources:\n - configmaps\n verbs:\n - get\n - list\n - watch"]: Creation complete after 3s [id=/apis/rbac.authorization.k8s.io/v1/namespaces/metallb-system/roles/config-watcher] [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n labels:\n app: metallb\n name: controller\n namespace: metallb-system\nrules:\n- apiGroups:\n - ''\n resources:\n - secrets\n verbs:\n - create\n- apiGroups:\n - ''\n resources:\n - secrets\n resourceNames:\n - memberlist\n verbs:\n - list\n- apiGroups:\n - apps\n resources:\n - deployments\n resourceNames:\n - controller\n verbs:\n - get"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: policy/v1beta1\nkind: PodSecurityPolicy\nmetadata:\n labels:\n app: metallb\n name: controller\nspec:\n allowPrivilegeEscalation: false\n allowedCapabilities: []\n allowedHostPaths: []\n defaultAddCapabilities: []\n defaultAllowPrivilegeEscalation: false\n fsGroup:\n ranges:\n - max: 65535\n min: 1\n rule: MustRunAs\n hostIPC: false\n hostNetwork: false\n hostPID: false\n privileged: false\n readOnlyRootFilesystem: true\n requiredDropCapabilities:\n - ALL\n runAsUser:\n ranges:\n - max: 65535\n min: 1\n rule: MustRunAs\n seLinux:\n rule: RunAsAny\n supplementalGroups:\n ranges:\n - max: 65535\n min: 1\n rule: MustRunAs\n volumes:\n - configMap\n - secret\n - emptyDir"]: Creation complete after 3s [id=/apis/policy/v1beta1/podsecuritypolicys/controller] [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n labels:\n app: metallb\n name: metallb-system:controller\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: metallb-system:controller\nsubjects:\n- kind: ServiceAccount\n name: controller\n namespace: metallb-system"]: Creation complete after 3s [id=/apis/rbac.authorization.k8s.io/v1/clusterrolebindings/metallb-system:controller] [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n labels:\n app: metallb\n name: metallb-system:controller\nrules:\n- apiGroups:\n - ''\n resources:\n - services\n verbs:\n - get\n - list\n - watch\n- apiGroups:\n - ''\n resources:\n - services/status\n verbs:\n - update\n- apiGroups:\n - ''\n resources:\n - events\n verbs:\n - create\n - patch\n- apiGroups:\n - policy\n resourceNames:\n - controller\n resources:\n - podsecuritypolicies\n verbs:\n - use"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: apps/v1\nkind: Deployment\nmetadata:\n labels:\n app: metallb\n component: controller\n name: controller\n namespace: metallb-system\nspec:\n revisionHistoryLimit: 3\n selector:\n matchLabels:\n app: metallb\n component: controller\n template:\n metadata:\n annotations:\n prometheus.io/port: '7472'\n prometheus.io/scrape: 'true'\n labels:\n app: metallb\n component: controller\n spec:\n containers:\n - args:\n - --port=7472\n - --config=config\n - --log-level=info\n env:\n - name: METALLB_ML_SECRET_NAME\n value: memberlist\n - name: METALLB_DEPLOYMENT\n value: controller\n image: quay.io/metallb/controller:v0.12.1\n name: controller\n ports:\n - containerPort: 7472\n name: monitoring\n livenessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n readinessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n securityContext:\n allowPrivilegeEscalation: false\n capabilities:\n drop:\n - all\n readOnlyRootFilesystem: true\n nodeSelector:\n kubernetes.io/os: linux\n securityContext:\n runAsNonRoot: true\n runAsUser: 65534\n fsGroup: 65534\n serviceAccountName: controller\n terminationGracePeriodSeconds: 0"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n labels:\n app: metallb\n name: controller\n namespace: metallb-system\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: controller\nsubjects:\n- kind: ServiceAccount\n name: controller"]: Creation complete after 3s [id=/apis/rbac.authorization.k8s.io/v1/namespaces/metallb-system/rolebindings/controller] [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n labels:\n app: metallb\n name: config-watcher\n namespace: metallb-system\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: config-watcher\nsubjects:\n- kind: ServiceAccount\n name: controller\n- kind: ServiceAccount\n name: speaker"]: Creation complete after 0s [id=/apis/rbac.authorization.k8s.io/v1/namespaces/metallb-system/rolebindings/config-watcher] [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n labels:\n app: metallb\n name: pod-lister\n namespace: metallb-system\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: pod-lister\nsubjects:\n- kind: ServiceAccount\n name: speaker"]: Creation complete after 3s [id=/apis/rbac.authorization.k8s.io/v1/namespaces/metallb-system/rolebindings/pod-lister] [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRoleBinding\nmetadata:\n labels:\n app: metallb\n name: metallb-system:speaker\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: metallb-system:speaker\nsubjects:\n- kind: ServiceAccount\n name: speaker\n namespace: metallb-system"]: Creation complete after 0s [id=/apis/rbac.authorization.k8s.io/v1/clusterrolebindings/metallb-system:speaker] [terraform]: kubectl_manifest.metallb["apiVersion: apps/v1\nkind: DaemonSet\nmetadata:\n labels:\n app: metallb\n component: speaker\n name: speaker\n namespace: metallb-system\nspec:\n selector:\n matchLabels:\n app: metallb\n component: speaker\n template:\n metadata:\n annotations:\n prometheus.io/port: '7472'\n prometheus.io/scrape: 'true'\n labels:\n app: metallb\n component: speaker\n spec:\n containers:\n - args:\n - --port=7472\n - --config=config\n - --log-level=info\n env:\n - name: METALLB_NODE_NAME\n valueFrom:\n fieldRef:\n fieldPath: spec.nodeName\n - name: METALLB_HOST\n valueFrom:\n fieldRef:\n fieldPath: status.hostIP\n - name: METALLB_ML_BIND_ADDR\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n # needed when another software is also using memberlist / port 7946\n # when changing this default you also need to update the container ports definition\n # and the PodSecurityPolicy hostPorts definition\n #- name: METALLB_ML_BIND_PORT\n # value: \"7946\"\n - name: METALLB_ML_LABELS\n value: \"app=metallb,component=speaker\"\n - name: METALLB_ML_SECRET_KEY\n valueFrom:\n secretKeyRef:\n name: memberlist\n key: secretkey\n image: quay.io/metallb/speaker:v0.12.1\n name: speaker\n ports:\n - containerPort: 7472\n name: monitoring\n - containerPort: 7946\n name: memberlist-tcp\n - containerPort: 7946\n name: memberlist-udp\n protocol: UDP\n livenessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n readinessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n securityContext:\n allowPrivilegeEscalation: false\n capabilities:\n add:\n - NET_RAW\n drop:\n - ALL\n readOnlyRootFilesystem: true\n hostNetwork: true\n nodeSelector:\n kubernetes.io/os: linux\n serviceAccountName: speaker\n terminationGracePeriodSeconds: 2\n tolerations:\n - effect: NoSchedule\n key: node-role.kubernetes.io/master\n operator: Exists"]: Creating... [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n labels:\n app: metallb\n name: metallb-system:controller\nrules:\n- apiGroups:\n - ''\n resources:\n - services\n verbs:\n - get\n - list\n - watch\n- apiGroups:\n - ''\n resources:\n - services/status\n verbs:\n - update\n- apiGroups:\n - ''\n resources:\n - events\n verbs:\n - create\n - patch\n- apiGroups:\n - policy\n resourceNames:\n - controller\n resources:\n - podsecuritypolicies\n verbs:\n - use"]: Creation complete after 0s [id=/apis/rbac.authorization.k8s.io/v1/clusterroles/metallb-system:controller] [terraform]: kubectl_manifest.metallb["apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n labels:\n app: metallb\n name: controller\n namespace: metallb-system\nrules:\n- apiGroups:\n - ''\n resources:\n - secrets\n verbs:\n - create\n- apiGroups:\n - ''\n resources:\n - secrets\n resourceNames:\n - memberlist\n verbs:\n - list\n- apiGroups:\n - apps\n resources:\n - deployments\n resourceNames:\n - controller\n verbs:\n - get"]: Creation complete after 0s [id=/apis/rbac.authorization.k8s.io/v1/namespaces/metallb-system/roles/controller] [terraform]: kubectl_manifest.metallb["apiVersion: apps/v1\nkind: DaemonSet\nmetadata:\n labels:\n app: metallb\n component: speaker\n name: speaker\n namespace: metallb-system\nspec:\n selector:\n matchLabels:\n app: metallb\n component: speaker\n template:\n metadata:\n annotations:\n prometheus.io/port: '7472'\n prometheus.io/scrape: 'true'\n labels:\n app: metallb\n component: speaker\n spec:\n containers:\n - args:\n - --port=7472\n - --config=config\n - --log-level=info\n env:\n - name: METALLB_NODE_NAME\n valueFrom:\n fieldRef:\n fieldPath: spec.nodeName\n - name: METALLB_HOST\n valueFrom:\n fieldRef:\n fieldPath: status.hostIP\n - name: METALLB_ML_BIND_ADDR\n valueFrom:\n fieldRef:\n fieldPath: status.podIP\n # needed when another software is also using memberlist / port 7946\n # when changing this default you also need to update the container ports definition\n # and the PodSecurityPolicy hostPorts definition\n #- name: METALLB_ML_BIND_PORT\n # value: \"7946\"\n - name: METALLB_ML_LABELS\n value: \"app=metallb,component=speaker\"\n - name: METALLB_ML_SECRET_KEY\n valueFrom:\n secretKeyRef:\n name: memberlist\n key: secretkey\n image: quay.io/metallb/speaker:v0.12.1\n name: speaker\n ports:\n - containerPort: 7472\n name: monitoring\n - containerPort: 7946\n name: memberlist-tcp\n - containerPort: 7946\n name: memberlist-udp\n protocol: UDP\n livenessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n readinessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n securityContext:\n allowPrivilegeEscalation: false\n capabilities:\n add:\n - NET_RAW\n drop:\n - ALL\n readOnlyRootFilesystem: true\n hostNetwork: true\n nodeSelector:\n kubernetes.io/os: linux\n serviceAccountName: speaker\n terminationGracePeriodSeconds: 2\n tolerations:\n - effect: NoSchedule\n key: node-role.kubernetes.io/master\n operator: Exists"]: Creation complete after 0s [id=/apis/apps/v1/namespaces/metallb-system/daemonsets/speaker] [terraform]: kubectl_manifest.metallb["apiVersion: apps/v1\nkind: Deployment\nmetadata:\n labels:\n app: metallb\n component: controller\n name: controller\n namespace: metallb-system\nspec:\n revisionHistoryLimit: 3\n selector:\n matchLabels:\n app: metallb\n component: controller\n template:\n metadata:\n annotations:\n prometheus.io/port: '7472'\n prometheus.io/scrape: 'true'\n labels:\n app: metallb\n component: controller\n spec:\n containers:\n - args:\n - --port=7472\n - --config=config\n - --log-level=info\n env:\n - name: METALLB_ML_SECRET_NAME\n value: memberlist\n - name: METALLB_DEPLOYMENT\n value: controller\n image: quay.io/metallb/controller:v0.12.1\n name: controller\n ports:\n - containerPort: 7472\n name: monitoring\n livenessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n readinessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n securityContext:\n allowPrivilegeEscalation: false\n capabilities:\n drop:\n - all\n readOnlyRootFilesystem: true\n nodeSelector:\n kubernetes.io/os: linux\n securityContext:\n runAsNonRoot: true\n runAsUser: 65534\n fsGroup: 65534\n serviceAccountName: controller\n terminationGracePeriodSeconds: 0"]: Still creating... [10s elapsed] [terraform]: kubectl_manifest.metallb["apiVersion: apps/v1\nkind: Deployment\nmetadata:\n labels:\n app: metallb\n component: controller\n name: controller\n namespace: metallb-system\nspec:\n revisionHistoryLimit: 3\n selector:\n matchLabels:\n app: metallb\n component: controller\n template:\n metadata:\n annotations:\n prometheus.io/port: '7472'\n prometheus.io/scrape: 'true'\n labels:\n app: metallb\n component: controller\n spec:\n containers:\n - args:\n - --port=7472\n - --config=config\n - --log-level=info\n env:\n - name: METALLB_ML_SECRET_NAME\n value: memberlist\n - name: METALLB_DEPLOYMENT\n value: controller\n image: quay.io/metallb/controller:v0.12.1\n name: controller\n ports:\n - containerPort: 7472\n name: monitoring\n livenessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n readinessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n securityContext:\n allowPrivilegeEscalation: false\n capabilities:\n drop:\n - all\n readOnlyRootFilesystem: true\n nodeSelector:\n kubernetes.io/os: linux\n securityContext:\n runAsNonRoot: true\n runAsUser: 65534\n fsGroup: 65534\n serviceAccountName: controller\n terminationGracePeriodSeconds: 0"]: Still creating... [20s elapsed] [terraform]: kubectl_manifest.metallb["apiVersion: apps/v1\nkind: Deployment\nmetadata:\n labels:\n app: metallb\n component: controller\n name: controller\n namespace: metallb-system\nspec:\n revisionHistoryLimit: 3\n selector:\n matchLabels:\n app: metallb\n component: controller\n template:\n metadata:\n annotations:\n prometheus.io/port: '7472'\n prometheus.io/scrape: 'true'\n labels:\n app: metallb\n component: controller\n spec:\n containers:\n - args:\n - --port=7472\n - --config=config\n - --log-level=info\n env:\n - name: METALLB_ML_SECRET_NAME\n value: memberlist\n - name: METALLB_DEPLOYMENT\n value: controller\n image: quay.io/metallb/controller:v0.12.1\n name: controller\n ports:\n - containerPort: 7472\n name: monitoring\n livenessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n readinessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n securityContext:\n allowPrivilegeEscalation: false\n capabilities:\n drop:\n - all\n readOnlyRootFilesystem: true\n nodeSelector:\n kubernetes.io/os: linux\n securityContext:\n runAsNonRoot: true\n runAsUser: 65534\n fsGroup: 65534\n serviceAccountName: controller\n terminationGracePeriodSeconds: 0"]: Still creating... [30s elapsed] [terraform]: kubectl_manifest.metallb["apiVersion: apps/v1\nkind: Deployment\nmetadata:\n labels:\n app: metallb\n component: controller\n name: controller\n namespace: metallb-system\nspec:\n revisionHistoryLimit: 3\n selector:\n matchLabels:\n app: metallb\n component: controller\n template:\n metadata:\n annotations:\n prometheus.io/port: '7472'\n prometheus.io/scrape: 'true'\n labels:\n app: metallb\n component: controller\n spec:\n containers:\n - args:\n - --port=7472\n - --config=config\n - --log-level=info\n env:\n - name: METALLB_ML_SECRET_NAME\n value: memberlist\n - name: METALLB_DEPLOYMENT\n value: controller\n image: quay.io/metallb/controller:v0.12.1\n name: controller\n ports:\n - containerPort: 7472\n name: monitoring\n livenessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n readinessProbe:\n httpGet:\n path: /metrics\n port: monitoring\n initialDelaySeconds: 10\n periodSeconds: 10\n timeoutSeconds: 1\n successThreshold: 1\n failureThreshold: 3\n securityContext:\n allowPrivilegeEscalation: false\n capabilities:\n drop:\n - all\n readOnlyRootFilesystem: true\n nodeSelector:\n kubernetes.io/os: linux\n securityContext:\n runAsNonRoot: true\n runAsUser: 65534\n fsGroup: 65534\n serviceAccountName: controller\n terminationGracePeriodSeconds: 0"]: Creation complete after 36s [id=/apis/apps/v1/namespaces/metallb-system/deployments/controller] [terraform]: kubectl_manifest.load-balancer: Creating... [terraform]: kubectl_manifest.load-balancer: Creation complete after 0s [id=/api/v1/namespaces/metallb-system/configmaps/config] [terraform]:  [terraform]: Apply complete! Resources: 20 added, 0 changed, 0 destroyed. [terraform]:  [terraform]: Outputs: [terraform]: [terraform]: kubeconfig_filename = "/tmp/NEBARI_KUBECONFIG" [terraform]: kubernetes_credentials = [terraform]: Upgrading modules... After stage directory=stages/02-infrastructure kubernetes cluster successfully provisioned [terraform]: - external-container-reg in modules/extcr [terraform]: - kubernetes-autoscaling in modules/cluster-autoscaler [terraform]: - kubernetes-initialization in modules/initialization [terraform]: - nvidia-driver-installer in modules/nvidia-installer [terraform]: - traefik-crds in modules/traefik_crds [terraform]: [terraform]: Initializing the backend... [terraform]: [terraform]: Initializing provider plugins... [terraform]: - Finding hashicorp/kubernetes versions matching "2.16.1"... [terraform]: - Finding hashicorp/helm versions matching "2.1.2"... [terraform]: - Installing hashicorp/kubernetes v2.16.1... [terraform]: - Installed hashicorp/kubernetes v2.16.1 (signed by HashiCorp) [terraform]: - Installing hashicorp/helm v2.1.2... [terraform]: - Installed hashicorp/helm v2.1.2 (signed by HashiCorp) [terraform]: [terraform]: Terraform has created a lock file .terraform.lock.hcl to record the provider [terraform]: selections it made above. Include this file in your version control repository [terraform]: so that Terraform can guarantee to make the same selections by default when [terraform]: you run "terraform init" in the future. [terraform]: [terraform]: Terraform has been successfully initialized! [terraform]:  [terraform]: You may now begin working with Terraform. Try running "terraform plan" to see [terraform]: any changes that are required for your infrastructure. All Terraform commands [terraform]: should now work. [terraform]: [terraform]: If you ever set or change modules or backend configuration for Terraform, [terraform]: rerun this command to reinitialize your working directory. If you forget, other [terraform]: commands will detect it and remind you to do so if necessary. [terraform]: [terraform]: Terraform used the selected providers to generate the following execution [terraform]: plan. Resource actions are indicated with the following symbols: [terraform]: + create [terraform]:  [terraform]: Terraform will perform the following actions: [terraform]: [terraform]:  # module.kubernetes-initialization.kubernetes_namespace.main will be created [terraform]:  + resource "kubernetes_namespace" "main" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.traefik-crds.kubernetes_manifest.ingress_route will be created [terraform]:  + resource "kubernetes_manifest" "ingress_route" { [terraform]: + manifest = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + name = "ingressroutes.traefik.containo.us" [terraform]: } [terraform]: + spec = { [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + kind = "IngressRoute" [terraform]: + plural = "ingressroutes" [terraform]: + singular = "ingressroute" [terraform]: } [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + entryPoints = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + routes = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + kind = { [terraform]: + enum = [ [terraform]: + "Rule", [terraform]: ] [terraform]: + type = "string" [terraform]: } [terraform]: + match = { [terraform]: + type = "string" [terraform]: } [terraform]: + middlewares = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "namespace", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + priority = { [terraform]: + type = "integer" [terraform]: } [terraform]: + services = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + kind = { [terraform]: + enum = [ [terraform]: + "Service", [terraform]: + "TraefikService", [terraform]: ] [terraform]: + type = "string" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + passHostHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + port = { [terraform]: + pattern = "^[1-9]\\d*$" [terraform]: + x-kubernetes-int-or-string = true [terraform]: } [terraform]: + responseForwarding = { [terraform]: + properties = { [terraform]: + flushInterval = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + scheme = { [terraform]: + enum = [ [terraform]: + "http", [terraform]: + "https", [terraform]: + "h2c", [terraform]: ] [terraform]: + type = "string" [terraform]: } [terraform]: + sticky = { [terraform]: + properties = { [terraform]: + cookie = { [terraform]: + properties = { [terraform]: + httpOnly = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + sameSite = { [terraform]: + enum = [ [terraform]: + "None", [terraform]: + "Lax", [terraform]: + "Strict", [terraform]: ] [terraform]: + type = "string" [terraform]: } [terraform]: + secure = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + strategy = { [terraform]: + enum = [ [terraform]: + "RoundRobin", [terraform]: ] [terraform]: + type = "string" [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "port", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "match", [terraform]: + "kind", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + tls = { [terraform]: + properties = { [terraform]: + certResolver = { [terraform]: + type = "string" [terraform]: } [terraform]: + domains = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + main = { [terraform]: + type = "string" [terraform]: } [terraform]: + sans = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + options = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "namespace", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + secretName = { [terraform]: + type = "string" [terraform]: } [terraform]: + store = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "namespace", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "ingressroutes.traefik.containo.us" [terraform]: + namespace = (known after apply) [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + conversion = { [terraform]: + strategy = (known after apply) [terraform]: + webhook = { [terraform]: + clientConfig = { [terraform]: + caBundle = (known after apply) [terraform]: + service = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + path = (known after apply) [terraform]: + port = (known after apply) [terraform]: } [terraform]: + url = (known after apply) [terraform]: } [terraform]: + conversionReviewVersions = (known after apply) [terraform]: } [terraform]: } [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + categories = (known after apply) [terraform]: + kind = "IngressRoute" [terraform]: + listKind = (known after apply) [terraform]: + plural = "ingressroutes" [terraform]: + shortNames = (known after apply) [terraform]: + singular = "ingressroute" [terraform]: } [terraform]: + preserveUnknownFields = (known after apply) [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + additionalPrinterColumns = (known after apply) [terraform]: + deprecated = (known after apply) [terraform]: + deprecationWarning = (known after apply) [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + entryPoints = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + routes = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + kind = { [terraform]: + enum = [ [terraform]: + "Rule", [terraform]: ] [terraform]: + type = "string" [terraform]: } [terraform]: + match = { [terraform]: + type = "string" [terraform]: } [terraform]: + middlewares = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "namespace", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + priority = { [terraform]: + type = "integer" [terraform]: } [terraform]: + services = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + kind = { [terraform]: + enum = [ [terraform]: + "Service", [terraform]: + "TraefikService", [terraform]: ] [terraform]: + type = "string" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + passHostHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + port = { [terraform]: + pattern = "^[1-9]\\d*$" [terraform]: + x-kubernetes-int-or-string = true [terraform]: } [terraform]: + responseForwarding = { [terraform]: + properties = { [terraform]: + flushInterval = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + scheme = { [terraform]: + enum = [ [terraform]: + "http", [terraform]: + "https", [terraform]: + "h2c", [terraform]: ] [terraform]: + type = "string" [terraform]: } [terraform]: + sticky = { [terraform]: + properties = { [terraform]: + cookie = { [terraform]: + properties = { [terraform]: + httpOnly = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + sameSite = { [terraform]: + enum = [ [terraform]: + "None", [terraform]: + "Lax", [terraform]: + "Strict", [terraform]: ] [terraform]: + type = "string" [terraform]: } [terraform]: + secure = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + strategy = { [terraform]: + enum = [ [terraform]: + "RoundRobin", [terraform]: ] [terraform]: + type = "string" [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "port", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "match", [terraform]: + "kind", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + tls = { [terraform]: + properties = { [terraform]: + certResolver = { [terraform]: + type = "string" [terraform]: } [terraform]: + domains = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + main = { [terraform]: + type = "string" [terraform]: } [terraform]: + sans = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + options = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "namespace", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + secretName = { [terraform]: + type = "string" [terraform]: } [terraform]: + store = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "namespace", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: + subresources = { [terraform]: + scale = { [terraform]: + labelSelectorPath = (known after apply) [terraform]: + specReplicasPath = (known after apply) [terraform]: + statusReplicasPath = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.traefik-crds.kubernetes_manifest.ingress_route_tcp will be created [terraform]:  + resource "kubernetes_manifest" "ingress_route_tcp" { [terraform]: + manifest = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + name = "ingressroutetcps.traefik.containo.us" [terraform]: } [terraform]: + spec = { [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + kind = "IngressRouteTCP" [terraform]: + plural = "ingressroutetcps" [terraform]: + singular = "ingressroutetcp" [terraform]: } [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + entryPoints = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + routes = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + match = { [terraform]: + type = "string" [terraform]: } [terraform]: + services = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + port = { [terraform]: + pattern = "^[1-9]\\d*$" [terraform]: + x-kubernetes-int-or-string = true [terraform]: } [terraform]: + proxyProtocol = { [terraform]: + properties = { [terraform]: + version = { [terraform]: + maximum = 2 [terraform]: + minimum = 1 [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "version", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + terminationDelay = { [terraform]: + type = "integer" [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "port", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + tls = { [terraform]: + properties = { [terraform]: + certResolver = { [terraform]: + type = "string" [terraform]: } [terraform]: + domains = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + main = { [terraform]: + type = "string" [terraform]: } [terraform]: + sans = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "main", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + options = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "namespace", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + passthrough = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + secretName = { [terraform]: + type = "string" [terraform]: } [terraform]: + store = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "namespace", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "ingressroutetcps.traefik.containo.us" [terraform]: + namespace = (known after apply) [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + conversion = { [terraform]: + strategy = (known after apply) [terraform]: + webhook = { [terraform]: + clientConfig = { [terraform]: + caBundle = (known after apply) [terraform]: + service = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + path = (known after apply) [terraform]: + port = (known after apply) [terraform]: } [terraform]: + url = (known after apply) [terraform]: } [terraform]: + conversionReviewVersions = (known after apply) [terraform]: } [terraform]: } [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + categories = (known after apply) [terraform]: + kind = "IngressRouteTCP" [terraform]: + listKind = (known after apply) [terraform]: + plural = "ingressroutetcps" [terraform]: + shortNames = (known after apply) [terraform]: + singular = "ingressroutetcp" [terraform]: } [terraform]: + preserveUnknownFields = (known after apply) [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + additionalPrinterColumns = (known after apply) [terraform]: + deprecated = (known after apply) [terraform]: + deprecationWarning = (known after apply) [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + entryPoints = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + routes = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + match = { [terraform]: + type = "string" [terraform]: } [terraform]: + services = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + port = { [terraform]: + pattern = "^[1-9]\\d*$" [terraform]: + x-kubernetes-int-or-string = true [terraform]: } [terraform]: + proxyProtocol = { [terraform]: + properties = { [terraform]: + version = { [terraform]: + maximum = 2 [terraform]: + minimum = 1 [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "version", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + terminationDelay = { [terraform]: + type = "integer" [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "port", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + tls = { [terraform]: + properties = { [terraform]: + certResolver = { [terraform]: + type = "string" [terraform]: } [terraform]: + domains = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + main = { [terraform]: + type = "string" [terraform]: } [terraform]: + sans = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "main", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + options = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "namespace", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + passthrough = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + secretName = { [terraform]: + type = "string" [terraform]: } [terraform]: + store = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "namespace", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: + subresources = { [terraform]: + scale = { [terraform]: + labelSelectorPath = (known after apply) [terraform]: + specReplicasPath = (known after apply) [terraform]: + statusReplicasPath = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.traefik-crds.kubernetes_manifest.ingress_route_udp will be created [terraform]:  + resource "kubernetes_manifest" "ingress_route_udp" { [terraform]: + manifest = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + name = "ingressrouteudps.traefik.containo.us" [terraform]: } [terraform]: + spec = { [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + kind = "IngressRouteUDP" [terraform]: + plural = "ingressrouteudps" [terraform]: + singular = "ingressrouteudp" [terraform]: } [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + entryPoints = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + routes = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + services = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + port = { [terraform]: + pattern = "^[1-9]\\d*$" [terraform]: + x-kubernetes-int-or-string = true [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "ingressrouteudps.traefik.containo.us" [terraform]: + namespace = (known after apply) [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + conversion = { [terraform]: + strategy = (known after apply) [terraform]: + webhook = { [terraform]: + clientConfig = { [terraform]: + caBundle = (known after apply) [terraform]: + service = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + path = (known after apply) [terraform]: + port = (known after apply) [terraform]: } [terraform]: + url = (known after apply) [terraform]: } [terraform]: + conversionReviewVersions = (known after apply) [terraform]: } [terraform]: } [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + categories = (known after apply) [terraform]: + kind = "IngressRouteUDP" [terraform]: + listKind = (known after apply) [terraform]: + plural = "ingressrouteudps" [terraform]: + shortNames = (known after apply) [terraform]: + singular = "ingressrouteudp" [terraform]: } [terraform]: + preserveUnknownFields = (known after apply) [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + additionalPrinterColumns = (known after apply) [terraform]: + deprecated = (known after apply) [terraform]: + deprecationWarning = (known after apply) [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + entryPoints = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + routes = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + services = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + port = { [terraform]: + pattern = "^[1-9]\\d*$" [terraform]: + x-kubernetes-int-or-string = true [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: + subresources = { [terraform]: + scale = { [terraform]: + labelSelectorPath = (known after apply) [terraform]: + specReplicasPath = (known after apply) [terraform]: + statusReplicasPath = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.traefik-crds.kubernetes_manifest.middleware will be created [terraform]:  + resource "kubernetes_manifest" "middleware" { [terraform]: + manifest = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + name = "middlewares.traefik.containo.us" [terraform]: } [terraform]: + spec = { [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + kind = "Middleware" [terraform]: + plural = "middlewares" [terraform]: + singular = "middleware" [terraform]: } [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + addPrefix = { [terraform]: + properties = { [terraform]: + prefix = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + basicAuth = { [terraform]: + properties = { [terraform]: + headerField = { [terraform]: + type = "string" [terraform]: } [terraform]: + realm = { [terraform]: + type = "string" [terraform]: } [terraform]: + removeHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + secret = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + buffering = { [terraform]: + properties = { [terraform]: + maxRequestBodyBytes = { [terraform]: + type = "integer" [terraform]: } [terraform]: + maxResponseBodyBytes = { [terraform]: + type = "integer" [terraform]: } [terraform]: + memRequestBodyBytes = { [terraform]: + type = "integer" [terraform]: } [terraform]: + memResponseBodyBytes = { [terraform]: + type = "integer" [terraform]: } [terraform]: + retryExpression = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + chain = { [terraform]: + properties = { [terraform]: + middlewares = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "namespace", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + circuitBreaker = { [terraform]: + properties = { [terraform]: + expression = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + compress = { [terraform]: + properties = { [terraform]: + excludedContentTypes = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + contentType = { [terraform]: + properties = { [terraform]: + autoDetect = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + digestAuth = { [terraform]: + properties = { [terraform]: + headerField = { [terraform]: + type = "string" [terraform]: } [terraform]: + realm = { [terraform]: + type = "string" [terraform]: } [terraform]: + removeHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + secret = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + errors = { [terraform]: + properties = { [terraform]: + query = { [terraform]: + type = "string" [terraform]: } [terraform]: + service = { [terraform]: + properties = { [terraform]: + healthCheck = { [terraform]: + properties = { [terraform]: + headers = { [terraform]: + type = "object" [terraform]: } [terraform]: + host = { [terraform]: + type = "string" [terraform]: } [terraform]: + intervalSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: + path = { [terraform]: + type = "string" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + timeoutSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + kind = { [terraform]: + type = "string" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + passHostHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + port = { [terraform]: + type = "integer" [terraform]: } [terraform]: + responseForwarding = { [terraform]: + properties = { [terraform]: + flushInterval = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + sticky = { [terraform]: + properties = { [terraform]: + cookie = { [terraform]: + properties = { [terraform]: + httpOnly = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + secure = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + strategy = { [terraform]: + type = "string" [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + status = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + forwardAuth = { [terraform]: + properties = { [terraform]: + address = { [terraform]: + type = "string" [terraform]: } [terraform]: + authResponseHeaders = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + tls = { [terraform]: + properties = { [terraform]: + caOptional = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + caSecret = { [terraform]: + type = "string" [terraform]: } [terraform]: + certSecret = { [terraform]: + type = "string" [terraform]: } [terraform]: + insecureSkipVerify = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + trustForwardHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + headers = { [terraform]: + properties = { [terraform]: + accessControlAllowCredentials = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + accessControlAllowHeaders = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + accessControlAllowMethods = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + accessControlAllowOrigin = { [terraform]: + type = "string" [terraform]: } [terraform]: + accessControlAllowOriginList = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + accessControlExposeHeaders = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + accessControlMaxAge = { [terraform]: + type = "integer" [terraform]: } [terraform]: + addVaryHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + allowedHosts = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + browserXssFilter = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + contentSecurityPolicy = { [terraform]: + type = "string" [terraform]: } [terraform]: + contentTypeNosniff = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + customBrowserXSSValue = { [terraform]: + type = "string" [terraform]: } [terraform]: + customFrameOptionsValue = { [terraform]: + type = "string" [terraform]: } [terraform]: + customRequestHeaders = { [terraform]: + additionalProperties = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + customResponseHeaders = { [terraform]: + additionalProperties = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + featurePolicy = { [terraform]: + type = "string" [terraform]: } [terraform]: + forceSTSheader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + frameDeny = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + hostsProxyHeaders = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + isDevelopment = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + publicKey = { [terraform]: + type = "string" [terraform]: } [terraform]: + referrerPolicy = { [terraform]: + type = "string" [terraform]: } [terraform]: + sslForceHost = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + sslHost = { [terraform]: + type = "string" [terraform]: } [terraform]: + sslProxyHeaders = { [terraform]: + additionalProperties = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + sslRedirect = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + sslTemporaryRedirect = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + stsIncludeSubdomains = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + stsPreload = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + stsSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + inFlightReq = { [terraform]: + properties = { [terraform]: + amount = { [terraform]: + type = "integer" [terraform]: } [terraform]: + sourceCriterion = { [terraform]: + properties = { [terraform]: + ipStrategy = { [terraform]: + properties = { [terraform]: + depth = { [terraform]: + type = "integer" [terraform]: } [terraform]: + excludedIPs = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + requestHeaderName = { [terraform]: + type = "string" [terraform]: } [terraform]: + requestHost = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + ipWhiteList = { [terraform]: + properties = { [terraform]: + ipStrategy = { [terraform]: + properties = { [terraform]: + depth = { [terraform]: + type = "integer" [terraform]: } [terraform]: + excludedIPs = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + sourceRange = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + passTLSClientCert = { [terraform]: + properties = { [terraform]: + info = { [terraform]: + properties = { [terraform]: + issuer = { [terraform]: + properties = { [terraform]: + commonName = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + country = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + domainComponent = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + locality = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + organization = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + province = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + serialNumber = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + notAfter = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + notBefore = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + sans = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + serialNumber = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + subject = { [terraform]: + properties = { [terraform]: + commonName = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + country = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + domainComponent = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + locality = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + organization = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + province = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + serialNumber = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + pem = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + rateLimit = { [terraform]: + properties = { [terraform]: + average = { [terraform]: + type = "integer" [terraform]: } [terraform]: + burst = { [terraform]: + type = "integer" [terraform]: } [terraform]: + sourceCriterion = { [terraform]: + properties = { [terraform]: + ipStrategy = { [terraform]: + properties = { [terraform]: + depth = { [terraform]: + type = "integer" [terraform]: } [terraform]: + excludedIPs = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + requestHeaderName = { [terraform]: + type = "string" [terraform]: } [terraform]: + requestHost = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + redirectRegex = { [terraform]: + properties = { [terraform]: + permanent = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + regex = { [terraform]: + type = "string" [terraform]: } [terraform]: + replacement = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + redirectScheme = { [terraform]: + properties = { [terraform]: + permanent = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + port = { [terraform]: + type = "string" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + replacePath = { [terraform]: + properties = { [terraform]: + path = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + replacePathRegex = { [terraform]: + properties = { [terraform]: + regex = { [terraform]: + type = "string" [terraform]: } [terraform]: + replacement = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + retry = { [terraform]: + properties = { [terraform]: + attempts = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + stripPrefix = { [terraform]: + properties = { [terraform]: + forceSlash = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + prefixes = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + stripPrefixRegex = { [terraform]: + properties = { [terraform]: + regex = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "middlewares.traefik.containo.us" [terraform]: + namespace = (known after apply) [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + conversion = { [terraform]: + strategy = (known after apply) [terraform]: + webhook = { [terraform]: + clientConfig = { [terraform]: + caBundle = (known after apply) [terraform]: + service = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + path = (known after apply) [terraform]: + port = (known after apply) [terraform]: } [terraform]: + url = (known after apply) [terraform]: } [terraform]: + conversionReviewVersions = (known after apply) [terraform]: } [terraform]: } [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + categories = (known after apply) [terraform]: + kind = "Middleware" [terraform]: + listKind = (known after apply) [terraform]: + plural = "middlewares" [terraform]: + shortNames = (known after apply) [terraform]: + singular = "middleware" [terraform]: } [terraform]: + preserveUnknownFields = (known after apply) [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + additionalPrinterColumns = (known after apply) [terraform]: + deprecated = (known after apply) [terraform]: + deprecationWarning = (known after apply) [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + addPrefix = { [terraform]: + properties = { [terraform]: + prefix = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + basicAuth = { [terraform]: + properties = { [terraform]: + headerField = { [terraform]: + type = "string" [terraform]: } [terraform]: + realm = { [terraform]: + type = "string" [terraform]: } [terraform]: + removeHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + secret = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + buffering = { [terraform]: + properties = { [terraform]: + maxRequestBodyBytes = { [terraform]: + type = "integer" [terraform]: } [terraform]: + maxResponseBodyBytes = { [terraform]: + type = "integer" [terraform]: } [terraform]: + memRequestBodyBytes = { [terraform]: + type = "integer" [terraform]: } [terraform]: + memResponseBodyBytes = { [terraform]: + type = "integer" [terraform]: } [terraform]: + retryExpression = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + chain = { [terraform]: + properties = { [terraform]: + middlewares = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + required = [ [terraform]: + "name", [terraform]: + "namespace", [terraform]: ] [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + circuitBreaker = { [terraform]: + properties = { [terraform]: + expression = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + compress = { [terraform]: + properties = { [terraform]: + excludedContentTypes = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + contentType = { [terraform]: + properties = { [terraform]: + autoDetect = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + digestAuth = { [terraform]: + properties = { [terraform]: + headerField = { [terraform]: + type = "string" [terraform]: } [terraform]: + realm = { [terraform]: + type = "string" [terraform]: } [terraform]: + removeHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + secret = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + errors = { [terraform]: + properties = { [terraform]: + query = { [terraform]: + type = "string" [terraform]: } [terraform]: + service = { [terraform]: + properties = { [terraform]: + healthCheck = { [terraform]: + properties = { [terraform]: + headers = { [terraform]: + type = "object" [terraform]: } [terraform]: + host = { [terraform]: + type = "string" [terraform]: } [terraform]: + intervalSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: + path = { [terraform]: + type = "string" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + timeoutSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + kind = { [terraform]: + type = "string" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + passHostHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + port = { [terraform]: + type = "integer" [terraform]: } [terraform]: + responseForwarding = { [terraform]: + properties = { [terraform]: + flushInterval = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + sticky = { [terraform]: + properties = { [terraform]: + cookie = { [terraform]: + properties = { [terraform]: + httpOnly = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + secure = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + strategy = { [terraform]: + type = "string" [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + status = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + forwardAuth = { [terraform]: + properties = { [terraform]: + address = { [terraform]: + type = "string" [terraform]: } [terraform]: + authResponseHeaders = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + tls = { [terraform]: + properties = { [terraform]: + caOptional = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + caSecret = { [terraform]: + type = "string" [terraform]: } [terraform]: + certSecret = { [terraform]: + type = "string" [terraform]: } [terraform]: + insecureSkipVerify = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + trustForwardHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + headers = { [terraform]: + properties = { [terraform]: + accessControlAllowCredentials = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + accessControlAllowHeaders = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + accessControlAllowMethods = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + accessControlAllowOrigin = { [terraform]: + type = "string" [terraform]: } [terraform]: + accessControlAllowOriginList = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + accessControlExposeHeaders = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + accessControlMaxAge = { [terraform]: + type = "integer" [terraform]: } [terraform]: + addVaryHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + allowedHosts = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + browserXssFilter = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + contentSecurityPolicy = { [terraform]: + type = "string" [terraform]: } [terraform]: + contentTypeNosniff = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + customBrowserXSSValue = { [terraform]: + type = "string" [terraform]: } [terraform]: + customFrameOptionsValue = { [terraform]: + type = "string" [terraform]: } [terraform]: + customRequestHeaders = { [terraform]: + additionalProperties = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + customResponseHeaders = { [terraform]: + additionalProperties = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + featurePolicy = { [terraform]: + type = "string" [terraform]: } [terraform]: + forceSTSheader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + frameDeny = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + hostsProxyHeaders = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + isDevelopment = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + publicKey = { [terraform]: + type = "string" [terraform]: } [terraform]: + referrerPolicy = { [terraform]: + type = "string" [terraform]: } [terraform]: + sslForceHost = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + sslHost = { [terraform]: + type = "string" [terraform]: } [terraform]: + sslProxyHeaders = { [terraform]: + additionalProperties = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + sslRedirect = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + sslTemporaryRedirect = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + stsIncludeSubdomains = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + stsPreload = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + stsSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + inFlightReq = { [terraform]: + properties = { [terraform]: + amount = { [terraform]: + type = "integer" [terraform]: } [terraform]: + sourceCriterion = { [terraform]: + properties = { [terraform]: + ipStrategy = { [terraform]: + properties = { [terraform]: + depth = { [terraform]: + type = "integer" [terraform]: } [terraform]: + excludedIPs = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + requestHeaderName = { [terraform]: + type = "string" [terraform]: } [terraform]: + requestHost = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + ipWhiteList = { [terraform]: + properties = { [terraform]: + ipStrategy = { [terraform]: + properties = { [terraform]: + depth = { [terraform]: + type = "integer" [terraform]: } [terraform]: + excludedIPs = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + sourceRange = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + passTLSClientCert = { [terraform]: + properties = { [terraform]: + info = { [terraform]: + properties = { [terraform]: + issuer = { [terraform]: + properties = { [terraform]: + commonName = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + country = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + domainComponent = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + locality = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + organization = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + province = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + serialNumber = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + notAfter = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + notBefore = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + sans = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + serialNumber = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + subject = { [terraform]: + properties = { [terraform]: + commonName = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + country = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + domainComponent = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + locality = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + organization = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + province = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + serialNumber = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + pem = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + rateLimit = { [terraform]: + properties = { [terraform]: + average = { [terraform]: + type = "integer" [terraform]: } [terraform]: + burst = { [terraform]: + type = "integer" [terraform]: } [terraform]: + sourceCriterion = { [terraform]: + properties = { [terraform]: + ipStrategy = { [terraform]: + properties = { [terraform]: + depth = { [terraform]: + type = "integer" [terraform]: } [terraform]: + excludedIPs = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + requestHeaderName = { [terraform]: + type = "string" [terraform]: } [terraform]: + requestHost = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + redirectRegex = { [terraform]: + properties = { [terraform]: + permanent = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + regex = { [terraform]: + type = "string" [terraform]: } [terraform]: + replacement = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + redirectScheme = { [terraform]: + properties = { [terraform]: + permanent = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + port = { [terraform]: + type = "string" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + replacePath = { [terraform]: + properties = { [terraform]: + path = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + replacePathRegex = { [terraform]: + properties = { [terraform]: + regex = { [terraform]: + type = "string" [terraform]: } [terraform]: + replacement = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + retry = { [terraform]: + properties = { [terraform]: + attempts = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + stripPrefix = { [terraform]: + properties = { [terraform]: + forceSlash = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + prefixes = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + stripPrefixRegex = { [terraform]: + properties = { [terraform]: + regex = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: + subresources = { [terraform]: + scale = { [terraform]: + labelSelectorPath = (known after apply) [terraform]: + specReplicasPath = (known after apply) [terraform]: + statusReplicasPath = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.traefik-crds.kubernetes_manifest.middlewaretcp will be created [terraform]:  + resource "kubernetes_manifest" "middlewaretcp" { [terraform]: + manifest = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + name = "middlewaretcps.traefik.containo.us" [terraform]: } [terraform]: + spec = { [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + kind = "MiddlewareTCP" [terraform]: + listKind = "MiddlewareTCPList" [terraform]: + plural = "middlewaretcps" [terraform]: + singular = "middlewaretcp" [terraform]: } [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + inFlightConn = { [terraform]: + properties = { [terraform]: + amount = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + ipWhiteList = { [terraform]: + properties = { [terraform]: + sourceRange = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "middlewaretcps.traefik.containo.us" [terraform]: + namespace = (known after apply) [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + conversion = { [terraform]: + strategy = (known after apply) [terraform]: + webhook = { [terraform]: + clientConfig = { [terraform]: + caBundle = (known after apply) [terraform]: + service = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + path = (known after apply) [terraform]: + port = (known after apply) [terraform]: } [terraform]: + url = (known after apply) [terraform]: } [terraform]: + conversionReviewVersions = (known after apply) [terraform]: } [terraform]: } [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + categories = (known after apply) [terraform]: + kind = "MiddlewareTCP" [terraform]: + listKind = "MiddlewareTCPList" [terraform]: + plural = "middlewaretcps" [terraform]: + shortNames = (known after apply) [terraform]: + singular = "middlewaretcp" [terraform]: } [terraform]: + preserveUnknownFields = (known after apply) [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + additionalPrinterColumns = (known after apply) [terraform]: + deprecated = (known after apply) [terraform]: + deprecationWarning = (known after apply) [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + inFlightConn = { [terraform]: + properties = { [terraform]: + amount = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + ipWhiteList = { [terraform]: + properties = { [terraform]: + sourceRange = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: + subresources = { [terraform]: + scale = { [terraform]: + labelSelectorPath = (known after apply) [terraform]: + specReplicasPath = (known after apply) [terraform]: + statusReplicasPath = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.traefik-crds.kubernetes_manifest.serverstransports will be created [terraform]:  + resource "kubernetes_manifest" "serverstransports" { [terraform]: + manifest = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + name = "serverstransports.traefik.containo.us" [terraform]: } [terraform]: + spec = { [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + kind = "ServersTransport" [terraform]: + plural = "serverstransports" [terraform]: + singular = "serverstransports" [terraform]: } [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + certificatesSecrets = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + forwardingTimeouts = { [terraform]: + properties = { [terraform]: + dialTimeout = { [terraform]: + pattern = "^[1-9](\\d+)?(ns|us|µs|μs|ms|s|m|h)?$" [terraform]: + x-kubernetes-int-or-string = true [terraform]: } [terraform]: + idleConnTimeout = { [terraform]: + pattern = "^[1-9](\\d+)?(ns|us|µs|μs|ms|s|m|h)?$" [terraform]: + x-kubernetes-int-or-string = true [terraform]: } [terraform]: + responseHeaderTimeout = { [terraform]: + pattern = "^[1-9](\\d+)?(ns|us|µs|μs|ms|s|m|h)?$" [terraform]: + x-kubernetes-int-or-string = true [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + insecureSkipVerify = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + maxIdleConnsPerHost = { [terraform]: + type = "integer" [terraform]: } [terraform]: + rootCAsSecrets = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + serverName = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "serverstransports.traefik.containo.us" [terraform]: + namespace = (known after apply) [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + conversion = { [terraform]: + strategy = (known after apply) [terraform]: + webhook = { [terraform]: + clientConfig = { [terraform]: + caBundle = (known after apply) [terraform]: + service = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + path = (known after apply) [terraform]: + port = (known after apply) [terraform]: } [terraform]: + url = (known after apply) [terraform]: } [terraform]: + conversionReviewVersions = (known after apply) [terraform]: } [terraform]: } [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + categories = (known after apply) [terraform]: + kind = "ServersTransport" [terraform]: + listKind = (known after apply) [terraform]: + plural = "serverstransports" [terraform]: + shortNames = (known after apply) [terraform]: + singular = "serverstransports" [terraform]: } [terraform]: + preserveUnknownFields = (known after apply) [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + additionalPrinterColumns = (known after apply) [terraform]: + deprecated = (known after apply) [terraform]: + deprecationWarning = (known after apply) [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + certificatesSecrets = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + forwardingTimeouts = { [terraform]: + properties = { [terraform]: + dialTimeout = { [terraform]: + pattern = "^[1-9](\\d+)?(ns|us|µs|μs|ms|s|m|h)?$" [terraform]: + x-kubernetes-int-or-string = true [terraform]: } [terraform]: + idleConnTimeout = { [terraform]: + pattern = "^[1-9](\\d+)?(ns|us|µs|μs|ms|s|m|h)?$" [terraform]: + x-kubernetes-int-or-string = true [terraform]: } [terraform]: + responseHeaderTimeout = { [terraform]: + pattern = "^[1-9](\\d+)?(ns|us|µs|μs|ms|s|m|h)?$" [terraform]: + x-kubernetes-int-or-string = true [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + insecureSkipVerify = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + maxIdleConnsPerHost = { [terraform]: + type = "integer" [terraform]: } [terraform]: + rootCAsSecrets = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + serverName = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: + subresources = { [terraform]: + scale = { [terraform]: + labelSelectorPath = (known after apply) [terraform]: + specReplicasPath = (known after apply) [terraform]: + statusReplicasPath = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.traefik-crds.kubernetes_manifest.tls_option will be created [terraform]:  + resource "kubernetes_manifest" "tls_option" { [terraform]: + manifest = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + name = "tlsoptions.traefik.containo.us" [terraform]: } [terraform]: + spec = { [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + kind = "TLSOption" [terraform]: + plural = "tlsoptions" [terraform]: + singular = "tlsoption" [terraform]: } [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + cipherSuites = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + clientAuth = { [terraform]: + properties = { [terraform]: + clientAuthType = { [terraform]: + enum = [ [terraform]: + "NoClientCert", [terraform]: + "RequestClientCert", [terraform]: + "VerifyClientCertIfGiven", [terraform]: + "RequireAndVerifyClientCert", [terraform]: ] [terraform]: + type = "string" [terraform]: } [terraform]: + preferServerCipherSuites = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + secretNames = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + sniStrict = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + curvePreferences = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + maxVersion = { [terraform]: + type = "string" [terraform]: } [terraform]: + minVersion = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "tlsoptions.traefik.containo.us" [terraform]: + namespace = (known after apply) [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + conversion = { [terraform]: + strategy = (known after apply) [terraform]: + webhook = { [terraform]: + clientConfig = { [terraform]: + caBundle = (known after apply) [terraform]: + service = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + path = (known after apply) [terraform]: + port = (known after apply) [terraform]: } [terraform]: + url = (known after apply) [terraform]: } [terraform]: + conversionReviewVersions = (known after apply) [terraform]: } [terraform]: } [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + categories = (known after apply) [terraform]: + kind = "TLSOption" [terraform]: + listKind = (known after apply) [terraform]: + plural = "tlsoptions" [terraform]: + shortNames = (known after apply) [terraform]: + singular = "tlsoption" [terraform]: } [terraform]: + preserveUnknownFields = (known after apply) [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + additionalPrinterColumns = (known after apply) [terraform]: + deprecated = (known after apply) [terraform]: + deprecationWarning = (known after apply) [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + cipherSuites = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + clientAuth = { [terraform]: + properties = { [terraform]: + clientAuthType = { [terraform]: + enum = [ [terraform]: + "NoClientCert", [terraform]: + "RequestClientCert", [terraform]: + "VerifyClientCertIfGiven", [terraform]: + "RequireAndVerifyClientCert", [terraform]: ] [terraform]: + type = "string" [terraform]: } [terraform]: + preferServerCipherSuites = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + secretNames = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + sniStrict = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + curvePreferences = { [terraform]: + items = { [terraform]: + type = "string" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + maxVersion = { [terraform]: + type = "string" [terraform]: } [terraform]: + minVersion = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: + subresources = { [terraform]: + scale = { [terraform]: + labelSelectorPath = (known after apply) [terraform]: + specReplicasPath = (known after apply) [terraform]: + statusReplicasPath = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.traefik-crds.kubernetes_manifest.tls_stores will be created [terraform]:  + resource "kubernetes_manifest" "tls_stores" { [terraform]: + manifest = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + name = "tlsstores.traefik.containo.us" [terraform]: } [terraform]: + spec = { [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + kind = "TLSStore" [terraform]: + plural = "tlsstores" [terraform]: + singular = "tlsstore" [terraform]: } [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + defaultCertificate = { [terraform]: + properties = { [terraform]: + secretName = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "tlsstores.traefik.containo.us" [terraform]: + namespace = (known after apply) [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + conversion = { [terraform]: + strategy = (known after apply) [terraform]: + webhook = { [terraform]: + clientConfig = { [terraform]: + caBundle = (known after apply) [terraform]: + service = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + path = (known after apply) [terraform]: + port = (known after apply) [terraform]: } [terraform]: + url = (known after apply) [terraform]: } [terraform]: + conversionReviewVersions = (known after apply) [terraform]: } [terraform]: } [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + categories = (known after apply) [terraform]: + kind = "TLSStore" [terraform]: + listKind = (known after apply) [terraform]: + plural = "tlsstores" [terraform]: + shortNames = (known after apply) [terraform]: + singular = "tlsstore" [terraform]: } [terraform]: + preserveUnknownFields = (known after apply) [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + additionalPrinterColumns = (known after apply) [terraform]: + deprecated = (known after apply) [terraform]: + deprecationWarning = (known after apply) [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + defaultCertificate = { [terraform]: + properties = { [terraform]: + secretName = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: + subresources = { [terraform]: + scale = { [terraform]: + labelSelectorPath = (known after apply) [terraform]: + specReplicasPath = (known after apply) [terraform]: + statusReplicasPath = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.traefik-crds.kubernetes_manifest.traefik_service will be created [terraform]:  + resource "kubernetes_manifest" "traefik_service" { [terraform]: + manifest = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + name = "traefikservices.traefik.containo.us" [terraform]: } [terraform]: + spec = { [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + kind = "TraefikService" [terraform]: + plural = "traefikservices" [terraform]: + singular = "traefikservice" [terraform]: } [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + mirroring = { [terraform]: + properties = { [terraform]: + healthCheck = { [terraform]: + properties = { [terraform]: + headers = { [terraform]: + type = "object" [terraform]: } [terraform]: + host = { [terraform]: + type = "string" [terraform]: } [terraform]: + intervalSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: + path = { [terraform]: + type = "string" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + timeoutSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + kind = { [terraform]: + type = "string" [terraform]: } [terraform]: + mirrors = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + healthCheck = { [terraform]: + properties = { [terraform]: + headers = { [terraform]: + type = "object" [terraform]: } [terraform]: + host = { [terraform]: + type = "string" [terraform]: } [terraform]: + intervalSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: + path = { [terraform]: + type = "string" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + timeoutSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + kind = { [terraform]: + type = "string" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + passHostHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + port = { [terraform]: + type = "integer" [terraform]: } [terraform]: + responseForwarding = { [terraform]: + properties = { [terraform]: + flushInterval = { [terraform]: + type = "string" [terraform]: } [terraform]: + percent = { [terraform]: + type = "integer" [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + sticky = { [terraform]: + properties = { [terraform]: + cookie = { [terraform]: + properties = { [terraform]: + httpOnly = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + secure = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + strategy = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + passHostHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + port = { [terraform]: + type = "integer" [terraform]: } [terraform]: + responseForwarding = { [terraform]: + properties = { [terraform]: + flushInterval = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + sticky = { [terraform]: + properties = { [terraform]: + cookie = { [terraform]: + properties = { [terraform]: + httpOnly = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + secure = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + strategy = { [terraform]: + type = "string" [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + weighted = { [terraform]: + properties = { [terraform]: + services = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + healthCheck = { [terraform]: + properties = { [terraform]: + headers = { [terraform]: + type = "object" [terraform]: } [terraform]: + host = { [terraform]: + type = "string" [terraform]: } [terraform]: + intervalSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: + path = { [terraform]: + type = "string" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + timeoutSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + kind = { [terraform]: + type = "string" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + passHostHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + port = { [terraform]: + type = "integer" [terraform]: } [terraform]: + responseForwarding = { [terraform]: + properties = { [terraform]: + flushInterval = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + sticky = { [terraform]: + properties = { [terraform]: + cookie = { [terraform]: + properties = { [terraform]: + httpOnly = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + secure = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + strategy = { [terraform]: + type = "string" [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + sticky = { [terraform]: + properties = { [terraform]: + cookie = { [terraform]: + properties = { [terraform]: + httpOnly = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + secure = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "traefikservices.traefik.containo.us" [terraform]: + namespace = (known after apply) [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + conversion = { [terraform]: + strategy = (known after apply) [terraform]: + webhook = { [terraform]: + clientConfig = { [terraform]: + caBundle = (known after apply) [terraform]: + service = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + path = (known after apply) [terraform]: + port = (known after apply) [terraform]: } [terraform]: + url = (known after apply) [terraform]: } [terraform]: + conversionReviewVersions = (known after apply) [terraform]: } [terraform]: } [terraform]: + group = "traefik.containo.us" [terraform]: + names = { [terraform]: + categories = (known after apply) [terraform]: + kind = "TraefikService" [terraform]: + listKind = (known after apply) [terraform]: + plural = "traefikservices" [terraform]: + shortNames = (known after apply) [terraform]: + singular = "traefikservice" [terraform]: } [terraform]: + preserveUnknownFields = (known after apply) [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + additionalPrinterColumns = (known after apply) [terraform]: + deprecated = (known after apply) [terraform]: + deprecationWarning = (known after apply) [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + properties = { [terraform]: + spec = { [terraform]: + properties = { [terraform]: + mirroring = { [terraform]: + properties = { [terraform]: + healthCheck = { [terraform]: + properties = { [terraform]: + headers = { [terraform]: + type = "object" [terraform]: } [terraform]: + host = { [terraform]: + type = "string" [terraform]: } [terraform]: + intervalSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: + path = { [terraform]: + type = "string" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + timeoutSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + kind = { [terraform]: + type = "string" [terraform]: } [terraform]: + mirrors = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + healthCheck = { [terraform]: + properties = { [terraform]: + headers = { [terraform]: + type = "object" [terraform]: } [terraform]: + host = { [terraform]: + type = "string" [terraform]: } [terraform]: + intervalSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: + path = { [terraform]: + type = "string" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + timeoutSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + kind = { [terraform]: + type = "string" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + passHostHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + port = { [terraform]: + type = "integer" [terraform]: } [terraform]: + responseForwarding = { [terraform]: + properties = { [terraform]: + flushInterval = { [terraform]: + type = "string" [terraform]: } [terraform]: + percent = { [terraform]: + type = "integer" [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + sticky = { [terraform]: + properties = { [terraform]: + cookie = { [terraform]: + properties = { [terraform]: + httpOnly = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + secure = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + strategy = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + passHostHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + port = { [terraform]: + type = "integer" [terraform]: } [terraform]: + responseForwarding = { [terraform]: + properties = { [terraform]: + flushInterval = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + sticky = { [terraform]: + properties = { [terraform]: + cookie = { [terraform]: + properties = { [terraform]: + httpOnly = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + secure = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + strategy = { [terraform]: + type = "string" [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + weighted = { [terraform]: + properties = { [terraform]: + services = { [terraform]: + items = { [terraform]: + properties = { [terraform]: + healthCheck = { [terraform]: + properties = { [terraform]: + headers = { [terraform]: + type = "object" [terraform]: } [terraform]: + host = { [terraform]: + type = "string" [terraform]: } [terraform]: + intervalSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: + path = { [terraform]: + type = "string" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + timeoutSeconds = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + kind = { [terraform]: + type = "string" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + namespace = { [terraform]: + type = "string" [terraform]: } [terraform]: + passHostHeader = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + port = { [terraform]: + type = "integer" [terraform]: } [terraform]: + responseForwarding = { [terraform]: + properties = { [terraform]: + flushInterval = { [terraform]: + type = "string" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + scheme = { [terraform]: + type = "string" [terraform]: } [terraform]: + sticky = { [terraform]: + properties = { [terraform]: + cookie = { [terraform]: + properties = { [terraform]: + httpOnly = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + secure = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + strategy = { [terraform]: + type = "string" [terraform]: } [terraform]: + weight = { [terraform]: + type = "integer" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: + type = "array" [terraform]: } [terraform]: + sticky = { [terraform]: + properties = { [terraform]: + cookie = { [terraform]: + properties = { [terraform]: + httpOnly = { [terraform]: + type = "boolean" [terraform]: } [terraform]: + name = { [terraform]: + type = "string" [terraform]: } [terraform]: + secure = { [terraform]: + type = "boolean" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + type = "object" [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: + subresources = { [terraform]: + scale = { [terraform]: + labelSelectorPath = (known after apply) [terraform]: + specReplicasPath = (known after apply) [terraform]: + statusReplicasPath = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: Plan: 10 to add, 0 to change, 0 to destroy. [terraform]: module.kubernetes-initialization.kubernetes_namespace.main: Creating... [terraform]: module.kubernetes-initialization.kubernetes_namespace.main: Creation complete after 0s [id=dev] [terraform]: module.traefik-crds.kubernetes_manifest.serverstransports: Creating... [terraform]: module.traefik-crds.kubernetes_manifest.tls_stores: Creating... [terraform]: module.traefik-crds.kubernetes_manifest.serverstransports: Creation complete after 1s [terraform]: module.traefik-crds.kubernetes_manifest.tls_option: Creating... [terraform]: module.traefik-crds.kubernetes_manifest.ingress_route_udp: Creating... [terraform]: module.traefik-crds.kubernetes_manifest.middlewaretcp: Creating... [terraform]: module.traefik-crds.kubernetes_manifest.ingress_route_tcp: Creating... [terraform]: module.traefik-crds.kubernetes_manifest.ingress_route: Creating... [terraform]: module.traefik-crds.kubernetes_manifest.middleware: Creating... [terraform]: module.traefik-crds.kubernetes_manifest.tls_stores: Creation complete after 4s [terraform]: module.traefik-crds.kubernetes_manifest.traefik_service: Creating... [terraform]: module.traefik-crds.kubernetes_manifest.tls_option: Creation complete after 9s [terraform]: module.traefik-crds.kubernetes_manifest.ingress_route_udp: Creation complete after 9s [terraform]: module.traefik-crds.kubernetes_manifest.middlewaretcp: Creation complete after 8s [terraform]: module.traefik-crds.kubernetes_manifest.ingress_route_tcp: Creation complete after 9s [terraform]: module.traefik-crds.kubernetes_manifest.ingress_route: Creation complete after 9s [terraform]: module.traefik-crds.kubernetes_manifest.middleware: Creation complete after 8s [terraform]: module.traefik-crds.kubernetes_manifest.traefik_service: Creation complete after 8s [terraform]:  [terraform]: Apply complete! Resources: 10 added, 0 changed, 0 destroyed. [terraform]: [terraform]: Upgrading modules... After stage directory=stages/03-kubernetes-initialize kubernetes initialized successfully [terraform]: - kubernetes-ingress in modules/kubernetes/ingress [terraform]: [terraform]: Initializing the backend... [terraform]: [terraform]: Initializing provider plugins... [terraform]: - Finding hashicorp/helm versions matching "2.1.2"... [terraform]: - Finding hashicorp/kubernetes versions matching "2.16.1"... [terraform]: - Installing hashicorp/helm v2.1.2... [terraform]: - Installed hashicorp/helm v2.1.2 (signed by HashiCorp) [terraform]: - Installing hashicorp/kubernetes v2.16.1... [terraform]: - Installed hashicorp/kubernetes v2.16.1 (signed by HashiCorp) [terraform]: [terraform]: Terraform has created a lock file .terraform.lock.hcl to record the provider [terraform]: selections it made above. Include this file in your version control repository [terraform]: so that Terraform can guarantee to make the same selections by default when [terraform]: you run "terraform init" in the future. [terraform]: [terraform]: Terraform has been successfully initialized! [terraform]:  [terraform]: You may now begin working with Terraform. Try running "terraform plan" to see [terraform]: any changes that are required for your infrastructure. All Terraform commands [terraform]: should now work. [terraform]: [terraform]: If you ever set or change modules or backend configuration for Terraform, [terraform]: rerun this command to reinitialize your working directory. If you forget, other [terraform]: commands will detect it and remind you to do so if necessary. [terraform]: [terraform]: Terraform used the selected providers to generate the following execution [terraform]: plan. Resource actions are indicated with the following symbols: [terraform]: + create [terraform]:  [terraform]: Terraform will perform the following actions: [terraform]: [terraform]:  # module.kubernetes-ingress.kubernetes_cluster_role.main will be created [terraform]:  + resource "kubernetes_cluster_role" "main" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-traefik-ingress" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + rule { [terraform]: + api_groups = [ [terraform]: + "", [terraform]: ] [terraform]: + resources = [ [terraform]: + "services", [terraform]: + "endpoints", [terraform]: + "secrets", [terraform]: ] [terraform]: + verbs = [ [terraform]: + "get", [terraform]: + "list", [terraform]: + "watch", [terraform]: ] [terraform]: } [terraform]: + rule { [terraform]: + api_groups = [ [terraform]: + "extensions", [terraform]: + "networking.k8s.io", [terraform]: ] [terraform]: + resources = [ [terraform]: + "ingresses", [terraform]: + "ingressclasses", [terraform]: ] [terraform]: + verbs = [ [terraform]: + "get", [terraform]: + "list", [terraform]: + "watch", [terraform]: ] [terraform]: } [terraform]: + rule { [terraform]: + api_groups = [ [terraform]: + "extensions", [terraform]: ] [terraform]: + resources = [ [terraform]: + "ingresses/status", [terraform]: ] [terraform]: + verbs = [ [terraform]: + "update", [terraform]: ] [terraform]: } [terraform]: + rule { [terraform]: + api_groups = [ [terraform]: + "traefik.containo.us", [terraform]: ] [terraform]: + resources = [ [terraform]: + "ingressroutes", [terraform]: + "ingressroutetcps", [terraform]: + "ingressrouteudps", [terraform]: + "middlewares", [terraform]: + "middlewaretcps", [terraform]: + "tlsoptions", [terraform]: + "tlsstores", [terraform]: + "traefikservices", [terraform]: + "serverstransports", [terraform]: ] [terraform]: + verbs = [ [terraform]: + "get", [terraform]: + "list", [terraform]: + "watch", [terraform]: ] [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-ingress.kubernetes_cluster_role_binding.main will be created [terraform]:  + resource "kubernetes_cluster_role_binding" "main" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-traefik-ingress" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + role_ref { [terraform]: + api_group = "rbac.authorization.k8s.io" [terraform]: + kind = "ClusterRole" [terraform]: + name = "nebari-traefik-ingress" [terraform]: } [terraform]: [terraform]: + subject { [terraform]: + api_group = (known after apply) [terraform]: + kind = "ServiceAccount" [terraform]: + name = "nebari-traefik-ingress" [terraform]: + namespace = "dev" [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-ingress.kubernetes_deployment.main will be created [terraform]:  + resource "kubernetes_deployment" "main" { [terraform]: + id = (known after apply) [terraform]: + wait_for_rollout = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-traefik-ingress" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + min_ready_seconds = 0 [terraform]: + paused = false [terraform]: + progress_deadline_seconds = 600 [terraform]: + replicas = "1" [terraform]: + revision_history_limit = 10 [terraform]: [terraform]: + selector { [terraform]: + match_labels = { [terraform]: + "app.kubernetes.io/component" = "traefik-ingress" [terraform]: } [terraform]: } [terraform]: [terraform]: + strategy { [terraform]: + type = (known after apply) [terraform]: [terraform]: + rolling_update { [terraform]: + max_surge = (known after apply) [terraform]: + max_unavailable = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + template { [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "app.kubernetes.io/component" = "traefik-ingress" [terraform]: } [terraform]: + name = (known after apply) [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + automount_service_account_token = true [terraform]: + dns_policy = "ClusterFirst" [terraform]: + enable_service_links = true [terraform]: + host_ipc = false [terraform]: + host_network = false [terraform]: + host_pid = false [terraform]: + hostname = (known after apply) [terraform]: + node_name = (known after apply) [terraform]: + restart_policy = "Always" [terraform]: + service_account_name = "nebari-traefik-ingress" [terraform]: + share_process_namespace = false [terraform]: + termination_grace_period_seconds = 60 [terraform]: [terraform]: + affinity { [terraform]: + node_affinity { [terraform]: [terraform]: + required_during_scheduling_ignored_during_execution { [terraform]: + node_selector_term { [terraform]: + match_expressions { [terraform]: + key = "kubernetes.io/os" [terraform]: + operator = "In" [terraform]: + values = [ [terraform]: + "linux", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + container { [terraform]: + args = [ [terraform]: + "--global.checknewversion=false", [terraform]: + "--global.sendanonymoususage=false", [terraform]: + "--api.insecure=true", [terraform]: + "--api.dashboard=true", [terraform]: + "--ping=true", [terraform]: + "--providers.kubernetesingress=true", [terraform]: + "--providers.kubernetesingress.namespaces=dev", [terraform]: + "--providers.kubernetesingress.ingressclass=traefik", [terraform]: + "--providers.kubernetescrd", [terraform]: + "--providers.kubernetescrd.namespaces=dev", [terraform]: + "--providers.kubernetescrd.throttleduration=2s", [terraform]: + "--providers.kubernetescrd.allowcrossnamespace=false", [terraform]: + "--entryPoints.web.address=:80", [terraform]: + "--entryPoints.websecure.address=:443", [terraform]: + "--entrypoints.ssh.address=:8022", [terraform]: + "--entrypoints.sftp.address=:8023", [terraform]: + "--entryPoints.tcp.address=:8786", [terraform]: + "--entryPoints.traefik.address=:9000", [terraform]: + "--entryPoints.minio.address=:9080", [terraform]: + "--entrypoints.web.http.redirections.entryPoint.to=websecure", [terraform]: + "--entrypoints.web.http.redirections.entryPoint.scheme=https", [terraform]: + "--metrics.prometheus=true", [terraform]: + "--log.level=WARN", [terraform]: + "--entrypoints.websecure.http.tls.certResolver=default", [terraform]: + "--entrypoints.minio.http.tls.certResolver=default", [terraform]: ] [terraform]: + image = "traefik:2.9.1" [terraform]: + image_pull_policy = (known after apply) [terraform]: + name = "nebari" [terraform]: + stdin = false [terraform]: + stdin_once = false [terraform]: + termination_message_path = "/dev/termination-log" [terraform]: + termination_message_policy = (known after apply) [terraform]: + tty = false [terraform]: [terraform]: + liveness_probe { [terraform]: + failure_threshold = 3 [terraform]: + initial_delay_seconds = 10 [terraform]: + period_seconds = 10 [terraform]: + success_threshold = 1 [terraform]: + timeout_seconds = 2 [terraform]: [terraform]: + http_get { [terraform]: + path = "/ping" [terraform]: + port = "traefik" [terraform]: + scheme = "HTTP" [terraform]: } [terraform]: } [terraform]: [terraform]: + port { [terraform]: + container_port = 80 [terraform]: + name = "http" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: + port { [terraform]: + container_port = 443 [terraform]: + name = "https" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: + port { [terraform]: + container_port = 8022 [terraform]: + name = "ssh" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: + port { [terraform]: + container_port = 8023 [terraform]: + name = "sftp" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: + port { [terraform]: + container_port = 8786 [terraform]: + name = "tcp" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: + port { [terraform]: + container_port = 9000 [terraform]: + name = "traefik" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: + port { [terraform]: + container_port = 9080 [terraform]: + name = "minio" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: [terraform]: + readiness_probe { [terraform]: + failure_threshold = 1 [terraform]: + initial_delay_seconds = 10 [terraform]: + period_seconds = 10 [terraform]: + success_threshold = 1 [terraform]: + timeout_seconds = 2 [terraform]: [terraform]: + http_get { [terraform]: + path = "/ping" [terraform]: + port = "traefik" [terraform]: + scheme = "HTTP" [terraform]: } [terraform]: } [terraform]: [terraform]: + resources { [terraform]: + limits = (known after apply) [terraform]: + requests = (known after apply) [terraform]: } [terraform]: [terraform]: + security_context { [terraform]: + allow_privilege_escalation = true [terraform]: + privileged = false [terraform]: + read_only_root_filesystem = false [terraform]: [terraform]: + capabilities { [terraform]: + add = [ [terraform]: + "NET_BIND_SERVICE", [terraform]: ] [terraform]: + drop = [ [terraform]: + "ALL", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + image_pull_secrets { [terraform]: + name = (known after apply) [terraform]: } [terraform]: [terraform]: + readiness_gate { [terraform]: + condition_type = (known after apply) [terraform]: } [terraform]: [terraform]: + volume { [terraform]: + name = (known after apply) [terraform]: [terraform]: + aws_elastic_block_store { [terraform]: + fs_type = (known after apply) [terraform]: + partition = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + volume_id = (known after apply) [terraform]: } [terraform]: [terraform]: + azure_disk { [terraform]: + caching_mode = (known after apply) [terraform]: + data_disk_uri = (known after apply) [terraform]: + disk_name = (known after apply) [terraform]: + fs_type = (known after apply) [terraform]: + kind = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: } [terraform]: [terraform]: + azure_file { [terraform]: + read_only = (known after apply) [terraform]: + secret_name = (known after apply) [terraform]: + secret_namespace = (known after apply) [terraform]: + share_name = (known after apply) [terraform]: } [terraform]: [terraform]: + ceph_fs { [terraform]: + monitors = (known after apply) [terraform]: + path = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + secret_file = (known after apply) [terraform]: + user = (known after apply) [terraform]: [terraform]: + secret_ref { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + cinder { [terraform]: + fs_type = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + volume_id = (known after apply) [terraform]: } [terraform]: [terraform]: + config_map { [terraform]: + default_mode = (known after apply) [terraform]: + name = (known after apply) [terraform]: + optional = (known after apply) [terraform]: [terraform]: + items { [terraform]: + key = (known after apply) [terraform]: + mode = (known after apply) [terraform]: + path = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + csi { [terraform]: + driver = (known after apply) [terraform]: + fs_type = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + volume_attributes = (known after apply) [terraform]: [terraform]: + node_publish_secret_ref { [terraform]: + name = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + downward_api { [terraform]: + default_mode = (known after apply) [terraform]: [terraform]: + items { [terraform]: + mode = (known after apply) [terraform]: + path = (known after apply) [terraform]: [terraform]: + field_ref { [terraform]: + api_version = (known after apply) [terraform]: + field_path = (known after apply) [terraform]: } [terraform]: [terraform]: + resource_field_ref { [terraform]: + container_name = (known after apply) [terraform]: + divisor = (known after apply) [terraform]: + resource = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + empty_dir { [terraform]: + medium = (known after apply) [terraform]: + size_limit = (known after apply) [terraform]: } [terraform]: [terraform]: + fc { [terraform]: + fs_type = (known after apply) [terraform]: + lun = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + target_ww_ns = (known after apply) [terraform]: } [terraform]: [terraform]: + flex_volume { [terraform]: + driver = (known after apply) [terraform]: + fs_type = (known after apply) [terraform]: + options = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: [terraform]: + secret_ref { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + flocker { [terraform]: + dataset_name = (known after apply) [terraform]: + dataset_uuid = (known after apply) [terraform]: } [terraform]: [terraform]: + gce_persistent_disk { [terraform]: + fs_type = (known after apply) [terraform]: + partition = (known after apply) [terraform]: + pd_name = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: } [terraform]: [terraform]: + git_repo { [terraform]: + directory = (known after apply) [terraform]: + repository = (known after apply) [terraform]: + revision = (known after apply) [terraform]: } [terraform]: [terraform]: + glusterfs { [terraform]: + endpoints_name = (known after apply) [terraform]: + path = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: } [terraform]: [terraform]: + host_path { [terraform]: + path = (known after apply) [terraform]: + type = (known after apply) [terraform]: } [terraform]: [terraform]: + iscsi { [terraform]: + fs_type = (known after apply) [terraform]: + iqn = (known after apply) [terraform]: + iscsi_interface = (known after apply) [terraform]: + lun = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + target_portal = (known after apply) [terraform]: } [terraform]: [terraform]: + local { [terraform]: + path = (known after apply) [terraform]: } [terraform]: [terraform]: + nfs { [terraform]: + path = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + server = (known after apply) [terraform]: } [terraform]: [terraform]: + persistent_volume_claim { [terraform]: + claim_name = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: } [terraform]: [terraform]: + photon_persistent_disk { [terraform]: + fs_type = (known after apply) [terraform]: + pd_id = (known after apply) [terraform]: } [terraform]: [terraform]: + projected { [terraform]: + default_mode = (known after apply) [terraform]: [terraform]: + sources { [terraform]: + config_map { [terraform]: + name = (known after apply) [terraform]: + optional = (known after apply) [terraform]: [terraform]: + items { [terraform]: + key = (known after apply) [terraform]: + mode = (known after apply) [terraform]: + path = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + downward_api { [terraform]: + items { [terraform]: + mode = (known after apply) [terraform]: + path = (known after apply) [terraform]: [terraform]: + field_ref { [terraform]: + api_version = (known after apply) [terraform]: + field_path = (known after apply) [terraform]: } [terraform]: [terraform]: + resource_field_ref { [terraform]: + container_name = (known after apply) [terraform]: + divisor = (known after apply) [terraform]: + resource = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + secret { [terraform]: + name = (known after apply) [terraform]: + optional = (known after apply) [terraform]: [terraform]: + items { [terraform]: + key = (known after apply) [terraform]: + mode = (known after apply) [terraform]: + path = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + service_account_token { [terraform]: + audience = (known after apply) [terraform]: + expiration_seconds = (known after apply) [terraform]: + path = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + quobyte { [terraform]: + group = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + registry = (known after apply) [terraform]: + user = (known after apply) [terraform]: + volume = (known after apply) [terraform]: } [terraform]: [terraform]: + rbd { [terraform]: + ceph_monitors = (known after apply) [terraform]: + fs_type = (known after apply) [terraform]: + keyring = (known after apply) [terraform]: + rados_user = (known after apply) [terraform]: + rbd_image = (known after apply) [terraform]: + rbd_pool = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: [terraform]: + secret_ref { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + secret { [terraform]: + default_mode = (known after apply) [terraform]: + optional = (known after apply) [terraform]: + secret_name = (known after apply) [terraform]: [terraform]: + items { [terraform]: + key = (known after apply) [terraform]: + mode = (known after apply) [terraform]: + path = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + vsphere_volume { [terraform]: + fs_type = (known after apply) [terraform]: + volume_path = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-ingress.kubernetes_manifest.tlsstore_default[0] will be created [terraform]:  + resource "kubernetes_manifest" "tlsstore_default" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "TLSStore" [terraform]: + metadata = { [terraform]: + name = "default" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + defaultCertificate = { [terraform]: + secretName = "" [terraform]: } [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "TLSStore" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "default" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + defaultCertificate = { [terraform]: + secretName = "" [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-ingress.kubernetes_service.main will be created [terraform]:  + resource "kubernetes_service" "main" { [terraform]: + id = (known after apply) [terraform]: + status = (known after apply) [terraform]: + wait_for_load_balancer = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-traefik-ingress" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + allocate_load_balancer_node_ports = true [terraform]: + cluster_ip = (known after apply) [terraform]: + cluster_ips = (known after apply) [terraform]: + external_traffic_policy = (known after apply) [terraform]: + health_check_node_port = (known after apply) [terraform]: + internal_traffic_policy = (known after apply) [terraform]: + ip_families = (known after apply) [terraform]: + ip_family_policy = (known after apply) [terraform]: + publish_not_ready_addresses = false [terraform]: + selector = { [terraform]: + "app.kubernetes.io/component" = "traefik-ingress" [terraform]: } [terraform]: + session_affinity = "None" [terraform]: + type = "LoadBalancer" [terraform]: [terraform]: + port { [terraform]: + name = "http" [terraform]: + node_port = (known after apply) [terraform]: + port = 80 [terraform]: + protocol = "TCP" [terraform]: + target_port = "80" [terraform]: } [terraform]: + port { [terraform]: + name = "https" [terraform]: + node_port = (known after apply) [terraform]: + port = 443 [terraform]: + protocol = "TCP" [terraform]: + target_port = "443" [terraform]: } [terraform]: + port { [terraform]: + name = "ssh" [terraform]: + node_port = (known after apply) [terraform]: + port = 8022 [terraform]: + protocol = "TCP" [terraform]: + target_port = "8022" [terraform]: } [terraform]: + port { [terraform]: + name = "sftp" [terraform]: + node_port = (known after apply) [terraform]: + port = 8023 [terraform]: + protocol = "TCP" [terraform]: + target_port = "8023" [terraform]: } [terraform]: + port { [terraform]: + name = "minio" [terraform]: + node_port = (known after apply) [terraform]: + port = 9080 [terraform]: + protocol = "TCP" [terraform]: + target_port = "9080" [terraform]: } [terraform]: + port { [terraform]: + name = "tcp" [terraform]: + node_port = (known after apply) [terraform]: + port = 8786 [terraform]: + protocol = "TCP" [terraform]: + target_port = "8786" [terraform]: } [terraform]: [terraform]: + session_affinity_config { [terraform]: + client_ip { [terraform]: + timeout_seconds = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-ingress.kubernetes_service.traefik_internal will be created [terraform]:  + resource "kubernetes_service" "traefik_internal" { [terraform]: + id = (known after apply) [terraform]: + status = (known after apply) [terraform]: + wait_for_load_balancer = true [terraform]: [terraform]: + metadata { [terraform]: + annotations = { [terraform]: + "prometheus.io/path" = "/metrics" [terraform]: + "prometheus.io/port" = "9000" [terraform]: + "prometheus.io/scrape" = "true" [terraform]: } [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "app.kubernetes.io/component" = "traefik-internal-service" [terraform]: + "app.kubernetes.io/part-of" = "traefik-ingress" [terraform]: } [terraform]: + name = "nebari-traefik-internal" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + allocate_load_balancer_node_ports = true [terraform]: + cluster_ip = (known after apply) [terraform]: + cluster_ips = (known after apply) [terraform]: + external_traffic_policy = (known after apply) [terraform]: + health_check_node_port = (known after apply) [terraform]: + internal_traffic_policy = (known after apply) [terraform]: + ip_families = (known after apply) [terraform]: + ip_family_policy = (known after apply) [terraform]: + publish_not_ready_addresses = false [terraform]: + selector = { [terraform]: + "app.kubernetes.io/component" = "traefik-ingress" [terraform]: } [terraform]: + session_affinity = "None" [terraform]: + type = "ClusterIP" [terraform]: [terraform]: + port { [terraform]: + name = "http" [terraform]: + node_port = (known after apply) [terraform]: + port = 9000 [terraform]: + protocol = "TCP" [terraform]: + target_port = "9000" [terraform]: } [terraform]: [terraform]: + session_affinity_config { [terraform]: + client_ip { [terraform]: + timeout_seconds = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-ingress.kubernetes_service_account.main will be created [terraform]:  + resource "kubernetes_service_account" "main" { [terraform]: + automount_service_account_token = true [terraform]: + default_secret_name = (known after apply) [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-traefik-ingress" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: Plan: 7 to add, 0 to change, 0 to destroy. [terraform]:  [terraform]: Changes to Outputs: [terraform]: + load_balancer_address = (known after apply) [terraform]: module.kubernetes-ingress.kubernetes_service_account.main: Creating... [terraform]: module.kubernetes-ingress.kubernetes_service.traefik_internal: Creating... [terraform]: module.kubernetes-ingress.kubernetes_cluster_role.main: Creating... [terraform]: module.kubernetes-ingress.kubernetes_service.main: Creating... [terraform]: module.kubernetes-ingress.kubernetes_cluster_role.main: Creation complete after 0s [id=nebari-traefik-ingress] [terraform]: module.kubernetes-ingress.kubernetes_service.traefik_internal: Creation complete after 0s [id=dev/nebari-traefik-internal] [terraform]: module.kubernetes-ingress.kubernetes_manifest.tlsstore_default[0]: Creating... [terraform]: module.kubernetes-ingress.kubernetes_manifest.tlsstore_default[0]: Creation complete after 0s [terraform]: module.kubernetes-ingress.kubernetes_service_account.main: Creation complete after 0s [id=dev/nebari-traefik-ingress] [terraform]: module.kubernetes-ingress.kubernetes_cluster_role_binding.main: Creating... [terraform]: module.kubernetes-ingress.kubernetes_service.main: Creation complete after 0s [id=dev/nebari-traefik-ingress] [terraform]: module.kubernetes-ingress.kubernetes_cluster_role_binding.main: Creation complete after 0s [id=nebari-traefik-ingress] [terraform]: module.kubernetes-ingress.kubernetes_deployment.main: Creating... [terraform]: module.kubernetes-ingress.kubernetes_deployment.main: Still creating... [10s elapsed] [terraform]: module.kubernetes-ingress.kubernetes_deployment.main: Still creating... [20s elapsed] [terraform]: module.kubernetes-ingress.kubernetes_deployment.main: Creation complete after 26s [id=dev/nebari-traefik-ingress] [terraform]:  [terraform]: Apply complete! Resources: 7 added, 0 changed, 0 destroyed. [terraform]:  [terraform]: Outputs: [terraform]: [terraform]: load_balancer_address = { [terraform]: "hostname" = "" [terraform]: "ip" = "172.18.1.100" [terraform]: } [terraform]: Upgrading modules... Attempt 1 succeeded to connect to tcp://172.18.1.100:80 Attempt 1 succeeded to connect to tcp://172.18.1.100:8786 Attempt 1 succeeded to connect to tcp://172.18.1.100:8022 Attempt 1 succeeded to connect to tcp://172.18.1.100:8023 Attempt 1 succeeded to connect to tcp://172.18.1.100:9080 Attempt 1 succeeded to connect to tcp://172.18.1.100:443 After stage directory=stages/04-kubernetes-ingress kubernetes ingress available on tcp ports={80, 8786, 8022, 8023, 9080, 443} DNS configured domain=domain matches ingress ip=172.18.1.100 [terraform]: - kubernetes-keycloak-helm in modules/kubernetes/keycloak-helm [terraform]: [terraform]: Initializing the backend... [terraform]: [terraform]: Initializing provider plugins... [terraform]: - Finding latest version of hashicorp/random... [terraform]: - Finding hashicorp/helm versions matching "2.1.2"... [terraform]: - Finding hashicorp/kubernetes versions matching "2.16.1"... [terraform]: - Installing hashicorp/helm v2.1.2... [terraform]: - Installed hashicorp/helm v2.1.2 (signed by HashiCorp) [terraform]: - Installing hashicorp/kubernetes v2.16.1... [terraform]: - Installed hashicorp/kubernetes v2.16.1 (signed by HashiCorp) [terraform]: - Installing hashicorp/random v3.4.3... [terraform]: - Installed hashicorp/random v3.4.3 (signed by HashiCorp) [terraform]: [terraform]: Terraform has created a lock file .terraform.lock.hcl to record the provider [terraform]: selections it made above. Include this file in your version control repository [terraform]: so that Terraform can guarantee to make the same selections by default when [terraform]: you run "terraform init" in the future. [terraform]: [terraform]: Terraform has been successfully initialized! [terraform]:  [terraform]: You may now begin working with Terraform. Try running "terraform plan" to see [terraform]: any changes that are required for your infrastructure. All Terraform commands [terraform]: should now work. [terraform]: [terraform]: If you ever set or change modules or backend configuration for Terraform, [terraform]: rerun this command to reinitialize your working directory. If you forget, other [terraform]: commands will detect it and remind you to do so if necessary. [terraform]: [terraform]: Terraform used the selected providers to generate the following execution [terraform]: plan. Resource actions are indicated with the following symbols: [terraform]: + create [terraform]:  [terraform]: Terraform will perform the following actions: [terraform]: [terraform]:  # random_password.keycloak-nebari-bot-password will be created [terraform]:  + resource "random_password" "keycloak-nebari-bot-password" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.kubernetes-keycloak-helm.helm_release.keycloak will be created [terraform]:  + resource "helm_release" "keycloak" { [terraform]: + atomic = false [terraform]: + chart = "keycloak" [terraform]: + cleanup_on_fail = false [terraform]: + create_namespace = false [terraform]: + dependency_update = false [terraform]: + disable_crd_hooks = false [terraform]: + disable_openapi_validation = false [terraform]: + disable_webhooks = false [terraform]: + force_update = false [terraform]: + id = (known after apply) [terraform]: + lint = false [terraform]: + manifest = (known after apply) [terraform]: + max_history = 0 [terraform]: + metadata = (known after apply) [terraform]: + name = "keycloak" [terraform]: + namespace = "dev" [terraform]: + recreate_pods = false [terraform]: + render_subchart_notes = true [terraform]: + replace = false [terraform]: + repository = "https://codecentric.github.io/helm-charts" [terraform]: + reset_values = false [terraform]: + reuse_values = false [terraform]: + skip_crds = false [terraform]: + status = "deployed" [terraform]: + timeout = 300 [terraform]: + values = [ [terraform]: + <<-EOT [terraform]: ingress: [terraform]: # Helm chart (14.0 anyway) will only define Ingress records, not IngressRoute as required by Traefik, so [terraform]: # we will need to define our own IngressRoute elsewhere. [terraform]: enabled: false [terraform]: [terraform]: imagePullSecrets: [terraform]: - name: "extcrcreds" [terraform]: [terraform]: extraEnv: | [terraform]: - name: PROXY_ADDRESS_FORWARDING [terraform]: value: "true" [terraform]: [terraform]: startupScripts: [terraform]: keycloak.cli: | [terraform]: {{- .Files.Get "scripts/keycloak.cli" | nindent 2 }} [terraform]: [terraform]: nebariadminuser.sh: | [terraform]: /opt/jboss/keycloak/bin/add-user-keycloak.sh -r master -u root -p "{{ .Values.initial_root_password }}" [terraform]: /opt/jboss/keycloak/bin/add-user-keycloak.sh -r master -u nebari-bot -p "{{ .Values.nebari_bot_password }}" [terraform]: EOT, [terraform]: + jsonencode( [terraform]: { [terraform]: + nodeSelector = { [terraform]: + kubernetes.io/os = "linux" [terraform]: } [terraform]: + postgresql = { [terraform]: + primary = { [terraform]: + nodeSelector = { [terraform]: + kubernetes.io/os = "linux" [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: ), [terraform]: + jsonencode({}), [terraform]: ] [terraform]: + verify = false [terraform]: + version = "15.0.2" [terraform]: + wait = true [terraform]: + wait_for_jobs = false [terraform]: [terraform]: + set { [terraform]: # At least one attribute in this block is (or was) sensitive, [terraform]: # so its contents will not be displayed. [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-keycloak-helm.kubernetes_manifest.keycloak-http will be created [terraform]:  + resource "kubernetes_manifest" "keycloak-http" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + name = "keycloak-http" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && PathPrefix(`/auth`) " [terraform]: + services = [ [terraform]: + { [terraform]: + name = "keycloak-headless" [terraform]: + namespace = "dev" [terraform]: + port = 80 [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "keycloak-http" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && PathPrefix(`/auth`) " [terraform]: + middlewares = (known after apply) [terraform]: + priority = (known after apply) [terraform]: + services = [ [terraform]: + { [terraform]: + kind = (known after apply) [terraform]: + name = "keycloak-headless" [terraform]: + namespace = "dev" [terraform]: + passHostHeader = (known after apply) [terraform]: + port = "80" [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + sameSite = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: + tls = { [terraform]: + certResolver = (known after apply) [terraform]: + domains = (known after apply) [terraform]: + options = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: + secretName = (known after apply) [terraform]: + store = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: Plan: 3 to add, 0 to change, 0 to destroy. [terraform]:  [terraform]: Changes to Outputs: [terraform]: + keycloak_credentials = (sensitive value) [terraform]: + keycloak_nebari_bot_password = (sensitive value) [terraform]: random_password.keycloak-nebari-bot-password: Creating... [terraform]: random_password.keycloak-nebari-bot-password: Creation complete after 0s [id=none] [terraform]: module.kubernetes-keycloak-helm.kubernetes_manifest.keycloak-http: Creating... [terraform]: module.kubernetes-keycloak-helm.kubernetes_manifest.keycloak-http: Creation complete after 0s [terraform]: module.kubernetes-keycloak-helm.helm_release.keycloak: Creating... [terraform]: module.kubernetes-keycloak-helm.helm_release.keycloak: Still creating... [10s elapsed] [terraform]: module.kubernetes-keycloak-helm.helm_release.keycloak: Still creating... [20s elapsed] [terraform]: module.kubernetes-keycloak-helm.helm_release.keycloak: Still creating... [30s elapsed] [terraform]: module.kubernetes-keycloak-helm.helm_release.keycloak: Still creating... [40s elapsed] [terraform]: module.kubernetes-keycloak-helm.helm_release.keycloak: Still creating... [50s elapsed] [terraform]: module.kubernetes-keycloak-helm.helm_release.keycloak: Still creating... [1m0s elapsed] [terraform]: module.kubernetes-keycloak-helm.helm_release.keycloak: Still creating... [1m10s elapsed] [terraform]: module.kubernetes-keycloak-helm.helm_release.keycloak: Still creating... [1m20s elapsed] [terraform]: module.kubernetes-keycloak-helm.helm_release.keycloak: Creation complete after 1m24s [id=keycloak] [terraform]:  [terraform]: Apply complete! Resources: 3 added, 0 changed, 0 destroyed. [terraform]:  [terraform]: Outputs: [terraform]: [terraform]: keycloak_credentials = [terraform]: keycloak_nebari_bot_password = [terraform]: Attempt 1 succeeded connecting to keycloak master realm Keycloak service successfully started [terraform]: Initializing the backend... [terraform]: [terraform]: Initializing provider plugins... [terraform]: - Finding mrparkers/keycloak versions matching "3.7.0"... [terraform]: - Finding hashicorp/helm versions matching "2.1.2"... [terraform]: - Finding hashicorp/kubernetes versions matching "2.16.1"... [terraform]: - Installing mrparkers/keycloak v3.7.0... [terraform]: - Installed mrparkers/keycloak v3.7.0 (self-signed, key ID C50867915E116CD2) [terraform]: - Installing hashicorp/helm v2.1.2... [terraform]: - Installed hashicorp/helm v2.1.2 (signed by HashiCorp) [terraform]: - Installing hashicorp/kubernetes v2.16.1... [terraform]: - Installed hashicorp/kubernetes v2.16.1 (signed by HashiCorp) [terraform]: [terraform]: Partner and community providers are signed by their developers. [terraform]: If you'd like to know more about provider signing, you can read about it here: [terraform]: https://www.terraform.io/docs/cli/plugins/signing.html [terraform]: [terraform]: Terraform has created a lock file .terraform.lock.hcl to record the provider [terraform]: selections it made above. Include this file in your version control repository [terraform]: so that Terraform can guarantee to make the same selections by default when [terraform]: you run "terraform init" in the future. [terraform]: [terraform]: Terraform has been successfully initialized! [terraform]:  [terraform]: You may now begin working with Terraform. Try running "terraform plan" to see [terraform]: any changes that are required for your infrastructure. All Terraform commands [terraform]: should now work. [terraform]: [terraform]: If you ever set or change modules or backend configuration for Terraform, [terraform]: rerun this command to reinitialize your working directory. If you forget, other [terraform]: commands will detect it and remind you to do so if necessary. [terraform]: [terraform]: Terraform used the selected providers to generate the following execution [terraform]: plan. Resource actions are indicated with the following symbols: [terraform]: + create [terraform]:  [terraform]: Terraform will perform the following actions: [terraform]: [terraform]:  # keycloak_authentication_execution.idp-auto-link will be created [terraform]:  + resource "keycloak_authentication_execution" "idp-auto-link" { [terraform]: + authenticator = "idp-auto-link" [terraform]: + id = (known after apply) [terraform]: + parent_flow_alias = "detect-existing" [terraform]: + realm_id = (known after apply) [terraform]: + requirement = "REQUIRED" [terraform]: } [terraform]: [terraform]:  # keycloak_authentication_execution.idp-detect-existing-broker-user will be created [terraform]:  + resource "keycloak_authentication_execution" "idp-detect-existing-broker-user" { [terraform]: + authenticator = "idp-detect-existing-broker-user" [terraform]: + id = (known after apply) [terraform]: + parent_flow_alias = "detect-existing" [terraform]: + realm_id = (known after apply) [terraform]: + requirement = "REQUIRED" [terraform]: } [terraform]: [terraform]:  # keycloak_authentication_flow.flow will be created [terraform]:  + resource "keycloak_authentication_flow" "flow" { [terraform]: + alias = "detect-existing" [terraform]: + id = (known after apply) [terraform]: + provider_id = "basic-flow" [terraform]: + realm_id = (known after apply) [terraform]: } [terraform]: [terraform]:  # keycloak_default_groups.default will be created [terraform]:  + resource "keycloak_default_groups" "default" { [terraform]: + group_ids = (known after apply) [terraform]: + id = (known after apply) [terraform]: + realm_id = (known after apply) [terraform]: } [terraform]: [terraform]:  # keycloak_group.groups["admin"] will be created [terraform]:  + resource "keycloak_group" "groups" { [terraform]: + id = (known after apply) [terraform]: + name = "admin" [terraform]: + path = (known after apply) [terraform]: + realm_id = (known after apply) [terraform]: } [terraform]: [terraform]:  # keycloak_group.groups["analyst"] will be created [terraform]:  + resource "keycloak_group" "groups" { [terraform]: + id = (known after apply) [terraform]: + name = "analyst" [terraform]: + path = (known after apply) [terraform]: + realm_id = (known after apply) [terraform]: } [terraform]: [terraform]:  # keycloak_group.groups["developer"] will be created [terraform]:  + resource "keycloak_group" "groups" { [terraform]: + id = (known after apply) [terraform]: + name = "developer" [terraform]: + path = (known after apply) [terraform]: + realm_id = (known after apply) [terraform]: } [terraform]: [terraform]:  # keycloak_realm.main will be created [terraform]:  + resource "keycloak_realm" "main" { [terraform]: + access_code_lifespan = (known after apply) [terraform]: + access_code_lifespan_login = (known after apply) [terraform]: + access_code_lifespan_user_action = (known after apply) [terraform]: + access_token_lifespan = (known after apply) [terraform]: + access_token_lifespan_for_implicit_flow = (known after apply) [terraform]: + action_token_generated_by_admin_lifespan = (known after apply) [terraform]: + action_token_generated_by_user_lifespan = (known after apply) [terraform]: + browser_flow = "browser" [terraform]: + client_authentication_flow = "clients" [terraform]: + direct_grant_flow = "direct grant" [terraform]: + display_name = "nebari" [terraform]: + docker_authentication_flow = "docker auth" [terraform]: + duplicate_emails_allowed = (known after apply) [terraform]: + edit_username_allowed = (known after apply) [terraform]: + enabled = true [terraform]: + id = (known after apply) [terraform]: + internal_id = (known after apply) [terraform]: + login_with_email_allowed = (known after apply) [terraform]: + oauth2_device_code_lifespan = (known after apply) [terraform]: + oauth2_device_polling_interval = (known after apply) [terraform]: + offline_session_idle_timeout = (known after apply) [terraform]: + offline_session_max_lifespan = (known after apply) [terraform]: + offline_session_max_lifespan_enabled = false [terraform]: + realm = "nebari" [terraform]: + refresh_token_max_reuse = 0 [terraform]: + registration_allowed = (known after apply) [terraform]: + registration_email_as_username = (known after apply) [terraform]: + registration_flow = "registration" [terraform]: + remember_me = (known after apply) [terraform]: + reset_credentials_flow = "reset credentials" [terraform]: + reset_password_allowed = (known after apply) [terraform]: + revoke_refresh_token = false [terraform]: + ssl_required = "external" [terraform]: + sso_session_idle_timeout = (known after apply) [terraform]: + sso_session_idle_timeout_remember_me = (known after apply) [terraform]: + sso_session_max_lifespan = (known after apply) [terraform]: + sso_session_max_lifespan_remember_me = (known after apply) [terraform]: + user_managed_access = false [terraform]: + verify_email = (known after apply) [terraform]: [terraform]: + otp_policy { [terraform]: + algorithm = (known after apply) [terraform]: + digits = (known after apply) [terraform]: + initial_counter = (known after apply) [terraform]: + look_ahead_window = (known after apply) [terraform]: + period = (known after apply) [terraform]: + type = (known after apply) [terraform]: } [terraform]: [terraform]: + web_authn_passwordless_policy { [terraform]: + attestation_conveyance_preference = "not specified" [terraform]: + authenticator_attachment = "not specified" [terraform]: + avoid_same_authenticator_register = false [terraform]: + create_timeout = 0 [terraform]: + relying_party_entity_name = "keycloak" [terraform]: + require_resident_key = "not specified" [terraform]: + signature_algorithms = (known after apply) [terraform]: + user_verification_requirement = "not specified" [terraform]: } [terraform]: [terraform]: + web_authn_policy { [terraform]: + attestation_conveyance_preference = "not specified" [terraform]: + authenticator_attachment = "not specified" [terraform]: + avoid_same_authenticator_register = false [terraform]: + create_timeout = 0 [terraform]: + relying_party_entity_name = "keycloak" [terraform]: + require_resident_key = "not specified" [terraform]: + signature_algorithms = (known after apply) [terraform]: + user_verification_requirement = "not specified" [terraform]: } [terraform]: } [terraform]: [terraform]: Plan: 8 to add, 0 to change, 0 to destroy. [terraform]:  [terraform]: Changes to Outputs: [terraform]: + realm_id = (known after apply) [terraform]: keycloak_realm.main: Creating... [terraform]: keycloak_realm.main: Creation complete after 1s [id=nebari] [terraform]: keycloak_group.groups["developer"]: Creating... [terraform]: keycloak_authentication_flow.flow: Creating... [terraform]: keycloak_group.groups["admin"]: Creating... [terraform]: keycloak_group.groups["analyst"]: Creating... [terraform]: keycloak_group.groups["developer"]: Creation complete after 1s [id=a951fc7c-4c33-46ed-970f-5f114a5246c3] [terraform]: keycloak_group.groups["analyst"]: Creation complete after 1s [id=85152b40-7279-4f8a-8fb6-cb8d5b87c14a] [terraform]: keycloak_group.groups["admin"]: Creation complete after 1s [id=4e137164-08af-4b08-a503-35c248823dae] [terraform]: keycloak_default_groups.default: Creating... [terraform]: keycloak_authentication_flow.flow: Creation complete after 1s [id=ea888f3d-9d71-48b8-8e72-2fa672107a80] [terraform]: keycloak_authentication_execution.idp-detect-existing-broker-user: Creating... [terraform]: keycloak_default_groups.default: Creation complete after 0s [id=nebari/default-groups] [terraform]: keycloak_authentication_execution.idp-detect-existing-broker-user: Creation complete after 0s [id=ac7d86b5-37e0-4804-a9b9-7d6605664ebf] [terraform]: keycloak_authentication_execution.idp-auto-link: Creating... [terraform]: keycloak_authentication_execution.idp-auto-link: Creation complete after 0s [id=2e6856c3-78de-4508-9cff-f81b605167e6] [terraform]:  [terraform]: Apply complete! Resources: 8 added, 0 changed, 0 destroyed. [terraform]:  [terraform]: Outputs: [terraform]: [terraform]: realm_id = "nebari" [terraform]: Upgrading modules... Attempt 1 succeeded connecting to keycloak and nebari realm=nebari exists Keycloak service successfully started with nebari realm [terraform]: - argo-workflows in modules/kubernetes/services/argo-workflows [terraform]: - argo-workflows.argo-workflow-openid-client in modules/kubernetes/services/keycloak-client [terraform]: - clearml in modules/kubernetes/services/clearml [terraform]: - conda-store-nfs-mount in modules/kubernetes/nfs-mount [terraform]: - dask-gateway in modules/kubernetes/services/dask-gateway [terraform]: - forwardauth in modules/kubernetes/forwardauth [terraform]: - forwardauth.forwardauth-openid-client in modules/kubernetes/services/keycloak-client [terraform]: - jupyterhub in modules/kubernetes/services/jupyterhub [terraform]: - jupyterhub.jupyterhub-openid-client in modules/kubernetes/services/keycloak-client [terraform]: - jupyterhub-nfs-mount in modules/kubernetes/nfs-mount [terraform]: - kbatch in modules/kubernetes/services/kbatch [terraform]: - kubernetes-conda-store-server in modules/kubernetes/services/conda-store [terraform]: - kubernetes-conda-store-server.conda-store-openid-client in modules/kubernetes/services/keycloak-client [terraform]: - kubernetes-conda-store-server.minio in modules/kubernetes/services/minio [terraform]: - kubernetes-conda-store-server.postgresql in modules/kubernetes/services/postgresql [terraform]: - kubernetes-conda-store-server.redis in modules/kubernetes/services/redis [terraform]: - kubernetes-jupyterhub-ssh in modules/kubernetes/services/jupyterhub-ssh [terraform]: - kubernetes-nfs-server in modules/kubernetes/nfs-server [terraform]: - monitoring in modules/kubernetes/services/monitoring [terraform]: - monitoring.grafana-client-id in modules/kubernetes/services/keycloak-client [terraform]: - prefect in modules/kubernetes/services/prefect [terraform]: [terraform]: Initializing the backend... [terraform]: [terraform]: Initializing provider plugins... [terraform]: - Finding hashicorp/helm versions matching "2.1.2"... [terraform]: - Finding hashicorp/kubernetes versions matching "2.16.1"... [terraform]: - Finding mrparkers/keycloak versions matching "3.7.0"... [terraform]: - Finding latest version of hashicorp/random... [terraform]: - Finding latest version of hashicorp/tls... [terraform]: - Installing hashicorp/tls v4.0.4... [terraform]: - Installed hashicorp/tls v4.0.4 (signed by HashiCorp) [terraform]: - Installing hashicorp/helm v2.1.2... [terraform]: - Installed hashicorp/helm v2.1.2 (signed by HashiCorp) [terraform]: - Installing hashicorp/kubernetes v2.16.1... [terraform]: - Installed hashicorp/kubernetes v2.16.1 (signed by HashiCorp) [terraform]: - Installing mrparkers/keycloak v3.7.0... [terraform]: - Installed mrparkers/keycloak v3.7.0 (self-signed, key ID C50867915E116CD2) [terraform]: - Installing hashicorp/random v3.4.3... [terraform]: - Installed hashicorp/random v3.4.3 (signed by HashiCorp) [terraform]: [terraform]: Partner and community providers are signed by their developers. [terraform]: If you'd like to know more about provider signing, you can read about it here: [terraform]: https://www.terraform.io/docs/cli/plugins/signing.html [terraform]: [terraform]: Terraform has created a lock file .terraform.lock.hcl to record the provider [terraform]: selections it made above. Include this file in your version control repository [terraform]: so that Terraform can guarantee to make the same selections by default when [terraform]: you run "terraform init" in the future. [terraform]: [terraform]: Terraform has been successfully initialized! [terraform]:  [terraform]: You may now begin working with Terraform. Try running "terraform plan" to see [terraform]: any changes that are required for your infrastructure. All Terraform commands [terraform]: should now work. [terraform]: [terraform]: If you ever set or change modules or backend configuration for Terraform, [terraform]: rerun this command to reinitialize your working directory. If you forget, other [terraform]: commands will detect it and remind you to do so if necessary. [terraform]: [terraform]: Terraform used the selected providers to generate the following execution [terraform]: plan. Resource actions are indicated with the following symbols: [terraform]: + create [terraform]:  [terraform]: Terraform will perform the following actions: [terraform]: [terraform]:  # module.argo-workflows[0].helm_release.argo-workflows will be created [terraform]:  + resource "helm_release" "argo-workflows" { [terraform]: + atomic = false [terraform]: + chart = "argo-workflows" [terraform]: + cleanup_on_fail = false [terraform]: + create_namespace = false [terraform]: + dependency_update = false [terraform]: + disable_crd_hooks = false [terraform]: + disable_openapi_validation = false [terraform]: + disable_webhooks = false [terraform]: + force_update = false [terraform]: + id = (known after apply) [terraform]: + lint = false [terraform]: + manifest = (known after apply) [terraform]: + max_history = 0 [terraform]: + metadata = (known after apply) [terraform]: + name = "argo-workflows" [terraform]: + namespace = "dev" [terraform]: + recreate_pods = false [terraform]: + render_subchart_notes = true [terraform]: + replace = false [terraform]: + repository = "https://argoproj.github.io/argo-helm" [terraform]: + reset_values = false [terraform]: + reuse_values = false [terraform]: + skip_crds = false [terraform]: + status = "deployed" [terraform]: + timeout = 300 [terraform]: + values = [ [terraform]: + <<-EOT [terraform]: # https://github.com/argoproj/argo-helm/blob/argo-workflows-0.13.1/charts/argo-workflows/values.yaml [terraform]: EOT, [terraform]: + jsonencode( [terraform]: { [terraform]: + controller = { [terraform]: + containerRuntimeExecutor = "emissary" [terraform]: } [terraform]: + server = { [terraform]: + baseHref = "/argo/" [terraform]: + extraArgs = [ [terraform]: + "--auth-mode=sso", [terraform]: + "--insecure-skip-verify", [terraform]: ] [terraform]: + nodeSelector = { [terraform]: + kubernetes.io/os = "linux" [terraform]: } [terraform]: + secure = false [terraform]: + sso = { [terraform]: + clientId = { [terraform]: + key = "argo-oidc-client-id" [terraform]: + name = "argo-server-sso" [terraform]: } [terraform]: + clientSecret = { [terraform]: + key = "argo-oidc-client-secret" [terraform]: + name = "argo-server-sso" [terraform]: } [terraform]: + customGroupClaimName = "roles" [terraform]: + insecureSkipVerify = true [terraform]: + issuer = "https://domain/auth/realms/nebari" [terraform]: + rbac = { [terraform]: + enabled = true [terraform]: + secretWhitelist = [] [terraform]: } [terraform]: + redirectUrl = "https://domain/argo/oauth2/callback" [terraform]: + scopes = [ [terraform]: + "roles", [terraform]: ] [terraform]: } [terraform]: } [terraform]: + singleNamespace = true [terraform]: } [terraform]: ), [terraform]: + jsonencode({}), [terraform]: ] [terraform]: + verify = false [terraform]: + version = "0.13.1" [terraform]: + wait = true [terraform]: + wait_for_jobs = false [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].kubernetes_cluster_role_binding.argo-admin-rb will be created [terraform]:  + resource "kubernetes_cluster_role_binding" "argo-admin-rb" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "argo-admin" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + role_ref { [terraform]: + api_group = "rbac.authorization.k8s.io" [terraform]: + kind = "ClusterRole" [terraform]: + name = "argo-workflows-admin" [terraform]: } [terraform]: [terraform]: + subject { [terraform]: + api_group = (known after apply) [terraform]: + kind = "ServiceAccount" [terraform]: + name = "argo-admin" [terraform]: + namespace = "dev" [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].kubernetes_cluster_role_binding.argo-edit-rb will be created [terraform]:  + resource "kubernetes_cluster_role_binding" "argo-edit-rb" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "argo-edit" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + role_ref { [terraform]: + api_group = "rbac.authorization.k8s.io" [terraform]: + kind = "ClusterRole" [terraform]: + name = "argo-workflows-edit" [terraform]: } [terraform]: [terraform]: + subject { [terraform]: + api_group = (known after apply) [terraform]: + kind = "ServiceAccount" [terraform]: + name = "argo-edit" [terraform]: + namespace = "dev" [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].kubernetes_cluster_role_binding.argo-view-rb will be created [terraform]:  + resource "kubernetes_cluster_role_binding" "argo-view-rb" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "argo-view" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + role_ref { [terraform]: + api_group = "rbac.authorization.k8s.io" [terraform]: + kind = "ClusterRole" [terraform]: + name = "argo-workflows-view" [terraform]: } [terraform]: [terraform]: + subject { [terraform]: + api_group = (known after apply) [terraform]: + kind = "ServiceAccount" [terraform]: + name = "argo-view" [terraform]: + namespace = "dev" [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].kubernetes_manifest.argo-workflows-ingress-route will be created [terraform]:  + resource "kubernetes_manifest" "argo-workflows-ingress-route" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + name = "argo-workflows" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && PathPrefix(`/argo`)" [terraform]: + middlewares = [ [terraform]: + { [terraform]: + name = "nebari-argo-workflows-stripprefix" [terraform]: + namespace = "dev" [terraform]: }, [terraform]: ] [terraform]: + services = [ [terraform]: + { [terraform]: + name = "argo-workflows-server" [terraform]: + namespace = "dev" [terraform]: + port = 2746 [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "argo-workflows" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && PathPrefix(`/argo`)" [terraform]: + middlewares = [ [terraform]: + { [terraform]: + name = "nebari-argo-workflows-stripprefix" [terraform]: + namespace = "dev" [terraform]: }, [terraform]: ] [terraform]: + priority = (known after apply) [terraform]: + services = [ [terraform]: + { [terraform]: + kind = (known after apply) [terraform]: + name = "argo-workflows-server" [terraform]: + namespace = "dev" [terraform]: + passHostHeader = (known after apply) [terraform]: + port = "2746" [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + sameSite = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: + tls = { [terraform]: + certResolver = (known after apply) [terraform]: + domains = (known after apply) [terraform]: + options = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: + secretName = (known after apply) [terraform]: + store = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].kubernetes_manifest.argo-workflows-middleware-stripprefix will be created [terraform]:  + resource "kubernetes_manifest" "argo-workflows-middleware-stripprefix" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "Middleware" [terraform]: + metadata = { [terraform]: + name = "nebari-argo-workflows-stripprefix" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + stripPrefix = { [terraform]: + forceSlash = false [terraform]: + prefixes = [ [terraform]: + "/argo/", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "Middleware" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "nebari-argo-workflows-stripprefix" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + addPrefix = { [terraform]: + prefix = (known after apply) [terraform]: } [terraform]: + basicAuth = { [terraform]: + headerField = (known after apply) [terraform]: + realm = (known after apply) [terraform]: + removeHeader = (known after apply) [terraform]: + secret = (known after apply) [terraform]: } [terraform]: + buffering = { [terraform]: + maxRequestBodyBytes = (known after apply) [terraform]: + maxResponseBodyBytes = (known after apply) [terraform]: + memRequestBodyBytes = (known after apply) [terraform]: + memResponseBodyBytes = (known after apply) [terraform]: + retryExpression = (known after apply) [terraform]: } [terraform]: + chain = { [terraform]: + middlewares = (known after apply) [terraform]: } [terraform]: + circuitBreaker = { [terraform]: + expression = (known after apply) [terraform]: } [terraform]: + compress = { [terraform]: + excludedContentTypes = (known after apply) [terraform]: } [terraform]: + contentType = { [terraform]: + autoDetect = (known after apply) [terraform]: } [terraform]: + digestAuth = { [terraform]: + headerField = (known after apply) [terraform]: + realm = (known after apply) [terraform]: + removeHeader = (known after apply) [terraform]: + secret = (known after apply) [terraform]: } [terraform]: + errors = { [terraform]: + query = (known after apply) [terraform]: + service = { [terraform]: + healthCheck = { [terraform]: + headers = (known after apply) [terraform]: + host = (known after apply) [terraform]: + intervalSeconds = (known after apply) [terraform]: + path = (known after apply) [terraform]: + scheme = (known after apply) [terraform]: + timeoutSeconds = (known after apply) [terraform]: } [terraform]: + kind = (known after apply) [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + passHostHeader = (known after apply) [terraform]: + port = (known after apply) [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: + forwardAuth = { [terraform]: + address = (known after apply) [terraform]: + authResponseHeaders = (known after apply) [terraform]: + tls = { [terraform]: + caOptional = (known after apply) [terraform]: + caSecret = (known after apply) [terraform]: + certSecret = (known after apply) [terraform]: + insecureSkipVerify = (known after apply) [terraform]: } [terraform]: + trustForwardHeader = (known after apply) [terraform]: } [terraform]: + headers = { [terraform]: + accessControlAllowCredentials = (known after apply) [terraform]: + accessControlAllowHeaders = (known after apply) [terraform]: + accessControlAllowMethods = (known after apply) [terraform]: + accessControlAllowOrigin = (known after apply) [terraform]: + accessControlAllowOriginList = (known after apply) [terraform]: + accessControlExposeHeaders = (known after apply) [terraform]: + accessControlMaxAge = (known after apply) [terraform]: + addVaryHeader = (known after apply) [terraform]: + allowedHosts = (known after apply) [terraform]: + browserXssFilter = (known after apply) [terraform]: + contentSecurityPolicy = (known after apply) [terraform]: + contentTypeNosniff = (known after apply) [terraform]: + customBrowserXSSValue = (known after apply) [terraform]: + customFrameOptionsValue = (known after apply) [terraform]: + customRequestHeaders = (known after apply) [terraform]: + customResponseHeaders = (known after apply) [terraform]: + featurePolicy = (known after apply) [terraform]: + forceSTSheader = (known after apply) [terraform]: + frameDeny = (known after apply) [terraform]: + hostsProxyHeaders = (known after apply) [terraform]: + isDevelopment = (known after apply) [terraform]: + publicKey = (known after apply) [terraform]: + referrerPolicy = (known after apply) [terraform]: + sslForceHost = (known after apply) [terraform]: + sslHost = (known after apply) [terraform]: + sslProxyHeaders = (known after apply) [terraform]: + sslRedirect = (known after apply) [terraform]: + sslTemporaryRedirect = (known after apply) [terraform]: + stsIncludeSubdomains = (known after apply) [terraform]: + stsPreload = (known after apply) [terraform]: + stsSeconds = (known after apply) [terraform]: } [terraform]: + inFlightReq = { [terraform]: + amount = (known after apply) [terraform]: + sourceCriterion = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + requestHeaderName = (known after apply) [terraform]: + requestHost = (known after apply) [terraform]: } [terraform]: } [terraform]: + ipWhiteList = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + sourceRange = (known after apply) [terraform]: } [terraform]: + passTLSClientCert = { [terraform]: + info = { [terraform]: + issuer = { [terraform]: + commonName = (known after apply) [terraform]: + country = (known after apply) [terraform]: + domainComponent = (known after apply) [terraform]: + locality = (known after apply) [terraform]: + organization = (known after apply) [terraform]: + province = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: } [terraform]: + notAfter = (known after apply) [terraform]: + notBefore = (known after apply) [terraform]: + sans = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: + subject = { [terraform]: + commonName = (known after apply) [terraform]: + country = (known after apply) [terraform]: + domainComponent = (known after apply) [terraform]: + locality = (known after apply) [terraform]: + organization = (known after apply) [terraform]: + province = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: } [terraform]: } [terraform]: + pem = (known after apply) [terraform]: } [terraform]: + rateLimit = { [terraform]: + average = (known after apply) [terraform]: + burst = (known after apply) [terraform]: + sourceCriterion = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + requestHeaderName = (known after apply) [terraform]: + requestHost = (known after apply) [terraform]: } [terraform]: } [terraform]: + redirectRegex = { [terraform]: + permanent = (known after apply) [terraform]: + regex = (known after apply) [terraform]: + replacement = (known after apply) [terraform]: } [terraform]: + redirectScheme = { [terraform]: + permanent = (known after apply) [terraform]: + port = (known after apply) [terraform]: + scheme = (known after apply) [terraform]: } [terraform]: + replacePath = { [terraform]: + path = (known after apply) [terraform]: } [terraform]: + replacePathRegex = { [terraform]: + regex = (known after apply) [terraform]: + replacement = (known after apply) [terraform]: } [terraform]: + retry = { [terraform]: + attempts = (known after apply) [terraform]: } [terraform]: + stripPrefix = { [terraform]: + forceSlash = false [terraform]: + prefixes = [ [terraform]: + "/argo/", [terraform]: ] [terraform]: } [terraform]: + stripPrefixRegex = { [terraform]: + regex = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].kubernetes_secret.argo-oidc-secret will be created [terraform]:  + resource "kubernetes_secret" "argo-oidc-secret" { [terraform]: + data = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + type = "Opaque" [terraform]: + wait_for_service_account_token = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "argo-server-sso" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].kubernetes_service_account.argo-admin-sa will be created [terraform]:  + resource "kubernetes_service_account" "argo-admin-sa" { [terraform]: + automount_service_account_token = true [terraform]: + default_secret_name = (known after apply) [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + annotations = { [terraform]: + "workflows.argoproj.io/rbac-rule" = "'argo_admin' in groups" [terraform]: + "workflows.argoproj.io/rbac-rule-precedence" = "11" [terraform]: } [terraform]: + generation = (known after apply) [terraform]: + name = "argo-admin" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].kubernetes_service_account.argo-edit-sa will be created [terraform]:  + resource "kubernetes_service_account" "argo-edit-sa" { [terraform]: + automount_service_account_token = true [terraform]: + default_secret_name = (known after apply) [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + annotations = { [terraform]: + "workflows.argoproj.io/rbac-rule" = "'argo_developer' in groups" [terraform]: + "workflows.argoproj.io/rbac-rule-precedence" = "10" [terraform]: } [terraform]: + generation = (known after apply) [terraform]: + name = "argo-edit" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].kubernetes_service_account.argo-view-sa will be created [terraform]:  + resource "kubernetes_service_account" "argo-view-sa" { [terraform]: + automount_service_account_token = true [terraform]: + default_secret_name = (known after apply) [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + annotations = { [terraform]: + "workflows.argoproj.io/rbac-rule" = "'argo_viewer' in groups" [terraform]: + "workflows.argoproj.io/rbac-rule-precedence" = "9" [terraform]: } [terraform]: + generation = (known after apply) [terraform]: + name = "argo-view" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.conda-store-nfs-mount.kubernetes_persistent_volume.main will be created [terraform]:  + resource "kubernetes_persistent_volume" "main" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "conda-store-dev-share" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + access_modes = [ [terraform]: + "ReadWriteMany", [terraform]: ] [terraform]: + capacity = { [terraform]: + "storage" = "200Gi" [terraform]: } [terraform]: + persistent_volume_reclaim_policy = "Retain" [terraform]: + storage_class_name = "conda-store-dev-share" [terraform]: + volume_mode = "Filesystem" [terraform]: [terraform]: + claim_ref { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: [terraform]: + node_affinity { [terraform]: + required { [terraform]: + node_selector_term { [terraform]: + match_expressions { [terraform]: + key = (known after apply) [terraform]: + operator = (known after apply) [terraform]: + values = (known after apply) [terraform]: } [terraform]: [terraform]: + match_fields { [terraform]: + key = (known after apply) [terraform]: + operator = (known after apply) [terraform]: + values = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + persistent_volume_source { [terraform]: [terraform]: + nfs { [terraform]: + path = "/" [terraform]: + server = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.conda-store-nfs-mount.kubernetes_persistent_volume_claim.main will be created [terraform]:  + resource "kubernetes_persistent_volume_claim" "main" { [terraform]: + id = (known after apply) [terraform]: + wait_until_bound = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "conda-store-dev-share" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + access_modes = [ [terraform]: + "ReadWriteMany", [terraform]: ] [terraform]: + storage_class_name = "conda-store-dev-share" [terraform]: + volume_name = (known after apply) [terraform]: [terraform]: + resources { [terraform]: + requests = { [terraform]: + "storage" = "200Gi" [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.conda-store-nfs-mount.kubernetes_storage_class.main will be created [terraform]:  + resource "kubernetes_storage_class" "main" { [terraform]: + allow_volume_expansion = true [terraform]: + id = (known after apply) [terraform]: + reclaim_policy = "Delete" [terraform]: + storage_provisioner = "kubernetes.io/fake-nfs" [terraform]: + volume_binding_mode = "Immediate" [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "conda-store-dev-share" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_cluster_role.controller will be created [terraform]:  + resource "kubernetes_cluster_role" "controller" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-daskgateway-controller" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + rule { [terraform]: + api_groups = [ [terraform]: + "gateway.dask.org", [terraform]: ] [terraform]: + resources = [ [terraform]: + "daskclusters", [terraform]: + "daskclusters/status", [terraform]: ] [terraform]: + verbs = [ [terraform]: + "*", [terraform]: ] [terraform]: } [terraform]: + rule { [terraform]: + api_groups = [ [terraform]: + "traefik.containo.us", [terraform]: ] [terraform]: + resources = [ [terraform]: + "ingressroutes", [terraform]: + "ingressroutetcps", [terraform]: ] [terraform]: + verbs = [ [terraform]: + "get", [terraform]: + "create", [terraform]: + "delete", [terraform]: ] [terraform]: } [terraform]: + rule { [terraform]: + api_groups = [ [terraform]: + "", [terraform]: ] [terraform]: + resources = [ [terraform]: + "pods", [terraform]: ] [terraform]: + verbs = [ [terraform]: + "get", [terraform]: + "list", [terraform]: + "watch", [terraform]: + "create", [terraform]: + "delete", [terraform]: ] [terraform]: } [terraform]: + rule { [terraform]: + api_groups = [ [terraform]: + "", [terraform]: ] [terraform]: + resources = [ [terraform]: + "endpoints", [terraform]: ] [terraform]: + verbs = [ [terraform]: + "get", [terraform]: + "list", [terraform]: + "watch", [terraform]: ] [terraform]: } [terraform]: + rule { [terraform]: + api_groups = [ [terraform]: + "", [terraform]: ] [terraform]: + resources = [ [terraform]: + "secrets", [terraform]: + "services", [terraform]: ] [terraform]: + verbs = [ [terraform]: + "create", [terraform]: + "delete", [terraform]: ] [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_cluster_role.gateway will be created [terraform]:  + resource "kubernetes_cluster_role" "gateway" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-daskgateway-gateway" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + rule { [terraform]: + api_groups = [ [terraform]: + "", [terraform]: ] [terraform]: + resources = [ [terraform]: + "secrets", [terraform]: ] [terraform]: + verbs = [ [terraform]: + "get", [terraform]: ] [terraform]: } [terraform]: + rule { [terraform]: + api_groups = [ [terraform]: + "gateway.dask.org", [terraform]: ] [terraform]: + resources = [ [terraform]: + "daskclusters", [terraform]: ] [terraform]: + verbs = [ [terraform]: + "*", [terraform]: ] [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_cluster_role_binding.controller will be created [terraform]:  + resource "kubernetes_cluster_role_binding" "controller" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-daskgateway-controller" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + role_ref { [terraform]: + api_group = "rbac.authorization.k8s.io" [terraform]: + kind = "ClusterRole" [terraform]: + name = "nebari-daskgateway-controller" [terraform]: } [terraform]: [terraform]: + subject { [terraform]: + api_group = (known after apply) [terraform]: + kind = "ServiceAccount" [terraform]: + name = "nebari-daskgateway-controller" [terraform]: + namespace = "dev" [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_cluster_role_binding.gateway will be created [terraform]:  + resource "kubernetes_cluster_role_binding" "gateway" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-daskgateway-gateway" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + role_ref { [terraform]: + api_group = "rbac.authorization.k8s.io" [terraform]: + kind = "ClusterRole" [terraform]: + name = "nebari-daskgateway-gateway" [terraform]: } [terraform]: [terraform]: + subject { [terraform]: + api_group = (known after apply) [terraform]: + kind = "ServiceAccount" [terraform]: + name = "nebari-daskgateway-gateway" [terraform]: + namespace = "dev" [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_config_map.controller will be created [terraform]:  + resource "kubernetes_config_map" "controller" { [terraform]: + data = { [terraform]: + "dask_gateway_config.py" = <<-EOT [terraform]: import json [terraform]: [terraform]: [terraform]: def dask_gateway_config(path="/var/lib/dask-gateway/config.json"): [terraform]: with open(path) as f: [terraform]: return json.load(f) [terraform]: [terraform]: [terraform]: config = dask_gateway_config() [terraform]: [terraform]: c.KubeController.address = ":8000" [terraform]: c.KubeController.api_url = f'http://{config["gateway_service_name"]}.{config["gateway_service_namespace"]}:8000/api' [terraform]: c.KubeController.gateway_instance = config["gateway_service_name"] [terraform]: c.KubeController.proxy_prefix = config["gateway"]["prefix"] [terraform]: c.KubeController.proxy_web_middlewares = [ [terraform]: { [terraform]: "name": config["gateway_cluster_middleware_name"], [terraform]: "namespace": config["gateway_cluster_middleware_namespace"], [terraform]: } [terraform]: ] [terraform]: c.KubeController.log_level = config["controller"]["loglevel"] [terraform]: c.KubeController.completed_cluster_max_age = config["controller"][ [terraform]: "completedClusterMaxAge" [terraform]: ] [terraform]: c.KubeController.completed_cluster_cleanup_period = config["controller"][ [terraform]: "completedClusterCleanupPeriod" [terraform]: ] [terraform]: c.KubeController.backoff_base_delay = config["controller"]["backoffBaseDelay"] [terraform]: c.KubeController.backoff_max_delay = config["controller"]["backoffMaxDelay"] [terraform]: c.KubeController.k8s_api_rate_limit = config["controller"]["k8sApiRateLimit"] [terraform]: c.KubeController.k8s_api_rate_limit_burst = config["controller"]["k8sApiRateLimitBurst"] [terraform]: [terraform]: c.KubeController.proxy_web_entrypoint = "websecure" [terraform]: c.KubeController.proxy_tcp_entrypoint = "tcp" [terraform]: EOT [terraform]: } [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-daskgateway-controller" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_config_map.dask-etc will be created [terraform]:  + resource "kubernetes_config_map" "dask-etc" { [terraform]: + data = { [terraform]: + "dashboard.yaml" = jsonencode({}) [terraform]: + "gateway.yaml" = jsonencode( [terraform]: { [terraform]: + gateway = { [terraform]: + address = "http://nebari-dask-gateway-gateway-api.dev:8000" [terraform]: + auth = { [terraform]: + type = "jupyterhub" [terraform]: } [terraform]: + proxy_address = "tcp://domain:8786" [terraform]: + public_address = "https://domain/gateway" [terraform]: } [terraform]: } [terraform]: ) [terraform]: } [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "dask-etc" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_config_map.gateway will be created [terraform]:  + resource "kubernetes_config_map" "gateway" { [terraform]: + data = { [terraform]: + "dask_gateway_config.py" = <<-EOT [terraform]: import functools [terraform]: import json [terraform]: import os [terraform]: [terraform]: from aiohttp import web [terraform]: from dask_gateway_server.auth import JupyterHubAuthenticator [terraform]: from dask_gateway_server.options import Mapping, Options, Select [terraform]: [terraform]: [terraform]: def dask_gateway_config(path="/var/lib/dask-gateway/config.json"): [terraform]: with open(path) as f: [terraform]: return json.load(f) [terraform]: [terraform]: [terraform]: config = dask_gateway_config() [terraform]: [terraform]: [terraform]: c.DaskGateway.log_level = config["gateway"]["loglevel"] [terraform]: [terraform]: # Configure addresses [terraform]: c.DaskGateway.address = ":8000" [terraform]: c.KubeBackend.api_url = f'http://{config["gateway_service_name"]}.{config["gateway_service_namespace"]}:8000/api' [terraform]: [terraform]: c.DaskGateway.backend_class = "dask_gateway_server.backends.kubernetes.KubeBackend" [terraform]: c.KubeBackend.gateway_instance = config["gateway_service_name"] [terraform]: [terraform]: # ========= Dask Cluster Default Configuration ========= [terraform]: c.KubeClusterConfig.image = ( [terraform]: f"{config['cluster-image']['name']}:{config['cluster-image']['tag']}" [terraform]: ) [terraform]: c.KubeClusterConfig.image_pull_policy = config["cluster"]["image_pull_policy"] [terraform]: c.KubeClusterConfig.environment = config["cluster"]["environment"] [terraform]: c.KubeClusterConfig.idle_timeout = config["cluster"]["idle_timeout"] [terraform]: [terraform]: c.KubeClusterConfig.scheduler_cores = config["cluster"]["scheduler_cores"] [terraform]: c.KubeClusterConfig.scheduler_cores_limit = config["cluster"]["scheduler_cores_limit"] [terraform]: c.KubeClusterConfig.scheduler_memory = config["cluster"]["scheduler_memory"] [terraform]: c.KubeClusterConfig.scheduler_memory_limit = config["cluster"]["scheduler_memory_limit"] [terraform]: c.KubeClusterConfig.scheduler_extra_container_config = config["cluster"][ [terraform]: "scheduler_extra_container_config" [terraform]: ] [terraform]: c.KubeClusterConfig.scheduler_extra_pod_config = config["cluster"][ [terraform]: "scheduler_extra_pod_config" [terraform]: ] [terraform]: [terraform]: c.KubeClusterConfig.worker_cores = config["cluster"]["worker_cores"] [terraform]: c.KubeClusterConfig.worker_cores_limit = config["cluster"]["worker_cores_limit"] [terraform]: c.KubeClusterConfig.worker_memory = config["cluster"]["worker_memory"] [terraform]: c.KubeClusterConfig.worker_memory_limit = config["cluster"]["worker_memory_limit"] [terraform]: c.KubeClusterConfig.worker_extra_container_config = config["cluster"][ [terraform]: "worker_extra_container_config" [terraform]: ] [terraform]: c.KubeClusterConfig.worker_extra_pod_config = config["cluster"][ [terraform]: "worker_extra_pod_config" [terraform]: ] [terraform]: [terraform]: [terraform]: # ============ Authentication ================= [terraform]: class NebariAuthentication(JupyterHubAuthenticator): [terraform]: async def authenticate(self, request): [terraform]: user = await super().authenticate(request) [terraform]: url = f"{self.jupyterhub_api_url}/users/{user.name}" [terraform]: kwargs = { [terraform]: "headers": {"Authorization": "token %s" % self.jupyterhub_api_token}, [terraform]: "ssl": self.ssl_context, [terraform]: } [terraform]: resp = await self.session.get(url, **kwargs) [terraform]: data = (await resp.json())["auth_state"]["oauth_user"] [terraform]: [terraform]: if ( [terraform]: "dask_gateway_developer" not in data["roles"] [terraform]: and "dask_gateway_admin" not in data["roles"] [terraform]: ): [terraform]: raise web.HTTPInternalServerError( [terraform]: reason="Permission failure user does not have required dask_gateway roles" [terraform]: ) [terraform]: [terraform]: user.admin = "dask_gateway_admin" in data["roles"] [terraform]: user.groups = [os.path.basename(group) for group in data["groups"]] [terraform]: return user [terraform]: [terraform]: [terraform]: c.DaskGateway.authenticator_class = NebariAuthentication [terraform]: c.JupyterHubAuthenticator.jupyterhub_api_url = config["jupyterhub_api_url"] [terraform]: c.JupyterHubAuthenticator.jupyterhub_api_token = config["jupyterhub_api_token"] [terraform]: [terraform]: [terraform]: # ==================== Profiles ======================= [terraform]: def get_packages(conda_prefix): [terraform]: try: [terraform]: packages = set() [terraform]: for filename in os.listdir(os.path.join(conda_prefix, "conda-meta")): [terraform]: if filename.endswith(".json"): [terraform]: with open(os.path.join(conda_prefix, "conda-meta", filename)) as f: [terraform]: packages.add(json.load(f).get("name")) [terraform]: return packages [terraform]: except OSError as e: [terraform]: import logging [terraform]: [terraform]: logger = logging.getLogger() [terraform]: logger.error(f"An issue with a conda environment was encountered.\n{e}") [terraform]: [terraform]: [terraform]: def get_conda_prefixes(conda_store_mount): [terraform]: for namespace in os.listdir(conda_store_mount): [terraform]: if os.path.isdir(os.path.join(conda_store_mount, namespace, "envs")): [terraform]: for name in os.listdir(os.path.join(conda_store_mount, namespace, "envs")): [terraform]: yield namespace, name, os.path.join( [terraform]: conda_store_mount, namespace, "envs", name [terraform]: ) [terraform]: [terraform]: [terraform]: def list_dask_environments(conda_store_mount): [terraform]: for namespace, name, conda_prefix in get_conda_prefixes(conda_store_mount): [terraform]: packages = get_packages(conda_prefix) [terraform]: if packages and {"dask", "distributed"} <= packages: [terraform]: yield namespace, name, conda_prefix [terraform]: [terraform]: [terraform]: def base_node_group(options): [terraform]: default_node_group = { [terraform]: config["worker-node-group"]["key"]: config["worker-node-group"]["value"] [terraform]: } [terraform]: [terraform]: # check `worker_extra_pod_config` first [terraform]: worker_node_group = ( [terraform]: config["profiles"][options.profile] [terraform]: .get("worker_extra_pod_config", {}) [terraform]: .get("nodeSelector") [terraform]: ) [terraform]: worker_node_group = ( [terraform]: default_node_group if worker_node_group is None else worker_node_group [terraform]: ) [terraform]: [terraform]: # check `schduler_extra_pod_config` first [terraform]: scheduler_node_group = ( [terraform]: config["profiles"][options.profile] [terraform]: .get("scheduler_extra_pod_config", {}) [terraform]: .get("nodeSelector") [terraform]: ) [terraform]: scheduler_node_group = ( [terraform]: default_node_group if scheduler_node_group is None else scheduler_node_group [terraform]: ) [terraform]: [terraform]: return { [terraform]: "scheduler_extra_pod_config": {"nodeSelector": scheduler_node_group}, [terraform]: "worker_extra_pod_config": {"nodeSelector": worker_node_group}, [terraform]: } [terraform]: [terraform]: [terraform]: def base_conda_store_mounts(namespace, name): [terraform]: conda_store_pvc_name = config["conda-store-pvc"] [terraform]: conda_store_mount = config["conda-store-mount"] [terraform]: [terraform]: return { [terraform]: "scheduler_extra_pod_config": { [terraform]: "volumes": [ [terraform]: { [terraform]: "name": "conda-store", [terraform]: "persistentVolumeClaim": { [terraform]: "claimName": conda_store_pvc_name, [terraform]: }, [terraform]: } [terraform]: ] [terraform]: }, [terraform]: "scheduler_extra_container_config": { [terraform]: "volumeMounts": [ [terraform]: { [terraform]: "mountPath": os.path.join(conda_store_mount, namespace), [terraform]: "name": "conda-store", [terraform]: "subPath": namespace, [terraform]: } [terraform]: ] [terraform]: }, [terraform]: "worker_extra_pod_config": { [terraform]: "volumes": [ [terraform]: { [terraform]: "name": "conda-store", [terraform]: "persistentVolumeClaim": { [terraform]: "claimName": conda_store_pvc_name, [terraform]: }, [terraform]: } [terraform]: ] [terraform]: }, [terraform]: "worker_extra_container_config": { [terraform]: "volumeMounts": [ [terraform]: { [terraform]: "mountPath": os.path.join(conda_store_mount, namespace), [terraform]: "name": "conda-store", [terraform]: "subPath": namespace, [terraform]: } [terraform]: ] [terraform]: }, [terraform]: "worker_cmd": "/opt/conda-run-worker", [terraform]: "scheduler_cmd": "/opt/conda-run-scheduler", [terraform]: "environment": { [terraform]: "CONDA_ENVIRONMENT": os.path.join( [terraform]: conda_store_mount, namespace, "envs", name [terraform]: ), [terraform]: }, [terraform]: } [terraform]: [terraform]: [terraform]: def base_username_mount(username, uid=1000, gid=100): [terraform]: return { [terraform]: "scheduler_extra_pod_config": {"volumes": [{"name": "home", "emptyDir": {}}]}, [terraform]: "scheduler_extra_container_config": { [terraform]: "securityContext": {"runAsUser": uid, "runAsGroup": gid, "fsGroup": gid}, [terraform]: "workingDir": f"/home/{username}", [terraform]: "volumeMounts": [ [terraform]: { [terraform]: "mountPath": f"/home/{username}", [terraform]: "name": "home", [terraform]: } [terraform]: ], [terraform]: }, [terraform]: "worker_extra_pod_config": {"volumes": [{"name": "home", "emptyDir": {}}]}, [terraform]: "worker_extra_container_config": { [terraform]: "securityContext": {"runAsUser": uid, "runAsGroup": gid, "fsGroup": gid}, [terraform]: "workingDir": f"/home/{username}", [terraform]: "volumeMounts": [ [terraform]: { [terraform]: "mountPath": f"/home/{username}", [terraform]: "name": "home", [terraform]: } [terraform]: ], [terraform]: }, [terraform]: "environment": { [terraform]: "HOME": f"/home/{username}", [terraform]: }, [terraform]: } [terraform]: [terraform]: [terraform]: def worker_profile(options, user): [terraform]: namespace, name = options.conda_environment.split("/") [terraform]: return functools.reduce( [terraform]: deep_merge, [terraform]: [ [terraform]: base_node_group(options), [terraform]: base_conda_store_mounts(namespace, name), [terraform]: base_username_mount(user.name), [terraform]: config["profiles"][options.profile], [terraform]: {"environment": {**options.environment_vars}}, [terraform]: ], [terraform]: {}, [terraform]: ) [terraform]: [terraform]: [terraform]: def user_options(user): [terraform]: default_namespace = config["default-conda-store-namespace"] [terraform]: allowed_namespaces = set( [terraform]: [default_namespace, "global", user.name] + list(user.groups) [terraform]: ) [terraform]: environments = { [terraform]: f"{namespace}/{name}": conda_prefix [terraform]: for namespace, name, conda_prefix in list_dask_environments( [terraform]: config["conda-store-mount"] [terraform]: ) [terraform]: if namespace in allowed_namespaces [terraform]: } [terraform]: [terraform]: args = [] [terraform]: if environments: [terraform]: args += [ [terraform]: Select( [terraform]: "conda_environment", [terraform]: list(environments.keys()), [terraform]: default=list(environments.keys())[0], [terraform]: label="Environment", [terraform]: ) [terraform]: ] [terraform]: if config["profiles"]: [terraform]: args += [ [terraform]: Select( [terraform]: "profile", [terraform]: list(config["profiles"].keys()), [terraform]: default=list(config["profiles"].keys())[0], [terraform]: label="Cluster Profile", [terraform]: ) [terraform]: ] [terraform]: [terraform]: args += [ [terraform]: Mapping("environment_vars", {}, label="Environment Variables"), [terraform]: ] [terraform]: [terraform]: return Options( [terraform]: *args, [terraform]: handler=worker_profile, [terraform]: ) [terraform]: [terraform]: [terraform]: c.Backend.cluster_options = user_options [terraform]: [terraform]: [terraform]: # ============== utils ============ [terraform]: def deep_merge(d1, d2): [terraform]: """Deep merge two dictionaries. [terraform]: >>> value_1 = { [terraform]: 'a': [1, 2], [terraform]: 'b': {'c': 1, 'z': [5, 6]}, [terraform]: 'e': {'f': {'g': {}}}, [terraform]: 'm': 1, [terraform]: }. [terraform]: [terraform]: >>> value_2 = { [terraform]: 'a': [3, 4], [terraform]: 'b': {'d': 2, 'z': [7]}, [terraform]: 'e': {'f': {'h': 1}}, [terraform]: 'm': [1], [terraform]: } [terraform]: [terraform]: >>> print(deep_merge(value_1, value_2)) [terraform]: {'m': 1, 'e': {'f': {'g': {}, 'h': 1}}, 'b': {'d': 2, 'c': 1, 'z': [5, 6, 7]}, 'a': [1, 2, 3, 4]} [terraform]: """ [terraform]: if isinstance(d1, dict) and isinstance(d2, dict): [terraform]: d3 = {} [terraform]: for key in d1.keys() | d2.keys(): [terraform]: if key in d1 and key in d2: [terraform]: d3[key] = deep_merge(d1[key], d2[key]) [terraform]: elif key in d1: [terraform]: d3[key] = d1[key] [terraform]: elif key in d2: [terraform]: d3[key] = d2[key] [terraform]: return d3 [terraform]: elif isinstance(d1, list) and isinstance(d2, list): [terraform]: return [*d1, *d2] [terraform]: else: # if they don't match use left one [terraform]: return d1 [terraform]: EOT [terraform]: } [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-daskgateway-gateway" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_deployment.controller will be created [terraform]:  + resource "kubernetes_deployment" "controller" { [terraform]: + id = (known after apply) [terraform]: + wait_for_rollout = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-daskgateway-controller" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + min_ready_seconds = 0 [terraform]: + paused = false [terraform]: + progress_deadline_seconds = 600 [terraform]: + replicas = "1" [terraform]: + revision_history_limit = 10 [terraform]: [terraform]: + selector { [terraform]: + match_labels = { [terraform]: + "app.kubernetes.io/component" = "dask-gateway-controller" [terraform]: } [terraform]: } [terraform]: [terraform]: + strategy { [terraform]: + type = "Recreate" [terraform]: [terraform]: + rolling_update { [terraform]: + max_surge = (known after apply) [terraform]: + max_unavailable = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + template { [terraform]: + metadata { [terraform]: + annotations = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "app.kubernetes.io/component" = "dask-gateway-controller" [terraform]: } [terraform]: + name = (known after apply) [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + automount_service_account_token = true [terraform]: + dns_policy = "ClusterFirst" [terraform]: + enable_service_links = true [terraform]: + host_ipc = false [terraform]: + host_network = false [terraform]: + host_pid = false [terraform]: + hostname = (known after apply) [terraform]: + node_name = (known after apply) [terraform]: + restart_policy = "Always" [terraform]: + service_account_name = "nebari-daskgateway-controller" [terraform]: + share_process_namespace = false [terraform]: + termination_grace_period_seconds = 30 [terraform]: [terraform]: + affinity { [terraform]: + node_affinity { [terraform]: [terraform]: + required_during_scheduling_ignored_during_execution { [terraform]: + node_selector_term { [terraform]: + match_expressions { [terraform]: + key = "kubernetes.io/os" [terraform]: + operator = "In" [terraform]: + values = [ [terraform]: + "linux", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + container { [terraform]: + command = [ [terraform]: + "dask-gateway-server", [terraform]: + "kube-controller", [terraform]: + "--config", [terraform]: + "/etc/dask-gateway/dask_gateway_config.py", [terraform]: ] [terraform]: + image = "ghcr.io/dask/dask-gateway-server:2022.4.0" [terraform]: + image_pull_policy = (known after apply) [terraform]: + name = "nebari-daskgateway-controller" [terraform]: + stdin = false [terraform]: + stdin_once = false [terraform]: + termination_message_path = "/dev/termination-log" [terraform]: + termination_message_policy = (known after apply) [terraform]: + tty = false [terraform]: [terraform]: + port { [terraform]: + container_port = 8000 [terraform]: + name = "api" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: [terraform]: + resources { [terraform]: + limits = (known after apply) [terraform]: + requests = (known after apply) [terraform]: } [terraform]: [terraform]: + volume_mount { [terraform]: + mount_path = "/etc/dask-gateway/" [terraform]: + mount_propagation = "None" [terraform]: + name = "configmap" [terraform]: + read_only = false [terraform]: } [terraform]: + volume_mount { [terraform]: + mount_path = "/var/lib/dask-gateway/" [terraform]: + mount_propagation = "None" [terraform]: + name = "secret" [terraform]: + read_only = false [terraform]: } [terraform]: } [terraform]: [terraform]: + image_pull_secrets { [terraform]: + name = (known after apply) [terraform]: } [terraform]: [terraform]: + readiness_gate { [terraform]: + condition_type = (known after apply) [terraform]: } [terraform]: [terraform]: + volume { [terraform]: + name = "configmap" [terraform]: [terraform]: + config_map { [terraform]: + default_mode = "0644" [terraform]: + name = "nebari-daskgateway-controller" [terraform]: } [terraform]: } [terraform]: + volume { [terraform]: + name = "secret" [terraform]: [terraform]: + secret { [terraform]: + default_mode = "0644" [terraform]: + secret_name = "nebari-daskgateway-gateway" [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_deployment.gateway will be created [terraform]:  + resource "kubernetes_deployment" "gateway" { [terraform]: + id = (known after apply) [terraform]: + wait_for_rollout = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-daskgateway-gateway" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + min_ready_seconds = 0 [terraform]: + paused = false [terraform]: + progress_deadline_seconds = 600 [terraform]: + replicas = "1" [terraform]: + revision_history_limit = 10 [terraform]: [terraform]: + selector { [terraform]: + match_labels = { [terraform]: + "app.kubernetes.io/component" = "dask-gateway-gateway" [terraform]: } [terraform]: } [terraform]: [terraform]: + strategy { [terraform]: + type = (known after apply) [terraform]: [terraform]: + rolling_update { [terraform]: + max_surge = (known after apply) [terraform]: + max_unavailable = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + template { [terraform]: + metadata { [terraform]: + annotations = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "app.kubernetes.io/component" = "dask-gateway-gateway" [terraform]: } [terraform]: + name = (known after apply) [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + automount_service_account_token = true [terraform]: + dns_policy = "ClusterFirst" [terraform]: + enable_service_links = true [terraform]: + host_ipc = false [terraform]: + host_network = false [terraform]: + host_pid = false [terraform]: + hostname = (known after apply) [terraform]: + node_name = (known after apply) [terraform]: + restart_policy = "Always" [terraform]: + service_account_name = "nebari-daskgateway-gateway" [terraform]: + share_process_namespace = false [terraform]: + termination_grace_period_seconds = 30 [terraform]: [terraform]: + affinity { [terraform]: + node_affinity { [terraform]: [terraform]: + required_during_scheduling_ignored_during_execution { [terraform]: + node_selector_term { [terraform]: + match_expressions { [terraform]: + key = "kubernetes.io/os" [terraform]: + operator = "In" [terraform]: + values = [ [terraform]: + "linux", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + container { [terraform]: + command = [ [terraform]: + "dask-gateway-server", [terraform]: + "--config", [terraform]: + "/etc/dask-gateway/dask_gateway_config.py", [terraform]: ] [terraform]: + image = "ghcr.io/dask/dask-gateway-server:2022.4.0" [terraform]: + image_pull_policy = (known after apply) [terraform]: + name = "nebari" [terraform]: + stdin = false [terraform]: + stdin_once = false [terraform]: + termination_message_path = "/dev/termination-log" [terraform]: + termination_message_policy = (known after apply) [terraform]: + tty = false [terraform]: [terraform]: + liveness_probe { [terraform]: + failure_threshold = 6 [terraform]: + initial_delay_seconds = 5 [terraform]: + period_seconds = 10 [terraform]: + success_threshold = 1 [terraform]: + timeout_seconds = 2 [terraform]: [terraform]: + http_get { [terraform]: + path = "/api/health" [terraform]: + port = "api" [terraform]: + scheme = "HTTP" [terraform]: } [terraform]: } [terraform]: [terraform]: + port { [terraform]: + container_port = 8000 [terraform]: + name = "api" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: [terraform]: + readiness_probe { [terraform]: + failure_threshold = 3 [terraform]: + initial_delay_seconds = 5 [terraform]: + period_seconds = 10 [terraform]: + success_threshold = 1 [terraform]: + timeout_seconds = 2 [terraform]: [terraform]: + http_get { [terraform]: + path = "/api/health" [terraform]: + port = "api" [terraform]: + scheme = "HTTP" [terraform]: } [terraform]: } [terraform]: [terraform]: + resources { [terraform]: + limits = { [terraform]: + "cpu" = "0.5" [terraform]: + "memory" = "512Mi" [terraform]: } [terraform]: + requests = { [terraform]: + "cpu" = "250m" [terraform]: + "memory" = "50Mi" [terraform]: } [terraform]: } [terraform]: [terraform]: + volume_mount { [terraform]: + mount_path = "/etc/dask-gateway/" [terraform]: + mount_propagation = "None" [terraform]: + name = "configmap" [terraform]: + read_only = false [terraform]: } [terraform]: + volume_mount { [terraform]: + mount_path = "/var/lib/dask-gateway/" [terraform]: + mount_propagation = "None" [terraform]: + name = "secret" [terraform]: + read_only = false [terraform]: } [terraform]: + volume_mount { [terraform]: + mount_path = "/home/conda" [terraform]: + mount_propagation = "None" [terraform]: + name = "conda-store" [terraform]: + read_only = false [terraform]: } [terraform]: } [terraform]: [terraform]: + image_pull_secrets { [terraform]: + name = (known after apply) [terraform]: } [terraform]: [terraform]: + readiness_gate { [terraform]: + condition_type = (known after apply) [terraform]: } [terraform]: [terraform]: + volume { [terraform]: + name = "configmap" [terraform]: [terraform]: + config_map { [terraform]: + default_mode = "0644" [terraform]: + name = "nebari-daskgateway-gateway" [terraform]: } [terraform]: } [terraform]: + volume { [terraform]: + name = "secret" [terraform]: [terraform]: + secret { [terraform]: + default_mode = "0644" [terraform]: + secret_name = "nebari-daskgateway-gateway" [terraform]: } [terraform]: } [terraform]: + volume { [terraform]: + name = "conda-store" [terraform]: [terraform]: + persistent_volume_claim { [terraform]: + claim_name = "conda-store-dev-share" [terraform]: + read_only = false [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_manifest.chain-middleware will be created [terraform]:  + resource "kubernetes_manifest" "chain-middleware" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "Middleware" [terraform]: + metadata = { [terraform]: + name = "nebari-dask-gateway-chain" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + chain = { [terraform]: + middlewares = [ [terraform]: + { [terraform]: + name = "traefik-forward-auth" [terraform]: + namespace = "dev" [terraform]: }, [terraform]: + { [terraform]: + name = "nebari-dask-gateway-cluster-stripprefix" [terraform]: + namespace = "dev" [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "Middleware" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "nebari-dask-gateway-chain" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + addPrefix = { [terraform]: + prefix = (known after apply) [terraform]: } [terraform]: + basicAuth = { [terraform]: + headerField = (known after apply) [terraform]: + realm = (known after apply) [terraform]: + removeHeader = (known after apply) [terraform]: + secret = (known after apply) [terraform]: } [terraform]: + buffering = { [terraform]: + maxRequestBodyBytes = (known after apply) [terraform]: + maxResponseBodyBytes = (known after apply) [terraform]: + memRequestBodyBytes = (known after apply) [terraform]: + memResponseBodyBytes = (known after apply) [terraform]: + retryExpression = (known after apply) [terraform]: } [terraform]: + chain = { [terraform]: + middlewares = [ [terraform]: + { [terraform]: + name = "traefik-forward-auth" [terraform]: + namespace = "dev" [terraform]: }, [terraform]: + { [terraform]: + name = "nebari-dask-gateway-cluster-stripprefix" [terraform]: + namespace = "dev" [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + circuitBreaker = { [terraform]: + expression = (known after apply) [terraform]: } [terraform]: + compress = { [terraform]: + excludedContentTypes = (known after apply) [terraform]: } [terraform]: + contentType = { [terraform]: + autoDetect = (known after apply) [terraform]: } [terraform]: + digestAuth = { [terraform]: + headerField = (known after apply) [terraform]: + realm = (known after apply) [terraform]: + removeHeader = (known after apply) [terraform]: + secret = (known after apply) [terraform]: } [terraform]: + errors = { [terraform]: + query = (known after apply) [terraform]: + service = { [terraform]: + healthCheck = { [terraform]: + headers = (known after apply) [terraform]: + host = (known after apply) [terraform]: + intervalSeconds = (known after apply) [terraform]: + path = (known after apply) [terraform]: + scheme = (known after apply) [terraform]: + timeoutSeconds = (known after apply) [terraform]: } [terraform]: + kind = (known after apply) [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + passHostHeader = (known after apply) [terraform]: + port = (known after apply) [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: + forwardAuth = { [terraform]: + address = (known after apply) [terraform]: + authResponseHeaders = (known after apply) [terraform]: + tls = { [terraform]: + caOptional = (known after apply) [terraform]: + caSecret = (known after apply) [terraform]: + certSecret = (known after apply) [terraform]: + insecureSkipVerify = (known after apply) [terraform]: } [terraform]: + trustForwardHeader = (known after apply) [terraform]: } [terraform]: + headers = { [terraform]: + accessControlAllowCredentials = (known after apply) [terraform]: + accessControlAllowHeaders = (known after apply) [terraform]: + accessControlAllowMethods = (known after apply) [terraform]: + accessControlAllowOrigin = (known after apply) [terraform]: + accessControlAllowOriginList = (known after apply) [terraform]: + accessControlExposeHeaders = (known after apply) [terraform]: + accessControlMaxAge = (known after apply) [terraform]: + addVaryHeader = (known after apply) [terraform]: + allowedHosts = (known after apply) [terraform]: + browserXssFilter = (known after apply) [terraform]: + contentSecurityPolicy = (known after apply) [terraform]: + contentTypeNosniff = (known after apply) [terraform]: + customBrowserXSSValue = (known after apply) [terraform]: + customFrameOptionsValue = (known after apply) [terraform]: + customRequestHeaders = (known after apply) [terraform]: + customResponseHeaders = (known after apply) [terraform]: + featurePolicy = (known after apply) [terraform]: + forceSTSheader = (known after apply) [terraform]: + frameDeny = (known after apply) [terraform]: + hostsProxyHeaders = (known after apply) [terraform]: + isDevelopment = (known after apply) [terraform]: + publicKey = (known after apply) [terraform]: + referrerPolicy = (known after apply) [terraform]: + sslForceHost = (known after apply) [terraform]: + sslHost = (known after apply) [terraform]: + sslProxyHeaders = (known after apply) [terraform]: + sslRedirect = (known after apply) [terraform]: + sslTemporaryRedirect = (known after apply) [terraform]: + stsIncludeSubdomains = (known after apply) [terraform]: + stsPreload = (known after apply) [terraform]: + stsSeconds = (known after apply) [terraform]: } [terraform]: + inFlightReq = { [terraform]: + amount = (known after apply) [terraform]: + sourceCriterion = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + requestHeaderName = (known after apply) [terraform]: + requestHost = (known after apply) [terraform]: } [terraform]: } [terraform]: + ipWhiteList = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + sourceRange = (known after apply) [terraform]: } [terraform]: + passTLSClientCert = { [terraform]: + info = { [terraform]: + issuer = { [terraform]: + commonName = (known after apply) [terraform]: + country = (known after apply) [terraform]: + domainComponent = (known after apply) [terraform]: + locality = (known after apply) [terraform]: + organization = (known after apply) [terraform]: + province = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: } [terraform]: + notAfter = (known after apply) [terraform]: + notBefore = (known after apply) [terraform]: + sans = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: + subject = { [terraform]: + commonName = (known after apply) [terraform]: + country = (known after apply) [terraform]: + domainComponent = (known after apply) [terraform]: + locality = (known after apply) [terraform]: + organization = (known after apply) [terraform]: + province = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: } [terraform]: } [terraform]: + pem = (known after apply) [terraform]: } [terraform]: + rateLimit = { [terraform]: + average = (known after apply) [terraform]: + burst = (known after apply) [terraform]: + sourceCriterion = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + requestHeaderName = (known after apply) [terraform]: + requestHost = (known after apply) [terraform]: } [terraform]: } [terraform]: + redirectRegex = { [terraform]: + permanent = (known after apply) [terraform]: + regex = (known after apply) [terraform]: + replacement = (known after apply) [terraform]: } [terraform]: + redirectScheme = { [terraform]: + permanent = (known after apply) [terraform]: + port = (known after apply) [terraform]: + scheme = (known after apply) [terraform]: } [terraform]: + replacePath = { [terraform]: + path = (known after apply) [terraform]: } [terraform]: + replacePathRegex = { [terraform]: + regex = (known after apply) [terraform]: + replacement = (known after apply) [terraform]: } [terraform]: + retry = { [terraform]: + attempts = (known after apply) [terraform]: } [terraform]: + stripPrefix = { [terraform]: + forceSlash = (known after apply) [terraform]: + prefixes = (known after apply) [terraform]: } [terraform]: + stripPrefixRegex = { [terraform]: + regex = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_manifest.cluster-middleware-stripprefix will be created [terraform]:  + resource "kubernetes_manifest" "cluster-middleware-stripprefix" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "Middleware" [terraform]: + metadata = { [terraform]: + name = "nebari-dask-gateway-cluster-stripprefix" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + stripPrefixRegex = { [terraform]: + regex = [ [terraform]: + "/gateway/clusters/[a-zA-Z0-9.-]+", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "Middleware" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "nebari-dask-gateway-cluster-stripprefix" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + addPrefix = { [terraform]: + prefix = (known after apply) [terraform]: } [terraform]: + basicAuth = { [terraform]: + headerField = (known after apply) [terraform]: + realm = (known after apply) [terraform]: + removeHeader = (known after apply) [terraform]: + secret = (known after apply) [terraform]: } [terraform]: + buffering = { [terraform]: + maxRequestBodyBytes = (known after apply) [terraform]: + maxResponseBodyBytes = (known after apply) [terraform]: + memRequestBodyBytes = (known after apply) [terraform]: + memResponseBodyBytes = (known after apply) [terraform]: + retryExpression = (known after apply) [terraform]: } [terraform]: + chain = { [terraform]: + middlewares = (known after apply) [terraform]: } [terraform]: + circuitBreaker = { [terraform]: + expression = (known after apply) [terraform]: } [terraform]: + compress = { [terraform]: + excludedContentTypes = (known after apply) [terraform]: } [terraform]: + contentType = { [terraform]: + autoDetect = (known after apply) [terraform]: } [terraform]: + digestAuth = { [terraform]: + headerField = (known after apply) [terraform]: + realm = (known after apply) [terraform]: + removeHeader = (known after apply) [terraform]: + secret = (known after apply) [terraform]: } [terraform]: + errors = { [terraform]: + query = (known after apply) [terraform]: + service = { [terraform]: + healthCheck = { [terraform]: + headers = (known after apply) [terraform]: + host = (known after apply) [terraform]: + intervalSeconds = (known after apply) [terraform]: + path = (known after apply) [terraform]: + scheme = (known after apply) [terraform]: + timeoutSeconds = (known after apply) [terraform]: } [terraform]: + kind = (known after apply) [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + passHostHeader = (known after apply) [terraform]: + port = (known after apply) [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: + forwardAuth = { [terraform]: + address = (known after apply) [terraform]: + authResponseHeaders = (known after apply) [terraform]: + tls = { [terraform]: + caOptional = (known after apply) [terraform]: + caSecret = (known after apply) [terraform]: + certSecret = (known after apply) [terraform]: + insecureSkipVerify = (known after apply) [terraform]: } [terraform]: + trustForwardHeader = (known after apply) [terraform]: } [terraform]: + headers = { [terraform]: + accessControlAllowCredentials = (known after apply) [terraform]: + accessControlAllowHeaders = (known after apply) [terraform]: + accessControlAllowMethods = (known after apply) [terraform]: + accessControlAllowOrigin = (known after apply) [terraform]: + accessControlAllowOriginList = (known after apply) [terraform]: + accessControlExposeHeaders = (known after apply) [terraform]: + accessControlMaxAge = (known after apply) [terraform]: + addVaryHeader = (known after apply) [terraform]: + allowedHosts = (known after apply) [terraform]: + browserXssFilter = (known after apply) [terraform]: + contentSecurityPolicy = (known after apply) [terraform]: + contentTypeNosniff = (known after apply) [terraform]: + customBrowserXSSValue = (known after apply) [terraform]: + customFrameOptionsValue = (known after apply) [terraform]: + customRequestHeaders = (known after apply) [terraform]: + customResponseHeaders = (known after apply) [terraform]: + featurePolicy = (known after apply) [terraform]: + forceSTSheader = (known after apply) [terraform]: + frameDeny = (known after apply) [terraform]: + hostsProxyHeaders = (known after apply) [terraform]: + isDevelopment = (known after apply) [terraform]: + publicKey = (known after apply) [terraform]: + referrerPolicy = (known after apply) [terraform]: + sslForceHost = (known after apply) [terraform]: + sslHost = (known after apply) [terraform]: + sslProxyHeaders = (known after apply) [terraform]: + sslRedirect = (known after apply) [terraform]: + sslTemporaryRedirect = (known after apply) [terraform]: + stsIncludeSubdomains = (known after apply) [terraform]: + stsPreload = (known after apply) [terraform]: + stsSeconds = (known after apply) [terraform]: } [terraform]: + inFlightReq = { [terraform]: + amount = (known after apply) [terraform]: + sourceCriterion = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + requestHeaderName = (known after apply) [terraform]: + requestHost = (known after apply) [terraform]: } [terraform]: } [terraform]: + ipWhiteList = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + sourceRange = (known after apply) [terraform]: } [terraform]: + passTLSClientCert = { [terraform]: + info = { [terraform]: + issuer = { [terraform]: + commonName = (known after apply) [terraform]: + country = (known after apply) [terraform]: + domainComponent = (known after apply) [terraform]: + locality = (known after apply) [terraform]: + organization = (known after apply) [terraform]: + province = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: } [terraform]: + notAfter = (known after apply) [terraform]: + notBefore = (known after apply) [terraform]: + sans = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: + subject = { [terraform]: + commonName = (known after apply) [terraform]: + country = (known after apply) [terraform]: + domainComponent = (known after apply) [terraform]: + locality = (known after apply) [terraform]: + organization = (known after apply) [terraform]: + province = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: } [terraform]: } [terraform]: + pem = (known after apply) [terraform]: } [terraform]: + rateLimit = { [terraform]: + average = (known after apply) [terraform]: + burst = (known after apply) [terraform]: + sourceCriterion = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + requestHeaderName = (known after apply) [terraform]: + requestHost = (known after apply) [terraform]: } [terraform]: } [terraform]: + redirectRegex = { [terraform]: + permanent = (known after apply) [terraform]: + regex = (known after apply) [terraform]: + replacement = (known after apply) [terraform]: } [terraform]: + redirectScheme = { [terraform]: + permanent = (known after apply) [terraform]: + port = (known after apply) [terraform]: + scheme = (known after apply) [terraform]: } [terraform]: + replacePath = { [terraform]: + path = (known after apply) [terraform]: } [terraform]: + replacePathRegex = { [terraform]: + regex = (known after apply) [terraform]: + replacement = (known after apply) [terraform]: } [terraform]: + retry = { [terraform]: + attempts = (known after apply) [terraform]: } [terraform]: + stripPrefix = { [terraform]: + forceSlash = (known after apply) [terraform]: + prefixes = (known after apply) [terraform]: } [terraform]: + stripPrefixRegex = { [terraform]: + regex = [ [terraform]: + "/gateway/clusters/[a-zA-Z0-9.-]+", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_manifest.dask-gateway will be created [terraform]:  + resource "kubernetes_manifest" "dask-gateway" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + name = "dask-gateway" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && PathPrefix(`/gateway/`)" [terraform]: + middlewares = [ [terraform]: + { [terraform]: + name = "nebari-dask-gateway-gateway-api" [terraform]: + namespace = "dev" [terraform]: }, [terraform]: ] [terraform]: + services = [ [terraform]: + { [terraform]: + name = "nebari-dask-gateway-gateway-api" [terraform]: + port = 8000 [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "dask-gateway" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && PathPrefix(`/gateway/`)" [terraform]: + middlewares = [ [terraform]: + { [terraform]: + name = "nebari-dask-gateway-gateway-api" [terraform]: + namespace = "dev" [terraform]: }, [terraform]: ] [terraform]: + priority = (known after apply) [terraform]: + services = [ [terraform]: + { [terraform]: + kind = (known after apply) [terraform]: + name = "nebari-dask-gateway-gateway-api" [terraform]: + namespace = (known after apply) [terraform]: + passHostHeader = (known after apply) [terraform]: + port = "8000" [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + sameSite = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: + tls = { [terraform]: + certResolver = (known after apply) [terraform]: + domains = (known after apply) [terraform]: + options = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: + secretName = (known after apply) [terraform]: + store = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_manifest.gateway-middleware will be created [terraform]:  + resource "kubernetes_manifest" "gateway-middleware" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "Middleware" [terraform]: + metadata = { [terraform]: + name = "nebari-dask-gateway-gateway-api" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + stripPrefixRegex = { [terraform]: + regex = [ [terraform]: + "/gateway", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "Middleware" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "nebari-dask-gateway-gateway-api" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + addPrefix = { [terraform]: + prefix = (known after apply) [terraform]: } [terraform]: + basicAuth = { [terraform]: + headerField = (known after apply) [terraform]: + realm = (known after apply) [terraform]: + removeHeader = (known after apply) [terraform]: + secret = (known after apply) [terraform]: } [terraform]: + buffering = { [terraform]: + maxRequestBodyBytes = (known after apply) [terraform]: + maxResponseBodyBytes = (known after apply) [terraform]: + memRequestBodyBytes = (known after apply) [terraform]: + memResponseBodyBytes = (known after apply) [terraform]: + retryExpression = (known after apply) [terraform]: } [terraform]: + chain = { [terraform]: + middlewares = (known after apply) [terraform]: } [terraform]: + circuitBreaker = { [terraform]: + expression = (known after apply) [terraform]: } [terraform]: + compress = { [terraform]: + excludedContentTypes = (known after apply) [terraform]: } [terraform]: + contentType = { [terraform]: + autoDetect = (known after apply) [terraform]: } [terraform]: + digestAuth = { [terraform]: + headerField = (known after apply) [terraform]: + realm = (known after apply) [terraform]: + removeHeader = (known after apply) [terraform]: + secret = (known after apply) [terraform]: } [terraform]: + errors = { [terraform]: + query = (known after apply) [terraform]: + service = { [terraform]: + healthCheck = { [terraform]: + headers = (known after apply) [terraform]: + host = (known after apply) [terraform]: + intervalSeconds = (known after apply) [terraform]: + path = (known after apply) [terraform]: + scheme = (known after apply) [terraform]: + timeoutSeconds = (known after apply) [terraform]: } [terraform]: + kind = (known after apply) [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + passHostHeader = (known after apply) [terraform]: + port = (known after apply) [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: + forwardAuth = { [terraform]: + address = (known after apply) [terraform]: + authResponseHeaders = (known after apply) [terraform]: + tls = { [terraform]: + caOptional = (known after apply) [terraform]: + caSecret = (known after apply) [terraform]: + certSecret = (known after apply) [terraform]: + insecureSkipVerify = (known after apply) [terraform]: } [terraform]: + trustForwardHeader = (known after apply) [terraform]: } [terraform]: + headers = { [terraform]: + accessControlAllowCredentials = (known after apply) [terraform]: + accessControlAllowHeaders = (known after apply) [terraform]: + accessControlAllowMethods = (known after apply) [terraform]: + accessControlAllowOrigin = (known after apply) [terraform]: + accessControlAllowOriginList = (known after apply) [terraform]: + accessControlExposeHeaders = (known after apply) [terraform]: + accessControlMaxAge = (known after apply) [terraform]: + addVaryHeader = (known after apply) [terraform]: + allowedHosts = (known after apply) [terraform]: + browserXssFilter = (known after apply) [terraform]: + contentSecurityPolicy = (known after apply) [terraform]: + contentTypeNosniff = (known after apply) [terraform]: + customBrowserXSSValue = (known after apply) [terraform]: + customFrameOptionsValue = (known after apply) [terraform]: + customRequestHeaders = (known after apply) [terraform]: + customResponseHeaders = (known after apply) [terraform]: + featurePolicy = (known after apply) [terraform]: + forceSTSheader = (known after apply) [terraform]: + frameDeny = (known after apply) [terraform]: + hostsProxyHeaders = (known after apply) [terraform]: + isDevelopment = (known after apply) [terraform]: + publicKey = (known after apply) [terraform]: + referrerPolicy = (known after apply) [terraform]: + sslForceHost = (known after apply) [terraform]: + sslHost = (known after apply) [terraform]: + sslProxyHeaders = (known after apply) [terraform]: + sslRedirect = (known after apply) [terraform]: + sslTemporaryRedirect = (known after apply) [terraform]: + stsIncludeSubdomains = (known after apply) [terraform]: + stsPreload = (known after apply) [terraform]: + stsSeconds = (known after apply) [terraform]: } [terraform]: + inFlightReq = { [terraform]: + amount = (known after apply) [terraform]: + sourceCriterion = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + requestHeaderName = (known after apply) [terraform]: + requestHost = (known after apply) [terraform]: } [terraform]: } [terraform]: + ipWhiteList = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + sourceRange = (known after apply) [terraform]: } [terraform]: + passTLSClientCert = { [terraform]: + info = { [terraform]: + issuer = { [terraform]: + commonName = (known after apply) [terraform]: + country = (known after apply) [terraform]: + domainComponent = (known after apply) [terraform]: + locality = (known after apply) [terraform]: + organization = (known after apply) [terraform]: + province = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: } [terraform]: + notAfter = (known after apply) [terraform]: + notBefore = (known after apply) [terraform]: + sans = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: + subject = { [terraform]: + commonName = (known after apply) [terraform]: + country = (known after apply) [terraform]: + domainComponent = (known after apply) [terraform]: + locality = (known after apply) [terraform]: + organization = (known after apply) [terraform]: + province = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: } [terraform]: } [terraform]: + pem = (known after apply) [terraform]: } [terraform]: + rateLimit = { [terraform]: + average = (known after apply) [terraform]: + burst = (known after apply) [terraform]: + sourceCriterion = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + requestHeaderName = (known after apply) [terraform]: + requestHost = (known after apply) [terraform]: } [terraform]: } [terraform]: + redirectRegex = { [terraform]: + permanent = (known after apply) [terraform]: + regex = (known after apply) [terraform]: + replacement = (known after apply) [terraform]: } [terraform]: + redirectScheme = { [terraform]: + permanent = (known after apply) [terraform]: + port = (known after apply) [terraform]: + scheme = (known after apply) [terraform]: } [terraform]: + replacePath = { [terraform]: + path = (known after apply) [terraform]: } [terraform]: + replacePathRegex = { [terraform]: + regex = (known after apply) [terraform]: + replacement = (known after apply) [terraform]: } [terraform]: + retry = { [terraform]: + attempts = (known after apply) [terraform]: } [terraform]: + stripPrefix = { [terraform]: + forceSlash = (known after apply) [terraform]: + prefixes = (known after apply) [terraform]: } [terraform]: + stripPrefixRegex = { [terraform]: + regex = [ [terraform]: + "/gateway", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_manifest.main will be created [terraform]:  + resource "kubernetes_manifest" "main" { [terraform]: + manifest = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + name = "daskclusters.gateway.dask.org" [terraform]: } [terraform]: + spec = { [terraform]: + group = "gateway.dask.org" [terraform]: + names = { [terraform]: + kind = "DaskCluster" [terraform]: + listKind = "DaskClusterList" [terraform]: + plural = "daskclusters" [terraform]: + singular = "daskcluster" [terraform]: } [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + type = "object" [terraform]: + x-kubernetes-preserve-unknown-fields = true [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: + subresources = { [terraform]: + status = {} [terraform]: } [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "apiextensions.k8s.io/v1" [terraform]: + kind = "CustomResourceDefinition" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "daskclusters.gateway.dask.org" [terraform]: + namespace = (known after apply) [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + conversion = { [terraform]: + strategy = (known after apply) [terraform]: + webhook = { [terraform]: + clientConfig = { [terraform]: + caBundle = (known after apply) [terraform]: + service = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + path = (known after apply) [terraform]: + port = (known after apply) [terraform]: } [terraform]: + url = (known after apply) [terraform]: } [terraform]: + conversionReviewVersions = (known after apply) [terraform]: } [terraform]: } [terraform]: + group = "gateway.dask.org" [terraform]: + names = { [terraform]: + categories = (known after apply) [terraform]: + kind = "DaskCluster" [terraform]: + listKind = "DaskClusterList" [terraform]: + plural = "daskclusters" [terraform]: + shortNames = (known after apply) [terraform]: + singular = "daskcluster" [terraform]: } [terraform]: + preserveUnknownFields = (known after apply) [terraform]: + scope = "Namespaced" [terraform]: + versions = [ [terraform]: + { [terraform]: + additionalPrinterColumns = (known after apply) [terraform]: + deprecated = (known after apply) [terraform]: + deprecationWarning = (known after apply) [terraform]: + name = "v1alpha1" [terraform]: + schema = { [terraform]: + openAPIV3Schema = { [terraform]: + type = "object" [terraform]: + x-kubernetes-preserve-unknown-fields = true [terraform]: } [terraform]: } [terraform]: + served = true [terraform]: + storage = true [terraform]: + subresources = { [terraform]: + scale = { [terraform]: + labelSelectorPath = (known after apply) [terraform]: + specReplicasPath = (known after apply) [terraform]: + statusReplicasPath = (known after apply) [terraform]: } [terraform]: + status = {} [terraform]: } [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_secret.gateway will be created [terraform]:  + resource "kubernetes_secret" "gateway" { [terraform]: + data = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + type = "Opaque" [terraform]: + wait_for_service_account_token = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-daskgateway-gateway" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_service.gateway will be created [terraform]:  + resource "kubernetes_service" "gateway" { [terraform]: + id = (known after apply) [terraform]: + status = (known after apply) [terraform]: + wait_for_load_balancer = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-dask-gateway-gateway-api" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + allocate_load_balancer_node_ports = true [terraform]: + cluster_ip = (known after apply) [terraform]: + cluster_ips = (known after apply) [terraform]: + external_traffic_policy = (known after apply) [terraform]: + health_check_node_port = (known after apply) [terraform]: + internal_traffic_policy = (known after apply) [terraform]: + ip_families = (known after apply) [terraform]: + ip_family_policy = (known after apply) [terraform]: + publish_not_ready_addresses = false [terraform]: + selector = { [terraform]: + "app.kubernetes.io/component" = "dask-gateway-gateway" [terraform]: } [terraform]: + session_affinity = "None" [terraform]: + type = "ClusterIP" [terraform]: [terraform]: + port { [terraform]: + name = "api" [terraform]: + node_port = (known after apply) [terraform]: + port = 8000 [terraform]: + protocol = "TCP" [terraform]: + target_port = "8000" [terraform]: } [terraform]: [terraform]: + session_affinity_config { [terraform]: + client_ip { [terraform]: + timeout_seconds = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_service_account.controller will be created [terraform]:  + resource "kubernetes_service_account" "controller" { [terraform]: + automount_service_account_token = true [terraform]: + default_secret_name = (known after apply) [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-daskgateway-controller" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.dask-gateway.kubernetes_service_account.gateway will be created [terraform]:  + resource "kubernetes_service_account" "gateway" { [terraform]: + automount_service_account_token = true [terraform]: + default_secret_name = (known after apply) [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-daskgateway-gateway" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.forwardauth.kubernetes_deployment.forwardauth-deployment will be created [terraform]:  + resource "kubernetes_deployment" "forwardauth-deployment" { [terraform]: + id = (known after apply) [terraform]: + wait_for_rollout = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "forwardauth-deployment" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + min_ready_seconds = 0 [terraform]: + paused = false [terraform]: + progress_deadline_seconds = 600 [terraform]: + replicas = "1" [terraform]: + revision_history_limit = 10 [terraform]: [terraform]: + selector { [terraform]: + match_labels = { [terraform]: + "app" = "forwardauth-pod" [terraform]: } [terraform]: } [terraform]: [terraform]: + strategy { [terraform]: + type = (known after apply) [terraform]: [terraform]: + rolling_update { [terraform]: + max_surge = (known after apply) [terraform]: + max_unavailable = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + template { [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "app" = "forwardauth-pod" [terraform]: } [terraform]: + name = (known after apply) [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + automount_service_account_token = true [terraform]: + dns_policy = "ClusterFirst" [terraform]: + enable_service_links = true [terraform]: + host_ipc = false [terraform]: + host_network = false [terraform]: + host_pid = false [terraform]: + hostname = (known after apply) [terraform]: + node_name = (known after apply) [terraform]: + node_selector = { [terraform]: + "kubernetes.io/os" = "linux" [terraform]: } [terraform]: + restart_policy = "Always" [terraform]: + service_account_name = (known after apply) [terraform]: + share_process_namespace = false [terraform]: + termination_grace_period_seconds = 30 [terraform]: [terraform]: + container { [terraform]: + image = "maxisme/traefik-forward-auth:sha-a98e568" [terraform]: + image_pull_policy = (known after apply) [terraform]: + name = "forwardauth-container" [terraform]: + stdin = false [terraform]: + stdin_once = false [terraform]: + termination_message_path = "/dev/termination-log" [terraform]: + termination_message_policy = (known after apply) [terraform]: + tty = false [terraform]: [terraform]: + env { [terraform]: + name = "USER_ID_PATH" [terraform]: + value = "preferred_username" [terraform]: } [terraform]: + env { [terraform]: + name = "PROVIDERS_GENERIC_OAUTH_AUTH_URL" [terraform]: + value = "https://domain/auth/realms/nebari/protocol/openid-connect/auth" [terraform]: } [terraform]: + env { [terraform]: + name = "PROVIDERS_GENERIC_OAUTH_TOKEN_URL" [terraform]: + value = "https://domain/auth/realms/nebari/protocol/openid-connect/token" [terraform]: } [terraform]: + env { [terraform]: + name = "PROVIDERS_GENERIC_OAUTH_USER_URL" [terraform]: + value = "https://domain/auth/realms/nebari/protocol/openid-connect/userinfo" [terraform]: } [terraform]: + env { [terraform]: + name = "PROVIDERS_GENERIC_OAUTH_CLIENT_ID" [terraform]: + value = "forwardauth" [terraform]: } [terraform]: + env { [terraform]: + name = "PROVIDERS_GENERIC_OAUTH_CLIENT_SECRET" [terraform]: + value = (sensitive) [terraform]: } [terraform]: + env { [terraform]: + name = "SECRET" [terraform]: + value = (sensitive) [terraform]: } [terraform]: + env { [terraform]: + name = "DEFAULT_PROVIDER" [terraform]: + value = "generic-oauth" [terraform]: } [terraform]: + env { [terraform]: + name = "URL_PATH" [terraform]: + value = "/_oauth" [terraform]: } [terraform]: + env { [terraform]: + name = "LOG_LEVEL" [terraform]: + value = "trace" [terraform]: } [terraform]: + env { [terraform]: + name = "AUTH_HOST" [terraform]: + value = "domain" [terraform]: } [terraform]: + env { [terraform]: + name = "COOKIE_DOMAIN" [terraform]: + value = "domain" [terraform]: } [terraform]: [terraform]: + port { [terraform]: + container_port = 4181 [terraform]: + protocol = "TCP" [terraform]: } [terraform]: [terraform]: + resources { [terraform]: + limits = (known after apply) [terraform]: + requests = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + image_pull_secrets { [terraform]: + name = (known after apply) [terraform]: } [terraform]: [terraform]: + readiness_gate { [terraform]: + condition_type = (known after apply) [terraform]: } [terraform]: [terraform]: + volume { [terraform]: + name = (known after apply) [terraform]: [terraform]: + aws_elastic_block_store { [terraform]: + fs_type = (known after apply) [terraform]: + partition = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + volume_id = (known after apply) [terraform]: } [terraform]: [terraform]: + azure_disk { [terraform]: + caching_mode = (known after apply) [terraform]: + data_disk_uri = (known after apply) [terraform]: + disk_name = (known after apply) [terraform]: + fs_type = (known after apply) [terraform]: + kind = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: } [terraform]: [terraform]: + azure_file { [terraform]: + read_only = (known after apply) [terraform]: + secret_name = (known after apply) [terraform]: + secret_namespace = (known after apply) [terraform]: + share_name = (known after apply) [terraform]: } [terraform]: [terraform]: + ceph_fs { [terraform]: + monitors = (known after apply) [terraform]: + path = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + secret_file = (known after apply) [terraform]: + user = (known after apply) [terraform]: [terraform]: + secret_ref { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + cinder { [terraform]: + fs_type = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + volume_id = (known after apply) [terraform]: } [terraform]: [terraform]: + config_map { [terraform]: + default_mode = (known after apply) [terraform]: + name = (known after apply) [terraform]: + optional = (known after apply) [terraform]: [terraform]: + items { [terraform]: + key = (known after apply) [terraform]: + mode = (known after apply) [terraform]: + path = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + csi { [terraform]: + driver = (known after apply) [terraform]: + fs_type = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + volume_attributes = (known after apply) [terraform]: [terraform]: + node_publish_secret_ref { [terraform]: + name = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + downward_api { [terraform]: + default_mode = (known after apply) [terraform]: [terraform]: + items { [terraform]: + mode = (known after apply) [terraform]: + path = (known after apply) [terraform]: [terraform]: + field_ref { [terraform]: + api_version = (known after apply) [terraform]: + field_path = (known after apply) [terraform]: } [terraform]: [terraform]: + resource_field_ref { [terraform]: + container_name = (known after apply) [terraform]: + divisor = (known after apply) [terraform]: + resource = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + empty_dir { [terraform]: + medium = (known after apply) [terraform]: + size_limit = (known after apply) [terraform]: } [terraform]: [terraform]: + fc { [terraform]: + fs_type = (known after apply) [terraform]: + lun = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + target_ww_ns = (known after apply) [terraform]: } [terraform]: [terraform]: + flex_volume { [terraform]: + driver = (known after apply) [terraform]: + fs_type = (known after apply) [terraform]: + options = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: [terraform]: + secret_ref { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + flocker { [terraform]: + dataset_name = (known after apply) [terraform]: + dataset_uuid = (known after apply) [terraform]: } [terraform]: [terraform]: + gce_persistent_disk { [terraform]: + fs_type = (known after apply) [terraform]: + partition = (known after apply) [terraform]: + pd_name = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: } [terraform]: [terraform]: + git_repo { [terraform]: + directory = (known after apply) [terraform]: + repository = (known after apply) [terraform]: + revision = (known after apply) [terraform]: } [terraform]: [terraform]: + glusterfs { [terraform]: + endpoints_name = (known after apply) [terraform]: + path = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: } [terraform]: [terraform]: + host_path { [terraform]: + path = (known after apply) [terraform]: + type = (known after apply) [terraform]: } [terraform]: [terraform]: + iscsi { [terraform]: + fs_type = (known after apply) [terraform]: + iqn = (known after apply) [terraform]: + iscsi_interface = (known after apply) [terraform]: + lun = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + target_portal = (known after apply) [terraform]: } [terraform]: [terraform]: + local { [terraform]: + path = (known after apply) [terraform]: } [terraform]: [terraform]: + nfs { [terraform]: + path = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + server = (known after apply) [terraform]: } [terraform]: [terraform]: + persistent_volume_claim { [terraform]: + claim_name = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: } [terraform]: [terraform]: + photon_persistent_disk { [terraform]: + fs_type = (known after apply) [terraform]: + pd_id = (known after apply) [terraform]: } [terraform]: [terraform]: + projected { [terraform]: + default_mode = (known after apply) [terraform]: [terraform]: + sources { [terraform]: + config_map { [terraform]: + name = (known after apply) [terraform]: + optional = (known after apply) [terraform]: [terraform]: + items { [terraform]: + key = (known after apply) [terraform]: + mode = (known after apply) [terraform]: + path = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + downward_api { [terraform]: + items { [terraform]: + mode = (known after apply) [terraform]: + path = (known after apply) [terraform]: [terraform]: + field_ref { [terraform]: + api_version = (known after apply) [terraform]: + field_path = (known after apply) [terraform]: } [terraform]: [terraform]: + resource_field_ref { [terraform]: + container_name = (known after apply) [terraform]: + divisor = (known after apply) [terraform]: + resource = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + secret { [terraform]: + name = (known after apply) [terraform]: + optional = (known after apply) [terraform]: [terraform]: + items { [terraform]: + key = (known after apply) [terraform]: + mode = (known after apply) [terraform]: + path = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + service_account_token { [terraform]: + audience = (known after apply) [terraform]: + expiration_seconds = (known after apply) [terraform]: + path = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + quobyte { [terraform]: + group = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: + registry = (known after apply) [terraform]: + user = (known after apply) [terraform]: + volume = (known after apply) [terraform]: } [terraform]: [terraform]: + rbd { [terraform]: + ceph_monitors = (known after apply) [terraform]: + fs_type = (known after apply) [terraform]: + keyring = (known after apply) [terraform]: + rados_user = (known after apply) [terraform]: + rbd_image = (known after apply) [terraform]: + rbd_pool = (known after apply) [terraform]: + read_only = (known after apply) [terraform]: [terraform]: + secret_ref { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + secret { [terraform]: + default_mode = (known after apply) [terraform]: + optional = (known after apply) [terraform]: + secret_name = (known after apply) [terraform]: [terraform]: + items { [terraform]: + key = (known after apply) [terraform]: + mode = (known after apply) [terraform]: + path = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + vsphere_volume { [terraform]: + fs_type = (known after apply) [terraform]: + volume_path = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.forwardauth.kubernetes_manifest.forwardauth-ingressroute will be created [terraform]:  + resource "kubernetes_manifest" "forwardauth-ingressroute" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + name = "forwardauth" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && PathPrefix(`/_oauth`)" [terraform]: + middlewares = [ [terraform]: + { [terraform]: + name = "traefik-forward-auth" [terraform]: + namespace = "dev" [terraform]: }, [terraform]: ] [terraform]: + services = [ [terraform]: + { [terraform]: + name = "forwardauth-service" [terraform]: + port = 4181 [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "forwardauth" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && PathPrefix(`/_oauth`)" [terraform]: + middlewares = [ [terraform]: + { [terraform]: + name = "traefik-forward-auth" [terraform]: + namespace = "dev" [terraform]: }, [terraform]: ] [terraform]: + priority = (known after apply) [terraform]: + services = [ [terraform]: + { [terraform]: + kind = (known after apply) [terraform]: + name = "forwardauth-service" [terraform]: + namespace = (known after apply) [terraform]: + passHostHeader = (known after apply) [terraform]: + port = "4181" [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + sameSite = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: + tls = { [terraform]: + certResolver = (known after apply) [terraform]: + domains = (known after apply) [terraform]: + options = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: + secretName = (known after apply) [terraform]: + store = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.forwardauth.kubernetes_manifest.forwardauth-middleware will be created [terraform]:  + resource "kubernetes_manifest" "forwardauth-middleware" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "Middleware" [terraform]: + metadata = { [terraform]: + name = "traefik-forward-auth" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + forwardAuth = { [terraform]: + address = "http://forwardauth-service:4181" [terraform]: + authResponseHeaders = [ [terraform]: + "X-Forwarded-User", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "Middleware" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "traefik-forward-auth" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + addPrefix = { [terraform]: + prefix = (known after apply) [terraform]: } [terraform]: + basicAuth = { [terraform]: + headerField = (known after apply) [terraform]: + realm = (known after apply) [terraform]: + removeHeader = (known after apply) [terraform]: + secret = (known after apply) [terraform]: } [terraform]: + buffering = { [terraform]: + maxRequestBodyBytes = (known after apply) [terraform]: + maxResponseBodyBytes = (known after apply) [terraform]: + memRequestBodyBytes = (known after apply) [terraform]: + memResponseBodyBytes = (known after apply) [terraform]: + retryExpression = (known after apply) [terraform]: } [terraform]: + chain = { [terraform]: + middlewares = (known after apply) [terraform]: } [terraform]: + circuitBreaker = { [terraform]: + expression = (known after apply) [terraform]: } [terraform]: + compress = { [terraform]: + excludedContentTypes = (known after apply) [terraform]: } [terraform]: + contentType = { [terraform]: + autoDetect = (known after apply) [terraform]: } [terraform]: + digestAuth = { [terraform]: + headerField = (known after apply) [terraform]: + realm = (known after apply) [terraform]: + removeHeader = (known after apply) [terraform]: + secret = (known after apply) [terraform]: } [terraform]: + errors = { [terraform]: + query = (known after apply) [terraform]: + service = { [terraform]: + healthCheck = { [terraform]: + headers = (known after apply) [terraform]: + host = (known after apply) [terraform]: + intervalSeconds = (known after apply) [terraform]: + path = (known after apply) [terraform]: + scheme = (known after apply) [terraform]: + timeoutSeconds = (known after apply) [terraform]: } [terraform]: + kind = (known after apply) [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: + passHostHeader = (known after apply) [terraform]: + port = (known after apply) [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: } [terraform]: + status = (known after apply) [terraform]: } [terraform]: + forwardAuth = { [terraform]: + address = "http://forwardauth-service:4181" [terraform]: + authResponseHeaders = [ [terraform]: + "X-Forwarded-User", [terraform]: ] [terraform]: + tls = { [terraform]: + caOptional = (known after apply) [terraform]: + caSecret = (known after apply) [terraform]: + certSecret = (known after apply) [terraform]: + insecureSkipVerify = (known after apply) [terraform]: } [terraform]: + trustForwardHeader = (known after apply) [terraform]: } [terraform]: + headers = { [terraform]: + accessControlAllowCredentials = (known after apply) [terraform]: + accessControlAllowHeaders = (known after apply) [terraform]: + accessControlAllowMethods = (known after apply) [terraform]: + accessControlAllowOrigin = (known after apply) [terraform]: + accessControlAllowOriginList = (known after apply) [terraform]: + accessControlExposeHeaders = (known after apply) [terraform]: + accessControlMaxAge = (known after apply) [terraform]: + addVaryHeader = (known after apply) [terraform]: + allowedHosts = (known after apply) [terraform]: + browserXssFilter = (known after apply) [terraform]: + contentSecurityPolicy = (known after apply) [terraform]: + contentTypeNosniff = (known after apply) [terraform]: + customBrowserXSSValue = (known after apply) [terraform]: + customFrameOptionsValue = (known after apply) [terraform]: + customRequestHeaders = (known after apply) [terraform]: + customResponseHeaders = (known after apply) [terraform]: + featurePolicy = (known after apply) [terraform]: + forceSTSheader = (known after apply) [terraform]: + frameDeny = (known after apply) [terraform]: + hostsProxyHeaders = (known after apply) [terraform]: + isDevelopment = (known after apply) [terraform]: + publicKey = (known after apply) [terraform]: + referrerPolicy = (known after apply) [terraform]: + sslForceHost = (known after apply) [terraform]: + sslHost = (known after apply) [terraform]: + sslProxyHeaders = (known after apply) [terraform]: + sslRedirect = (known after apply) [terraform]: + sslTemporaryRedirect = (known after apply) [terraform]: + stsIncludeSubdomains = (known after apply) [terraform]: + stsPreload = (known after apply) [terraform]: + stsSeconds = (known after apply) [terraform]: } [terraform]: + inFlightReq = { [terraform]: + amount = (known after apply) [terraform]: + sourceCriterion = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + requestHeaderName = (known after apply) [terraform]: + requestHost = (known after apply) [terraform]: } [terraform]: } [terraform]: + ipWhiteList = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + sourceRange = (known after apply) [terraform]: } [terraform]: + passTLSClientCert = { [terraform]: + info = { [terraform]: + issuer = { [terraform]: + commonName = (known after apply) [terraform]: + country = (known after apply) [terraform]: + domainComponent = (known after apply) [terraform]: + locality = (known after apply) [terraform]: + organization = (known after apply) [terraform]: + province = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: } [terraform]: + notAfter = (known after apply) [terraform]: + notBefore = (known after apply) [terraform]: + sans = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: + subject = { [terraform]: + commonName = (known after apply) [terraform]: + country = (known after apply) [terraform]: + domainComponent = (known after apply) [terraform]: + locality = (known after apply) [terraform]: + organization = (known after apply) [terraform]: + province = (known after apply) [terraform]: + serialNumber = (known after apply) [terraform]: } [terraform]: } [terraform]: + pem = (known after apply) [terraform]: } [terraform]: + rateLimit = { [terraform]: + average = (known after apply) [terraform]: + burst = (known after apply) [terraform]: + sourceCriterion = { [terraform]: + ipStrategy = { [terraform]: + depth = (known after apply) [terraform]: + excludedIPs = (known after apply) [terraform]: } [terraform]: + requestHeaderName = (known after apply) [terraform]: + requestHost = (known after apply) [terraform]: } [terraform]: } [terraform]: + redirectRegex = { [terraform]: + permanent = (known after apply) [terraform]: + regex = (known after apply) [terraform]: + replacement = (known after apply) [terraform]: } [terraform]: + redirectScheme = { [terraform]: + permanent = (known after apply) [terraform]: + port = (known after apply) [terraform]: + scheme = (known after apply) [terraform]: } [terraform]: + replacePath = { [terraform]: + path = (known after apply) [terraform]: } [terraform]: + replacePathRegex = { [terraform]: + regex = (known after apply) [terraform]: + replacement = (known after apply) [terraform]: } [terraform]: + retry = { [terraform]: + attempts = (known after apply) [terraform]: } [terraform]: + stripPrefix = { [terraform]: + forceSlash = (known after apply) [terraform]: + prefixes = (known after apply) [terraform]: } [terraform]: + stripPrefixRegex = { [terraform]: + regex = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.forwardauth.kubernetes_service.forwardauth-service will be created [terraform]:  + resource "kubernetes_service" "forwardauth-service" { [terraform]: + id = (known after apply) [terraform]: + status = (known after apply) [terraform]: + wait_for_load_balancer = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "forwardauth-service" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + allocate_load_balancer_node_ports = true [terraform]: + cluster_ip = (known after apply) [terraform]: + cluster_ips = (known after apply) [terraform]: + external_traffic_policy = (known after apply) [terraform]: + health_check_node_port = (known after apply) [terraform]: + internal_traffic_policy = (known after apply) [terraform]: + ip_families = (known after apply) [terraform]: + ip_family_policy = (known after apply) [terraform]: + publish_not_ready_addresses = false [terraform]: + selector = { [terraform]: + "app" = "forwardauth-pod" [terraform]: } [terraform]: + session_affinity = "None" [terraform]: + type = "ClusterIP" [terraform]: [terraform]: + port { [terraform]: + node_port = (known after apply) [terraform]: + port = 4181 [terraform]: + protocol = "TCP" [terraform]: + target_port = "4181" [terraform]: } [terraform]: [terraform]: + session_affinity_config { [terraform]: + client_ip { [terraform]: + timeout_seconds = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.forwardauth.random_password.forwardauth_cookie_secret will be created [terraform]:  + resource "random_password" "forwardauth_cookie_secret" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.helm_release.jupyterhub will be created [terraform]:  + resource "helm_release" "jupyterhub" { [terraform]: + atomic = false [terraform]: + chart = "jupyterhub" [terraform]: + cleanup_on_fail = false [terraform]: + create_namespace = false [terraform]: + dependency_update = false [terraform]: + disable_crd_hooks = false [terraform]: + disable_openapi_validation = false [terraform]: + disable_webhooks = false [terraform]: + force_update = false [terraform]: + id = (known after apply) [terraform]: + lint = false [terraform]: + manifest = (known after apply) [terraform]: + max_history = 0 [terraform]: + metadata = (known after apply) [terraform]: + name = "jupyterhub-dev" [terraform]: + namespace = "dev" [terraform]: + recreate_pods = false [terraform]: + render_subchart_notes = true [terraform]: + replace = false [terraform]: + repository = "https://jupyterhub.github.io/helm-chart/" [terraform]: + reset_values = false [terraform]: + reuse_values = false [terraform]: + skip_crds = false [terraform]: + status = "deployed" [terraform]: + timeout = 300 [terraform]: + values = (known after apply) [terraform]: + verify = false [terraform]: + version = "1.2.0" [terraform]: + wait = true [terraform]: + wait_for_jobs = false [terraform]: [terraform]: + set { [terraform]: # At least one attribute in this block is (or was) sensitive, [terraform]: # so its contents will not be displayed. [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.kubernetes_config_map.etc-ipython will be created [terraform]:  + resource "kubernetes_config_map" "etc-ipython" { [terraform]: + data = { [terraform]: + "ipython_config.py" = <<-EOT [terraform]: import os [terraform]: [terraform]: # Disable history manager, we don't really use it and by default it [terraform]: # puts an sqlite file on NFS, which is not something we want to do [terraform]: c.Historymanager.enabled = False [terraform]: [terraform]: [terraform]: # Change default umask for all subprocesses of the notebook server if [terraform]: # set in the environment [terraform]: if "NB_UMASK" in os.environ: [terraform]: os.umask(int(os.environ["NB_UMASK"], 8)) [terraform]: EOT [terraform]: } [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "etc-ipython" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.kubernetes_config_map.etc-jupyter will be created [terraform]:  + resource "kubernetes_config_map" "etc-jupyter" { [terraform]: + data = { [terraform]: + "jupyter_notebook_config.py" = <<-EOT [terraform]: # To help jupyterhub-idle-culler cull user servers, we configure the kernel manager to cull [terraform]: # idle kernels that would otherwise make the user servers report themselves as active which [terraform]: # is part of what jupyterhub-idle-culler considers. [terraform]: [terraform]: # Extra config available at: [terraform]: # https://zero-to-jupyterhub.readthedocs.io/en/1.x/jupyterhub/customizing/user-management.html#culling-user-pods [terraform]: [terraform]: # Timeout (in seconds) in which a terminal has been inactive and ready to [terraform]: # be culled. [terraform]: c.TerminalManager.cull_inactive_timeout = 15 * 60 [terraform]: [terraform]: # The interval (in seconds) on which to check for terminals exceeding the [terraform]: # inactive timeout value. [terraform]: c.TerminalManager.cull_interval = 5 * 60 [terraform]: [terraform]: # cull_idle_timeout: timeout (in seconds) after which an idle kernel is [terraform]: # considered ready to be culled [terraform]: c.MappingKernelManager.cull_idle_timeout = 15 * 60 [terraform]: [terraform]: # cull_interval: the interval (in seconds) on which to check for idle [terraform]: # kernels exceeding the cull timeout value [terraform]: c.MappingKernelManager.cull_interval = 5 * 60 [terraform]: [terraform]: # cull_connected: whether to consider culling kernels which have one [terraform]: # or more connections [terraform]: c.MappingKernelManager.cull_connected = True [terraform]: [terraform]: # cull_busy: whether to consider culling kernels which are currently [terraform]: # busy running some code [terraform]: c.MappingKernelManager.cull_busy = False [terraform]: [terraform]: # Shut down the server after N seconds with no kernels or terminals [terraform]: # running and no activity. [terraform]: c.NotebookApp.shutdown_no_activity_timeout = 15 * 60 [terraform]: [terraform]: ############################################################################### [terraform]: # JupyterHub idle culler total timeout corresponds (approximately) to: [terraform]: # max(cull_idle_timeout, cull_inactive_timeout) + shutdown_no_activity_timeout [terraform]: EOT [terraform]: } [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "etc-jupyter" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.kubernetes_config_map.etc-skel will be created [terraform]:  + resource "kubernetes_config_map" "etc-skel" { [terraform]: + data = { [terraform]: + ".bash_logout" = <<-EOT [terraform]: ################################################################### [terraform]: # Managed by Nebari # [terraform]: ################################################################### [terraform]: # ~/.bash_logout: executed by bash(1) when login shell exits. [terraform]: [terraform]: # when leaving the console clear the screen to increase privacy [terraform]: [terraform]: if [ "$SHLVL" = 1 ]; then [terraform]: [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q [terraform]: fi [terraform]: EOT [terraform]: + ".bashrc" = <<-EOT [terraform]: ################################################################### [terraform]: # Managed by Nebari # [terraform]: ################################################################### [terraform]: # ~/.bashrc: executed by bash(1) for non-login shells. [terraform]: # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) [terraform]: # for examples [terraform]: [terraform]: # If not running interactively, don't do anything [terraform]: case $- in [terraform]: *i*) ;; [terraform]: *) return;; [terraform]: esac [terraform]: [terraform]: # don't put duplicate lines or lines starting with space in the history. [terraform]: # See bash(1) for more options [terraform]: HISTCONTROL=ignoreboth [terraform]: [terraform]: # append to the history file, don't overwrite it [terraform]: shopt -s histappend [terraform]: [terraform]: # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) [terraform]: HISTSIZE=1000 [terraform]: HISTFILESIZE=2000 [terraform]: [terraform]: # check the window size after each command and, if necessary, [terraform]: # update the values of LINES and COLUMNS. [terraform]: shopt -s checkwinsize [terraform]: [terraform]: # If set, the pattern "**" used in a pathname expansion context will [terraform]: # match all files and zero or more directories and subdirectories. [terraform]: #shopt -s globstar [terraform]: [terraform]: # make less more friendly for non-text input files, see lesspipe(1) [terraform]: [ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" [terraform]: [terraform]: # set variable identifying the chroot you work in (used in the prompt below) [terraform]: if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then [terraform]: debian_chroot=$(cat /etc/debian_chroot) [terraform]: fi [terraform]: [terraform]: # set a fancy prompt (non-color, unless we know we "want" color) [terraform]: case "$TERM" in [terraform]: xterm-color|*-256color) color_prompt=yes;; [terraform]: esac [terraform]: [terraform]: # uncomment for a colored prompt, if the terminal has the capability; turned [terraform]: # off by default to not distract the user: the focus in a terminal window [terraform]: # should be on the output of commands, not on the prompt [terraform]: force_color_prompt=yes [terraform]: [terraform]: if [ -n "$force_color_prompt" ]; then [terraform]: if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then [terraform]: # We have color support; assume it's compliant with Ecma-48 [terraform]: # (ISO/IEC-6429). (Lack of such support is extremely rare, and such [terraform]: # a case would tend to support setf rather than setaf.) [terraform]: color_prompt=yes [terraform]: else [terraform]: color_prompt= [terraform]: fi [terraform]: fi [terraform]: [terraform]: if [ "$color_prompt" = yes ]; then [terraform]: PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' [terraform]: else [terraform]: PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' [terraform]: fi [terraform]: unset color_prompt force_color_prompt [terraform]: [terraform]: # If this is an xterm set the title to user@host:dir [terraform]: case "$TERM" in [terraform]: xterm*|rxvt*) [terraform]: PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" [terraform]: ;; [terraform]: *) [terraform]: ;; [terraform]: esac [terraform]: [terraform]: # enable color support of ls and also add handy aliases [terraform]: if [ -x /usr/bin/dircolors ]; then [terraform]: test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" [terraform]: alias ls='ls --color=auto' [terraform]: #alias dir='dir --color=auto' [terraform]: #alias vdir='vdir --color=auto' [terraform]: [terraform]: alias grep='grep --color=auto' [terraform]: alias fgrep='fgrep --color=auto' [terraform]: alias egrep='egrep --color=auto' [terraform]: fi [terraform]: [terraform]: # colored GCC warnings and errors [terraform]: #export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' [terraform]: [terraform]: # some more ls aliases [terraform]: alias ll='ls -alF' [terraform]: alias la='ls -A' [terraform]: alias l='ls -CF' [terraform]: [terraform]: # Add an "alert" alias for long running commands. Use like so: [terraform]: # sleep 10; alert [terraform]: alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' [terraform]: [terraform]: # Alias definitions. [terraform]: # You may want to put all your additions into a separate file like [terraform]: # ~/.bash_aliases, instead of adding them here directly. [terraform]: # See /usr/share/doc/bash-doc/examples in the bash-doc package. [terraform]: [terraform]: if [ -f ~/.bash_aliases ]; then [terraform]: . ~/.bash_aliases [terraform]: fi [terraform]: [terraform]: # enable programmable completion features (you don't need to enable [terraform]: # this, if it's already enabled in /etc/bash.bashrc and /etc/profile [terraform]: # sources /etc/bash.bashrc). [terraform]: if ! shopt -oq posix; then [terraform]: if [ -f /usr/share/bash-completion/bash_completion ]; then [terraform]: . /usr/share/bash-completion/bash_completion [terraform]: elif [ -f /etc/bash_completion ]; then [terraform]: . /etc/bash_completion [terraform]: fi [terraform]: fi [terraform]: [terraform]: . /opt/conda/etc/profile.d/conda.sh && conda activate base [terraform]: [terraform]: # add nicer bash prompt [terraform]: conda config --set changeps1 True [terraform]: [terraform]: parse_git_branch() { [terraform]: git branch --color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/[\1]/' [terraform]: } [terraform]: [terraform]: BASE03=$(tput setaf 234) [terraform]: BASE02=$(tput setaf 235) [terraform]: BASE01=$(tput setaf 240) [terraform]: BASE00=$(tput setaf 241) [terraform]: BASE0=$(tput setaf 244) [terraform]: BASE1=$(tput setaf 245) [terraform]: BASE2=$(tput setaf 254) [terraform]: BASE3=$(tput setaf 230) [terraform]: YELLOW=$(tput setaf 136) [terraform]: ORANGE=$(tput setaf 166) [terraform]: RED=$(tput setaf 160) [terraform]: MAGENTA=$(tput setaf 125) [terraform]: VIOLET=$(tput setaf 61) [terraform]: BLUE=$(tput setaf 33) [terraform]: CYAN=$(tput setaf 37) [terraform]: GREEN=$(tput setaf 64) [terraform]: BOLD=$(tput bold) [terraform]: RESET=$(tput sgr0) [terraform]: [terraform]: NAME=`whoami | cut -d'@' -f1` [terraform]: [terraform]: PS1="\[$CYAN\]$NAME:\w\[$RESET\]\$(parse_git_branch) \n\[$GREEN\]\A \$ \[$RESET\]" [terraform]: EOT [terraform]: + ".profile" = <<-EOT [terraform]: ################################################################### [terraform]: # Managed by Nebari # [terraform]: ################################################################### [terraform]: # ~/.profile: executed by the command interpreter for login shells. [terraform]: # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login [terraform]: # exists. [terraform]: # see /usr/share/doc/bash/examples/startup-files for examples. [terraform]: # the files are located in the bash-doc package. [terraform]: [terraform]: # the default umask is set in /etc/profile; for setting the umask [terraform]: # for ssh logins, install and configure the libpam-umask package. [terraform]: #umask 022 [terraform]: [terraform]: # if running bash [terraform]: if [ -n "$BASH_VERSION" ]; then [terraform]: # include .bashrc if it exists [terraform]: if [ -f "$HOME/.bashrc" ]; then [terraform]: . "$HOME/.bashrc" [terraform]: fi [terraform]: fi [terraform]: [terraform]: # set PATH so it includes user's private bin if it exists [terraform]: if [ -d "$HOME/bin" ] ; then [terraform]: PATH="$HOME/bin:$PATH" [terraform]: fi [terraform]: [terraform]: # set PATH so it includes user's private bin if it exists [terraform]: if [ -d "$HOME/.local/bin" ] ; then [terraform]: PATH="$HOME/.local/bin:$PATH" [terraform]: fi [terraform]: EOT [terraform]: } [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "etc-skel" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.kubernetes_config_map.jupyterlab-settings will be created [terraform]:  + resource "kubernetes_config_map" "jupyterlab-settings" { [terraform]: + data = { [terraform]: + "overrides.json" = jsonencode( [terraform]: { [terraform]: + dask-labextension:plugin = { [terraform]: + browserDashboardCheck = true [terraform]: } [terraform]: + jupyterlab-conda-store:plugin = { [terraform]: + apiUrl = "/conda-store/" [terraform]: + authMethod = "cookie" [terraform]: + authToken = "" [terraform]: + loginUrl = "/conda-store/login?next=" [terraform]: } [terraform]: } [terraform]: ) [terraform]: } [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "jupyterlab-settings" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.kubernetes_config_map.shared-examples will be created [terraform]:  + resource "kubernetes_config_map" "shared-examples" { [terraform]: + data = { [terraform]: + "dashboard_panel.ipynb" = jsonencode( [terraform]: { [terraform]: + cells = [ [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "b140a52e-c828-4da5-ae75-4fd2eac1692e" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: import panel [terraform]: EOT, [terraform]: + "panel.extension()", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "78cb2a0c-4614-4960-b996-77b189743444" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: content = panel.pane.Markdown(''' [terraform]: EOT, [terraform]: + <<-EOT [terraform]: # Hello Nebari [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: This is some markdown content [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ''') [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: png = panel.panel('https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png', width=300) [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + "widget = panel.widgets.TextInput(name='A widget', value='A string')", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "11d07b92-146b-45c1-915c-228944f4cfce" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + "dashboard = panel.Row(content, png, widget)", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "a452fc0b-8183-4944-bf63-f02312df031c" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + "dashboard.servable()", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "21d69cfc-53c6-40cd-9664-6ba75c6f8ed0" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [] [terraform]: }, [terraform]: ] [terraform]: + metadata = { [terraform]: + kernelspec = { [terraform]: + display_name = "filesystem-dashboard" [terraform]: + language = "python" [terraform]: + name = "conda-env-filesystem-dashboard-py" [terraform]: } [terraform]: + language_info = { [terraform]: + codemirror_mode = { [terraform]: + name = "ipython" [terraform]: + version = 3 [terraform]: } [terraform]: + file_extension = ".py" [terraform]: + mimetype = "text/x-python" [terraform]: + name = "python" [terraform]: + nbconvert_exporter = "python" [terraform]: + pygments_lexer = "ipython3" [terraform]: + version = "3.9.7" [terraform]: } [terraform]: } [terraform]: + nbformat = 4 [terraform]: + nbformat_minor = 5 [terraform]: } [terraform]: ) [terraform]: + "dashboard_plotly.py" = <<-EOT [terraform]: # -*- coding: utf-8 -*- [terraform]: [terraform]: # Example from https://dash.plotly.com/layout [terraform]: [terraform]: # Run this app with `python app.py` and [terraform]: # visit http://127.0.0.1:8050/ in your web browser. [terraform]: [terraform]: import pandas as pd [terraform]: import plotly.express as px [terraform]: from dash import Dash, dcc, html [terraform]: [terraform]: app = Dash(__name__) [terraform]: [terraform]: # assume you have a "long-form" data frame [terraform]: # see https://plotly.com/python/px-arguments/ for more options [terraform]: df = pd.DataFrame( [terraform]: { [terraform]: "Fruit": ["Apples", "Oranges", "Bananas", "Apples", "Oranges", "Bananas"], [terraform]: "Amount": [4, 1, 2, 2, 4, 5], [terraform]: "City": ["SF", "SF", "SF", "Montreal", "Montreal", "Montreal"], [terraform]: } [terraform]: ) [terraform]: [terraform]: fig = px.bar(df, x="Fruit", y="Amount", color="City", barmode="group") [terraform]: [terraform]: app.layout = html.Div( [terraform]: children=[ [terraform]: html.H1(children="Hello Dash"), [terraform]: html.Div( [terraform]: children=""" [terraform]: Dash: A web application framework for your data. [terraform]: """ [terraform]: ), [terraform]: dcc.Graph(id="example-graph", figure=fig), [terraform]: ] [terraform]: ) [terraform]: [terraform]: if __name__ == "__main__": [terraform]: app.run_server(debug=True) [terraform]: EOT [terraform]: + "dashboard_streamlit.py" = <<-EOT [terraform]: import pandas as pd [terraform]: import streamlit as st [terraform]: [terraform]: st.title("My first StreamLit Nebari app") [terraform]: [terraform]: st.write("Here's our first attempt at using data to create a table:") [terraform]: st.write( [terraform]: pd.DataFrame({"first column": [1, 2, 3, 4], "second column": [10, 20, 30, 40]}) [terraform]: ) [terraform]: EOT [terraform]: + "dashboard_voila.ipynb" = jsonencode( [terraform]: { [terraform]: + cells = [ [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "fe04b4ce-ea17-4f8e-bd20-d0ea2d7b42d7" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: %matplotlib inline [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: from ipywidgets import interact [terraform]: EOT, [terraform]: + <<-EOT [terraform]: import matplotlib.pyplot as plt [terraform]: EOT, [terraform]: + <<-EOT [terraform]: plt.style.use('seaborn-whitegrid') [terraform]: EOT, [terraform]: + "import numpy as np", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "537d83a3-dd3f-4ed0-bd8e-1fa3c04503cd" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: def pltsincos(t=0): [terraform]: EOT, [terraform]: + <<-EOT [terraform]: fig = plt.figure(figsize=(10,5)) [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ax = plt.axes() [terraform]: EOT, [terraform]: + <<-EOT [terraform]: x = np.linspace(0, 10, 1000) [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ax.plot(x, np.sin(x*t)) [terraform]: EOT, [terraform]: + " ax.plot(x, np.cos(x*t))", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "ea9edb88-abfe-4312-b050-df38b309d11b" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + "interact(pltsincos, t=(1,10,0.1))", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "3dfdb921-262c-4b78-a468-009fc980e216" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [] [terraform]: }, [terraform]: ] [terraform]: + metadata = { [terraform]: + kernelspec = { [terraform]: + display_name = "filesystem-dashboard" [terraform]: + language = "python" [terraform]: + name = "conda-env-filesystem-dashboard-py" [terraform]: } [terraform]: + language_info = { [terraform]: + codemirror_mode = { [terraform]: + name = "ipython" [terraform]: + version = 3 [terraform]: } [terraform]: + file_extension = ".py" [terraform]: + mimetype = "text/x-python" [terraform]: + name = "python" [terraform]: + nbconvert_exporter = "python" [terraform]: + pygments_lexer = "ipython3" [terraform]: + version = "3.9.7" [terraform]: } [terraform]: } [terraform]: + nbformat = 4 [terraform]: + nbformat_minor = 5 [terraform]: } [terraform]: ) [terraform]: + "dask-gateway.ipynb" = jsonencode( [terraform]: { [terraform]: + cells = [ [terraform]: + { [terraform]: + cell_type = "markdown" [terraform]: + id = "26efb8ac-2c5c-4de3-a3f5-c68e4c00bb3b" [terraform]: + metadata = {} [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: # Dask and DaskGateway Tutorial [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: - [dask gateway](https://gateway.dask.org/) [terraform]: EOT, [terraform]: + <<-EOT [terraform]: - [dask](https://tutorial.dask.org/) [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + "Dask is a framework for easily paralellizing python code.", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "23849ee7-918f-4730-b262-a692489a81c5" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: # core object for interacting with dask_gateway [terraform]: EOT, [terraform]: + <<-EOT [terraform]: from dask_gateway import Gateway [terraform]: EOT, [terraform]: + "gateway = Gateway()", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "markdown" [terraform]: + id = "43e901d1-0779-446c-99b6-36152dc4abc6" [terraform]: + metadata = {} [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: ## List active cluster [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + "Nebari has a rich authorization model so it is possible that your given user does not have access. Consult your administrator if you need access.", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "9c8b55b7-94b1-4bae-b6c7-0e9a72ba721b" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + "gateway.list_clusters()", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "markdown" [terraform]: + id = "66472ef7-acc7-4c3b-89b8-1ba8b9abcc7f" [terraform]: + metadata = {} [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: # Dask Gateway Options [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: When spinning up a Dask cluster there are many options. For QHub we have simplified these options into: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: - the environment that you want your Dask scheduler and workers to run (ensure this matches your jupyter kernel in the top right of this notebook) [terraform]: EOT, [terraform]: + <<-EOT [terraform]: - the size of the given scheduler and workers. This is configurable by your administrator and often controls the cpu and ram per worker [terraform]: EOT, [terraform]: + " - environment variables to set on the workers", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "80bdac9f-d662-4258-bbeb-a74869a4a6d9" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: options = gateway.cluster_options() [terraform]: EOT, [terraform]: + "options", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "markdown" [terraform]: + id = "8c96e22d-554e-47a4-9186-9d4b6c68a776" [terraform]: + metadata = {} [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: # Create a new Dask cluster [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: Clusters can easily be created by asking Dask Gateway for a new cluster. The cluster will be created with all the options selected above. Once a gui is created you should be able to click on the dashboard link to see dask scheduler dashboard. This is useful for debugging. Additionally in the menu below you can scale up and down the cluster. [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + "Often when scaling up and down the workers this causes QHub to have to create new nodes which in the cloud takes a few minutes (5-6 minutes).", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "c33e8145-48ea-4ead-b45c-d160802a984e" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: cluster = gateway.new_cluster(options) [terraform]: EOT, [terraform]: + "cluster", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "markdown" [terraform]: + id = "2b3ba921-7072-49d0-9114-e1cd00922d6c" [terraform]: + metadata = {} [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: # Create a dask client [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + "The client object is what dask uses for all computations. It is from this point that all computation should be a normal dask computation.", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "3e7fbe45-6552-45c1-a5c2-affd7e274603" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: client = cluster.get_client() [terraform]: EOT, [terraform]: + "client", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "markdown" [terraform]: + id = "05a5da3c-cab7-4f4b-8b62-9e601d602490" [terraform]: + metadata = {} [terraform]: + source = [ [terraform]: + "# Sample Computation", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "99280b60-93df-4def-847b-cb52867cc902" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: import dask.array as da [terraform]: EOT, [terraform]: + <<-EOT [terraform]: x = da.random.random((10000, 10000), chunks=(1000, 1000)) [terraform]: EOT, [terraform]: + "x", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "5102e0b3-953a-44a1-8d29-0505c59e6b69" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: y = x + x.T [terraform]: EOT, [terraform]: + <<-EOT [terraform]: z = y[::2, 5000:].mean(axis=1) [terraform]: EOT, [terraform]: + "z", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "574e631a-17b0-4748-91a5-1deef727557a" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + "z.compute()", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = null [terraform]: + id = "9509baaa-4d8a-42d5-917b-c30e58b71626" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [] [terraform]: }, [terraform]: ] [terraform]: + metadata = { [terraform]: + kernelspec = { [terraform]: + display_name = "filesystem-dask" [terraform]: + language = "python" [terraform]: + name = "conda-env-filesystem-dask-py" [terraform]: } [terraform]: + language_info = { [terraform]: + codemirror_mode = { [terraform]: + name = "ipython" [terraform]: + version = 3 [terraform]: } [terraform]: + file_extension = ".py" [terraform]: + mimetype = "text/x-python" [terraform]: + name = "python" [terraform]: + nbconvert_exporter = "python" [terraform]: + pygments_lexer = "ipython3" [terraform]: + version = "3.9.10" [terraform]: } [terraform]: } [terraform]: + nbformat = 4 [terraform]: + nbformat_minor = 5 [terraform]: } [terraform]: ) [terraform]: + "kbatch_dask_gateway.py" = <<-EOT [terraform]: """ [terraform]: Start a cluster with Dask Gateway, print the dashboard link, and run some tasks. [terraform]: """ [terraform]: import dask [terraform]: import dask_gateway [terraform]: import distributed [terraform]: from distributed import wait [terraform]: [terraform]: [terraform]: def inc(x): [terraform]: return x + 1 [terraform]: [terraform]: [terraform]: def main(): [terraform]: print(f"dask version = {dask.__version__}") [terraform]: print(f"dask_gateway version = {dask_gateway.__version__}") [terraform]: print(f"distributed version = {distributed.__version__}") [terraform]: [terraform]: gateway = dask_gateway.Gateway() [terraform]: options = gateway.cluster_options(use_local_defaults=False) [terraform]: [terraform]: print("Starting cluster") [terraform]: cluster = gateway.new_cluster(options) [terraform]: client = cluster.get_client() [terraform]: print("Dashboard at:", client.dashboard_link) [terraform]: [terraform]: cluster.scale(2) [terraform]: [terraform]: futures = client.map(inc, list(range(100))) [terraform]: _ = wait(futures) [terraform]: [terraform]: print("Closing cluster") [terraform]: cluster.close() [terraform]: [terraform]: [terraform]: if __name__ == "__main__": [terraform]: main() [terraform]: EOT [terraform]: + "kbatch_dask_gateway_job.yaml" = <<-EOT [terraform]: name: dask-gateway-job [terraform]: image: mcr.microsoft.com/planetary-computer/python:2021.08.02.0 [terraform]: args: [terraform]: - python [terraform]: - kbatch_dask_gateway.py [terraform]: code: kbatch_dask_gateway.py [terraform]: EOT [terraform]: + "kbatch_nb.ipynb" = jsonencode( [terraform]: { [terraform]: + cells = [ [terraform]: + { [terraform]: + cell_type = "markdown" [terraform]: + id = "cba309a0-d8ff-4c18-8d94-c380e875ac46" [terraform]: + metadata = { [terraform]: + tags = [] [terraform]: } [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: # Canonical Tests [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: The goal of the work we performed on behalf of OGC/USGS was to enable users on Nebari (and perhaps plain JupyterHub) to: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: - [ ] run long-running notebooks or scripts [terraform]: EOT, [terraform]: + <<-EOT [terraform]: - [ ] run notebooks and scripts as cronjobs [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: And as a stretch goal: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: - [ ] run complex workflows that require multiple steps / noteboks or scripts [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: Additional requirements: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: - the notebook or script should work even after the user's JupyterLab session ends [terraform]: EOT, [terraform]: + <<-EOT [terraform]: - the notebook or script can connect to the Dask-Gateway and launch a Dask cluster [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: This notebooks will serve as a "unit test" for the above features, for more details [see this issue](https://github.com/Quansight/ogc-management/issues/6). [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ## `kbatch` [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: The first two features outline above will be handled by [`kbatch`](https://github.com/kbatch-dev/kbatch). `kbatch` consists of two major components, the frontend `kbatch` and backend `kbatch-proxy`. The user submits job requests to `kbatch-proxy` and `kbatch-proxy` submits those job requests to the Kubernetes API. [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: > NOTE: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: > At the present, no additional features have been added to `kbatch`, we have simply integrated `kbatch-proxy` into Nebari. A feature enhancement PR will need to be opened on the `kbatch` repo in order to enable cronjobs. [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ### Setup [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: In order to use `kbatch` in it's current form, some basic setup is required of the user. Going forward, we will assume that `kbatch-proxy` has been correctly integrated into Nebari. [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: 1. Create or modify a conda environment by adding `kbatch`. And activate this conda environment. [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ``` [terraform]: EOT, [terraform]: + <<-EOT [terraform]: pip install kbatch [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ``` [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: 2. Create a JupyterHub API token and configure `kbatch` to talk to the `kbatch-proxy` service. [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ``` [terraform]: EOT, [terraform]: + <<-EOT [terraform]: kbatch configure --kbatch-url http://kbatch-kbatch-proxy.dev.svc.cluster.local --token [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ``` [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: 3. Submit a job to `kbatch` [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ``` [terraform]: EOT, [terraform]: + <<-EOT [terraform]: kbatch job submit --name=list-files --image=alpine --command='["ls", "-lh"]' [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ``` [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ### Run this notebook [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: To run this notebook as a job, you will need an image with `papermill` (or a similar CLI tool). [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: Create a configuration file, `kbatch_nb_job.yaml` like the one below: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ```yaml [terraform]: EOT, [terraform]: + <<-EOT [terraform]: # filename: kbatch_nb_job.yaml [terraform]: EOT, [terraform]: + <<-EOT [terraform]: name: nb-job [terraform]: EOT, [terraform]: + <<-EOT [terraform]: image: mcr.microsoft.com/planetary-computer/python:latest [terraform]: EOT, [terraform]: + <<-EOT [terraform]: args: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: - papermill [terraform]: EOT, [terraform]: + <<-EOT [terraform]: - kbatch_nb.ipynb [terraform]: EOT, [terraform]: + <<-EOT [terraform]: code: kbatch_nb.ipynb [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ``` [terraform]: EOT, [terraform]: + <<-EOT [terraform]: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: Then run: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: ``` [terraform]: EOT, [terraform]: + <<-EOT [terraform]: kbatch job submit -f kbatch_nb_job.yaml [terraform]: EOT, [terraform]: + "```", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = 9 [terraform]: + id = "ff3e90f6-f0b6-4300-81c2-b7ade75d57b4" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + "import time", [terraform]: ] [terraform]: }, [terraform]: + { [terraform]: + cell_type = "code" [terraform]: + execution_count = 11 [terraform]: + id = "277ff7d7-d938-4790-af92-5719534b08d5" [terraform]: + metadata = {} [terraform]: + outputs = [] [terraform]: + source = [ [terraform]: + <<-EOT [terraform]: with open('kbatch_nb_output.txt', 'w') as f: [terraform]: EOT, [terraform]: + <<-EOT [terraform]: for i in range(0,10): [terraform]: EOT, [terraform]: + <<-EOT [terraform]: current_time = time.strftime("%Y-%m-%d-%H:%M:%S", time.localtime()) [terraform]: EOT, [terraform]: + <<-EOT [terraform]: time.sleep(1) [terraform]: EOT, [terraform]: + " f.write(f'{current_time}: {i}\\n')", [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: + metadata = { [terraform]: + kernelspec = { [terraform]: + display_name = "Python 3 (ipykernel)" [terraform]: + language = "python" [terraform]: + name = "python3" [terraform]: } [terraform]: + language_info = { [terraform]: + codemirror_mode = { [terraform]: + name = "ipython" [terraform]: + version = 3 [terraform]: } [terraform]: + file_extension = ".py" [terraform]: + mimetype = "text/x-python" [terraform]: + name = "python" [terraform]: + nbconvert_exporter = "python" [terraform]: + pygments_lexer = "ipython3" [terraform]: + version = "3.10.4" [terraform]: } [terraform]: } [terraform]: + nbformat = 4 [terraform]: + nbformat_minor = 5 [terraform]: } [terraform]: ) [terraform]: + "kbatch_nb_job.yaml" = <<-EOT [terraform]: name: nb-job [terraform]: image: mcr.microsoft.com/planetary-computer/python:latest [terraform]: args: [terraform]: - papermill [terraform]: - kbatch_nb.ipynb [terraform]: code: kbatch_nb.ipynb [terraform]: EOT [terraform]: } [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "shared-examples" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.kubernetes_manifest.jupyterhub will be created [terraform]:  + resource "kubernetes_manifest" "jupyterhub" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + name = "jupyterhub" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && (Path(`/`) || PathPrefix(`/hub`) || PathPrefix(`/user`) || PathPrefix(`/services`))" [terraform]: + services = [ [terraform]: + { [terraform]: + name = "proxy-public" [terraform]: + port = 80 [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "jupyterhub" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && (Path(`/`) || PathPrefix(`/hub`) || PathPrefix(`/user`) || PathPrefix(`/services`))" [terraform]: + middlewares = (known after apply) [terraform]: + priority = (known after apply) [terraform]: + services = [ [terraform]: + { [terraform]: + kind = (known after apply) [terraform]: + name = "proxy-public" [terraform]: + namespace = (known after apply) [terraform]: + passHostHeader = (known after apply) [terraform]: + port = "80" [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + sameSite = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: + tls = { [terraform]: + certResolver = (known after apply) [terraform]: + domains = (known after apply) [terraform]: + options = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: + secretName = (known after apply) [terraform]: + store = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.random_password.proxy_secret_token will be created [terraform]:  + resource "random_password" "proxy_secret_token" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.random_password.service_token["dask-gateway"] will be created [terraform]:  + resource "random_password" "service_token" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.random_password.service_token["kbatch"] will be created [terraform]:  + resource "random_password" "service_token" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.jupyterhub-nfs-mount.kubernetes_persistent_volume.main will be created [terraform]:  + resource "kubernetes_persistent_volume" "main" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "jupyterhub-dev-share" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + access_modes = [ [terraform]: + "ReadWriteMany", [terraform]: ] [terraform]: + capacity = { [terraform]: + "storage" = "200Gi" [terraform]: } [terraform]: + persistent_volume_reclaim_policy = "Retain" [terraform]: + storage_class_name = "jupyterhub-dev-share" [terraform]: + volume_mode = "Filesystem" [terraform]: [terraform]: + claim_ref { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: [terraform]: + node_affinity { [terraform]: + required { [terraform]: + node_selector_term { [terraform]: + match_expressions { [terraform]: + key = (known after apply) [terraform]: + operator = (known after apply) [terraform]: + values = (known after apply) [terraform]: } [terraform]: [terraform]: + match_fields { [terraform]: + key = (known after apply) [terraform]: + operator = (known after apply) [terraform]: + values = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + persistent_volume_source { [terraform]: [terraform]: + nfs { [terraform]: + path = "/" [terraform]: + server = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.jupyterhub-nfs-mount.kubernetes_persistent_volume_claim.main will be created [terraform]:  + resource "kubernetes_persistent_volume_claim" "main" { [terraform]: + id = (known after apply) [terraform]: + wait_until_bound = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "jupyterhub-dev-share" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + access_modes = [ [terraform]: + "ReadWriteMany", [terraform]: ] [terraform]: + storage_class_name = "jupyterhub-dev-share" [terraform]: + volume_name = (known after apply) [terraform]: [terraform]: + resources { [terraform]: + requests = { [terraform]: + "storage" = "200Gi" [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.jupyterhub-nfs-mount.kubernetes_storage_class.main will be created [terraform]:  + resource "kubernetes_storage_class" "main" { [terraform]: + allow_volume_expansion = true [terraform]: + id = (known after apply) [terraform]: + reclaim_policy = "Delete" [terraform]: + storage_provisioner = "kubernetes.io/fake-nfs" [terraform]: + volume_binding_mode = "Immediate" [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "jupyterhub-dev-share" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kbatch[0].helm_release.kbatch will be created [terraform]:  + resource "helm_release" "kbatch" { [terraform]: + atomic = false [terraform]: + chart = "kbatch-proxy" [terraform]: + cleanup_on_fail = false [terraform]: + create_namespace = false [terraform]: + dependency_update = false [terraform]: + disable_crd_hooks = false [terraform]: + disable_openapi_validation = false [terraform]: + disable_webhooks = false [terraform]: + force_update = false [terraform]: + id = (known after apply) [terraform]: + lint = false [terraform]: + manifest = (known after apply) [terraform]: + max_history = 0 [terraform]: + metadata = (known after apply) [terraform]: + name = "kbatch" [terraform]: + namespace = "dev" [terraform]: + recreate_pods = false [terraform]: + render_subchart_notes = true [terraform]: + replace = false [terraform]: + repository = "https://kbatch-dev.github.io/helm-chart" [terraform]: + reset_values = false [terraform]: + reuse_values = false [terraform]: + skip_crds = false [terraform]: + status = "deployed" [terraform]: + timeout = 300 [terraform]: + values = (known after apply) [terraform]: + verify = false [terraform]: + version = "0.4.1" [terraform]: + wait = true [terraform]: + wait_for_jobs = false [terraform]: [terraform]: + set { [terraform]: + name = "kbatchImage" [terraform]: } [terraform]: + set { [terraform]: + name = "namespace" [terraform]: + value = "dev" [terraform]: } [terraform]: [terraform]: + set_sensitive { [terraform]: # At least one attribute in this block is (or was) sensitive, [terraform]: # so its contents will not be displayed. [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kbatch[0].kubernetes_cluster_role.kbatch will be created [terraform]:  + resource "kubernetes_cluster_role" "kbatch" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-kbatch" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + rule { [terraform]: + api_groups = [ [terraform]: + "", [terraform]: + "batch", [terraform]: ] [terraform]: + resources = [ [terraform]: + "*", [terraform]: ] [terraform]: + verbs = [ [terraform]: + "get", [terraform]: + "watch", [terraform]: + "list", [terraform]: + "patch", [terraform]: + "create", [terraform]: + "delete", [terraform]: ] [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kbatch[0].kubernetes_cluster_role_binding.kbatch will be created [terraform]:  + resource "kubernetes_cluster_role_binding" "kbatch" { [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-kbatch" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + role_ref { [terraform]: + api_group = "rbac.authorization.k8s.io" [terraform]: + kind = "ClusterRole" [terraform]: + name = "nebari-kbatch" [terraform]: } [terraform]: [terraform]: + subject { [terraform]: + api_group = (known after apply) [terraform]: + kind = "ServiceAccount" [terraform]: + name = "kbatch-kbatch-proxy" [terraform]: + namespace = "dev" [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.kubernetes_config_map.conda-store-config will be created [terraform]:  + resource "kubernetes_config_map" "conda-store-config" { [terraform]: + data = { [terraform]: + "conda_store_config.py" = <<-EOT [terraform]: import json [terraform]: import logging [terraform]: import os [terraform]: import tempfile [terraform]: [terraform]: import requests [terraform]: from conda_store_server import api, orm, schema [terraform]: from conda_store_server.server.auth import GenericOAuthAuthentication [terraform]: from conda_store_server.server.dependencies import get_conda_store [terraform]: from conda_store_server.storage import S3Storage [terraform]: [terraform]: [terraform]: def conda_store_config(path="/var/lib/conda-store/config.json"): [terraform]: with open(path) as f: [terraform]: return json.load(f) [terraform]: [terraform]: [terraform]: config = conda_store_config() [terraform]: [terraform]: [terraform]: # ================================== [terraform]: # conda-store settings [terraform]: # ================================== [terraform]: c.CondaStore.storage_class = S3Storage [terraform]: c.CondaStore.store_directory = "/home/conda/" [terraform]: c.CondaStore.database_url = f"postgresql+psycopg2://{config['postgres-username']}:{config['postgres-password']}@{config['postgres-service']}/conda-store" [terraform]: c.CondaStore.redis_url = ( [terraform]: f"redis://:{config['redis-password']}@{config['redis-service']}:6379/0" [terraform]: ) [terraform]: c.CondaStore.default_uid = 1000 [terraform]: c.CondaStore.default_gid = 100 [terraform]: c.CondaStore.default_permissions = "555" [terraform]: c.CondaStore.conda_included_packages = ["ipykernel"] [terraform]: [terraform]: c.S3Storage.internal_endpoint = f"{config['minio-service']}:9000" [terraform]: c.S3Storage.internal_secure = False [terraform]: c.S3Storage.external_endpoint = f"{config['external-url']}:9080" [terraform]: c.S3Storage.external_secure = True [terraform]: c.S3Storage.access_key = config["minio-username"] [terraform]: c.S3Storage.secret_key = config["minio-password"] [terraform]: c.S3Storage.region = "us-east-1" # minio region default [terraform]: c.S3Storage.bucket_name = "conda-store" [terraform]: [terraform]: c.CondaStore.default_namespace = "global" [terraform]: c.CondaStore.filesystem_namespace = config["default-namespace"] [terraform]: [terraform]: # ================================== [terraform]: # server settings [terraform]: # ================================== [terraform]: c.CondaStoreServer.log_level = logging.INFO [terraform]: c.CondaStoreServer.enable_ui = True [terraform]: c.CondaStoreServer.enable_api = True [terraform]: c.CondaStoreServer.enable_registry = True [terraform]: c.CondaStoreServer.enable_metrics = True [terraform]: c.CondaStoreServer.address = "0.0.0.0" [terraform]: c.CondaStoreServer.port = 5000 [terraform]: c.CondaStoreServer.behind_proxy = True [terraform]: # This MUST start with `/` [terraform]: c.CondaStoreServer.url_prefix = "/conda-store" [terraform]: [terraform]: [terraform]: # ================================== [terraform]: # auth settings [terraform]: # ================================== [terraform]: [terraform]: c.GenericOAuthAuthentication.access_token_url = config["openid-config"]["token_url"] [terraform]: c.GenericOAuthAuthentication.authorize_url = config["openid-config"][ [terraform]: "authentication_url" [terraform]: ] [terraform]: c.GenericOAuthAuthentication.user_data_url = config["openid-config"]["userinfo_url"] [terraform]: c.GenericOAuthAuthentication.oauth_callback_url = ( [terraform]: f"https://{config['external-url']}/conda-store/oauth_callback" [terraform]: ) [terraform]: c.GenericOAuthAuthentication.client_id = config["openid-config"]["client_id"] [terraform]: c.GenericOAuthAuthentication.client_secret = config["openid-config"]["client_secret"] [terraform]: c.GenericOAuthAuthentication.access_scope = "profile" [terraform]: c.GenericOAuthAuthentication.user_data_key = "preferred_username" [terraform]: c.GenericOAuthAuthentication.tls_verify = False [terraform]: [terraform]: [terraform]: class KeyCloakAuthentication(GenericOAuthAuthentication): [terraform]: async def authenticate(self, request): [terraform]: # 1. using the callback_url code and state in request [terraform]: oauth_access_token = self._get_oauth_token(request) [terraform]: if oauth_access_token is None: [terraform]: return None # authentication failed [terraform]: [terraform]: response = requests.get( [terraform]: self.user_data_url, [terraform]: headers={"Authorization": f"Bearer {oauth_access_token}"}, [terraform]: verify=self.tls_verify, [terraform]: ) [terraform]: response.raise_for_status() [terraform]: user_data = response.json() [terraform]: [terraform]: role_mappings = { [terraform]: "conda_store_admin": "admin", [terraform]: "conda_store_developer": "developer", [terraform]: "conda_store_viewer": "viewer", [terraform]: } [terraform]: roles = { [terraform]: role_mappings[role] [terraform]: for role in user_data.get("roles", []) [terraform]: if role in role_mappings [terraform]: } [terraform]: username = user_data["preferred_username"] [terraform]: default_namespace = config["default-namespace"] [terraform]: namespaces = {username, "global", default_namespace} [terraform]: role_bindings = { [terraform]: f"{username}/*": {"admin"}, [terraform]: f"{default_namespace}/*": {"viewer"}, [terraform]: "global/*": roles, [terraform]: } [terraform]: [terraform]: for group in user_data.get("groups", []): [terraform]: # Use only the base name of Keycloak groups [terraform]: group_name = os.path.basename(group) [terraform]: namespaces.add(group_name) [terraform]: role_bindings[f"{group_name}/*"] = roles [terraform]: [terraform]: conda_store = get_conda_store(request) [terraform]: for namespace in namespaces: [terraform]: _namespace = api.get_namespace(conda_store.db, name=namespace) [terraform]: if _namespace is None: [terraform]: conda_store.db.add(orm.Namespace(name=namespace)) [terraform]: conda_store.db.commit() [terraform]: [terraform]: return schema.AuthenticationToken( [terraform]: primary_namespace=username, [terraform]: role_bindings=role_bindings, [terraform]: ) [terraform]: [terraform]: [terraform]: c.CondaStoreServer.authentication_class = KeyCloakAuthentication [terraform]: c.AuthenticationBackend.predefined_tokens = { [terraform]: service_token: service_permissions [terraform]: for service_token, service_permissions in config["service-tokens"].items() [terraform]: } [terraform]: [terraform]: # ================================== [terraform]: # worker settings [terraform]: # ================================== [terraform]: c.CondaStoreWorker.log_level = logging.INFO [terraform]: c.CondaStoreWorker.watch_paths = ["/opt/environments"] [terraform]: c.CondaStoreWorker.concurrency = 4 [terraform]: [terraform]: # Template used to form the directory for symlinking conda environment builds. [terraform]: c.CondaStore.environment_directory = "/home/conda/{namespace}/envs/{namespace}-{name}" [terraform]: [terraform]: # extra-settings to apply simply as `c.Class.key = value` [terraform]: conda_store_settings = config["extra-settings"] [terraform]: for classname, attributes in conda_store_settings.items(): [terraform]: for attribute, value in attributes.items(): [terraform]: setattr(getattr(c, classname), attribute, value) [terraform]: [terraform]: # run arbitrary python code [terraform]: # compiling makes debugging easier: https://stackoverflow.com/a/437857 [terraform]: extra_config_filename = os.path.join(tempfile.gettempdir(), "extra-config.py") [terraform]: extra_config = config.get("extra-config", "") [terraform]: with open(extra_config_filename, "w") as f: [terraform]: f.write(extra_config) [terraform]: exec(compile(source=extra_config, filename=extra_config_filename, mode="exec")) [terraform]: EOT [terraform]: } [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "conda-store-config" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.kubernetes_config_map.conda-store-environments will be created [terraform]:  + resource "kubernetes_config_map" "conda-store-environments" { [terraform]: + data = { [terraform]: + "environment-dashboard.yaml" = <<-EOT [terraform]: "channels": [terraform]: - "conda-forge" [terraform]: "dependencies": [terraform]: - "python" [terraform]: - "ipykernel" [terraform]: - "ipywidgets==7.7.1" [terraform]: - "nebari-dask==2023.1.1" [terraform]: - "param" [terraform]: - "python-graphviz" [terraform]: - "matplotlib" [terraform]: - "panel" [terraform]: - "voila" [terraform]: - "streamlit" [terraform]: - "dash" [terraform]: - "cdsdashboards-singleuser==0.6.2" [terraform]: "name": "dashboard" [terraform]: EOT [terraform]: + "environment-dask.yaml" = <<-EOT [terraform]: "channels": [terraform]: - "conda-forge" [terraform]: "dependencies": [terraform]: - "python" [terraform]: - "ipykernel" [terraform]: - "ipywidgets==7.7.1" [terraform]: - "nebari-dask ==2023.1.1" [terraform]: - "python-graphviz" [terraform]: - "pyarrow" [terraform]: - "s3fs" [terraform]: - "gcsfs" [terraform]: - "numpy" [terraform]: - "numba" [terraform]: - "pandas" [terraform]: - "pip": [terraform]: - "kbatch" [terraform]: "name": "dask" [terraform]: EOT [terraform]: } [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "conda-environments" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.kubernetes_deployment.server will be created [terraform]:  + resource "kubernetes_deployment" "server" { [terraform]: + id = (known after apply) [terraform]: + wait_for_rollout = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "role" = "nebari-conda-store-server" [terraform]: } [terraform]: + name = "nebari-conda-store-server" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + min_ready_seconds = 0 [terraform]: + paused = false [terraform]: + progress_deadline_seconds = 600 [terraform]: + replicas = "1" [terraform]: + revision_history_limit = 10 [terraform]: [terraform]: + selector { [terraform]: + match_labels = { [terraform]: + "role" = "nebari-conda-store-server" [terraform]: } [terraform]: } [terraform]: [terraform]: + strategy { [terraform]: + type = (known after apply) [terraform]: [terraform]: + rolling_update { [terraform]: + max_surge = (known after apply) [terraform]: + max_unavailable = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + template { [terraform]: + metadata { [terraform]: + annotations = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "role" = "nebari-conda-store-server" [terraform]: } [terraform]: + name = (known after apply) [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + automount_service_account_token = true [terraform]: + dns_policy = "ClusterFirst" [terraform]: + enable_service_links = true [terraform]: + host_ipc = false [terraform]: + host_network = false [terraform]: + host_pid = false [terraform]: + hostname = (known after apply) [terraform]: + node_name = (known after apply) [terraform]: + restart_policy = "Always" [terraform]: + service_account_name = (known after apply) [terraform]: + share_process_namespace = false [terraform]: + termination_grace_period_seconds = 30 [terraform]: [terraform]: + affinity { [terraform]: + node_affinity { [terraform]: [terraform]: + required_during_scheduling_ignored_during_execution { [terraform]: + node_selector_term { [terraform]: + match_expressions { [terraform]: + key = "kubernetes.io/os" [terraform]: + operator = "In" [terraform]: + values = [ [terraform]: + "linux", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + container { [terraform]: + args = [ [terraform]: + "conda-store-server", [terraform]: + "--config", [terraform]: + "/etc/conda-store/conda_store_config.py", [terraform]: ] [terraform]: + image = "quansight/conda-store-server:v0.4.12" [terraform]: + image_pull_policy = (known after apply) [terraform]: + name = "conda-store-server" [terraform]: + stdin = false [terraform]: + stdin_once = false [terraform]: + termination_message_path = "/dev/termination-log" [terraform]: + termination_message_policy = (known after apply) [terraform]: + tty = false [terraform]: [terraform]: + resources { [terraform]: + limits = (known after apply) [terraform]: + requests = (known after apply) [terraform]: } [terraform]: [terraform]: + volume_mount { [terraform]: + mount_path = "/etc/conda-store" [terraform]: + mount_propagation = "None" [terraform]: + name = "config" [terraform]: + read_only = false [terraform]: } [terraform]: + volume_mount { [terraform]: + mount_path = "/var/lib/conda-store/" [terraform]: + mount_propagation = "None" [terraform]: + name = "secret" [terraform]: + read_only = false [terraform]: } [terraform]: } [terraform]: [terraform]: + image_pull_secrets { [terraform]: + name = (known after apply) [terraform]: } [terraform]: [terraform]: + readiness_gate { [terraform]: + condition_type = (known after apply) [terraform]: } [terraform]: [terraform]: + volume { [terraform]: + name = "config" [terraform]: [terraform]: + config_map { [terraform]: + default_mode = "0644" [terraform]: + name = "conda-store-config" [terraform]: } [terraform]: } [terraform]: + volume { [terraform]: + name = "secret" [terraform]: [terraform]: + secret { [terraform]: + default_mode = "0644" [terraform]: + secret_name = "conda-store-secret" [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.kubernetes_deployment.worker will be created [terraform]:  + resource "kubernetes_deployment" "worker" { [terraform]: + id = (known after apply) [terraform]: + wait_for_rollout = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "role" = "nebari-conda-store-worker" [terraform]: } [terraform]: + name = "nebari-conda-store-worker" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + min_ready_seconds = 0 [terraform]: + paused = false [terraform]: + progress_deadline_seconds = 600 [terraform]: + replicas = "1" [terraform]: + revision_history_limit = 10 [terraform]: [terraform]: + selector { [terraform]: + match_labels = { [terraform]: + "role" = "nebari-conda-store-worker" [terraform]: } [terraform]: } [terraform]: [terraform]: + strategy { [terraform]: + type = (known after apply) [terraform]: [terraform]: + rolling_update { [terraform]: + max_surge = (known after apply) [terraform]: + max_unavailable = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + template { [terraform]: + metadata { [terraform]: + annotations = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "role" = "nebari-conda-store-worker" [terraform]: } [terraform]: + name = (known after apply) [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + automount_service_account_token = true [terraform]: + dns_policy = "ClusterFirst" [terraform]: + enable_service_links = true [terraform]: + host_ipc = false [terraform]: + host_network = false [terraform]: + host_pid = false [terraform]: + hostname = (known after apply) [terraform]: + node_name = (known after apply) [terraform]: + restart_policy = "Always" [terraform]: + service_account_name = (known after apply) [terraform]: + share_process_namespace = false [terraform]: + termination_grace_period_seconds = 30 [terraform]: [terraform]: + affinity { [terraform]: + node_affinity { [terraform]: [terraform]: + required_during_scheduling_ignored_during_execution { [terraform]: + node_selector_term { [terraform]: + match_expressions { [terraform]: + key = "kubernetes.io/os" [terraform]: + operator = "In" [terraform]: + values = [ [terraform]: + "linux", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + container { [terraform]: + args = [ [terraform]: + "conda-store-worker", [terraform]: + "--config", [terraform]: + "/etc/conda-store/conda_store_config.py", [terraform]: ] [terraform]: + image = "quansight/conda-store-server:v0.4.12" [terraform]: + image_pull_policy = (known after apply) [terraform]: + name = "conda-store-worker" [terraform]: + stdin = false [terraform]: + stdin_once = false [terraform]: + termination_message_path = "/dev/termination-log" [terraform]: + termination_message_policy = (known after apply) [terraform]: + tty = false [terraform]: [terraform]: + resources { [terraform]: + limits = (known after apply) [terraform]: + requests = (known after apply) [terraform]: } [terraform]: [terraform]: + volume_mount { [terraform]: + mount_path = "/etc/conda-store" [terraform]: + mount_propagation = "None" [terraform]: + name = "config" [terraform]: + read_only = false [terraform]: } [terraform]: + volume_mount { [terraform]: + mount_path = "/opt/environments" [terraform]: + mount_propagation = "None" [terraform]: + name = "environments" [terraform]: + read_only = false [terraform]: } [terraform]: + volume_mount { [terraform]: + mount_path = "/home/conda" [terraform]: + mount_propagation = "None" [terraform]: + name = "storage" [terraform]: + read_only = false [terraform]: } [terraform]: + volume_mount { [terraform]: + mount_path = "/var/lib/conda-store/" [terraform]: + mount_propagation = "None" [terraform]: + name = "secret" [terraform]: + read_only = false [terraform]: } [terraform]: } [terraform]: + container { [terraform]: + image = "gcr.io/google_containers/volume-nfs:0.8" [terraform]: + image_pull_policy = (known after apply) [terraform]: + name = "nfs-server" [terraform]: + stdin = false [terraform]: + stdin_once = false [terraform]: + termination_message_path = "/dev/termination-log" [terraform]: + termination_message_policy = (known after apply) [terraform]: + tty = false [terraform]: [terraform]: + port { [terraform]: + container_port = 2049 [terraform]: + name = "nfs" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: + port { [terraform]: + container_port = 20048 [terraform]: + name = "mountd" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: + port { [terraform]: + container_port = 111 [terraform]: + name = "rpcbind" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: [terraform]: + resources { [terraform]: + limits = (known after apply) [terraform]: + requests = (known after apply) [terraform]: } [terraform]: [terraform]: + security_context { [terraform]: + allow_privilege_escalation = true [terraform]: + privileged = true [terraform]: + read_only_root_filesystem = false [terraform]: } [terraform]: [terraform]: + volume_mount { [terraform]: + mount_path = "/exports" [terraform]: + mount_propagation = "None" [terraform]: + name = "storage" [terraform]: + read_only = false [terraform]: } [terraform]: } [terraform]: [terraform]: + image_pull_secrets { [terraform]: + name = (known after apply) [terraform]: } [terraform]: [terraform]: + readiness_gate { [terraform]: + condition_type = (known after apply) [terraform]: } [terraform]: [terraform]: + security_context { [terraform]: + run_as_group = "0" [terraform]: + run_as_user = "0" [terraform]: } [terraform]: [terraform]: + volume { [terraform]: + name = "config" [terraform]: [terraform]: + config_map { [terraform]: + default_mode = "0644" [terraform]: + name = "conda-store-config" [terraform]: } [terraform]: } [terraform]: + volume { [terraform]: + name = "secret" [terraform]: [terraform]: + secret { [terraform]: + default_mode = "0644" [terraform]: + secret_name = "conda-store-secret" [terraform]: } [terraform]: } [terraform]: + volume { [terraform]: + name = "environments" [terraform]: [terraform]: + config_map { [terraform]: + default_mode = "0644" [terraform]: + name = "conda-environments" [terraform]: } [terraform]: } [terraform]: + volume { [terraform]: + name = "storage" [terraform]: [terraform]: + persistent_volume_claim { [terraform]: + claim_name = "nebari-conda-store-storage" [terraform]: + read_only = false [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.kubernetes_manifest.jupyterhub will be created [terraform]:  + resource "kubernetes_manifest" "jupyterhub" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + name = "conda-store-server" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && PathPrefix(`/conda-store`)" [terraform]: + services = [ [terraform]: + { [terraform]: + name = "nebari-conda-store-server" [terraform]: + port = 5000 [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "conda-store-server" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && PathPrefix(`/conda-store`)" [terraform]: + middlewares = (known after apply) [terraform]: + priority = (known after apply) [terraform]: + services = [ [terraform]: + { [terraform]: + kind = (known after apply) [terraform]: + name = "nebari-conda-store-server" [terraform]: + namespace = (known after apply) [terraform]: + passHostHeader = (known after apply) [terraform]: + port = "5000" [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + sameSite = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: + tls = { [terraform]: + certResolver = (known after apply) [terraform]: + domains = (known after apply) [terraform]: + options = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: + secretName = (known after apply) [terraform]: + store = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.kubernetes_persistent_volume_claim.main will be created [terraform]:  + resource "kubernetes_persistent_volume_claim" "main" { [terraform]: + id = (known after apply) [terraform]: + wait_until_bound = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-conda-store-storage" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + access_modes = [ [terraform]: + "ReadWriteOnce", [terraform]: ] [terraform]: + storage_class_name = (known after apply) [terraform]: + volume_name = (known after apply) [terraform]: [terraform]: + resources { [terraform]: + requests = { [terraform]: + "storage" = "200Gi" [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.kubernetes_secret.conda-store-secret will be created [terraform]:  + resource "kubernetes_secret" "conda-store-secret" { [terraform]: + data = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + type = "Opaque" [terraform]: + wait_for_service_account_token = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "conda-store-secret" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.kubernetes_service.nfs will be created [terraform]:  + resource "kubernetes_service" "nfs" { [terraform]: + id = (known after apply) [terraform]: + status = (known after apply) [terraform]: + wait_for_load_balancer = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-conda-store-nfs" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + allocate_load_balancer_node_ports = true [terraform]: + cluster_ip = (known after apply) [terraform]: + cluster_ips = (known after apply) [terraform]: + external_traffic_policy = (known after apply) [terraform]: + health_check_node_port = (known after apply) [terraform]: + internal_traffic_policy = (known after apply) [terraform]: + ip_families = (known after apply) [terraform]: + ip_family_policy = (known after apply) [terraform]: + publish_not_ready_addresses = false [terraform]: + selector = { [terraform]: + "role" = "nebari-conda-store-worker" [terraform]: } [terraform]: + session_affinity = "None" [terraform]: + type = "ClusterIP" [terraform]: [terraform]: + port { [terraform]: + name = "nfs" [terraform]: + node_port = (known after apply) [terraform]: + port = 2049 [terraform]: + protocol = "TCP" [terraform]: + target_port = (known after apply) [terraform]: } [terraform]: + port { [terraform]: + name = "mountd" [terraform]: + node_port = (known after apply) [terraform]: + port = 20048 [terraform]: + protocol = "TCP" [terraform]: + target_port = (known after apply) [terraform]: } [terraform]: + port { [terraform]: + name = "rpcbind" [terraform]: + node_port = (known after apply) [terraform]: + port = 111 [terraform]: + protocol = "TCP" [terraform]: + target_port = (known after apply) [terraform]: } [terraform]: [terraform]: + session_affinity_config { [terraform]: + client_ip { [terraform]: + timeout_seconds = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.kubernetes_service.server will be created [terraform]:  + resource "kubernetes_service" "server" { [terraform]: + id = (known after apply) [terraform]: + status = (known after apply) [terraform]: + wait_for_load_balancer = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-conda-store-server" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + allocate_load_balancer_node_ports = true [terraform]: + cluster_ip = (known after apply) [terraform]: + cluster_ips = (known after apply) [terraform]: + external_traffic_policy = (known after apply) [terraform]: + health_check_node_port = (known after apply) [terraform]: + internal_traffic_policy = (known after apply) [terraform]: + ip_families = (known after apply) [terraform]: + ip_family_policy = (known after apply) [terraform]: + publish_not_ready_addresses = false [terraform]: + selector = { [terraform]: + "role" = "nebari-conda-store-server" [terraform]: } [terraform]: + session_affinity = "None" [terraform]: + type = "ClusterIP" [terraform]: [terraform]: + port { [terraform]: + name = "conda-store-server" [terraform]: + node_port = (known after apply) [terraform]: + port = 5000 [terraform]: + protocol = "TCP" [terraform]: + target_port = (known after apply) [terraform]: } [terraform]: [terraform]: + session_affinity_config { [terraform]: + client_ip { [terraform]: + timeout_seconds = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.random_password.conda_store_service_token["cdsdashboards"] will be created [terraform]:  + resource "random_password" "conda_store_service_token" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.kubernetes-jupyterhub-ssh.kubernetes_config_map.jupyterhub-ssh will be created [terraform]:  + resource "kubernetes_config_map" "jupyterhub-ssh" { [terraform]: + data = { [terraform]: + "values.yaml" = "hubUrl: http://proxy-public.dev:80" [terraform]: } [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-jupyterhub-ssh" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-jupyterhub-ssh.kubernetes_deployment.jupyterhub-sftp will be created [terraform]:  + resource "kubernetes_deployment" "jupyterhub-sftp" { [terraform]: + id = (known after apply) [terraform]: + wait_for_rollout = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-jupyterhub-sftp" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + min_ready_seconds = 0 [terraform]: + paused = false [terraform]: + progress_deadline_seconds = 600 [terraform]: + replicas = "1" [terraform]: + revision_history_limit = 10 [terraform]: [terraform]: + selector { [terraform]: + match_labels = { [terraform]: + "app.kubernetes.io/component" = "jupyterhub-sftp" [terraform]: } [terraform]: } [terraform]: [terraform]: + strategy { [terraform]: + type = (known after apply) [terraform]: [terraform]: + rolling_update { [terraform]: + max_surge = (known after apply) [terraform]: + max_unavailable = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + template { [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "app.kubernetes.io/component" = "jupyterhub-sftp" [terraform]: } [terraform]: + name = (known after apply) [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + automount_service_account_token = true [terraform]: + dns_policy = "ClusterFirst" [terraform]: + enable_service_links = true [terraform]: + host_ipc = false [terraform]: + host_network = false [terraform]: + host_pid = false [terraform]: + hostname = (known after apply) [terraform]: + node_name = (known after apply) [terraform]: + restart_policy = "Always" [terraform]: + service_account_name = (known after apply) [terraform]: + share_process_namespace = false [terraform]: + termination_grace_period_seconds = 30 [terraform]: [terraform]: + affinity { [terraform]: + node_affinity { [terraform]: [terraform]: + required_during_scheduling_ignored_during_execution { [terraform]: + node_selector_term { [terraform]: + match_expressions { [terraform]: + key = "kubernetes.io/os" [terraform]: + operator = "In" [terraform]: + values = [ [terraform]: + "linux", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + container { [terraform]: + image = "yuvipanda/jupyterhub-ssh-sftp:0.0.1-n026.hf136ec7" [terraform]: + image_pull_policy = "Always" [terraform]: + name = "jupyterhub-sftp" [terraform]: + stdin = false [terraform]: + stdin_once = false [terraform]: + termination_message_path = "/dev/termination-log" [terraform]: + termination_message_policy = (known after apply) [terraform]: + tty = false [terraform]: [terraform]: + port { [terraform]: + container_port = 22 [terraform]: + name = "sftp" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: [terraform]: + resources { [terraform]: + limits = (known after apply) [terraform]: + requests = (known after apply) [terraform]: } [terraform]: [terraform]: + security_context { [terraform]: + allow_privilege_escalation = true [terraform]: + privileged = true [terraform]: + read_only_root_filesystem = false [terraform]: } [terraform]: [terraform]: + volume_mount { [terraform]: + mount_path = "/mnt/home" [terraform]: + mount_propagation = "None" [terraform]: + name = "home" [terraform]: + read_only = false [terraform]: + sub_path = "home" [terraform]: } [terraform]: + volume_mount { [terraform]: + mount_path = "/etc/jupyterhub-ssh/config" [terraform]: + mount_propagation = "None" [terraform]: + name = "config" [terraform]: + read_only = true [terraform]: } [terraform]: + volume_mount { [terraform]: + mount_path = "/etc/jupyterhub-sftp/config" [terraform]: + mount_propagation = "None" [terraform]: + name = "secrets" [terraform]: + read_only = true [terraform]: } [terraform]: } [terraform]: [terraform]: + image_pull_secrets { [terraform]: + name = (known after apply) [terraform]: } [terraform]: [terraform]: + readiness_gate { [terraform]: + condition_type = (known after apply) [terraform]: } [terraform]: [terraform]: + volume { [terraform]: + name = "home" [terraform]: [terraform]: + persistent_volume_claim { [terraform]: + claim_name = "jupyterhub-dev-share" [terraform]: + read_only = false [terraform]: } [terraform]: } [terraform]: + volume { [terraform]: + name = "config" [terraform]: [terraform]: + config_map { [terraform]: + default_mode = "0644" [terraform]: + name = "nebari-jupyterhub-ssh" [terraform]: } [terraform]: } [terraform]: + volume { [terraform]: + name = "secrets" [terraform]: [terraform]: + secret { [terraform]: + default_mode = "0644" [terraform]: + secret_name = "nebari-jupyterhub-sftp" [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-jupyterhub-ssh.kubernetes_deployment.jupyterhub-ssh will be created [terraform]:  + resource "kubernetes_deployment" "jupyterhub-ssh" { [terraform]: + id = (known after apply) [terraform]: + wait_for_rollout = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-jupyterhub-ssh" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + min_ready_seconds = 0 [terraform]: + paused = false [terraform]: + progress_deadline_seconds = 600 [terraform]: + replicas = "1" [terraform]: + revision_history_limit = 10 [terraform]: [terraform]: + selector { [terraform]: + match_labels = { [terraform]: + "app.kubernetes.io/component" = "jupyterhub-ssh" [terraform]: } [terraform]: } [terraform]: [terraform]: + strategy { [terraform]: + type = (known after apply) [terraform]: [terraform]: + rolling_update { [terraform]: + max_surge = (known after apply) [terraform]: + max_unavailable = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + template { [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "app.kubernetes.io/component" = "jupyterhub-ssh" [terraform]: } [terraform]: + name = (known after apply) [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + automount_service_account_token = true [terraform]: + dns_policy = "ClusterFirst" [terraform]: + enable_service_links = true [terraform]: + host_ipc = false [terraform]: + host_network = false [terraform]: + host_pid = false [terraform]: + hostname = (known after apply) [terraform]: + node_name = (known after apply) [terraform]: + restart_policy = "Always" [terraform]: + service_account_name = (known after apply) [terraform]: + share_process_namespace = false [terraform]: + termination_grace_period_seconds = 30 [terraform]: [terraform]: + affinity { [terraform]: + node_affinity { [terraform]: [terraform]: + required_during_scheduling_ignored_during_execution { [terraform]: + node_selector_term { [terraform]: + match_expressions { [terraform]: + key = "kubernetes.io/os" [terraform]: + operator = "In" [terraform]: + values = [ [terraform]: + "linux", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + container { [terraform]: + image = "yuvipanda/jupyterhub-ssh-ssh:0.0.1-n026.hf136ec7" [terraform]: + image_pull_policy = "Always" [terraform]: + name = "jupyterhub-ssh" [terraform]: + stdin = false [terraform]: + stdin_once = false [terraform]: + termination_message_path = "/dev/termination-log" [terraform]: + termination_message_policy = (known after apply) [terraform]: + tty = false [terraform]: [terraform]: + port { [terraform]: + container_port = 8022 [terraform]: + name = "ssh" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: [terraform]: + resources { [terraform]: + limits = (known after apply) [terraform]: + requests = (known after apply) [terraform]: } [terraform]: [terraform]: + security_context { [terraform]: + allow_privilege_escalation = false [terraform]: + privileged = false [terraform]: + read_only_root_filesystem = false [terraform]: + run_as_non_root = true [terraform]: + run_as_user = "1000" [terraform]: } [terraform]: [terraform]: + volume_mount { [terraform]: + mount_path = "/etc/jupyterhub-ssh/secrets" [terraform]: + mount_propagation = "None" [terraform]: + name = "secrets" [terraform]: + read_only = true [terraform]: } [terraform]: + volume_mount { [terraform]: + mount_path = "/etc/jupyterhub-ssh/config" [terraform]: + mount_propagation = "None" [terraform]: + name = "config" [terraform]: + read_only = true [terraform]: } [terraform]: } [terraform]: [terraform]: + image_pull_secrets { [terraform]: + name = (known after apply) [terraform]: } [terraform]: [terraform]: + readiness_gate { [terraform]: + condition_type = (known after apply) [terraform]: } [terraform]: [terraform]: + volume { [terraform]: + name = "secrets" [terraform]: [terraform]: + secret { [terraform]: + default_mode = "0644" [terraform]: + secret_name = "nebari-jupyterhub-ssh" [terraform]: } [terraform]: } [terraform]: + volume { [terraform]: + name = "config" [terraform]: [terraform]: + config_map { [terraform]: + default_mode = "0644" [terraform]: + name = "nebari-jupyterhub-ssh" [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-jupyterhub-ssh.kubernetes_manifest.jupyterhub-sftp-ingress will be created [terraform]:  + resource "kubernetes_manifest" "jupyterhub-sftp-ingress" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRouteTCP" [terraform]: + metadata = { [terraform]: + name = "jupyterhub-sftp-ingress" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "sftp", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + match = "HostSNI(`*`)" [terraform]: + services = [ [terraform]: + { [terraform]: + name = "nebari-jupyterhub-sftp" [terraform]: + port = 8023 [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRouteTCP" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "jupyterhub-sftp-ingress" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "sftp", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + match = "HostSNI(`*`)" [terraform]: + services = [ [terraform]: + { [terraform]: + name = "nebari-jupyterhub-sftp" [terraform]: + namespace = (known after apply) [terraform]: + port = "8023" [terraform]: + proxyProtocol = { [terraform]: + version = (known after apply) [terraform]: } [terraform]: + terminationDelay = (known after apply) [terraform]: + weight = (known after apply) [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: + tls = { [terraform]: + certResolver = (known after apply) [terraform]: + domains = (known after apply) [terraform]: + options = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: + passthrough = (known after apply) [terraform]: + secretName = (known after apply) [terraform]: + store = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-jupyterhub-ssh.kubernetes_manifest.jupyterhub-ssh-ingress will be created [terraform]:  + resource "kubernetes_manifest" "jupyterhub-ssh-ingress" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRouteTCP" [terraform]: + metadata = { [terraform]: + name = "jupyterhub-ssh-ingress" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "ssh", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + match = "HostSNI(`*`)" [terraform]: + services = [ [terraform]: + { [terraform]: + name = "nebari-jupyterhub-ssh" [terraform]: + port = 8022 [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRouteTCP" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "jupyterhub-ssh-ingress" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "ssh", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + match = "HostSNI(`*`)" [terraform]: + services = [ [terraform]: + { [terraform]: + name = "nebari-jupyterhub-ssh" [terraform]: + namespace = (known after apply) [terraform]: + port = "8022" [terraform]: + proxyProtocol = { [terraform]: + version = (known after apply) [terraform]: } [terraform]: + terminationDelay = (known after apply) [terraform]: + weight = (known after apply) [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: + tls = { [terraform]: + certResolver = (known after apply) [terraform]: + domains = (known after apply) [terraform]: + options = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: + passthrough = (known after apply) [terraform]: + secretName = (known after apply) [terraform]: + store = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-jupyterhub-ssh.kubernetes_secret.jupyterhub-sftp will be created [terraform]:  + resource "kubernetes_secret" "jupyterhub-sftp" { [terraform]: + data = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + type = "Opaque" [terraform]: + wait_for_service_account_token = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-jupyterhub-sftp" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-jupyterhub-ssh.kubernetes_secret.jupyterhub-ssh will be created [terraform]:  + resource "kubernetes_secret" "jupyterhub-ssh" { [terraform]: + data = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + type = "Opaque" [terraform]: + wait_for_service_account_token = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-jupyterhub-ssh" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-jupyterhub-ssh.kubernetes_service.jupyterhub-sftp will be created [terraform]:  + resource "kubernetes_service" "jupyterhub-sftp" { [terraform]: + id = (known after apply) [terraform]: + status = (known after apply) [terraform]: + wait_for_load_balancer = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-jupyterhub-sftp" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + allocate_load_balancer_node_ports = true [terraform]: + cluster_ip = (known after apply) [terraform]: + cluster_ips = (known after apply) [terraform]: + external_traffic_policy = (known after apply) [terraform]: + health_check_node_port = (known after apply) [terraform]: + internal_traffic_policy = (known after apply) [terraform]: + ip_families = (known after apply) [terraform]: + ip_family_policy = (known after apply) [terraform]: + publish_not_ready_addresses = false [terraform]: + selector = { [terraform]: + "app.kubernetes.io/component" = "jupyterhub-sftp" [terraform]: } [terraform]: + session_affinity = "None" [terraform]: + type = "ClusterIP" [terraform]: [terraform]: + port { [terraform]: + name = "sftp" [terraform]: + node_port = (known after apply) [terraform]: + port = 8023 [terraform]: + protocol = "TCP" [terraform]: + target_port = "sftp" [terraform]: } [terraform]: [terraform]: + session_affinity_config { [terraform]: + client_ip { [terraform]: + timeout_seconds = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-jupyterhub-ssh.kubernetes_service.jupyterhub-ssh will be created [terraform]:  + resource "kubernetes_service" "jupyterhub-ssh" { [terraform]: + id = (known after apply) [terraform]: + status = (known after apply) [terraform]: + wait_for_load_balancer = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nebari-jupyterhub-ssh" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + allocate_load_balancer_node_ports = true [terraform]: + cluster_ip = (known after apply) [terraform]: + cluster_ips = (known after apply) [terraform]: + external_traffic_policy = (known after apply) [terraform]: + health_check_node_port = (known after apply) [terraform]: + internal_traffic_policy = (known after apply) [terraform]: + ip_families = (known after apply) [terraform]: + ip_family_policy = (known after apply) [terraform]: + publish_not_ready_addresses = false [terraform]: + selector = { [terraform]: + "app.kubernetes.io/component" = "jupyterhub-ssh" [terraform]: } [terraform]: + session_affinity = "None" [terraform]: + type = "ClusterIP" [terraform]: [terraform]: + port { [terraform]: + name = "ssh" [terraform]: + node_port = (known after apply) [terraform]: + port = 8022 [terraform]: + protocol = "TCP" [terraform]: + target_port = "ssh" [terraform]: } [terraform]: [terraform]: + session_affinity_config { [terraform]: + client_ip { [terraform]: + timeout_seconds = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-jupyterhub-ssh.tls_private_key.main will be created [terraform]:  + resource "tls_private_key" "main" { [terraform]: + algorithm = "RSA" [terraform]: + ecdsa_curve = "P224" [terraform]: + id = (known after apply) [terraform]: + private_key_openssh = (sensitive value) [terraform]: + private_key_pem = (sensitive value) [terraform]: + private_key_pem_pkcs8 = (sensitive value) [terraform]: + public_key_fingerprint_md5 = (known after apply) [terraform]: + public_key_fingerprint_sha256 = (known after apply) [terraform]: + public_key_openssh = (known after apply) [terraform]: + public_key_pem = (known after apply) [terraform]: + rsa_bits = 2048 [terraform]: } [terraform]: [terraform]:  # module.kubernetes-nfs-server[0].kubernetes_deployment.main will be created [terraform]:  + resource "kubernetes_deployment" "main" { [terraform]: + id = (known after apply) [terraform]: + wait_for_rollout = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "role" = "nfs-server-nfs" [terraform]: } [terraform]: + name = "nfs-server-nfs" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + min_ready_seconds = 0 [terraform]: + paused = false [terraform]: + progress_deadline_seconds = 600 [terraform]: + replicas = "1" [terraform]: + revision_history_limit = 10 [terraform]: [terraform]: + selector { [terraform]: + match_labels = { [terraform]: + "role" = "nfs-server-nfs" [terraform]: } [terraform]: } [terraform]: [terraform]: + strategy { [terraform]: + type = (known after apply) [terraform]: [terraform]: + rolling_update { [terraform]: + max_surge = (known after apply) [terraform]: + max_unavailable = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]: + template { [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "role" = "nfs-server-nfs" [terraform]: } [terraform]: + name = (known after apply) [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + automount_service_account_token = true [terraform]: + dns_policy = "ClusterFirst" [terraform]: + enable_service_links = true [terraform]: + host_ipc = false [terraform]: + host_network = false [terraform]: + host_pid = false [terraform]: + hostname = (known after apply) [terraform]: + node_name = (known after apply) [terraform]: + restart_policy = "Always" [terraform]: + service_account_name = (known after apply) [terraform]: + share_process_namespace = false [terraform]: + termination_grace_period_seconds = 30 [terraform]: [terraform]: + affinity { [terraform]: + node_affinity { [terraform]: [terraform]: + required_during_scheduling_ignored_during_execution { [terraform]: + node_selector_term { [terraform]: + match_expressions { [terraform]: + key = "kubernetes.io/os" [terraform]: + operator = "In" [terraform]: + values = [ [terraform]: + "linux", [terraform]: ] [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]: + container { [terraform]: + image = "gcr.io/google_containers/volume-nfs:0.8" [terraform]: + image_pull_policy = (known after apply) [terraform]: + name = "nfs-server" [terraform]: + stdin = false [terraform]: + stdin_once = false [terraform]: + termination_message_path = "/dev/termination-log" [terraform]: + termination_message_policy = (known after apply) [terraform]: + tty = false [terraform]: [terraform]: + port { [terraform]: + container_port = 2049 [terraform]: + name = "nfs" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: + port { [terraform]: + container_port = 20048 [terraform]: + name = "mountd" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: + port { [terraform]: + container_port = 111 [terraform]: + name = "rpcbind" [terraform]: + protocol = "TCP" [terraform]: } [terraform]: [terraform]: + resources { [terraform]: + limits = (known after apply) [terraform]: + requests = (known after apply) [terraform]: } [terraform]: [terraform]: + security_context { [terraform]: + allow_privilege_escalation = true [terraform]: + privileged = true [terraform]: + read_only_root_filesystem = false [terraform]: } [terraform]: [terraform]: + volume_mount { [terraform]: + mount_path = "/exports" [terraform]: + mount_propagation = "None" [terraform]: + name = "nfs-export-fast" [terraform]: + read_only = false [terraform]: } [terraform]: } [terraform]: [terraform]: + image_pull_secrets { [terraform]: + name = (known after apply) [terraform]: } [terraform]: [terraform]: + readiness_gate { [terraform]: + condition_type = (known after apply) [terraform]: } [terraform]: [terraform]: + volume { [terraform]: + name = "nfs-export-fast" [terraform]: [terraform]: + persistent_volume_claim { [terraform]: + claim_name = "nfs-server-nfs-storage" [terraform]: + read_only = false [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-nfs-server[0].kubernetes_persistent_volume_claim.main will be created [terraform]:  + resource "kubernetes_persistent_volume_claim" "main" { [terraform]: + id = (known after apply) [terraform]: + wait_until_bound = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nfs-server-nfs-storage" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + access_modes = [ [terraform]: + "ReadWriteOnce", [terraform]: ] [terraform]: + storage_class_name = (known after apply) [terraform]: + volume_name = (known after apply) [terraform]: [terraform]: + resources { [terraform]: + requests = { [terraform]: + "storage" = "200Gi" [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-nfs-server[0].kubernetes_service.main will be created [terraform]:  + resource "kubernetes_service" "main" { [terraform]: + id = (known after apply) [terraform]: + status = (known after apply) [terraform]: + wait_for_load_balancer = true [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + name = "nfs-server-nfs" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: [terraform]: + spec { [terraform]: + allocate_load_balancer_node_ports = true [terraform]: + cluster_ip = (known after apply) [terraform]: + cluster_ips = (known after apply) [terraform]: + external_traffic_policy = (known after apply) [terraform]: + health_check_node_port = (known after apply) [terraform]: + internal_traffic_policy = (known after apply) [terraform]: + ip_families = (known after apply) [terraform]: + ip_family_policy = (known after apply) [terraform]: + publish_not_ready_addresses = false [terraform]: + selector = { [terraform]: + "role" = "nfs-server-nfs" [terraform]: } [terraform]: + session_affinity = "None" [terraform]: + type = "ClusterIP" [terraform]: [terraform]: + port { [terraform]: + name = "nfs" [terraform]: + node_port = (known after apply) [terraform]: + port = 2049 [terraform]: + protocol = "TCP" [terraform]: + target_port = (known after apply) [terraform]: } [terraform]: + port { [terraform]: + name = "mountd" [terraform]: + node_port = (known after apply) [terraform]: + port = 20048 [terraform]: + protocol = "TCP" [terraform]: + target_port = (known after apply) [terraform]: } [terraform]: + port { [terraform]: + name = "rpcbind" [terraform]: + node_port = (known after apply) [terraform]: + port = 111 [terraform]: + protocol = "TCP" [terraform]: + target_port = (known after apply) [terraform]: } [terraform]: [terraform]: + session_affinity_config { [terraform]: + client_ip { [terraform]: + timeout_seconds = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].helm_release.prometheus-grafana will be created [terraform]:  + resource "helm_release" "prometheus-grafana" { [terraform]: + atomic = false [terraform]: + chart = "kube-prometheus-stack" [terraform]: + cleanup_on_fail = false [terraform]: + create_namespace = false [terraform]: + dependency_update = false [terraform]: + disable_crd_hooks = false [terraform]: + disable_openapi_validation = false [terraform]: + disable_webhooks = false [terraform]: + force_update = false [terraform]: + id = (known after apply) [terraform]: + lint = false [terraform]: + manifest = (known after apply) [terraform]: + max_history = 0 [terraform]: + metadata = (known after apply) [terraform]: + name = "nebari" [terraform]: + namespace = "dev" [terraform]: + recreate_pods = false [terraform]: + render_subchart_notes = true [terraform]: + replace = false [terraform]: + repository = "https://prometheus-community.github.io/helm-charts" [terraform]: + reset_values = false [terraform]: + reuse_values = false [terraform]: + skip_crds = false [terraform]: + status = "deployed" [terraform]: + timeout = 300 [terraform]: + values = (known after apply) [terraform]: + verify = false [terraform]: + version = "30.1.0" [terraform]: + wait = true [terraform]: + wait_for_jobs = false [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].kubernetes_config_map.dashboard will be created [terraform]:  + resource "kubernetes_config_map" "dashboard" { [terraform]: + data = { [terraform]: + "conda_store.json" = jsonencode( [terraform]: { [terraform]: + annotations = { [terraform]: + list = [ [terraform]: + { [terraform]: + builtIn = 1 [terraform]: + datasource = "-- Grafana --" [terraform]: + enable = true [terraform]: + hide = true [terraform]: + iconColor = "rgba(0, 211, 255, 1)" [terraform]: + name = "Annotations & Alerts" [terraform]: + target = { [terraform]: + limit = 100 [terraform]: + matchAny = false [terraform]: + tags = [] [terraform]: + type = "dashboard" [terraform]: } [terraform]: + type = "dashboard" [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + description = "" [terraform]: + editable = true [terraform]: + fiscalYearStartMonth = 0 [terraform]: + graphTooltip = 0 [terraform]: + id = 5 [terraform]: + links = [] [terraform]: + liveNow = false [terraform]: + panels = [ [terraform]: + { [terraform]: + collapsed = false [terraform]: + gridPos = { [terraform]: + h = 1 [terraform]: + w = 24 [terraform]: + x = 0 [terraform]: + y = 0 [terraform]: } [terraform]: + id = 6 [terraform]: + panels = [] [terraform]: + title = "Environments" [terraform]: + type = "row" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + axisLabel = "" [terraform]: + axisPlacement = "auto" [terraform]: + barAlignment = 0 [terraform]: + drawStyle = "line" [terraform]: + fillOpacity = 0 [terraform]: + gradientMode = "none" [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: + lineInterpolation = "linear" [terraform]: + lineWidth = 1 [terraform]: + pointSize = 5 [terraform]: + scaleDistribution = { [terraform]: + type = "linear" [terraform]: } [terraform]: + showPoints = "auto" [terraform]: + spanNulls = true [terraform]: + stacking = { [terraform]: + group = "A" [terraform]: + mode = "none" [terraform]: } [terraform]: + thresholdsStyle = { [terraform]: + mode = "off" [terraform]: } [terraform]: } [terraform]: + mappings = [] [terraform]: + noValue = "0" [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 24 [terraform]: + x = 0 [terraform]: + y = 1 [terraform]: } [terraform]: + id = 18 [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [] [terraform]: + displayMode = "list" [terraform]: + placement = "bottom" [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "conda_store_build_queued" [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "Queued" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "conda_store_build_building" [terraform]: + hide = false [terraform]: + instant = false [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "Building" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "conda_store_build_completed" [terraform]: + hide = false [terraform]: + instant = false [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "Completed" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "conda_store_build_failed" [terraform]: + hide = false [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "Failed" [terraform]: }, [terraform]: ] [terraform]: + title = "Builds" [terraform]: + type = "timeseries" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "thresholds" [terraform]: } [terraform]: + mappings = [] [terraform]: + noValue = "0" [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 3 [terraform]: + w = 3 [terraform]: + x = 0 [terraform]: + y = 8 [terraform]: } [terraform]: + id = 8 [terraform]: + options = { [terraform]: + colorMode = "value" [terraform]: + graphMode = "none" [terraform]: + justifyMode = "auto" [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + textMode = "auto" [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "conda_store_environments" [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Environments" [terraform]: + type = "stat" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "thresholds" [terraform]: } [terraform]: + mappings = [] [terraform]: + noValue = "0" [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 3 [terraform]: + w = 3 [terraform]: + x = 3 [terraform]: + y = 8 [terraform]: } [terraform]: + id = 10 [terraform]: + options = { [terraform]: + colorMode = "value" [terraform]: + graphMode = "area" [terraform]: + justifyMode = "auto" [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + textMode = "auto" [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "conda_store_build_queued" [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Queued" [terraform]: + type = "stat" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "thresholds" [terraform]: } [terraform]: + mappings = [] [terraform]: + noValue = "0" [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 3 [terraform]: + w = 3 [terraform]: + x = 6 [terraform]: + y = 8 [terraform]: } [terraform]: + id = 12 [terraform]: + options = { [terraform]: + colorMode = "value" [terraform]: + graphMode = "area" [terraform]: + justifyMode = "auto" [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + textMode = "auto" [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "conda_store_build_building" [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Buliding" [terraform]: + type = "stat" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "thresholds" [terraform]: } [terraform]: + mappings = [] [terraform]: + noValue = "0" [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 3 [terraform]: + w = 3 [terraform]: + x = 9 [terraform]: + y = 8 [terraform]: } [terraform]: + id = 14 [terraform]: + options = { [terraform]: + colorMode = "value" [terraform]: + graphMode = "area" [terraform]: + justifyMode = "auto" [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + textMode = "auto" [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "conda_store_build_completed" [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Completed" [terraform]: + type = "stat" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "thresholds" [terraform]: } [terraform]: + mappings = [] [terraform]: + noValue = "0" [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 3 [terraform]: + w = 3 [terraform]: + x = 12 [terraform]: + y = 8 [terraform]: } [terraform]: + id = 16 [terraform]: + options = { [terraform]: + colorMode = "value" [terraform]: + graphMode = "area" [terraform]: + justifyMode = "auto" [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + textMode = "auto" [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "conda_store_build_failed" [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Failed" [terraform]: + type = "stat" [terraform]: }, [terraform]: + { [terraform]: + collapsed = false [terraform]: + gridPos = { [terraform]: + h = 1 [terraform]: + w = 24 [terraform]: + x = 0 [terraform]: + y = 11 [terraform]: } [terraform]: + id = 4 [terraform]: + panels = [] [terraform]: + title = "Storage" [terraform]: + type = "row" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "continuous-GrYlRd" [terraform]: } [terraform]: + mappings = [] [terraform]: + max = 1 [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 0.8 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "percentunit" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 6 [terraform]: + w = 8 [terraform]: + x = 0 [terraform]: + y = 12 [terraform]: } [terraform]: + id = 2 [terraform]: + options = { [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + showThresholdLabels = false [terraform]: + showThresholdMarkers = true [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "conda_store_disk_usage / conda_store_disk_total" [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Disk Usage" [terraform]: + type = "gauge" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "thresholds" [terraform]: } [terraform]: + mappings = [] [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "decgbytes" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 6 [terraform]: + w = 7 [terraform]: + x = 8 [terraform]: + y = 12 [terraform]: } [terraform]: + id = 20 [terraform]: + options = { [terraform]: + colorMode = "value" [terraform]: + graphMode = "area" [terraform]: + justifyMode = "auto" [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + textMode = "auto" [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "conda_store_disk_total / (2.0^30)" [terraform]: + instant = false [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Total Storage" [terraform]: + type = "stat" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "thresholds" [terraform]: } [terraform]: + mappings = [] [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "decgbytes" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 6 [terraform]: + w = 7 [terraform]: + x = 15 [terraform]: + y = 12 [terraform]: } [terraform]: + id = 22 [terraform]: + options = { [terraform]: + colorMode = "value" [terraform]: + graphMode = "area" [terraform]: + justifyMode = "auto" [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + textMode = "auto" [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "conda_store_disk_usage / (2^30)" [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Disk Used" [terraform]: + type = "stat" [terraform]: }, [terraform]: ] [terraform]: + refresh = "5s" [terraform]: + schemaVersion = 34 [terraform]: + style = "dark" [terraform]: + tags = [] [terraform]: + templating = { [terraform]: + list = [] [terraform]: } [terraform]: + time = { [terraform]: + from = "now-6h" [terraform]: + to = "now" [terraform]: } [terraform]: + timepicker = {} [terraform]: + timezone = "" [terraform]: + title = "Conda-Store" [terraform]: + uid = "7lHPaT1nz" [terraform]: + version = 5 [terraform]: + weekStart = "" [terraform]: } [terraform]: ) [terraform]: + "jupyterhub.json" = jsonencode( [terraform]: { [terraform]: + annotations = { [terraform]: + list = [ [terraform]: + { [terraform]: + builtIn = 1 [terraform]: + datasource = "-- Grafana --" [terraform]: + enable = true [terraform]: + hide = true [terraform]: + iconColor = "rgba(0, 211, 255, 1)" [terraform]: + name = "Annotations & Alerts" [terraform]: + type = "dashboard" [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + description = "JupyterHub" [terraform]: + editable = true [terraform]: + gnetId = 5839 [terraform]: + graphTooltip = 0 [terraform]: + id = 4 [terraform]: + links = [] [terraform]: + panels = [ [terraform]: + { [terraform]: + aliasColors = {} [terraform]: + bars = false [terraform]: + dashLength = 10 [terraform]: + dashes = false [terraform]: + datasource = "Prometheus" [terraform]: + decimals = null [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + custom = {} [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + fill = 0 [terraform]: + fillGradient = 0 [terraform]: + gridPos = { [terraform]: + h = 9 [terraform]: + w = 24 [terraform]: + x = 0 [terraform]: + y = 0 [terraform]: } [terraform]: + hiddenSeries = false [terraform]: + id = 2 [terraform]: + legend = { [terraform]: + alignAsTable = true [terraform]: + avg = false [terraform]: + current = true [terraform]: + hideEmpty = false [terraform]: + hideZero = false [terraform]: + max = false [terraform]: + min = false [terraform]: + rightSide = true [terraform]: + show = false [terraform]: + total = false [terraform]: + values = true [terraform]: } [terraform]: + lines = true [terraform]: + linewidth = 1 [terraform]: + links = [] [terraform]: + nullPointMode = "null" [terraform]: + options = { [terraform]: + alertThreshold = true [terraform]: } [terraform]: + percentage = false [terraform]: + pluginVersion = "7.3.6" [terraform]: + pointradius = 5 [terraform]: + points = false [terraform]: + renderer = "flot" [terraform]: + seriesOverrides = [] [terraform]: + spaceLength = 10 [terraform]: + stack = false [terraform]: + steppedLine = true [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "jupyterhub_running_servers" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + thresholds = [] [terraform]: + timeFrom = null [terraform]: + timeRegions = [] [terraform]: + timeShift = null [terraform]: + title = "Jupyter Servers" [terraform]: + tooltip = { [terraform]: + shared = true [terraform]: + sort = 2 [terraform]: + value_type = "individual" [terraform]: } [terraform]: + transparent = true [terraform]: + type = "graph" [terraform]: + xaxis = { [terraform]: + buckets = null [terraform]: + mode = "time" [terraform]: + name = null [terraform]: + show = true [terraform]: + values = [] [terraform]: } [terraform]: + yaxes = [ [terraform]: + { [terraform]: + decimals = 0 [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = true [terraform]: }, [terraform]: + { [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = null [terraform]: + show = true [terraform]: }, [terraform]: ] [terraform]: + yaxis = { [terraform]: + align = false [terraform]: + alignLevel = null [terraform]: } [terraform]: }, [terraform]: ] [terraform]: + refresh = "30s" [terraform]: + schemaVersion = 26 [terraform]: + style = "dark" [terraform]: + tags = [] [terraform]: + templating = { [terraform]: + list = [] [terraform]: } [terraform]: + time = { [terraform]: + from = "now-15m" [terraform]: + to = "now" [terraform]: } [terraform]: + timepicker = { [terraform]: + refresh_intervals = [ [terraform]: + "5s", [terraform]: + "10s", [terraform]: + "30s", [terraform]: + "1m", [terraform]: + "5m", [terraform]: + "15m", [terraform]: + "30m", [terraform]: + "1h", [terraform]: + "2h", [terraform]: + "1d", [terraform]: ] [terraform]: + time_options = [ [terraform]: + "5m", [terraform]: + "15m", [terraform]: + "1h", [terraform]: + "6h", [terraform]: + "12h", [terraform]: + "24h", [terraform]: + "2d", [terraform]: + "7d", [terraform]: + "30d", [terraform]: ] [terraform]: } [terraform]: + timezone = "browser" [terraform]: + title = "JupyterHub" [terraform]: + uid = "F0nej9-Gz" [terraform]: + version = 1 [terraform]: } [terraform]: ) [terraform]: + "keycloak.json" = jsonencode( [terraform]: { [terraform]: + annotations = { [terraform]: + list = [ [terraform]: + { [terraform]: + builtIn = 1 [terraform]: + datasource = "-- Grafana --" [terraform]: + enable = true [terraform]: + hide = true [terraform]: + iconColor = "rgba(0, 211, 255, 1)" [terraform]: + name = "Annotations & Alerts" [terraform]: + target = { [terraform]: + limit = 100 [terraform]: + matchAny = false [terraform]: + tags = [] [terraform]: + type = "dashboard" [terraform]: } [terraform]: + type = "dashboard" [terraform]: }, [terraform]: + { [terraform]: + datasource = "-- Grafana --" [terraform]: + enable = true [terraform]: + iconColor = "rgba(0, 211, 255, 1)" [terraform]: + iconSize = 0 [terraform]: + lineColor = "" [terraform]: + name = "Annotations & Alerts" [terraform]: + query = "" [terraform]: + showLine = false [terraform]: + tagsField = "" [terraform]: + target = { [terraform]: + limit = 100 [terraform]: + matchAny = false [terraform]: + tags = [] [terraform]: + type = "dashboard" [terraform]: } [terraform]: + textField = "" [terraform]: + type = "dashboard" [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + description = <<-EOT [terraform]: An updated version of dashboard Keycloak metrics exported with Keycloak Metrics SPI [terraform]: [terraform]: https://github.com/aerogear/keycloak-metrics-spi [terraform]: EOT [terraform]: + editable = true [terraform]: + fiscalYearStartMonth = 0 [terraform]: + gnetId = 14607 [terraform]: + graphTooltip = 1 [terraform]: + iteration = 1642196323079 [terraform]: + links = [] [terraform]: + liveNow = false [terraform]: + panels = [ [terraform]: + { [terraform]: + CustomPanel = { [terraform]: + datasource = "$Datasource" [terraform]: + description = "Memory currently being used by Keycloak." [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "thresholds" [terraform]: } [terraform]: + custom = {} [terraform]: + mappings = [] [terraform]: + max = 100 [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: }, [terraform]: + { [terraform]: + color = "#EAB839" [terraform]: + value = 80 [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 90 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "percent" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 6 [terraform]: + x = 0 [terraform]: + y = 0 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 5 [terraform]: + links = [] [terraform]: + options = { [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "mean", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + showThresholdLabels = false [terraform]: + showThresholdMarkers = true [terraform]: } [terraform]: + pluginVersion = "7.2.0" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = <<-EOT [terraform]: sum(jvm_memory_bytes_used{instance="$instance", area="heap"})*100/sum(jvm_memory_bytes_max{instance="$instance", area="heap"}) [terraform]: EOT [terraform]: + format = "time_series" [terraform]: + hide = false [terraform]: + instant = false [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "" [terraform]: + refId = "B" [terraform]: }, [terraform]: ] [terraform]: + title = "Current Memory HEAP" [terraform]: + type = "gauge" [terraform]: } [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + editable = false [terraform]: + error = false [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + mappings = [] [terraform]: + max = 100 [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "percentage" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "#EAB839" [terraform]: + value = 80 [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 90 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "percent" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 6 [terraform]: + x = 0 [terraform]: + y = 0 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 5 [terraform]: + isNew = false [terraform]: + options = { [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "mean", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + showThresholdLabels = false [terraform]: + showThresholdMarkers = true [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + span = 0 [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum(jvm_memory_bytes_used{kubernetes_pod_name=\"$instance\", area=\"heap\"})*100/sum(jvm_memory_bytes_max{kubernetes_pod_name=\"$instance\", area=\"heap\"})" [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Current Memory HEAP" [terraform]: + type = "gauge" [terraform]: }, [terraform]: + { [terraform]: + CustomPanel = { [terraform]: + datasource = "$Datasource" [terraform]: + description = "Memory currently being used by Keycloak." [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "thresholds" [terraform]: } [terraform]: + custom = {} [terraform]: + mappings = [] [terraform]: + max = 100 [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: }, [terraform]: + { [terraform]: + color = "#EAB839" [terraform]: + value = 80 [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 90 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "percent" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 6 [terraform]: + x = 6 [terraform]: + y = 0 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 23 [terraform]: + links = [] [terraform]: + options = { [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "mean", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + showThresholdLabels = false [terraform]: + showThresholdMarkers = true [terraform]: } [terraform]: + pluginVersion = "7.2.0" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum(jvm_memory_bytes_used{instance=\"$instance\", area=\"nonheap\"})*100/sum(jvm_memory_bytes_max{instance=\"$instance\", area=\"nonheap\"})" [terraform]: + format = "time_series" [terraform]: + hide = false [terraform]: + instant = false [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "" [terraform]: + refId = "B" [terraform]: }, [terraform]: ] [terraform]: + title = "Current Memory nonHEAP" [terraform]: + type = "gauge" [terraform]: } [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + editable = false [terraform]: + error = false [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + mappings = [] [terraform]: + max = 100 [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "percentage" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "#EAB839" [terraform]: + value = 80 [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 90 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "percent" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 6 [terraform]: + x = 6 [terraform]: + y = 0 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 23 [terraform]: + isNew = false [terraform]: + options = { [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "mean", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + showThresholdLabels = false [terraform]: + showThresholdMarkers = true [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + span = 0 [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum(jvm_memory_bytes_used{kubernetes_pod_name=\"$instance\", area=\"nonheap\"})*100/sum(jvm_memory_bytes_max{kubernetes_pod_name=\"$instance\", area=\"nonheap\"})" [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Current Memory nonHEAP" [terraform]: + type = "gauge" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + axisLabel = "" [terraform]: + axisPlacement = "auto" [terraform]: + barAlignment = 0 [terraform]: + drawStyle = "line" [terraform]: + fillOpacity = 20 [terraform]: + gradientMode = "none" [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: + lineInterpolation = "linear" [terraform]: + lineWidth = 1 [terraform]: + pointSize = 5 [terraform]: + scaleDistribution = { [terraform]: + type = "linear" [terraform]: } [terraform]: + showPoints = "never" [terraform]: + spanNulls = false [terraform]: + stacking = { [terraform]: + group = "A" [terraform]: + mode = "none" [terraform]: } [terraform]: + thresholdsStyle = { [terraform]: + mode = "off" [terraform]: } [terraform]: } [terraform]: + mappings = [] [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "bytes" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 12 [terraform]: + x = 12 [terraform]: + y = 0 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 12 [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [] [terraform]: + displayMode = "list" [terraform]: + placement = "right" [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum(jvm_memory_bytes_max{kubernetes_pod_name=\"$instance\"})" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "Max" [terraform]: + refId = "A" [terraform]: }, [terraform]: + { [terraform]: + expr = "sum(jvm_memory_bytes_committed{kubernetes_pod_name=\"$instance\"})" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "Comitted" [terraform]: + refId = "C" [terraform]: }, [terraform]: + { [terraform]: + expr = "sum(jvm_memory_bytes_used{kubernetes_pod_name=\"$instance\"})" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "Used" [terraform]: + refId = "B" [terraform]: }, [terraform]: ] [terraform]: + title = "Memory Usage" [terraform]: + type = "timeseries" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: } [terraform]: + decimals = 0 [terraform]: + mappings = [] [terraform]: + unit = "short" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 6 [terraform]: + x = 0 [terraform]: + y = 7 [terraform]: } [terraform]: + hideTimeOverride = true [terraform]: + id = 16 [terraform]: + links = [] [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [] [terraform]: + displayMode = "table" [terraform]: + placement = "right" [terraform]: + values = [ [terraform]: + "percent", [terraform]: ] [terraform]: } [terraform]: + pieType = "pie" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "sum by (realm)(increase(keycloak_logins[24h]))" [terraform]: + interval = "" [terraform]: + legendFormat = "{{realm}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Logins Per REALM for past 24h" [terraform]: + type = "piechart" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: } [terraform]: + decimals = 0 [terraform]: + mappings = [] [terraform]: + unit = "short" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 6 [terraform]: + x = 6 [terraform]: + y = 7 [terraform]: } [terraform]: + id = 44 [terraform]: + links = [] [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [] [terraform]: + displayMode = "table" [terraform]: + placement = "right" [terraform]: + values = [ [terraform]: + "percent", [terraform]: ] [terraform]: } [terraform]: + pieType = "pie" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + pluginVersion = "7.2.0" [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "sum by (realm)(increase(keycloak_registrations[24h]))" [terraform]: + interval = "" [terraform]: + legendFormat = "{{realm}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Registrations Per REALM for past 24h" [terraform]: + type = "piechart" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: } [terraform]: + decimals = 0 [terraform]: + mappings = [] [terraform]: + unit = "short" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 6 [terraform]: + x = 12 [terraform]: + y = 7 [terraform]: } [terraform]: + hideTimeOverride = true [terraform]: + id = 20 [terraform]: + links = [] [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [] [terraform]: + displayMode = "table" [terraform]: + placement = "right" [terraform]: + values = [ [terraform]: + "percent", [terraform]: ] [terraform]: } [terraform]: + pieType = "pie" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "sum by (client_id)(increase(keycloak_logins[24h]))" [terraform]: + interval = "" [terraform]: + legendFormat = "{{client_id}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Logins Per CLIENT for past 24h" [terraform]: + type = "piechart" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: } [terraform]: + decimals = 0 [terraform]: + mappings = [] [terraform]: + unit = "short" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 6 [terraform]: + x = 18 [terraform]: + y = 7 [terraform]: } [terraform]: + hideTimeOverride = true [terraform]: + id = 17 [terraform]: + links = [] [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [] [terraform]: + displayMode = "table" [terraform]: + placement = "right" [terraform]: + values = [ [terraform]: + "percent", [terraform]: ] [terraform]: } [terraform]: + pieType = "pie" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum by (client_id)(increase(keycloak_registrations[24h]))" [terraform]: + interval = "" [terraform]: + legendFormat = "{{client_id}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Registrations Per CLIENT for past 24h" [terraform]: + type = "piechart" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + axisLabel = "" [terraform]: + axisPlacement = "auto" [terraform]: + barAlignment = 0 [terraform]: + drawStyle = "line" [terraform]: + fillOpacity = 10 [terraform]: + gradientMode = "none" [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: + lineInterpolation = "linear" [terraform]: + lineWidth = 1 [terraform]: + pointSize = 5 [terraform]: + scaleDistribution = { [terraform]: + type = "linear" [terraform]: } [terraform]: + showPoints = "never" [terraform]: + spanNulls = true [terraform]: + stacking = { [terraform]: + group = "A" [terraform]: + mode = "none" [terraform]: } [terraform]: + thresholdsStyle = { [terraform]: + mode = "off" [terraform]: } [terraform]: } [terraform]: + mappings = [] [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "short" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 6 [terraform]: + y = 14 [terraform]: } [terraform]: + id = 46 [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [] [terraform]: + displayMode = "list" [terraform]: + placement = "bottom" [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum by (code)(increase(keycloak_response_errors[30m]))" [terraform]: + interval = "" [terraform]: + legendFormat = "{{code}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "4xx and 5xx Responses" [terraform]: + type = "timeseries" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + axisLabel = "" [terraform]: + axisPlacement = "auto" [terraform]: + barAlignment = 0 [terraform]: + drawStyle = "line" [terraform]: + fillOpacity = 10 [terraform]: + gradientMode = "none" [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: + lineInterpolation = "linear" [terraform]: + lineWidth = 1 [terraform]: + pointSize = 5 [terraform]: + scaleDistribution = { [terraform]: + type = "linear" [terraform]: } [terraform]: + showPoints = "never" [terraform]: + spanNulls = false [terraform]: + stacking = { [terraform]: + group = "A" [terraform]: + mode = "none" [terraform]: } [terraform]: + thresholdsStyle = { [terraform]: + mode = "off" [terraform]: } [terraform]: } [terraform]: + mappings = [] [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "none" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 0 [terraform]: + y = 22 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 1 [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [] [terraform]: + displayMode = "table" [terraform]: + placement = "right" [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + datasource = { [terraform]: + type = "prometheus" [terraform]: + uid = "PBFA97CFB590B2093" [terraform]: } [terraform]: + exemplar = true [terraform]: + expr = "sum by (realm)(increase(keycloak_logins[30m]))" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "{{realm}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Logins per REALM" [terraform]: + type = "timeseries" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + axisLabel = "" [terraform]: + axisPlacement = "auto" [terraform]: + barAlignment = 0 [terraform]: + drawStyle = "line" [terraform]: + fillOpacity = 10 [terraform]: + gradientMode = "none" [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: + lineInterpolation = "linear" [terraform]: + lineWidth = 1 [terraform]: + pointSize = 5 [terraform]: + scaleDistribution = { [terraform]: + type = "linear" [terraform]: } [terraform]: + showPoints = "never" [terraform]: + spanNulls = false [terraform]: + stacking = { [terraform]: + group = "A" [terraform]: + mode = "none" [terraform]: } [terraform]: + thresholdsStyle = { [terraform]: + mode = "off" [terraform]: } [terraform]: } [terraform]: + mappings = [] [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "none" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 12 [terraform]: + y = 22 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 7 [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + displayMode = "table" [terraform]: + placement = "right" [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum by (error) (increase(keycloak_failed_login_attempts{provider=\"keycloak\",realm=\"$realm\"}[30m]))" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "{{$realm }} {{error}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: + { [terraform]: + expr = "sum by (realm) (increase(keycloak_failed_login_attempts{provider=\"keycloak\",realm=\"dialog-test\"} [30m]))" [terraform]: + interval = "" [terraform]: + legendFormat = "{{sum by $realm}}" [terraform]: + refId = "B" [terraform]: }, [terraform]: ] [terraform]: + title = "Login Errors on realm $realm" [terraform]: + type = "timeseries" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + axisLabel = "" [terraform]: + axisPlacement = "auto" [terraform]: + barAlignment = 0 [terraform]: + drawStyle = "line" [terraform]: + fillOpacity = 10 [terraform]: + gradientMode = "none" [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: + lineInterpolation = "linear" [terraform]: + lineWidth = 1 [terraform]: + pointSize = 5 [terraform]: + scaleDistribution = { [terraform]: + type = "linear" [terraform]: } [terraform]: + showPoints = "never" [terraform]: + spanNulls = false [terraform]: + stacking = { [terraform]: + group = "A" [terraform]: + mode = "none" [terraform]: } [terraform]: + thresholdsStyle = { [terraform]: + mode = "off" [terraform]: } [terraform]: } [terraform]: + mappings = [] [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "none" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 0 [terraform]: + y = 30 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 18 [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [] [terraform]: + displayMode = "table" [terraform]: + placement = "right" [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum by (client_id)(increase(keycloak_logins{realm=\"$realm\",provider=\"keycloak\"}[30m]))" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 2 [terraform]: + legendFormat = "{{client_id}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Logins per CLIENT on realm $realm" [terraform]: + type = "timeseries" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + axisLabel = "" [terraform]: + axisPlacement = "auto" [terraform]: + barAlignment = 0 [terraform]: + drawStyle = "line" [terraform]: + fillOpacity = 10 [terraform]: + gradientMode = "none" [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: + lineInterpolation = "linear" [terraform]: + lineWidth = 1 [terraform]: + pointSize = 5 [terraform]: + scaleDistribution = { [terraform]: + type = "linear" [terraform]: } [terraform]: + showPoints = "never" [terraform]: + spanNulls = true [terraform]: + stacking = { [terraform]: + group = "A" [terraform]: + mode = "none" [terraform]: } [terraform]: + thresholdsStyle = { [terraform]: + mode = "off" [terraform]: } [terraform]: } [terraform]: + mappings = [] [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "short" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 12 [terraform]: + y = 30 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 21 [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [] [terraform]: + displayMode = "table" [terraform]: + placement = "right" [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum by (realm) (increase(keycloak_registrations_errors{provider=\"keycloak\",realm=\"$realm\"} [30m]))" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 2 [terraform]: + legendFormat = "Sum by {{realm}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: + { [terraform]: + expr = "sum by (error) (increase(keycloak_registrations_errors{provider=\"keycloak\",realm=\"$realm\"} [30m]))" [terraform]: + interval = "" [terraform]: + legendFormat = "{{error}}" [terraform]: + refId = "B" [terraform]: }, [terraform]: ] [terraform]: + title = "Registration Errors on realm $realm" [terraform]: + type = "timeseries" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + axisLabel = "" [terraform]: + axisPlacement = "auto" [terraform]: + barAlignment = 0 [terraform]: + drawStyle = "line" [terraform]: + fillOpacity = 10 [terraform]: + gradientMode = "none" [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: + lineInterpolation = "linear" [terraform]: + lineWidth = 1 [terraform]: + pointSize = 5 [terraform]: + scaleDistribution = { [terraform]: + type = "linear" [terraform]: } [terraform]: + showPoints = "never" [terraform]: + spanNulls = true [terraform]: + stacking = { [terraform]: + group = "A" [terraform]: + mode = "none" [terraform]: } [terraform]: + thresholdsStyle = { [terraform]: + mode = "off" [terraform]: } [terraform]: } [terraform]: + mappings = [] [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "short" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 0 [terraform]: + y = 38 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 33 [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [] [terraform]: + displayMode = "table" [terraform]: + placement = "right" [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum by (realm)(increase(keycloak_registrations[30m]))" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "{{realm}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Registrations per REALM" [terraform]: + type = "timeseries" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + axisLabel = "" [terraform]: + axisPlacement = "auto" [terraform]: + barAlignment = 0 [terraform]: + drawStyle = "line" [terraform]: + fillOpacity = 10 [terraform]: + gradientMode = "none" [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: + lineInterpolation = "linear" [terraform]: + lineWidth = 1 [terraform]: + pointSize = 5 [terraform]: + scaleDistribution = { [terraform]: + type = "linear" [terraform]: } [terraform]: + showPoints = "never" [terraform]: + spanNulls = false [terraform]: + stacking = { [terraform]: + group = "A" [terraform]: + mode = "none" [terraform]: } [terraform]: + thresholdsStyle = { [terraform]: + mode = "off" [terraform]: } [terraform]: } [terraform]: + mappings = [] [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "none" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 12 [terraform]: + y = 38 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 19 [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + displayMode = "table" [terraform]: + placement = "right" [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum by (error) (increase(keycloak_failed_login_attempts{provider=\"keycloak\",realm=\"$realm\",client_id=\"$ClientId\"}[30m]))" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 2 [terraform]: + legendFormat = "{{error}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Login Errors for $ClientId" [terraform]: + type = "timeseries" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + axisLabel = "" [terraform]: + axisPlacement = "auto" [terraform]: + barAlignment = 0 [terraform]: + drawStyle = "line" [terraform]: + fillOpacity = 10 [terraform]: + gradientMode = "none" [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: + lineInterpolation = "linear" [terraform]: + lineWidth = 1 [terraform]: + pointSize = 5 [terraform]: + scaleDistribution = { [terraform]: + type = "linear" [terraform]: } [terraform]: + showPoints = "never" [terraform]: + spanNulls = false [terraform]: + stacking = { [terraform]: + group = "A" [terraform]: + mode = "none" [terraform]: } [terraform]: + thresholdsStyle = { [terraform]: + mode = "off" [terraform]: } [terraform]: } [terraform]: + mappings = [] [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "none" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 0 [terraform]: + y = 46 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 22 [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [] [terraform]: + displayMode = "table" [terraform]: + placement = "right" [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum by (client_id)(increase(keycloak_registrations{realm=\"$realm\",provider=\"keycloak\"}[30m]))" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 2 [terraform]: + legendFormat = "{{client_id}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: + { [terraform]: + expr = "sum by (realm)(increase(keycloak_registrations{provider=\"keycloak\",realm=\"$realm\"} [30m]))" [terraform]: + interval = "" [terraform]: + legendFormat = "Sum by {{realm}}" [terraform]: + refId = "B" [terraform]: }, [terraform]: ] [terraform]: + title = "Registrations per CLIENT on relm $realm" [terraform]: + type = "timeseries" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + mode = "palette-classic" [terraform]: } [terraform]: + custom = { [terraform]: + axisLabel = "" [terraform]: + axisPlacement = "auto" [terraform]: + barAlignment = 0 [terraform]: + drawStyle = "line" [terraform]: + fillOpacity = 10 [terraform]: + gradientMode = "none" [terraform]: + hideFrom = { [terraform]: + legend = false [terraform]: + tooltip = false [terraform]: + viz = false [terraform]: } [terraform]: + lineInterpolation = "linear" [terraform]: + lineWidth = 1 [terraform]: + pointSize = 5 [terraform]: + scaleDistribution = { [terraform]: + type = "linear" [terraform]: } [terraform]: + showPoints = "never" [terraform]: + spanNulls = false [terraform]: + stacking = { [terraform]: + group = "A" [terraform]: + mode = "none" [terraform]: } [terraform]: + thresholdsStyle = { [terraform]: + mode = "off" [terraform]: } [terraform]: } [terraform]: + mappings = [] [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "none" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 12 [terraform]: + y = 46 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 34 [terraform]: + options = { [terraform]: + legend = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + displayMode = "table" [terraform]: + placement = "right" [terraform]: } [terraform]: + tooltip = { [terraform]: + mode = "single" [terraform]: } [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum by (error) (increase(keycloak_registrations_errors{provider=\"keycloak\",realm=\"$realm\",client_id=\"$ClientId\"}[30m]))" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 2 [terraform]: + legendFormat = "{{error}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Registration Errors for $ClientId" [terraform]: + type = "timeseries" [terraform]: }, [terraform]: + { [terraform]: + cards = {} [terraform]: + color = { [terraform]: + cardColor = "#73BF69" [terraform]: + colorScale = "sqrt" [terraform]: + colorScheme = "interpolateGreens" [terraform]: + exponent = 0.4 [terraform]: + mode = "opacity" [terraform]: } [terraform]: + dataFormat = "tsbuckets" [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + description = "" [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 0 [terraform]: + y = 54 [terraform]: } [terraform]: + heatmap = {} [terraform]: + hideTimeOverride = false [terraform]: + hideZeroBuckets = true [terraform]: + highlightCards = true [terraform]: + id = 35 [terraform]: + legend = { [terraform]: + show = true [terraform]: } [terraform]: + pluginVersion = "7.2.0" [terraform]: + reverseYBuckets = false [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum(increase(keycloak_request_duration_bucket{method=\"GET\"}[30m])) by (le)" [terraform]: + format = "heatmap" [terraform]: + interval = "" [terraform]: + intervalFactor = 4 [terraform]: + legendFormat = "{{ le }}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Request duration method = \"GET\" Heatmap" [terraform]: + tooltip = { [terraform]: + show = true [terraform]: + showHistogram = false [terraform]: } [terraform]: + type = "heatmap" [terraform]: + xAxis = { [terraform]: + show = true [terraform]: } [terraform]: + yAxis = { [terraform]: + format = "ms" [terraform]: + logBase = 1 [terraform]: + show = true [terraform]: } [terraform]: + yBucketBound = "auto" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + description = "" [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + mappings = [] [terraform]: + max = 100 [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "percentage" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "red" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: + { [terraform]: + color = "#EAB839" [terraform]: + value = 90 [terraform]: }, [terraform]: + { [terraform]: + color = "green" [terraform]: + value = 98 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "percent" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 12 [terraform]: + y = 54 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 39 [terraform]: + options = { [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "mean", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + showThresholdLabels = false [terraform]: + showThresholdMarkers = true [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum(rate(keycloak_request_duration_bucket{method=\"GET\", le=\"100.0\"}[30m])) / sum(rate(keycloak_request_duration_count{method=\"GET\"}[30m])) * 100" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 2 [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Percentage of requests \"GET\" method was served in 100ms or below" [terraform]: + type = "gauge" [terraform]: }, [terraform]: + { [terraform]: + cards = {} [terraform]: + color = { [terraform]: + cardColor = "#73BF69" [terraform]: + colorScale = "sqrt" [terraform]: + colorScheme = "interpolateGreens" [terraform]: + exponent = 0.4 [terraform]: + mode = "opacity" [terraform]: } [terraform]: + dataFormat = "tsbuckets" [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + description = "" [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 0 [terraform]: + y = 62 [terraform]: } [terraform]: + heatmap = {} [terraform]: + hideTimeOverride = false [terraform]: + hideZeroBuckets = true [terraform]: + highlightCards = true [terraform]: + id = 36 [terraform]: + legend = { [terraform]: + show = true [terraform]: } [terraform]: + pluginVersion = "7.2.0" [terraform]: + reverseYBuckets = false [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum(increase(keycloak_request_duration_bucket{method=\"POST\"}[30m])) by (le)" [terraform]: + format = "heatmap" [terraform]: + interval = "" [terraform]: + intervalFactor = 4 [terraform]: + legendFormat = "{{ le }}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Request duration method = \"POST\" Heatmap" [terraform]: + tooltip = { [terraform]: + show = true [terraform]: + showHistogram = false [terraform]: } [terraform]: + type = "heatmap" [terraform]: + xAxis = { [terraform]: + show = true [terraform]: } [terraform]: + yAxis = { [terraform]: + format = "ms" [terraform]: + logBase = 1 [terraform]: + show = true [terraform]: } [terraform]: + yBucketBound = "auto" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + description = "" [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + mappings = [] [terraform]: + max = 100 [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "percentage" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "red" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: + { [terraform]: + color = "#EAB839" [terraform]: + value = 90 [terraform]: }, [terraform]: + { [terraform]: + color = "green" [terraform]: + value = 98 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "percent" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 12 [terraform]: + y = 62 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 40 [terraform]: + options = { [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "mean", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + showThresholdLabels = false [terraform]: + showThresholdMarkers = true [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum(rate(keycloak_request_duration_bucket{method=\"POST\", le=\"100.0\"}[30m])) / sum(rate(keycloak_request_duration_count{method=\"POST\"}[30m])) * 100" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 2 [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Percentage of requests \"POST\" method was served in 100ms or below" [terraform]: + type = "gauge" [terraform]: }, [terraform]: + { [terraform]: + cards = {} [terraform]: + color = { [terraform]: + cardColor = "#73BF69" [terraform]: + colorScale = "sqrt" [terraform]: + colorScheme = "interpolateGreens" [terraform]: + exponent = 0.4 [terraform]: + mode = "opacity" [terraform]: } [terraform]: + dataFormat = "tsbuckets" [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + description = "" [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 0 [terraform]: + y = 70 [terraform]: } [terraform]: + heatmap = {} [terraform]: + hideTimeOverride = false [terraform]: + hideZeroBuckets = true [terraform]: + highlightCards = true [terraform]: + id = 37 [terraform]: + legend = { [terraform]: + show = true [terraform]: } [terraform]: + pluginVersion = "7.2.0" [terraform]: + reverseYBuckets = false [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum(increase(keycloak_request_duration_bucket{method=\"HEAD\"}[30m])) by (le)" [terraform]: + format = "heatmap" [terraform]: + interval = "" [terraform]: + intervalFactor = 4 [terraform]: + legendFormat = "{{ le }}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Request duration method = \"HEAD\" Heatmap" [terraform]: + tooltip = { [terraform]: + show = true [terraform]: + showHistogram = false [terraform]: } [terraform]: + type = "heatmap" [terraform]: + xAxis = { [terraform]: + show = true [terraform]: } [terraform]: + yAxis = { [terraform]: + format = "ms" [terraform]: + logBase = 1 [terraform]: + show = true [terraform]: } [terraform]: + yBucketBound = "auto" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + description = "" [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + mappings = [] [terraform]: + max = 100 [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "percentage" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "red" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: + { [terraform]: + color = "#EAB839" [terraform]: + value = 90 [terraform]: }, [terraform]: + { [terraform]: + color = "green" [terraform]: + value = 98 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "percent" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 12 [terraform]: + y = 70 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 41 [terraform]: + options = { [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "mean", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + showThresholdLabels = false [terraform]: + showThresholdMarkers = true [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum(rate(keycloak_request_duration_bucket{method=\"HEAD\", le=\"100.0\"}[30m])) / sum(rate(keycloak_request_duration_count{method=\"HEAD\"}[30m])) * 100" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 2 [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Percentage of requests \"HEAD\" method was served in 100ms or below" [terraform]: + type = "gauge" [terraform]: }, [terraform]: + { [terraform]: + cards = {} [terraform]: + color = { [terraform]: + cardColor = "#73BF69" [terraform]: + colorScale = "sqrt" [terraform]: + colorScheme = "interpolateGreens" [terraform]: + exponent = 0.4 [terraform]: + mode = "opacity" [terraform]: } [terraform]: + dataFormat = "tsbuckets" [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + description = "" [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 0 [terraform]: + y = 78 [terraform]: } [terraform]: + heatmap = {} [terraform]: + hideTimeOverride = false [terraform]: + hideZeroBuckets = true [terraform]: + highlightCards = true [terraform]: + id = 38 [terraform]: + legend = { [terraform]: + show = true [terraform]: } [terraform]: + pluginVersion = "7.2.0" [terraform]: + reverseYBuckets = false [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum(increase(keycloak_request_duration_bucket{method=\"PUT\"}[30m])) by (le)" [terraform]: + format = "heatmap" [terraform]: + interval = "" [terraform]: + intervalFactor = 4 [terraform]: + legendFormat = "{{ le }}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Request duration method = \"PUT\" Heatmap" [terraform]: + tooltip = { [terraform]: + show = true [terraform]: + showHistogram = false [terraform]: } [terraform]: + type = "heatmap" [terraform]: + xAxis = { [terraform]: + show = true [terraform]: } [terraform]: + yAxis = { [terraform]: + format = "ms" [terraform]: + logBase = 1 [terraform]: + show = true [terraform]: } [terraform]: + yBucketBound = "auto" [terraform]: }, [terraform]: + { [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + description = "" [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + mappings = [] [terraform]: + max = 100 [terraform]: + min = 0 [terraform]: + thresholds = { [terraform]: + mode = "percentage" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "red" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: + { [terraform]: + color = "#EAB839" [terraform]: + value = 90 [terraform]: }, [terraform]: + { [terraform]: + color = "green" [terraform]: + value = 98 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "percent" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 8 [terraform]: + w = 12 [terraform]: + x = 12 [terraform]: + y = 78 [terraform]: } [terraform]: + hideTimeOverride = false [terraform]: + id = 42 [terraform]: + options = { [terraform]: + orientation = "auto" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "mean", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + showThresholdLabels = false [terraform]: + showThresholdMarkers = true [terraform]: } [terraform]: + pluginVersion = "8.3.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + expr = "sum(rate(keycloak_request_duration_bucket{method=\"PUT\", le=\"100.0\"}[30m])) / sum(rate(keycloak_request_duration_count{method=\"PUT\"}[30m])) * 100" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 2 [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Percentage of requests \"PUT\" method was served in 100ms or below" [terraform]: + type = "gauge" [terraform]: }, [terraform]: ] [terraform]: + refresh = false [terraform]: + schemaVersion = 34 [terraform]: + style = "dark" [terraform]: + tags = [] [terraform]: + templating = { [terraform]: + list = [ [terraform]: + { [terraform]: + current = { [terraform]: + selected = false [terraform]: + text = "Prometheus" [terraform]: + value = "Prometheus" [terraform]: } [terraform]: + hide = 0 [terraform]: + includeAll = false [terraform]: + multi = false [terraform]: + name = "Datasource" [terraform]: + options = [] [terraform]: + query = "prometheus" [terraform]: + queryValue = "" [terraform]: + refresh = 1 [terraform]: + regex = "" [terraform]: + skipUrlSync = false [terraform]: + type = "datasource" [terraform]: }, [terraform]: + { [terraform]: + allFormat = "" [terraform]: + allValue = "" [terraform]: + current = { [terraform]: + selected = false [terraform]: + text = "None" [terraform]: + value = "" [terraform]: } [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + definition = "label_values(keycloak_logins,kubernetes_pod_name)" [terraform]: + hide = 0 [terraform]: + includeAll = false [terraform]: + label = "Instance" [terraform]: + multi = false [terraform]: + multiFormat = "" [terraform]: + name = "instance" [terraform]: + options = [] [terraform]: + query = { [terraform]: + query = "label_values(keycloak_logins,kubernetes_pod_name)" [terraform]: + refId = "Prometheus-instance-Variable-Query" [terraform]: } [terraform]: + refresh = 1 [terraform]: + regex = "" [terraform]: + skipUrlSync = false [terraform]: + sort = 0 [terraform]: + tagValuesQuery = "" [terraform]: + tagsQuery = "" [terraform]: + type = "query" [terraform]: + useTags = false [terraform]: }, [terraform]: + { [terraform]: + allFormat = "" [terraform]: + allValue = "" [terraform]: + current = { [terraform]: + selected = true [terraform]: + text = "master" [terraform]: + value = "master" [terraform]: } [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + definition = "" [terraform]: + hide = 0 [terraform]: + includeAll = false [terraform]: + label = "Realm" [terraform]: + multi = false [terraform]: + multiFormat = "" [terraform]: + name = "realm" [terraform]: + options = [] [terraform]: + query = { [terraform]: + query = "label_values(keycloak_logins{provider=\"keycloak\"},realm)" [terraform]: + refId = "Prometheus-realm-Variable-Query" [terraform]: } [terraform]: + refresh = 1 [terraform]: + regex = "" [terraform]: + skipUrlSync = false [terraform]: + sort = 0 [terraform]: + tagValuesQuery = "" [terraform]: + tagsQuery = "" [terraform]: + type = "query" [terraform]: + useTags = false [terraform]: }, [terraform]: + { [terraform]: + allFormat = "" [terraform]: + allValue = "" [terraform]: + current = { [terraform]: + selected = false [terraform]: + text = "admin-cli" [terraform]: + value = "admin-cli" [terraform]: } [terraform]: + datasource = { [terraform]: + uid = "$Datasource" [terraform]: } [terraform]: + definition = "" [terraform]: + hide = 0 [terraform]: + includeAll = false [terraform]: + label = "ClientId" [terraform]: + multi = false [terraform]: + multiFormat = "" [terraform]: + name = "ClientId" [terraform]: + options = [] [terraform]: + query = { [terraform]: + query = "label_values(keycloak_logins{provider=\"keycloak\",realm=\"$realm\"},client_id)" [terraform]: + refId = "Prometheus-ClientId-Variable-Query" [terraform]: } [terraform]: + refresh = 1 [terraform]: + regex = "" [terraform]: + skipUrlSync = false [terraform]: + sort = 0 [terraform]: + tagValuesQuery = "" [terraform]: + tagsQuery = "" [terraform]: + type = "query" [terraform]: + useTags = false [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + time = { [terraform]: + from = "now-30d" [terraform]: + to = "now" [terraform]: } [terraform]: + timepicker = { [terraform]: + refresh_intervals = [ [terraform]: + "5s", [terraform]: + "10s", [terraform]: + "30s", [terraform]: + "1m", [terraform]: + "5m", [terraform]: + "15m", [terraform]: + "30m", [terraform]: + "1h", [terraform]: + "2h", [terraform]: + "1d", [terraform]: ] [terraform]: + time_options = [ [terraform]: + "5m", [terraform]: + "15m", [terraform]: + "1h", [terraform]: + "6h", [terraform]: + "12h", [terraform]: + "24h", [terraform]: + "2d", [terraform]: + "7d", [terraform]: + "30d", [terraform]: ] [terraform]: } [terraform]: + timezone = "" [terraform]: + title = "Keycloak Metrics Dashboard" [terraform]: + uid = "keycloak-dashboard" [terraform]: + version = 2 [terraform]: + weekStart = "" [terraform]: } [terraform]: ) [terraform]: + "traefik.json" = jsonencode( [terraform]: { [terraform]: + annotations = { [terraform]: + list = [ [terraform]: + { [terraform]: + builtIn = 1 [terraform]: + datasource = "-- Grafana --" [terraform]: + enable = true [terraform]: + hide = true [terraform]: + iconColor = "rgba(0, 211, 255, 1)" [terraform]: + name = "Annotations & Alerts" [terraform]: + type = "dashboard" [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + description = "Traefik Metrics Overview" [terraform]: + editable = true [terraform]: + gnetId = 13165 [terraform]: + graphTooltip = 1 [terraform]: + id = 27 [terraform]: + iteration = 1630948875428 [terraform]: + links = [] [terraform]: + panels = [ [terraform]: + { [terraform]: + collapsed = false [terraform]: + datasource = "Prometheus" [terraform]: + gridPos = { [terraform]: + h = 1 [terraform]: + w = 24 [terraform]: + x = 0 [terraform]: + y = 0 [terraform]: } [terraform]: + id = 21 [terraform]: + panels = [] [terraform]: + title = "General" [terraform]: + type = "row" [terraform]: }, [terraform]: + { [terraform]: + cacheTimeout = null [terraform]: + datasource = null [terraform]: + fieldConfig = { [terraform]: + defaults = { [terraform]: + color = { [terraform]: + fixedColor = "rgb(31, 120, 193)" [terraform]: + mode = "fixed" [terraform]: } [terraform]: + mappings = [ [terraform]: + { [terraform]: + options = { [terraform]: + match = "null" [terraform]: + result = { [terraform]: + text = "N/A" [terraform]: } [terraform]: } [terraform]: + type = "special" [terraform]: }, [terraform]: ] [terraform]: + thresholds = { [terraform]: + mode = "absolute" [terraform]: + steps = [ [terraform]: + { [terraform]: + color = "green" [terraform]: + value = null [terraform]: }, [terraform]: + { [terraform]: + color = "red" [terraform]: + value = 80 [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + unit = "none" [terraform]: } [terraform]: + overrides = [] [terraform]: } [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 3 [terraform]: + x = 0 [terraform]: + y = 1 [terraform]: } [terraform]: + id = 13 [terraform]: + interval = null [terraform]: + links = [] [terraform]: + maxDataPoints = 100 [terraform]: + options = { [terraform]: + colorMode = "none" [terraform]: + graphMode = "area" [terraform]: + justifyMode = "auto" [terraform]: + orientation = "horizontal" [terraform]: + reduceOptions = { [terraform]: + calcs = [ [terraform]: + "lastNotNull", [terraform]: ] [terraform]: + fields = "" [terraform]: + values = false [terraform]: } [terraform]: + text = {} [terraform]: + textMode = "auto" [terraform]: } [terraform]: + pluginVersion = "8.0.3" [terraform]: + targets = [ [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "count(kube_pod_status_ready{namespace=\"$namespace\",condition=\"true\",pod=~\".*traefik.*\", job=\"traefik\"})" [terraform]: + format = "time_series" [terraform]: + hide = false [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + title = "Running instances" [terraform]: + type = "stat" [terraform]: }, [terraform]: + { [terraform]: + aliasColors = {} [terraform]: + bars = false [terraform]: + dashLength = 10 [terraform]: + dashes = false [terraform]: + datasource = null [terraform]: + fill = 1 [terraform]: + fillGradient = 0 [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 21 [terraform]: + x = 3 [terraform]: + y = 1 [terraform]: } [terraform]: + hiddenSeries = false [terraform]: + id = 29 [terraform]: + legend = { [terraform]: + alignAsTable = true [terraform]: + avg = true [terraform]: + current = false [terraform]: + max = true [terraform]: + min = false [terraform]: + rightSide = true [terraform]: + show = true [terraform]: + total = false [terraform]: + values = true [terraform]: } [terraform]: + lines = true [terraform]: + linewidth = 1 [terraform]: + links = [] [terraform]: + nullPointMode = "null" [terraform]: + options = { [terraform]: + alertThreshold = true [terraform]: } [terraform]: + percentage = false [terraform]: + pluginVersion = "8.0.3" [terraform]: + pointradius = 5 [terraform]: + points = false [terraform]: + renderer = "flot" [terraform]: + seriesOverrides = [] [terraform]: + spaceLength = 10 [terraform]: + stack = false [terraform]: + steppedLine = false [terraform]: + targets = [ [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "histogram_quantile(0.$percentiles, sum(rate(traefik_entrypoint_request_duration_seconds_bucket{code=~\"2..\"}[5m])) by (instance, le))" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "{{ instance }}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + thresholds = [] [terraform]: + timeFrom = null [terraform]: + timeRegions = [] [terraform]: + timeShift = null [terraform]: + title = "Per instance latency $percentiles th perc over 5 min" [terraform]: + tooltip = { [terraform]: + shared = true [terraform]: + sort = 0 [terraform]: + value_type = "individual" [terraform]: } [terraform]: + type = "graph" [terraform]: + xaxis = { [terraform]: + buckets = null [terraform]: + mode = "time" [terraform]: + name = null [terraform]: + show = true [terraform]: + values = [] [terraform]: } [terraform]: + yaxes = [ [terraform]: + { [terraform]: + format = "s" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = true [terraform]: }, [terraform]: + { [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = null [terraform]: + show = false [terraform]: }, [terraform]: ] [terraform]: + yaxis = { [terraform]: + align = false [terraform]: + alignLevel = null [terraform]: } [terraform]: }, [terraform]: + { [terraform]: + collapsed = false [terraform]: + datasource = "Prometheus" [terraform]: + gridPos = { [terraform]: + h = 1 [terraform]: + w = 24 [terraform]: + x = 0 [terraform]: + y = 8 [terraform]: } [terraform]: + id = 17 [terraform]: + panels = [] [terraform]: + title = "Entrypoints" [terraform]: + type = "row" [terraform]: }, [terraform]: + { [terraform]: + aliasColors = {} [terraform]: + bars = false [terraform]: + dashLength = 10 [terraform]: + dashes = false [terraform]: + datasource = "$Prometheus" [terraform]: + fill = 7 [terraform]: + fillGradient = 0 [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 12 [terraform]: + x = 0 [terraform]: + y = 9 [terraform]: } [terraform]: + hiddenSeries = false [terraform]: + id = 19 [terraform]: + legend = { [terraform]: + alignAsTable = true [terraform]: + avg = true [terraform]: + current = true [terraform]: + hideZero = true [terraform]: + max = true [terraform]: + min = false [terraform]: + rightSide = true [terraform]: + show = true [terraform]: + sort = "avg" [terraform]: + sortDesc = true [terraform]: + total = false [terraform]: + values = true [terraform]: } [terraform]: + lines = true [terraform]: + linewidth = 1 [terraform]: + links = [] [terraform]: + nullPointMode = "null" [terraform]: + options = { [terraform]: + alertThreshold = true [terraform]: } [terraform]: + percentage = false [terraform]: + pluginVersion = "8.0.3" [terraform]: + pointradius = 5 [terraform]: + points = false [terraform]: + renderer = "flot" [terraform]: + seriesOverrides = [] [terraform]: + spaceLength = 10 [terraform]: + stack = true [terraform]: + steppedLine = false [terraform]: + targets = [ [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "sum(traefik_entrypoint_open_connections) by (method)" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "{{ method }}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + thresholds = [] [terraform]: + timeFrom = null [terraform]: + timeRegions = [] [terraform]: + timeShift = null [terraform]: + title = "Open Connections" [terraform]: + tooltip = { [terraform]: + shared = true [terraform]: + sort = 0 [terraform]: + value_type = "individual" [terraform]: } [terraform]: + type = "graph" [terraform]: + xaxis = { [terraform]: + buckets = null [terraform]: + mode = "time" [terraform]: + name = null [terraform]: + show = true [terraform]: + values = [] [terraform]: } [terraform]: + yaxes = [ [terraform]: + { [terraform]: + decimals = 0 [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = true [terraform]: }, [terraform]: + { [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = false [terraform]: }, [terraform]: ] [terraform]: + yaxis = { [terraform]: + align = false [terraform]: + alignLevel = null [terraform]: } [terraform]: }, [terraform]: + { [terraform]: + aliasColors = {} [terraform]: + bars = false [terraform]: + dashLength = 10 [terraform]: + dashes = false [terraform]: + datasource = "$Prometheus" [terraform]: + decimals = 2 [terraform]: + fill = 1 [terraform]: + fillGradient = 0 [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 12 [terraform]: + x = 12 [terraform]: + y = 9 [terraform]: } [terraform]: + hiddenSeries = false [terraform]: + id = 22 [terraform]: + legend = { [terraform]: + alignAsTable = true [terraform]: + avg = true [terraform]: + current = true [terraform]: + hideZero = true [terraform]: + max = false [terraform]: + min = false [terraform]: + rightSide = true [terraform]: + show = true [terraform]: + sideWidth = null [terraform]: + total = false [terraform]: + values = true [terraform]: } [terraform]: + lines = true [terraform]: + linewidth = 1 [terraform]: + links = [] [terraform]: + nullPointMode = "null" [terraform]: + options = { [terraform]: + alertThreshold = true [terraform]: } [terraform]: + percentage = false [terraform]: + pluginVersion = "8.0.3" [terraform]: + pointradius = 5 [terraform]: + points = false [terraform]: + renderer = "flot" [terraform]: + seriesOverrides = [] [terraform]: + spaceLength = 10 [terraform]: + stack = false [terraform]: + steppedLine = false [terraform]: + targets = [ [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "(sum(rate(traefik_entrypoint_request_duration_seconds_bucket{le=\"0.1\",code=\"200\"}[5m])) by (job) + sum(rate(traefik_entrypoint_request_duration_seconds_bucket{le=\"0.3\",code=\"200\"}[5m])) by (job)) / 2 / sum(rate(traefik_entrypoint_request_duration_seconds_count{code=\"200\"}[5m])) by (job)" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "Code 200" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + thresholds = [] [terraform]: + timeFrom = null [terraform]: + timeRegions = [] [terraform]: + timeShift = null [terraform]: + title = "Apdex score (over 5 min)" [terraform]: + tooltip = { [terraform]: + shared = true [terraform]: + sort = 0 [terraform]: + value_type = "individual" [terraform]: } [terraform]: + type = "graph" [terraform]: + xaxis = { [terraform]: + buckets = null [terraform]: + mode = "time" [terraform]: + name = null [terraform]: + show = true [terraform]: + values = [] [terraform]: } [terraform]: + yaxes = [ [terraform]: + { [terraform]: + decimals = 2 [terraform]: + format = "short" [terraform]: + label = "" [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = true [terraform]: }, [terraform]: + { [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = false [terraform]: }, [terraform]: ] [terraform]: + yaxis = { [terraform]: + align = false [terraform]: + alignLevel = null [terraform]: } [terraform]: }, [terraform]: + { [terraform]: + aliasColors = {} [terraform]: + bars = true [terraform]: + dashLength = 10 [terraform]: + dashes = false [terraform]: + datasource = null [terraform]: + decimals = 2 [terraform]: + description = "" [terraform]: + fill = 1 [terraform]: + fillGradient = 0 [terraform]: + gridPos = { [terraform]: + h = 10 [terraform]: + w = 24 [terraform]: + x = 0 [terraform]: + y = 16 [terraform]: } [terraform]: + hiddenSeries = false [terraform]: + id = 3 [terraform]: + legend = { [terraform]: + alignAsTable = true [terraform]: + avg = true [terraform]: + current = true [terraform]: + hideZero = true [terraform]: + max = true [terraform]: + min = false [terraform]: + rightSide = true [terraform]: + show = true [terraform]: + sort = "avg" [terraform]: + sortDesc = true [terraform]: + total = false [terraform]: + values = true [terraform]: } [terraform]: + lines = false [terraform]: + linewidth = 1 [terraform]: + links = [] [terraform]: + nullPointMode = "null" [terraform]: + options = { [terraform]: + alertThreshold = true [terraform]: } [terraform]: + percentage = false [terraform]: + pluginVersion = "8.0.3" [terraform]: + pointradius = 5 [terraform]: + points = false [terraform]: + renderer = "flot" [terraform]: + seriesOverrides = [] [terraform]: + spaceLength = 10 [terraform]: + stack = false [terraform]: + steppedLine = false [terraform]: + targets = [ [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "sum(rate(traefik_entrypoint_requests_total[1m])) by (entrypoint)" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 2 [terraform]: + legendFormat = "{{ entrypoint }}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + thresholds = [] [terraform]: + timeFrom = null [terraform]: + timeRegions = [] [terraform]: + timeShift = null [terraform]: + title = "Requests/min per entrypoint" [terraform]: + tooltip = { [terraform]: + shared = true [terraform]: + sort = 0 [terraform]: + value_type = "individual" [terraform]: } [terraform]: + type = "graph" [terraform]: + xaxis = { [terraform]: + buckets = null [terraform]: + mode = "time" [terraform]: + name = null [terraform]: + show = true [terraform]: + values = [] [terraform]: } [terraform]: + yaxes = [ [terraform]: + { [terraform]: + decimals = 2 [terraform]: + format = "short" [terraform]: + label = "" [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = true [terraform]: }, [terraform]: + { [terraform]: + decimals = 2 [terraform]: + format = "short" [terraform]: + label = "" [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = true [terraform]: }, [terraform]: ] [terraform]: + yaxis = { [terraform]: + align = false [terraform]: + alignLevel = null [terraform]: } [terraform]: }, [terraform]: + { [terraform]: + collapsed = false [terraform]: + datasource = "Prometheus" [terraform]: + gridPos = { [terraform]: + h = 1 [terraform]: + w = 24 [terraform]: + x = 0 [terraform]: + y = 26 [terraform]: } [terraform]: + id = 24 [terraform]: + panels = [] [terraform]: + title = "Services" [terraform]: + type = "row" [terraform]: }, [terraform]: + { [terraform]: + aliasColors = {} [terraform]: + bars = false [terraform]: + dashLength = 10 [terraform]: + dashes = false [terraform]: + datasource = "$Prometheus" [terraform]: + decimals = 0 [terraform]: + fill = 7 [terraform]: + fillGradient = 0 [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 12 [terraform]: + x = 0 [terraform]: + y = 27 [terraform]: } [terraform]: + hiddenSeries = false [terraform]: + id = 25 [terraform]: + legend = { [terraform]: + alignAsTable = true [terraform]: + avg = true [terraform]: + current = true [terraform]: + hideZero = true [terraform]: + max = true [terraform]: + min = false [terraform]: + rightSide = true [terraform]: + show = true [terraform]: + sort = "avg" [terraform]: + sortDesc = true [terraform]: + total = false [terraform]: + values = true [terraform]: } [terraform]: + lines = true [terraform]: + linewidth = 1 [terraform]: + links = [] [terraform]: + nullPointMode = "null" [terraform]: + options = { [terraform]: + alertThreshold = true [terraform]: } [terraform]: + percentage = false [terraform]: + pluginVersion = "8.0.3" [terraform]: + pointradius = 5 [terraform]: + points = false [terraform]: + renderer = "flot" [terraform]: + seriesOverrides = [] [terraform]: + spaceLength = 10 [terraform]: + stack = true [terraform]: + steppedLine = false [terraform]: + targets = [ [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "sum(traefik_service_open_connections) by (method)" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "{{ method }}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + thresholds = [] [terraform]: + timeFrom = null [terraform]: + timeRegions = [] [terraform]: + timeShift = null [terraform]: + title = "Open Connections" [terraform]: + tooltip = { [terraform]: + shared = true [terraform]: + sort = 0 [terraform]: + value_type = "individual" [terraform]: } [terraform]: + type = "graph" [terraform]: + xaxis = { [terraform]: + buckets = null [terraform]: + mode = "time" [terraform]: + name = null [terraform]: + show = true [terraform]: + values = [] [terraform]: } [terraform]: + yaxes = [ [terraform]: + { [terraform]: + decimals = 0 [terraform]: + format = "short" [terraform]: + label = "" [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = true [terraform]: }, [terraform]: + { [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = false [terraform]: }, [terraform]: ] [terraform]: + yaxis = { [terraform]: + align = false [terraform]: + alignLevel = null [terraform]: } [terraform]: }, [terraform]: + { [terraform]: + aliasColors = {} [terraform]: + bars = false [terraform]: + dashLength = 10 [terraform]: + dashes = false [terraform]: + datasource = null [terraform]: + decimals = 2 [terraform]: + fill = 1 [terraform]: + fillGradient = 0 [terraform]: + gridPos = { [terraform]: + h = 7 [terraform]: + w = 12 [terraform]: + x = 12 [terraform]: + y = 27 [terraform]: } [terraform]: + hiddenSeries = false [terraform]: + id = 26 [terraform]: + legend = { [terraform]: + alignAsTable = true [terraform]: + avg = true [terraform]: + current = true [terraform]: + max = true [terraform]: + min = true [terraform]: + rightSide = false [terraform]: + show = true [terraform]: + total = false [terraform]: + values = true [terraform]: } [terraform]: + lines = true [terraform]: + linewidth = 1 [terraform]: + links = [] [terraform]: + nullPointMode = "null" [terraform]: + options = { [terraform]: + alertThreshold = true [terraform]: } [terraform]: + percentage = false [terraform]: + pluginVersion = "8.0.3" [terraform]: + pointradius = 5 [terraform]: + points = false [terraform]: + renderer = "flot" [terraform]: + seriesOverrides = [] [terraform]: + spaceLength = 10 [terraform]: + stack = false [terraform]: + steppedLine = false [terraform]: + targets = [ [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "(sum(rate(traefik_service_request_duration_seconds_bucket{le=\"0.1\",code=\"200\"}[5m])) by (job) + sum(rate(traefik_service_request_duration_seconds_bucket{le=\"0.3\",code=\"200\"}[5m])) by (job)) / 2 / sum(rate(traefik_service_request_duration_seconds_count{code=\"200\"}[5m])) by (job)" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "200" [terraform]: + refId = "A" [terraform]: }, [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "traefik_service_request_duration_seconds_bucket{le=\"0.1\",code=\"200\"}" [terraform]: + hide = false [terraform]: + interval = "" [terraform]: + legendFormat = "" [terraform]: + refId = "B" [terraform]: }, [terraform]: ] [terraform]: + thresholds = [] [terraform]: + timeFrom = null [terraform]: + timeRegions = [] [terraform]: + timeShift = null [terraform]: + title = "Apdex score (over 5 min)" [terraform]: + tooltip = { [terraform]: + shared = true [terraform]: + sort = 0 [terraform]: + value_type = "individual" [terraform]: } [terraform]: + type = "graph" [terraform]: + xaxis = { [terraform]: + buckets = null [terraform]: + mode = "time" [terraform]: + name = null [terraform]: + show = true [terraform]: + values = [] [terraform]: } [terraform]: + yaxes = [ [terraform]: + { [terraform]: + decimals = 2 [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = true [terraform]: }, [terraform]: + { [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = false [terraform]: }, [terraform]: ] [terraform]: + yaxis = { [terraform]: + align = false [terraform]: + alignLevel = null [terraform]: } [terraform]: }, [terraform]: + { [terraform]: + aliasColors = {} [terraform]: + bars = true [terraform]: + dashLength = 10 [terraform]: + dashes = false [terraform]: + datasource = null [terraform]: + decimals = 2 [terraform]: + description = "" [terraform]: + fill = 1 [terraform]: + fillGradient = 0 [terraform]: + gridPos = { [terraform]: + h = 10 [terraform]: + w = 24 [terraform]: + x = 0 [terraform]: + y = 34 [terraform]: } [terraform]: + hiddenSeries = false [terraform]: + id = 4 [terraform]: + legend = { [terraform]: + alignAsTable = true [terraform]: + avg = true [terraform]: + current = true [terraform]: + hideZero = true [terraform]: + max = true [terraform]: + min = false [terraform]: + rightSide = true [terraform]: + show = true [terraform]: + sort = "avg" [terraform]: + sortDesc = true [terraform]: + total = false [terraform]: + values = true [terraform]: } [terraform]: + lines = false [terraform]: + linewidth = 1 [terraform]: + links = [] [terraform]: + nullPointMode = "null" [terraform]: + options = { [terraform]: + alertThreshold = true [terraform]: } [terraform]: + percentage = false [terraform]: + pluginVersion = "8.0.3" [terraform]: + pointradius = 5 [terraform]: + points = false [terraform]: + renderer = "flot" [terraform]: + seriesOverrides = [] [terraform]: + spaceLength = 10 [terraform]: + stack = false [terraform]: + steppedLine = false [terraform]: + targets = [ [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "sum(rate(traefik_service_requests_total[1m])) by (service)" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 2 [terraform]: + legendFormat = "{{ service }}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + thresholds = [] [terraform]: + timeFrom = null [terraform]: + timeRegions = [] [terraform]: + timeShift = null [terraform]: + title = "Requests/min per service" [terraform]: + tooltip = { [terraform]: + shared = true [terraform]: + sort = 0 [terraform]: + value_type = "individual" [terraform]: } [terraform]: + type = "graph" [terraform]: + xaxis = { [terraform]: + buckets = null [terraform]: + mode = "time" [terraform]: + name = null [terraform]: + show = true [terraform]: + values = [] [terraform]: } [terraform]: + yaxes = [ [terraform]: + { [terraform]: + decimals = 2 [terraform]: + format = "short" [terraform]: + label = "" [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = true [terraform]: }, [terraform]: + { [terraform]: + decimals = 2 [terraform]: + format = "short" [terraform]: + label = "" [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = true [terraform]: }, [terraform]: ] [terraform]: + yaxis = { [terraform]: + align = false [terraform]: + alignLevel = null [terraform]: } [terraform]: }, [terraform]: + { [terraform]: + collapsed = false [terraform]: + datasource = "Prometheus" [terraform]: + gridPos = { [terraform]: + h = 1 [terraform]: + w = 24 [terraform]: + x = 0 [terraform]: + y = 44 [terraform]: } [terraform]: + id = 15 [terraform]: + panels = [] [terraform]: + title = "HTTP Codes stats" [terraform]: + type = "row" [terraform]: }, [terraform]: + { [terraform]: + aliasColors = {} [terraform]: + bars = true [terraform]: + dashLength = 10 [terraform]: + dashes = false [terraform]: + datasource = "$Prometheus" [terraform]: + decimals = 0 [terraform]: + description = "" [terraform]: + fill = 1 [terraform]: + fillGradient = 0 [terraform]: + gridPos = { [terraform]: + h = 9 [terraform]: + w = 12 [terraform]: + x = 0 [terraform]: + y = 45 [terraform]: } [terraform]: + hiddenSeries = false [terraform]: + id = 5 [terraform]: + interval = null [terraform]: + legend = { [terraform]: + alignAsTable = true [terraform]: + avg = false [terraform]: + current = false [terraform]: + hideEmpty = false [terraform]: + hideZero = true [terraform]: + max = false [terraform]: + min = false [terraform]: + rightSide = true [terraform]: + show = true [terraform]: + sideWidth = null [terraform]: + total = true [terraform]: + values = true [terraform]: } [terraform]: + lines = false [terraform]: + linewidth = 1 [terraform]: + links = [] [terraform]: + nullPointMode = "null" [terraform]: + options = { [terraform]: + alertThreshold = true [terraform]: } [terraform]: + percentage = false [terraform]: + pluginVersion = "8.0.3" [terraform]: + pointradius = 5 [terraform]: + points = false [terraform]: + renderer = "flot" [terraform]: + seriesOverrides = [] [terraform]: + spaceLength = 10 [terraform]: + stack = true [terraform]: + steppedLine = false [terraform]: + targets = [ [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "count(rate(traefik_service_requests_total{code=~\"[2|3|4|5]..\"}[5m])) by (method, code)" [terraform]: + format = "time_series" [terraform]: + interval = "1" [terraform]: + intervalFactor = 2 [terraform]: + legendFormat = "{{method}} : {{code}}" [terraform]: + refId = "A" [terraform]: }, [terraform]: ] [terraform]: + thresholds = [] [terraform]: + timeFrom = null [terraform]: + timeRegions = [] [terraform]: + timeShift = null [terraform]: + title = "Status method/codes over 5min" [terraform]: + tooltip = { [terraform]: + shared = true [terraform]: + sort = 0 [terraform]: + value_type = "individual" [terraform]: } [terraform]: + type = "graph" [terraform]: + xaxis = { [terraform]: + buckets = null [terraform]: + mode = "time" [terraform]: + name = null [terraform]: + show = true [terraform]: + values = [] [terraform]: } [terraform]: + yaxes = [ [terraform]: + { [terraform]: + decimals = 2 [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = true [terraform]: }, [terraform]: + { [terraform]: + decimals = 2 [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = "0" [terraform]: + show = true [terraform]: }, [terraform]: ] [terraform]: + yaxis = { [terraform]: + align = false [terraform]: + alignLevel = null [terraform]: } [terraform]: }, [terraform]: + { [terraform]: + collapsed = false [terraform]: + datasource = "Prometheus" [terraform]: + gridPos = { [terraform]: + h = 1 [terraform]: + w = 24 [terraform]: + x = 0 [terraform]: + y = 54 [terraform]: } [terraform]: + id = 35 [terraform]: + panels = [] [terraform]: + title = "Pods resources" [terraform]: + type = "row" [terraform]: }, [terraform]: + { [terraform]: + aliasColors = {} [terraform]: + bars = false [terraform]: + dashLength = 10 [terraform]: + dashes = false [terraform]: + datasource = null [terraform]: + fill = 1 [terraform]: + fillGradient = 0 [terraform]: + gridPos = { [terraform]: + h = 9 [terraform]: + w = 12 [terraform]: + x = 0 [terraform]: + y = 55 [terraform]: } [terraform]: + hiddenSeries = false [terraform]: + id = 31 [terraform]: + legend = { [terraform]: + alignAsTable = true [terraform]: + avg = true [terraform]: + current = true [terraform]: + max = true [terraform]: + min = false [terraform]: + rightSide = false [terraform]: + show = true [terraform]: + total = false [terraform]: + values = true [terraform]: } [terraform]: + lines = true [terraform]: + linewidth = 1 [terraform]: + links = [] [terraform]: + nullPointMode = "null" [terraform]: + options = { [terraform]: + alertThreshold = true [terraform]: } [terraform]: + percentage = false [terraform]: + pluginVersion = "8.0.3" [terraform]: + pointradius = 5 [terraform]: + points = false [terraform]: + renderer = "flot" [terraform]: + seriesOverrides = [] [terraform]: + spaceLength = 10 [terraform]: + stack = false [terraform]: + steppedLine = false [terraform]: + targets = [ [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "sum(container_memory_usage_bytes{namespace=\"$namespace\",pod=~\".*traefik.*\"})" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "Memory used" [terraform]: + refId = "A" [terraform]: }, [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "sum(kube_pod_container_resource_requests_memory_bytes{namespace=\"$namespace\",pod=~\".*traefik.*\"})" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "Requested memory" [terraform]: + refId = "B" [terraform]: }, [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "sum(kube_pod_container_resource_limits_memory_bytes{namespace=\"$namespace\",pod=~\".*traefik.*\"})" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "Limit memory usage" [terraform]: + refId = "C" [terraform]: }, [terraform]: ] [terraform]: + thresholds = [] [terraform]: + timeFrom = null [terraform]: + timeRegions = [] [terraform]: + timeShift = null [terraform]: + title = "Traefik memory usage" [terraform]: + tooltip = { [terraform]: + shared = true [terraform]: + sort = 0 [terraform]: + value_type = "individual" [terraform]: } [terraform]: + type = "graph" [terraform]: + xaxis = { [terraform]: + buckets = null [terraform]: + mode = "time" [terraform]: + name = null [terraform]: + show = true [terraform]: + values = [] [terraform]: } [terraform]: + yaxes = [ [terraform]: + { [terraform]: + format = "bytes" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = null [terraform]: + show = true [terraform]: }, [terraform]: + { [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = null [terraform]: + show = false [terraform]: }, [terraform]: ] [terraform]: + yaxis = { [terraform]: + align = false [terraform]: + alignLevel = null [terraform]: } [terraform]: }, [terraform]: + { [terraform]: + aliasColors = {} [terraform]: + bars = false [terraform]: + dashLength = 10 [terraform]: + dashes = false [terraform]: + datasource = "$Prometheus" [terraform]: + decimals = null [terraform]: + fill = 1 [terraform]: + fillGradient = 0 [terraform]: + gridPos = { [terraform]: + h = 9 [terraform]: + w = 12 [terraform]: + x = 12 [terraform]: + y = 55 [terraform]: } [terraform]: + hiddenSeries = false [terraform]: + id = 33 [terraform]: + legend = { [terraform]: + alignAsTable = true [terraform]: + avg = true [terraform]: + current = true [terraform]: + max = true [terraform]: + min = false [terraform]: + show = true [terraform]: + total = false [terraform]: + values = true [terraform]: } [terraform]: + lines = true [terraform]: + linewidth = 1 [terraform]: + links = [] [terraform]: + nullPointMode = "null" [terraform]: + options = { [terraform]: + alertThreshold = true [terraform]: } [terraform]: + percentage = false [terraform]: + pluginVersion = "8.0.3" [terraform]: + pointradius = 5 [terraform]: + points = false [terraform]: + renderer = "flot" [terraform]: + seriesOverrides = [] [terraform]: + spaceLength = 10 [terraform]: + stack = false [terraform]: + steppedLine = false [terraform]: + targets = [ [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "sum(rate(container_cpu_usage_seconds_total{namespace=\"$namespace\",pod=~\".*traefik.*\"}[2m]))" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "Cpu used" [terraform]: + refId = "A" [terraform]: }, [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "sum(kube_pod_container_resource_requests_cpu_cores{namespace=\"$namespace\",pod=\".*traefik.*\"})" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "Requested cpu" [terraform]: + refId = "B" [terraform]: }, [terraform]: + { [terraform]: + exemplar = true [terraform]: + expr = "sum(kube_pod_container_resource_limits_cpu_cores{namespace=\"$namespace\",pod=\".*traefik.*\"})" [terraform]: + format = "time_series" [terraform]: + interval = "" [terraform]: + intervalFactor = 1 [terraform]: + legendFormat = "Limit cpu usage" [terraform]: + refId = "C" [terraform]: }, [terraform]: ] [terraform]: + thresholds = [] [terraform]: + timeFrom = null [terraform]: + timeRegions = [] [terraform]: + timeShift = null [terraform]: + title = "Traefik CPU usage" [terraform]: + tooltip = { [terraform]: + shared = true [terraform]: + sort = 0 [terraform]: + value_type = "individual" [terraform]: } [terraform]: + type = "graph" [terraform]: + xaxis = { [terraform]: + buckets = null [terraform]: + mode = "time" [terraform]: + name = null [terraform]: + show = true [terraform]: + values = [] [terraform]: } [terraform]: + yaxes = [ [terraform]: + { [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = null [terraform]: + show = true [terraform]: }, [terraform]: + { [terraform]: + format = "short" [terraform]: + label = null [terraform]: + logBase = 1 [terraform]: + max = null [terraform]: + min = null [terraform]: + show = true [terraform]: }, [terraform]: ] [terraform]: + yaxis = { [terraform]: + align = false [terraform]: + alignLevel = null [terraform]: } [terraform]: }, [terraform]: ] [terraform]: + refresh = "" [terraform]: + schemaVersion = 30 [terraform]: + style = "dark" [terraform]: + tags = [] [terraform]: + templating = { [terraform]: + list = [ [terraform]: + { [terraform]: + current = { [terraform]: + selected = false [terraform]: + text = "Prometheus" [terraform]: + value = "Prometheus" [terraform]: } [terraform]: + description = null [terraform]: + error = null [terraform]: + hide = 0 [terraform]: + includeAll = false [terraform]: + label = "Datasource" [terraform]: + multi = false [terraform]: + name = "Prometheus" [terraform]: + options = [] [terraform]: + query = "prometheus" [terraform]: + queryValue = "" [terraform]: + refresh = 1 [terraform]: + regex = "" [terraform]: + skipUrlSync = false [terraform]: + type = "datasource" [terraform]: }, [terraform]: + { [terraform]: + allValue = null [terraform]: + current = { [terraform]: + selected = false [terraform]: + text = "dev" [terraform]: + value = "dev" [terraform]: } [terraform]: + datasource = "Prometheus" [terraform]: + definition = "label_values(traefik_config_reloads_total, namespace)" [terraform]: + description = null [terraform]: + error = null [terraform]: + hide = 0 [terraform]: + includeAll = false [terraform]: + label = "Namespace" [terraform]: + multi = false [terraform]: + name = "namespace" [terraform]: + options = [] [terraform]: + query = { [terraform]: + query = "label_values(kube_pod_container_info{pod=~\".*traefik.*\", job=\"traefik\"}, namespace)" [terraform]: + refId = "Prometheus-namespace-Variable-Query" [terraform]: } [terraform]: + refresh = 1 [terraform]: + regex = "" [terraform]: + skipUrlSync = false [terraform]: + sort = 1 [terraform]: + tagValuesQuery = "" [terraform]: + tagsQuery = "" [terraform]: + type = "query" [terraform]: + useTags = false [terraform]: }, [terraform]: + { [terraform]: + allValue = null [terraform]: + current = { [terraform]: + selected = true [terraform]: + text = "95" [terraform]: + value = "95" [terraform]: } [terraform]: + description = null [terraform]: + error = null [terraform]: + hide = 0 [terraform]: + includeAll = false [terraform]: + label = "Percentiles" [terraform]: + multi = false [terraform]: + name = "percentiles" [terraform]: + options = [ [terraform]: + { [terraform]: + selected = true [terraform]: + text = "95" [terraform]: + value = "95" [terraform]: }, [terraform]: + { [terraform]: + selected = false [terraform]: + text = "99" [terraform]: + value = "99" [terraform]: }, [terraform]: ] [terraform]: + query = "95,99" [terraform]: + queryValue = "" [terraform]: + skipUrlSync = false [terraform]: + type = "custom" [terraform]: }, [terraform]: ] [terraform]: } [terraform]: + time = { [terraform]: + from = "now-5m" [terraform]: + to = "now" [terraform]: } [terraform]: + timepicker = { [terraform]: + refresh_intervals = [ [terraform]: + "10s", [terraform]: + "30s", [terraform]: + "1m", [terraform]: + "5m", [terraform]: + "15m", [terraform]: + "30m", [terraform]: + "1h", [terraform]: ] [terraform]: + time_options = [ [terraform]: + "5m", [terraform]: + "15m", [terraform]: + "1h", [terraform]: + "6h", [terraform]: + "12h", [terraform]: + "24h", [terraform]: + "2d", [terraform]: + "7d", [terraform]: + "30d", [terraform]: ] [terraform]: } [terraform]: + timezone = "" [terraform]: + title = "Traefik" [terraform]: + uid = "2p6nlgS7z" [terraform]: + version = 4 [terraform]: } [terraform]: ) [terraform]: } [terraform]: + id = (known after apply) [terraform]: [terraform]: + metadata { [terraform]: + generation = (known after apply) [terraform]: + labels = { [terraform]: + "grafana_dashboard" = "1" [terraform]: } [terraform]: + name = "nebari-grafana-dashboards" [terraform]: + namespace = "dev" [terraform]: + resource_version = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].kubernetes_manifest.grafana-ingress-route will be created [terraform]:  + resource "kubernetes_manifest" "grafana-ingress-route" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + name = "grafana-ingress-route" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && PathPrefix(`/monitoring`)" [terraform]: + services = [ [terraform]: + { [terraform]: + name = "nebari-grafana" [terraform]: + namespace = "dev" [terraform]: + port = 80 [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "grafana-ingress-route" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "websecure", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`) && PathPrefix(`/monitoring`)" [terraform]: + middlewares = (known after apply) [terraform]: + priority = (known after apply) [terraform]: + services = [ [terraform]: + { [terraform]: + kind = (known after apply) [terraform]: + name = "nebari-grafana" [terraform]: + namespace = "dev" [terraform]: + passHostHeader = (known after apply) [terraform]: + port = "80" [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + sameSite = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: + tls = { [terraform]: + certResolver = (known after apply) [terraform]: + domains = (known after apply) [terraform]: + options = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: + secretName = (known after apply) [terraform]: + store = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_group_roles.group_roles["admin"] will be created [terraform]:  + resource "keycloak_group_roles" "group_roles" { [terraform]: + exhaustive = false [terraform]: + group_id = "4e137164-08af-4b08-a503-35c248823dae" [terraform]: + id = (known after apply) [terraform]: + realm_id = "nebari" [terraform]: + role_ids = (known after apply) [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_group_roles.group_roles["analyst"] will be created [terraform]:  + resource "keycloak_group_roles" "group_roles" { [terraform]: + exhaustive = false [terraform]: + group_id = "85152b40-7279-4f8a-8fb6-cb8d5b87c14a" [terraform]: + id = (known after apply) [terraform]: + realm_id = "nebari" [terraform]: + role_ids = (known after apply) [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_group_roles.group_roles["developer"] will be created [terraform]:  + resource "keycloak_group_roles" "group_roles" { [terraform]: + exhaustive = false [terraform]: + group_id = "a951fc7c-4c33-46ed-970f-5f114a5246c3" [terraform]: + id = (known after apply) [terraform]: + realm_id = "nebari" [terraform]: + role_ids = (known after apply) [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_openid_client.main will be created [terraform]:  + resource "keycloak_openid_client" "main" { [terraform]: + access_type = "CONFIDENTIAL" [terraform]: + backchannel_logout_session_required = true [terraform]: + client_authenticator_type = "client-secret" [terraform]: + client_id = "argo-server-sso" [terraform]: + client_secret = (sensitive value) [terraform]: + consent_required = false [terraform]: + direct_access_grants_enabled = false [terraform]: + display_on_consent_screen = false [terraform]: + enabled = true [terraform]: + exclude_session_state_from_auth_response = false [terraform]: + frontchannel_logout_enabled = false [terraform]: + full_scope_allowed = true [terraform]: + id = (known after apply) [terraform]: + implicit_flow_enabled = false [terraform]: + name = "grafana" [terraform]: + oauth2_device_authorization_grant_enabled = false [terraform]: + realm_id = "nebari" [terraform]: + resource_server_id = (known after apply) [terraform]: + service_account_user_id = (known after apply) [terraform]: + service_accounts_enabled = false [terraform]: + standard_flow_enabled = true [terraform]: + use_refresh_tokens = true [terraform]: + valid_redirect_uris = [ [terraform]: + "https://domain/argo/oauth2/callback", [terraform]: ] [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_openid_group_membership_protocol_mapper.main will be created [terraform]:  + resource "keycloak_openid_group_membership_protocol_mapper" "main" { [terraform]: + add_to_access_token = true [terraform]: + add_to_id_token = true [terraform]: + add_to_userinfo = true [terraform]: + claim_name = "groups" [terraform]: + client_id = (known after apply) [terraform]: + full_path = true [terraform]: + id = (known after apply) [terraform]: + name = "group-membership-mapper" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_openid_user_client_role_protocol_mapper.main will be created [terraform]:  + resource "keycloak_openid_user_client_role_protocol_mapper" "main" { [terraform]: + add_to_access_token = true [terraform]: + add_to_id_token = true [terraform]: + add_to_userinfo = true [terraform]: + claim_name = "roles" [terraform]: + claim_value_type = "String" [terraform]: + client_id = (known after apply) [terraform]: + id = (known after apply) [terraform]: + multivalued = true [terraform]: + name = "user-client-role-mapper" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_role.main["argo_admin"] will be created [terraform]:  + resource "keycloak_role" "main" { [terraform]: + client_id = (known after apply) [terraform]: + description = "argo_admin" [terraform]: + id = (known after apply) [terraform]: + name = "argo_admin" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_role.main["argo_developer"] will be created [terraform]:  + resource "keycloak_role" "main" { [terraform]: + client_id = (known after apply) [terraform]: + description = "argo_developer" [terraform]: + id = (known after apply) [terraform]: + name = "argo_developer" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_role.main["argo_viewer"] will be created [terraform]:  + resource "keycloak_role" "main" { [terraform]: + client_id = (known after apply) [terraform]: + description = "argo_viewer" [terraform]: + id = (known after apply) [terraform]: + name = "argo_viewer" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.argo-workflows[0].module.argo-workflow-openid-client.random_password.client_secret will be created [terraform]:  + resource "random_password" "client_secret" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.forwardauth.module.forwardauth-openid-client.keycloak_openid_client.main will be created [terraform]:  + resource "keycloak_openid_client" "main" { [terraform]: + access_type = "CONFIDENTIAL" [terraform]: + backchannel_logout_session_required = true [terraform]: + client_authenticator_type = "client-secret" [terraform]: + client_id = "forwardauth" [terraform]: + client_secret = (sensitive value) [terraform]: + consent_required = false [terraform]: + direct_access_grants_enabled = false [terraform]: + display_on_consent_screen = false [terraform]: + enabled = true [terraform]: + exclude_session_state_from_auth_response = false [terraform]: + frontchannel_logout_enabled = false [terraform]: + full_scope_allowed = true [terraform]: + id = (known after apply) [terraform]: + implicit_flow_enabled = false [terraform]: + name = "grafana" [terraform]: + oauth2_device_authorization_grant_enabled = false [terraform]: + realm_id = "nebari" [terraform]: + resource_server_id = (known after apply) [terraform]: + service_account_user_id = (known after apply) [terraform]: + service_accounts_enabled = false [terraform]: + standard_flow_enabled = true [terraform]: + use_refresh_tokens = true [terraform]: + valid_redirect_uris = [ [terraform]: + "https://domain/_oauth", [terraform]: ] [terraform]: } [terraform]: [terraform]:  # module.forwardauth.module.forwardauth-openid-client.keycloak_openid_group_membership_protocol_mapper.main will be created [terraform]:  + resource "keycloak_openid_group_membership_protocol_mapper" "main" { [terraform]: + add_to_access_token = true [terraform]: + add_to_id_token = true [terraform]: + add_to_userinfo = true [terraform]: + claim_name = "groups" [terraform]: + client_id = (known after apply) [terraform]: + full_path = true [terraform]: + id = (known after apply) [terraform]: + name = "group-membership-mapper" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.forwardauth.module.forwardauth-openid-client.keycloak_openid_user_client_role_protocol_mapper.main will be created [terraform]:  + resource "keycloak_openid_user_client_role_protocol_mapper" "main" { [terraform]: + add_to_access_token = true [terraform]: + add_to_id_token = true [terraform]: + add_to_userinfo = true [terraform]: + claim_name = "roles" [terraform]: + claim_value_type = "String" [terraform]: + client_id = (known after apply) [terraform]: + id = (known after apply) [terraform]: + multivalued = true [terraform]: + name = "user-client-role-mapper" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.forwardauth.module.forwardauth-openid-client.random_password.client_secret will be created [terraform]:  + resource "random_password" "client_secret" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.module.jupyterhub-openid-client.keycloak_group_roles.group_roles["admin"] will be created [terraform]:  + resource "keycloak_group_roles" "group_roles" { [terraform]: + exhaustive = false [terraform]: + group_id = "4e137164-08af-4b08-a503-35c248823dae" [terraform]: + id = (known after apply) [terraform]: + realm_id = "nebari" [terraform]: + role_ids = (known after apply) [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.module.jupyterhub-openid-client.keycloak_group_roles.group_roles["analyst"] will be created [terraform]:  + resource "keycloak_group_roles" "group_roles" { [terraform]: + exhaustive = false [terraform]: + group_id = "85152b40-7279-4f8a-8fb6-cb8d5b87c14a" [terraform]: + id = (known after apply) [terraform]: + realm_id = "nebari" [terraform]: + role_ids = (known after apply) [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.module.jupyterhub-openid-client.keycloak_group_roles.group_roles["developer"] will be created [terraform]:  + resource "keycloak_group_roles" "group_roles" { [terraform]: + exhaustive = false [terraform]: + group_id = "a951fc7c-4c33-46ed-970f-5f114a5246c3" [terraform]: + id = (known after apply) [terraform]: + realm_id = "nebari" [terraform]: + role_ids = (known after apply) [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.module.jupyterhub-openid-client.keycloak_openid_client.main will be created [terraform]:  + resource "keycloak_openid_client" "main" { [terraform]: + access_type = "CONFIDENTIAL" [terraform]: + backchannel_logout_session_required = true [terraform]: + client_authenticator_type = "client-secret" [terraform]: + client_id = "jupyterhub" [terraform]: + client_secret = (sensitive value) [terraform]: + consent_required = false [terraform]: + direct_access_grants_enabled = false [terraform]: + display_on_consent_screen = false [terraform]: + enabled = true [terraform]: + exclude_session_state_from_auth_response = false [terraform]: + frontchannel_logout_enabled = false [terraform]: + full_scope_allowed = true [terraform]: + id = (known after apply) [terraform]: + implicit_flow_enabled = false [terraform]: + name = "grafana" [terraform]: + oauth2_device_authorization_grant_enabled = false [terraform]: + realm_id = "nebari" [terraform]: + resource_server_id = (known after apply) [terraform]: + service_account_user_id = (known after apply) [terraform]: + service_accounts_enabled = false [terraform]: + standard_flow_enabled = true [terraform]: + use_refresh_tokens = true [terraform]: + valid_redirect_uris = [ [terraform]: + "https://domain/hub/login", [terraform]: + "https://domain/hub/oauth_callback", [terraform]: ] [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.module.jupyterhub-openid-client.keycloak_openid_group_membership_protocol_mapper.main will be created [terraform]:  + resource "keycloak_openid_group_membership_protocol_mapper" "main" { [terraform]: + add_to_access_token = true [terraform]: + add_to_id_token = true [terraform]: + add_to_userinfo = true [terraform]: + claim_name = "groups" [terraform]: + client_id = (known after apply) [terraform]: + full_path = true [terraform]: + id = (known after apply) [terraform]: + name = "group-membership-mapper" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.module.jupyterhub-openid-client.keycloak_openid_user_attribute_protocol_mapper.jupyterlab_profiles[0] will be created [terraform]:  + resource "keycloak_openid_user_attribute_protocol_mapper" "jupyterlab_profiles" { [terraform]: + add_to_access_token = true [terraform]: + add_to_id_token = true [terraform]: + add_to_userinfo = true [terraform]: + aggregate_attributes = true [terraform]: + claim_name = "jupyterlab_profiles" [terraform]: + claim_value_type = "String" [terraform]: + client_id = (known after apply) [terraform]: + id = (known after apply) [terraform]: + multivalued = true [terraform]: + name = "jupyterlab_profiles_mapper" [terraform]: + realm_id = "nebari" [terraform]: + user_attribute = "jupyterlab_profiles" [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.module.jupyterhub-openid-client.keycloak_openid_user_client_role_protocol_mapper.main will be created [terraform]:  + resource "keycloak_openid_user_client_role_protocol_mapper" "main" { [terraform]: + add_to_access_token = true [terraform]: + add_to_id_token = true [terraform]: + add_to_userinfo = true [terraform]: + claim_name = "roles" [terraform]: + claim_value_type = "String" [terraform]: + client_id = (known after apply) [terraform]: + id = (known after apply) [terraform]: + multivalued = true [terraform]: + name = "user-client-role-mapper" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.module.jupyterhub-openid-client.keycloak_role.main["dask_gateway_admin"] will be created [terraform]:  + resource "keycloak_role" "main" { [terraform]: + client_id = (known after apply) [terraform]: + description = "dask_gateway_admin" [terraform]: + id = (known after apply) [terraform]: + name = "dask_gateway_admin" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.module.jupyterhub-openid-client.keycloak_role.main["dask_gateway_developer"] will be created [terraform]:  + resource "keycloak_role" "main" { [terraform]: + client_id = (known after apply) [terraform]: + description = "dask_gateway_developer" [terraform]: + id = (known after apply) [terraform]: + name = "dask_gateway_developer" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.module.jupyterhub-openid-client.keycloak_role.main["jupyterhub_admin"] will be created [terraform]:  + resource "keycloak_role" "main" { [terraform]: + client_id = (known after apply) [terraform]: + description = "jupyterhub_admin" [terraform]: + id = (known after apply) [terraform]: + name = "jupyterhub_admin" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.module.jupyterhub-openid-client.keycloak_role.main["jupyterhub_developer"] will be created [terraform]:  + resource "keycloak_role" "main" { [terraform]: + client_id = (known after apply) [terraform]: + description = "jupyterhub_developer" [terraform]: + id = (known after apply) [terraform]: + name = "jupyterhub_developer" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.jupyterhub.module.jupyterhub-openid-client.random_password.client_secret will be created [terraform]:  + resource "random_password" "client_secret" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_group_roles.group_roles["admin"] will be created [terraform]:  + resource "keycloak_group_roles" "group_roles" { [terraform]: + exhaustive = false [terraform]: + group_id = "4e137164-08af-4b08-a503-35c248823dae" [terraform]: + id = (known after apply) [terraform]: + realm_id = "nebari" [terraform]: + role_ids = (known after apply) [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_group_roles.group_roles["analyst"] will be created [terraform]:  + resource "keycloak_group_roles" "group_roles" { [terraform]: + exhaustive = false [terraform]: + group_id = "85152b40-7279-4f8a-8fb6-cb8d5b87c14a" [terraform]: + id = (known after apply) [terraform]: + realm_id = "nebari" [terraform]: + role_ids = (known after apply) [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_group_roles.group_roles["developer"] will be created [terraform]:  + resource "keycloak_group_roles" "group_roles" { [terraform]: + exhaustive = false [terraform]: + group_id = "a951fc7c-4c33-46ed-970f-5f114a5246c3" [terraform]: + id = (known after apply) [terraform]: + realm_id = "nebari" [terraform]: + role_ids = (known after apply) [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_openid_client.main will be created [terraform]:  + resource "keycloak_openid_client" "main" { [terraform]: + access_type = "CONFIDENTIAL" [terraform]: + backchannel_logout_session_required = true [terraform]: + client_authenticator_type = "client-secret" [terraform]: + client_id = "conda_store" [terraform]: + client_secret = (sensitive value) [terraform]: + consent_required = false [terraform]: + direct_access_grants_enabled = false [terraform]: + display_on_consent_screen = false [terraform]: + enabled = true [terraform]: + exclude_session_state_from_auth_response = false [terraform]: + frontchannel_logout_enabled = false [terraform]: + full_scope_allowed = true [terraform]: + id = (known after apply) [terraform]: + implicit_flow_enabled = false [terraform]: + name = "grafana" [terraform]: + oauth2_device_authorization_grant_enabled = false [terraform]: + realm_id = "nebari" [terraform]: + resource_server_id = (known after apply) [terraform]: + service_account_user_id = (known after apply) [terraform]: + service_accounts_enabled = false [terraform]: + standard_flow_enabled = true [terraform]: + use_refresh_tokens = true [terraform]: + valid_redirect_uris = [ [terraform]: + "https://domain/conda-store/oauth_callback", [terraform]: ] [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_openid_group_membership_protocol_mapper.main will be created [terraform]:  + resource "keycloak_openid_group_membership_protocol_mapper" "main" { [terraform]: + add_to_access_token = true [terraform]: + add_to_id_token = true [terraform]: + add_to_userinfo = true [terraform]: + claim_name = "groups" [terraform]: + client_id = (known after apply) [terraform]: + full_path = true [terraform]: + id = (known after apply) [terraform]: + name = "group-membership-mapper" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_openid_user_client_role_protocol_mapper.main will be created [terraform]:  + resource "keycloak_openid_user_client_role_protocol_mapper" "main" { [terraform]: + add_to_access_token = true [terraform]: + add_to_id_token = true [terraform]: + add_to_userinfo = true [terraform]: + claim_name = "roles" [terraform]: + claim_value_type = "String" [terraform]: + client_id = (known after apply) [terraform]: + id = (known after apply) [terraform]: + multivalued = true [terraform]: + name = "user-client-role-mapper" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_role.main["conda_store_admin"] will be created [terraform]:  + resource "keycloak_role" "main" { [terraform]: + client_id = (known after apply) [terraform]: + description = "conda_store_admin" [terraform]: + id = (known after apply) [terraform]: + name = "conda_store_admin" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_role.main["conda_store_developer"] will be created [terraform]:  + resource "keycloak_role" "main" { [terraform]: + client_id = (known after apply) [terraform]: + description = "conda_store_developer" [terraform]: + id = (known after apply) [terraform]: + name = "conda_store_developer" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.conda-store-openid-client.random_password.client_secret will be created [terraform]:  + resource "random_password" "client_secret" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.minio.helm_release.minio will be created [terraform]:  + resource "helm_release" "minio" { [terraform]: + atomic = false [terraform]: + chart = "minio" [terraform]: + cleanup_on_fail = false [terraform]: + create_namespace = false [terraform]: + dependency_update = false [terraform]: + disable_crd_hooks = false [terraform]: + disable_openapi_validation = false [terraform]: + disable_webhooks = false [terraform]: + force_update = false [terraform]: + id = (known after apply) [terraform]: + lint = false [terraform]: + manifest = (known after apply) [terraform]: + max_history = 0 [terraform]: + metadata = (known after apply) [terraform]: + name = "nebari-conda-store-minio" [terraform]: + namespace = "dev" [terraform]: + recreate_pods = false [terraform]: + render_subchart_notes = true [terraform]: + replace = false [terraform]: + repository = "https://raw.githubusercontent.com/bitnami/charts/defb094c658024e4aa8245622dab202874880cbc/bitnami" [terraform]: + reset_values = false [terraform]: + reuse_values = false [terraform]: + skip_crds = false [terraform]: + status = "deployed" [terraform]: + timeout = 300 [terraform]: + values = [ [terraform]: + <<-EOT [terraform]: # https://github.com/bitnami/charts/blob/master/bitnami/minio/values.yaml [terraform]: EOT, [terraform]: + jsonencode( [terraform]: { [terraform]: + nodeSelector = { [terraform]: + kubernetes.io/os = "linux" [terraform]: } [terraform]: } [terraform]: ), [terraform]: ] [terraform]: + verify = false [terraform]: + version = "6.7.4" [terraform]: + wait = true [terraform]: + wait_for_jobs = false [terraform]: [terraform]: + set { [terraform]: # At least one attribute in this block is (or was) sensitive, [terraform]: # so its contents will not be displayed. [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.minio.kubernetes_manifest.minio-api will be created [terraform]:  + resource "kubernetes_manifest" "minio-api" { [terraform]: + manifest = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + name = "minio-api" [terraform]: + namespace = "dev" [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "minio", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`)" [terraform]: + services = [ [terraform]: + { [terraform]: + name = "nebari-conda-store-minio" [terraform]: + namespace = "dev" [terraform]: + port = 9000 [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: } [terraform]: } [terraform]: + object = { [terraform]: + apiVersion = "traefik.containo.us/v1alpha1" [terraform]: + kind = "IngressRoute" [terraform]: + metadata = { [terraform]: + annotations = (known after apply) [terraform]: + clusterName = (known after apply) [terraform]: + creationTimestamp = (known after apply) [terraform]: + deletionGracePeriodSeconds = (known after apply) [terraform]: + deletionTimestamp = (known after apply) [terraform]: + finalizers = (known after apply) [terraform]: + generateName = (known after apply) [terraform]: + generation = (known after apply) [terraform]: + labels = (known after apply) [terraform]: + managedFields = (known after apply) [terraform]: + name = "minio-api" [terraform]: + namespace = "dev" [terraform]: + ownerReferences = (known after apply) [terraform]: + resourceVersion = (known after apply) [terraform]: + selfLink = (known after apply) [terraform]: + uid = (known after apply) [terraform]: } [terraform]: + spec = { [terraform]: + entryPoints = [ [terraform]: + "minio", [terraform]: ] [terraform]: + routes = [ [terraform]: + { [terraform]: + kind = "Rule" [terraform]: + match = "Host(`domain`)" [terraform]: + middlewares = (known after apply) [terraform]: + priority = (known after apply) [terraform]: + services = [ [terraform]: + { [terraform]: + kind = (known after apply) [terraform]: + name = "nebari-conda-store-minio" [terraform]: + namespace = "dev" [terraform]: + passHostHeader = (known after apply) [terraform]: + port = "9000" [terraform]: + responseForwarding = { [terraform]: + flushInterval = (known after apply) [terraform]: } [terraform]: + scheme = (known after apply) [terraform]: + sticky = { [terraform]: + cookie = { [terraform]: + httpOnly = (known after apply) [terraform]: + name = (known after apply) [terraform]: + sameSite = (known after apply) [terraform]: + secure = (known after apply) [terraform]: } [terraform]: } [terraform]: + strategy = (known after apply) [terraform]: + weight = (known after apply) [terraform]: }, [terraform]: ] [terraform]: }, [terraform]: ] [terraform]: + tls = { [terraform]: + certResolver = (known after apply) [terraform]: + domains = (known after apply) [terraform]: + options = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: + secretName = (known after apply) [terraform]: + store = { [terraform]: + name = (known after apply) [terraform]: + namespace = (known after apply) [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.minio.random_password.root_password will be created [terraform]:  + resource "random_password" "root_password" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.postgresql.helm_release.postgresql will be created [terraform]:  + resource "helm_release" "postgresql" { [terraform]: + atomic = false [terraform]: + chart = "postgresql" [terraform]: + cleanup_on_fail = false [terraform]: + create_namespace = false [terraform]: + dependency_update = false [terraform]: + disable_crd_hooks = false [terraform]: + disable_openapi_validation = false [terraform]: + disable_webhooks = false [terraform]: + force_update = false [terraform]: + id = (known after apply) [terraform]: + lint = false [terraform]: + manifest = (known after apply) [terraform]: + max_history = 0 [terraform]: + metadata = (known after apply) [terraform]: + name = "nebari-conda-store-postgresql" [terraform]: + namespace = "dev" [terraform]: + recreate_pods = false [terraform]: + render_subchart_notes = true [terraform]: + replace = false [terraform]: + repository = "https://raw.githubusercontent.com/bitnami/charts/defb094c658024e4aa8245622dab202874880cbc/bitnami" [terraform]: + reset_values = false [terraform]: + reuse_values = false [terraform]: + skip_crds = false [terraform]: + status = "deployed" [terraform]: + timeout = 300 [terraform]: + values = [ [terraform]: + <<-EOT [terraform]: # https://github.com/bitnami/charts/blob/master/bitnami/postgresql/values.yaml [terraform]: EOT, [terraform]: + jsonencode( [terraform]: { [terraform]: + primary = { [terraform]: + nodeSelector = { [terraform]: + kubernetes.io/os = "linux" [terraform]: } [terraform]: } [terraform]: } [terraform]: ), [terraform]: ] [terraform]: + verify = false [terraform]: + version = "10.13.12" [terraform]: + wait = true [terraform]: + wait_for_jobs = false [terraform]: [terraform]: + set { [terraform]: # At least one attribute in this block is (or was) sensitive, [terraform]: # so its contents will not be displayed. [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.postgresql.random_password.root_password will be created [terraform]:  + resource "random_password" "root_password" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.redis.helm_release.redis will be created [terraform]:  + resource "helm_release" "redis" { [terraform]: + atomic = false [terraform]: + chart = "redis" [terraform]: + cleanup_on_fail = false [terraform]: + create_namespace = false [terraform]: + dependency_update = false [terraform]: + disable_crd_hooks = false [terraform]: + disable_openapi_validation = false [terraform]: + disable_webhooks = false [terraform]: + force_update = false [terraform]: + id = (known after apply) [terraform]: + lint = false [terraform]: + manifest = (known after apply) [terraform]: + max_history = 0 [terraform]: + metadata = (known after apply) [terraform]: + name = "nebari-conda-store-redis" [terraform]: + namespace = "dev" [terraform]: + recreate_pods = false [terraform]: + render_subchart_notes = true [terraform]: + replace = false [terraform]: + repository = "https://charts.bitnami.com/bitnami" [terraform]: + reset_values = false [terraform]: + reuse_values = false [terraform]: + skip_crds = false [terraform]: + status = "deployed" [terraform]: + timeout = 300 [terraform]: + values = [ [terraform]: + <<-EOT [terraform]: # https://github.com/bitnami/charts/blob/master/bitnami/redis/values.yaml [terraform]: EOT, [terraform]: + jsonencode( [terraform]: { [terraform]: + architecture = "standalone" [terraform]: + master = { [terraform]: + nodeSelector = { [terraform]: + kubernetes.io/os = "linux" [terraform]: } [terraform]: } [terraform]: } [terraform]: ), [terraform]: ] [terraform]: + verify = false [terraform]: + version = "17.0.6" [terraform]: + wait = true [terraform]: + wait_for_jobs = false [terraform]: [terraform]: + set { [terraform]: # At least one attribute in this block is (or was) sensitive, [terraform]: # so its contents will not be displayed. [terraform]: } [terraform]: } [terraform]: [terraform]:  # module.kubernetes-conda-store-server.module.redis.random_password.root_password will be created [terraform]:  + resource "random_password" "root_password" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].module.grafana-client-id.keycloak_group_roles.group_roles["admin"] will be created [terraform]:  + resource "keycloak_group_roles" "group_roles" { [terraform]: + exhaustive = false [terraform]: + group_id = "4e137164-08af-4b08-a503-35c248823dae" [terraform]: + id = (known after apply) [terraform]: + realm_id = "nebari" [terraform]: + role_ids = (known after apply) [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].module.grafana-client-id.keycloak_group_roles.group_roles["analyst"] will be created [terraform]:  + resource "keycloak_group_roles" "group_roles" { [terraform]: + exhaustive = false [terraform]: + group_id = "85152b40-7279-4f8a-8fb6-cb8d5b87c14a" [terraform]: + id = (known after apply) [terraform]: + realm_id = "nebari" [terraform]: + role_ids = (known after apply) [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].module.grafana-client-id.keycloak_group_roles.group_roles["developer"] will be created [terraform]:  + resource "keycloak_group_roles" "group_roles" { [terraform]: + exhaustive = false [terraform]: + group_id = "a951fc7c-4c33-46ed-970f-5f114a5246c3" [terraform]: + id = (known after apply) [terraform]: + realm_id = "nebari" [terraform]: + role_ids = (known after apply) [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].module.grafana-client-id.keycloak_openid_client.main will be created [terraform]:  + resource "keycloak_openid_client" "main" { [terraform]: + access_type = "CONFIDENTIAL" [terraform]: + backchannel_logout_session_required = true [terraform]: + client_authenticator_type = "client-secret" [terraform]: + client_id = "grafana" [terraform]: + client_secret = (sensitive value) [terraform]: + consent_required = false [terraform]: + direct_access_grants_enabled = false [terraform]: + display_on_consent_screen = false [terraform]: + enabled = true [terraform]: + exclude_session_state_from_auth_response = false [terraform]: + frontchannel_logout_enabled = false [terraform]: + full_scope_allowed = true [terraform]: + id = (known after apply) [terraform]: + implicit_flow_enabled = false [terraform]: + name = "grafana" [terraform]: + oauth2_device_authorization_grant_enabled = false [terraform]: + realm_id = "nebari" [terraform]: + resource_server_id = (known after apply) [terraform]: + service_account_user_id = (known after apply) [terraform]: + service_accounts_enabled = false [terraform]: + standard_flow_enabled = true [terraform]: + use_refresh_tokens = true [terraform]: + valid_redirect_uris = [ [terraform]: + "https://domain/monitoring/login/generic_oauth", [terraform]: ] [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].module.grafana-client-id.keycloak_openid_group_membership_protocol_mapper.main will be created [terraform]:  + resource "keycloak_openid_group_membership_protocol_mapper" "main" { [terraform]: + add_to_access_token = true [terraform]: + add_to_id_token = true [terraform]: + add_to_userinfo = true [terraform]: + claim_name = "groups" [terraform]: + client_id = (known after apply) [terraform]: + full_path = true [terraform]: + id = (known after apply) [terraform]: + name = "group-membership-mapper" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].module.grafana-client-id.keycloak_openid_user_client_role_protocol_mapper.main will be created [terraform]:  + resource "keycloak_openid_user_client_role_protocol_mapper" "main" { [terraform]: + add_to_access_token = true [terraform]: + add_to_id_token = true [terraform]: + add_to_userinfo = true [terraform]: + claim_name = "roles" [terraform]: + claim_value_type = "String" [terraform]: + client_id = (known after apply) [terraform]: + id = (known after apply) [terraform]: + multivalued = true [terraform]: + name = "user-client-role-mapper" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].module.grafana-client-id.keycloak_role.main["grafana_admin"] will be created [terraform]:  + resource "keycloak_role" "main" { [terraform]: + client_id = (known after apply) [terraform]: + description = "grafana_admin" [terraform]: + id = (known after apply) [terraform]: + name = "grafana_admin" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].module.grafana-client-id.keycloak_role.main["grafana_developer"] will be created [terraform]:  + resource "keycloak_role" "main" { [terraform]: + client_id = (known after apply) [terraform]: + description = "grafana_developer" [terraform]: + id = (known after apply) [terraform]: + name = "grafana_developer" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].module.grafana-client-id.keycloak_role.main["grafana_viewer"] will be created [terraform]:  + resource "keycloak_role" "main" { [terraform]: + client_id = (known after apply) [terraform]: + description = "grafana_viewer" [terraform]: + id = (known after apply) [terraform]: + name = "grafana_viewer" [terraform]: + realm_id = "nebari" [terraform]: } [terraform]: [terraform]:  # module.monitoring[0].module.grafana-client-id.random_password.client_secret will be created [terraform]:  + resource "random_password" "client_secret" { [terraform]: + bcrypt_hash = (sensitive value) [terraform]: + id = (known after apply) [terraform]: + length = 32 [terraform]: + lower = true [terraform]: + min_lower = 0 [terraform]: + min_numeric = 0 [terraform]: + min_special = 0 [terraform]: + min_upper = 0 [terraform]: + number = true [terraform]: + numeric = true [terraform]: + result = (sensitive value) [terraform]: + special = false [terraform]: + upper = true [terraform]: } [terraform]: [terraform]: Plan: 130 to add, 0 to change, 0 to destroy. [terraform]:  [terraform]: Changes to Outputs: [terraform]: + service_urls = { [terraform]: + argo-workflows = { [terraform]: + health_url = "https://domain/argo/" [terraform]: + url = "https://domain/argo/" [terraform]: } [terraform]: + conda_store = { [terraform]: + health_url = "https://domain/conda-store/api/v1/" [terraform]: + url = "https://domain/conda-store/" [terraform]: } [terraform]: + dask_gateway = { [terraform]: + health_url = "https://domain/gateway/api/version" [terraform]: + url = "https://domain/gateway/" [terraform]: } [terraform]: + jupyterhub = { [terraform]: + health_url = "https://domain/hub/api/" [terraform]: + url = "https://domain/" [terraform]: } [terraform]: + keycloak = { [terraform]: + health_url = "https://domain/auth/realms/master" [terraform]: + url = "https://domain/auth/" [terraform]: } [terraform]: + monitoring = { [terraform]: + health_url = "https://domain/monitoring/api/health" [terraform]: + url = "https://domain/monitoring/" [terraform]: } [terraform]: } [terraform]: module.kubernetes-jupyterhub-ssh.tls_private_key.main: Creating... [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.random_password.client_secret: Creating... [terraform]: module.forwardauth.module.forwardauth-openid-client.random_password.client_secret: Creating... [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.random_password.client_secret: Creating... [terraform]: module.kubernetes-conda-store-server.module.minio.random_password.root_password: Creating... [terraform]: module.kubernetes-conda-store-server.random_password.conda_store_service_token["cdsdashboards"]: Creating... [terraform]: module.jupyterhub.module.jupyterhub-openid-client.random_password.client_secret: Creating... [terraform]: module.monitoring[0].module.grafana-client-id.random_password.client_secret: Creating... [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.random_password.client_secret: Creation complete after 0s [id=none] [terraform]: module.kubernetes-jupyterhub-ssh.tls_private_key.main: Creation complete after 0s [id=f189a41c06200235ef0fc1f273973de1bc7b061e] [terraform]: module.kubernetes-conda-store-server.module.postgresql.random_password.root_password: Creating... [terraform]: module.kubernetes-conda-store-server.random_password.conda_store_service_token["cdsdashboards"]: Creation complete after 0s [id=none] [terraform]: module.forwardauth.random_password.forwardauth_cookie_secret: Creating... [terraform]: module.kubernetes-conda-store-server.module.minio.random_password.root_password: Creation complete after 0s [id=none] [terraform]: module.kubernetes-conda-store-server.module.redis.random_password.root_password: Creating... [terraform]: module.monitoring[0].module.grafana-client-id.random_password.client_secret: Creation complete after 0s [id=none] [terraform]: module.jupyterhub.module.jupyterhub-openid-client.random_password.client_secret: Creation complete after 0s [id=none] [terraform]: module.jupyterhub.random_password.service_token["dask-gateway"]: Creating... [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.random_password.client_secret: Creation complete after 0s [id=none] [terraform]: module.argo-workflows[0].kubernetes_service_account.argo-admin-sa: Creating... [terraform]: module.forwardauth.module.forwardauth-openid-client.random_password.client_secret: Creation complete after 0s [id=none] [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_openid_client.main: Creating... [terraform]: module.jupyterhub.random_password.service_token["kbatch"]: Creating... [terraform]: module.argo-workflows[0].kubernetes_service_account.argo-edit-sa: Creating... [terraform]: module.jupyterhub.random_password.proxy_secret_token: Creating... [terraform]: module.kubernetes-conda-store-server.module.redis.random_password.root_password: Creation complete after 0s [id=none] [terraform]: module.forwardauth.random_password.forwardauth_cookie_secret: Creation complete after 0s [id=none] [terraform]: module.jupyterhub.random_password.service_token["dask-gateway"]: Creation complete after 0s [id=none] [terraform]: module.kubernetes-conda-store-server.module.postgresql.random_password.root_password: Creation complete after 0s [id=none] [terraform]: module.argo-workflows[0].kubernetes_service_account.argo-view-sa: Creating... [terraform]: module.jupyterhub.random_password.service_token["kbatch"]: Creation complete after 0s [id=none] [terraform]: module.kbatch[0].kubernetes_cluster_role.kbatch: Creating... [terraform]: module.jupyterhub.random_password.proxy_secret_token: Creation complete after 0s [id=none] [terraform]: module.kbatch[0].kubernetes_cluster_role.kbatch: Creation complete after 0s [id=nebari-kbatch] [terraform]: module.kubernetes-nfs-server[0].kubernetes_service.main: Creating... [terraform]: module.kubernetes-nfs-server[0].kubernetes_persistent_volume_claim.main: Creating... [terraform]: module.kubernetes-nfs-server[0].kubernetes_deployment.main: Creating... [terraform]: module.kubernetes-nfs-server[0].kubernetes_service.main: Creation complete after 0s [id=dev/nfs-server-nfs] [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_openid_client.main: Creation complete after 0s [id=9f9d8226-d3ac-4d81-932e-f35ba0c202b7] [terraform]: module.monitoring[0].kubernetes_config_map.dashboard: Creating... [terraform]: module.monitoring[0].kubernetes_config_map.dashboard: Creation complete after 0s [id=dev/nebari-grafana-dashboards] [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_openid_client.main: Creating... [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_openid_client.main: Creation complete after 0s [id=caf52e95-5eb6-4dd7-a17c-58e2ff07a2b0] [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_openid_client.main: Creating... [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_openid_client.main: Creation complete after 0s [id=533f8e06-65c8-4425-9e9f-58a45c24e514] [terraform]: module.kubernetes-conda-store-server.kubernetes_persistent_volume_claim.main: Creating... [terraform]: module.argo-workflows[0].kubernetes_service_account.argo-admin-sa: Creation complete after 0s [id=dev/argo-admin] [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_openid_client.main: Creating... [terraform]: module.argo-workflows[0].kubernetes_service_account.argo-edit-sa: Creation complete after 0s [id=dev/argo-edit] [terraform]: module.kubernetes-conda-store-server.kubernetes_config_map.conda-store-config: Creating... [terraform]: module.kubernetes-conda-store-server.kubernetes_config_map.conda-store-config: Creation complete after 0s [id=dev/conda-store-config] [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_openid_client.main: Creation complete after 0s [id=e6e4b734-d12d-42e7-80f1-116af3f6d16a] [terraform]: module.forwardauth.module.forwardauth-openid-client.keycloak_openid_client.main: Creating... [terraform]: module.argo-workflows[0].kubernetes_service_account.argo-view-sa: Creation complete after 1s [id=dev/argo-view] [terraform]: module.forwardauth.module.forwardauth-openid-client.keycloak_openid_client.main: Creation complete after 0s [id=80c1f4e0-2dff-4310-99b0-e8034f0b2d2c] [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_service.jupyterhub-sftp: Creating... [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_service.jupyterhub-sftp: Creation complete after 0s [id=dev/nebari-jupyterhub-sftp] [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_role.main["conda_store_admin"]: Creating... [terraform]: module.monitoring[0].kubernetes_manifest.grafana-ingress-route: Creating... [terraform]: module.argo-workflows[0].kubernetes_manifest.argo-workflows-middleware-stripprefix: Creating... [terraform]: module.monitoring[0].kubernetes_manifest.grafana-ingress-route: Creation complete after 0s [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_role.main["conda_store_admin"]: Creation complete after 0s [id=de972027-8e28-465a-9430-5598f57b7397] [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_openid_user_client_role_protocol_mapper.main: Creating... [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_role.main["conda_store_developer"]: Creating... [terraform]: module.argo-workflows[0].kubernetes_manifest.argo-workflows-middleware-stripprefix: Creation complete after 0s [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_openid_group_membership_protocol_mapper.main: Creating... [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_openid_user_client_role_protocol_mapper.main: Creation complete after 0s [id=4486e559-aa79-4a7a-8d5b-412add1dc494] [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_role.main["conda_store_developer"]: Creation complete after 0s [id=244bbdf9-4c89-4e95-9a14-a41c366f1f21] [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_openid_group_membership_protocol_mapper.main: Creation complete after 0s [id=ad1b26e9-7bfd-435c-802d-7e018d76c6ce] [terraform]: module.dask-gateway.kubernetes_service_account.controller: Creating... [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_secret.jupyterhub-sftp: Creating... [terraform]: module.jupyterhub.kubernetes_config_map.shared-examples: Creating... [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_secret.jupyterhub-sftp: Creation complete after 0s [id=dev/nebari-jupyterhub-sftp] [terraform]: module.jupyterhub.kubernetes_config_map.shared-examples: Creation complete after 0s [id=dev/shared-examples] [terraform]: module.jupyterhub.kubernetes_config_map.etc-jupyter: Creating... [terraform]: module.jupyterhub.kubernetes_config_map.jupyterlab-settings: Creating... [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Creating... [terraform]: module.jupyterhub.kubernetes_config_map.etc-jupyter: Creation complete after 0s [id=dev/etc-jupyter] [terraform]: module.jupyterhub.kubernetes_config_map.jupyterlab-settings: Creation complete after 0s [id=dev/jupyterlab-settings] [terraform]: module.dask-gateway.kubernetes_cluster_role.gateway: Creating... [terraform]: module.kbatch[0].kubernetes_cluster_role_binding.kbatch: Creating... [terraform]: module.dask-gateway.kubernetes_cluster_role.gateway: Creation complete after 0s [id=nebari-daskgateway-gateway] [terraform]: module.kbatch[0].kubernetes_cluster_role_binding.kbatch: Creation complete after 0s [id=nebari-kbatch] [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_config_map.jupyterhub-ssh: Creating... [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_config_map.jupyterhub-ssh: Creation complete after 0s [id=dev/nebari-jupyterhub-ssh] [terraform]: module.dask-gateway.kubernetes_manifest.main: Creating... [terraform]: module.dask-gateway.kubernetes_service_account.gateway: Creating... [terraform]: module.dask-gateway.kubernetes_service_account.controller: Creation complete after 1s [id=dev/nebari-daskgateway-controller] [terraform]: module.dask-gateway.kubernetes_service_account.gateway: Creation complete after 1s [id=dev/nebari-daskgateway-gateway] [terraform]: module.dask-gateway.kubernetes_service.gateway: Creating... [terraform]: module.dask-gateway.kubernetes_service.gateway: Creation complete after 0s [id=dev/nebari-dask-gateway-gateway-api] [terraform]: module.forwardauth.kubernetes_manifest.forwardauth-middleware: Creating... [terraform]: module.dask-gateway.kubernetes_manifest.cluster-middleware-stripprefix: Creating... [terraform]: module.kubernetes-nfs-server[0].kubernetes_persistent_volume_claim.main: Creation complete after 3s [id=dev/nfs-server-nfs-storage] [terraform]: module.dask-gateway.kubernetes_manifest.main: Creation complete after 2s [terraform]: module.dask-gateway.kubernetes_config_map.gateway: Creating... [terraform]: module.dask-gateway.kubernetes_config_map.gateway: Creation complete after 0s [id=dev/nebari-daskgateway-gateway] [terraform]: module.kubernetes-conda-store-server.kubernetes_config_map.conda-store-environments: Creating... [terraform]: module.kubernetes-conda-store-server.kubernetes_config_map.conda-store-environments: Creation complete after 0s [id=dev/conda-environments] [terraform]: module.dask-gateway.kubernetes_cluster_role.controller: Creating... [terraform]: module.dask-gateway.kubernetes_cluster_role.controller: Creation complete after 1s [id=nebari-daskgateway-controller] [terraform]: module.jupyterhub.kubernetes_config_map.etc-skel: Creating... [terraform]: module.jupyterhub.kubernetes_config_map.etc-skel: Creation complete after 0s [id=dev/etc-skel] [terraform]: module.dask-gateway.kubernetes_config_map.controller: Creating... [terraform]: module.dask-gateway.kubernetes_config_map.controller: Creation complete after 0s [id=dev/nebari-daskgateway-controller] [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_secret.jupyterhub-ssh: Creating... [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_secret.jupyterhub-ssh: Creation complete after 0s [id=dev/nebari-jupyterhub-ssh] [terraform]: module.jupyterhub.kubernetes_config_map.etc-ipython: Creating... [terraform]: module.jupyterhub.kubernetes_config_map.etc-ipython: Creation complete after 0s [id=dev/etc-ipython] [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_service.jupyterhub-ssh: Creating... [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_service.jupyterhub-ssh: Creation complete after 0s [id=dev/nebari-jupyterhub-ssh] [terraform]: module.jupyterhub.kubernetes_manifest.jupyterhub: Creating... [terraform]: module.forwardauth.kubernetes_manifest.forwardauth-middleware: Creation complete after 2s [terraform]: module.kubernetes-conda-store-server.kubernetes_service.nfs: Creating... [terraform]: module.kubernetes-conda-store-server.kubernetes_service.nfs: Creation complete after 0s [id=dev/nebari-conda-store-nfs] [terraform]: module.kubernetes-conda-store-server.kubernetes_service.server: Creating... [terraform]: module.kubernetes-conda-store-server.kubernetes_service.server: Creation complete after 0s [id=dev/nebari-conda-store-server] [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_openid_user_client_role_protocol_mapper.main: Creating... [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_openid_user_client_role_protocol_mapper.main: Creation complete after 0s [id=3c003605-1fde-4e06-975f-ee3122b96025] [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_role.main["grafana_viewer"]: Creating... [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_role.main["grafana_viewer"]: Creation complete after 0s [id=fc6aa802-9511-4068-8ecc-c6be8d29db89] [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_openid_group_membership_protocol_mapper.main: Creating... [terraform]: module.dask-gateway.kubernetes_manifest.gateway-middleware: Creating... [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_openid_group_membership_protocol_mapper.main: Creation complete after 1s [id=2ce091a5-1c85-4985-8116-449e8077cbe9] [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_role.main["grafana_developer"]: Creating... [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_role.main["grafana_developer"]: Creation complete after 0s [id=47a35560-6ee0-4780-9b32-ab87f8c3ba5a] [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_role.main["grafana_admin"]: Creating... [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_role.main["grafana_admin"]: Creation complete after 0s [id=137ed968-ca37-4c0a-b4a7-80fdb74b01eb] [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_role.main["jupyterhub_admin"]: Creating... [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_role.main["jupyterhub_admin"]: Creation complete after 0s [id=6dbaf93f-2da6-4668-a8cd-91e23e2dc3a6] [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_openid_user_attribute_protocol_mapper.jupyterlab_profiles[0]: Creating... [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_openid_user_attribute_protocol_mapper.jupyterlab_profiles[0]: Creation complete after 0s [id=594aad33-73af-4e72-b8ca-d6714d77d071] [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_role.main["jupyterhub_developer"]: Creating... [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_role.main["jupyterhub_developer"]: Creation complete after 0s [id=1f501ff5-42a7-43fe-8828-f2c7128bf064] [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_role.main["dask_gateway_developer"]: Creating... [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_role.main["dask_gateway_developer"]: Creation complete after 0s [id=11289144-bc69-4949-a5ac-97a125451fd0] [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_openid_group_membership_protocol_mapper.main: Creating... [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_openid_group_membership_protocol_mapper.main: Creation complete after 0s [id=a972e28c-df95-4240-88e3-bf4428ae689a] [terraform]: module.dask-gateway.kubernetes_manifest.cluster-middleware-stripprefix: Creation complete after 3s [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_role.main["dask_gateway_admin"]: Creating... [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_openid_user_client_role_protocol_mapper.main: Creating... [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_role.main["dask_gateway_admin"]: Creation complete after 0s [id=7a297be7-7986-4694-b029-ae6ad0b1f158] [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_openid_user_client_role_protocol_mapper.main: Creation complete after 0s [id=ca76623c-bd6c-40af-b9b2-12b75ad327fb] [terraform]: module.argo-workflows[0].kubernetes_cluster_role_binding.argo-edit-rb: Creating... [terraform]: module.argo-workflows[0].kubernetes_cluster_role_binding.argo-admin-rb: Creating... [terraform]: module.argo-workflows[0].kubernetes_cluster_role_binding.argo-admin-rb: Creation complete after 0s [id=argo-admin] [terraform]: module.argo-workflows[0].kubernetes_cluster_role_binding.argo-edit-rb: Creation complete after 0s [id=argo-edit] [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_role.main["argo_admin"]: Creating... [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_role.main["argo_viewer"]: Creating... [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_role.main["argo_viewer"]: Creation complete after 0s [id=04a72ad0-65bc-401d-8a88-00e47c02605d] [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_role.main["argo_admin"]: Creation complete after 0s [id=63a08e9b-c361-45aa-9d1d-518e5445f8e0] [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_openid_group_membership_protocol_mapper.main: Creating... [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_role.main["argo_developer"]: Creating... [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_openid_group_membership_protocol_mapper.main: Creation complete after 0s [id=aa1ecd0d-f7d4-405b-baf4-13dcbbe9c678] [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_role.main["argo_developer"]: Creation complete after 0s [id=c9d5d7b9-6500-4b0b-95ec-6ccc4e86c975] [terraform]: module.argo-workflows[0].kubernetes_cluster_role_binding.argo-view-rb: Creating... [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_openid_user_client_role_protocol_mapper.main: Creating... [terraform]: module.argo-workflows[0].kubernetes_cluster_role_binding.argo-view-rb: Creation complete after 0s [id=argo-view] [terraform]: module.forwardauth.module.forwardauth-openid-client.keycloak_openid_user_client_role_protocol_mapper.main: Creating... [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_openid_user_client_role_protocol_mapper.main: Creation complete after 0s [id=ed1c3609-a9f7-4a89-a2d0-9777510dffb8] [terraform]: module.forwardauth.module.forwardauth-openid-client.keycloak_openid_user_client_role_protocol_mapper.main: Creation complete after 0s [id=049e16dd-6ee5-416b-925e-fc2dad531944] [terraform]: module.forwardauth.module.forwardauth-openid-client.keycloak_openid_group_membership_protocol_mapper.main: Creating... [terraform]: module.forwardauth.module.forwardauth-openid-client.keycloak_openid_group_membership_protocol_mapper.main: Creation complete after 0s [id=b7958de2-329c-4bde-a647-80f8e05cc43b] [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_manifest.jupyterhub-sftp-ingress: Creating... [terraform]: module.argo-workflows[0].kubernetes_manifest.argo-workflows-ingress-route: Creating... [terraform]: module.jupyterhub.kubernetes_manifest.jupyterhub: Creation complete after 2s [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_group_roles.group_roles["analyst"]: Creating... [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_group_roles.group_roles["analyst"]: Creation complete after 0s [id=nebari/85152b40-7279-4f8a-8fb6-cb8d5b87c14a] [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_group_roles.group_roles["admin"]: Creating... [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_group_roles.group_roles["admin"]: Creation complete after 0s [id=nebari/4e137164-08af-4b08-a503-35c248823dae] [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_group_roles.group_roles["developer"]: Creating... [terraform]: module.dask-gateway.kubernetes_manifest.gateway-middleware: Creation complete after 3s [terraform]: module.dask-gateway.kubernetes_cluster_role_binding.gateway: Creating... [terraform]: module.kubernetes-conda-store-server.module.conda-store-openid-client.keycloak_group_roles.group_roles["developer"]: Creation complete after 0s [id=nebari/a951fc7c-4c33-46ed-970f-5f114a5246c3] [terraform]: module.dask-gateway.kubernetes_cluster_role_binding.gateway: Creation complete after 0s [id=nebari-daskgateway-gateway] [terraform]: module.dask-gateway.kubernetes_config_map.dask-etc: Creating... [terraform]: module.dask-gateway.kubernetes_config_map.dask-etc: Creation complete after 0s [id=dev/dask-etc] [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_deployment.jupyterhub-ssh: Creating... [terraform]: module.dask-gateway.kubernetes_manifest.dask-gateway: Creating... [terraform]: module.kubernetes-conda-store-server.module.minio.helm_release.minio: Creating... [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_manifest.jupyterhub-sftp-ingress: Creation complete after 3s [terraform]: module.argo-workflows[0].kubernetes_manifest.argo-workflows-ingress-route: Creation complete after 3s [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_manifest.jupyterhub-ssh-ingress: Creating... [terraform]: module.kubernetes-conda-store-server.kubernetes_manifest.jupyterhub: Creating... [terraform]: module.dask-gateway.kubernetes_manifest.dask-gateway: Creation complete after 3s [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_group_roles.group_roles["admin"]: Creating... [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_group_roles.group_roles["admin"]: Creation complete after 0s [id=nebari/4e137164-08af-4b08-a503-35c248823dae] [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_group_roles.group_roles["developer"]: Creating... [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_group_roles.group_roles["developer"]: Creation complete after 0s [id=nebari/a951fc7c-4c33-46ed-970f-5f114a5246c3] [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_group_roles.group_roles["analyst"]: Creating... [terraform]: module.monitoring[0].module.grafana-client-id.keycloak_group_roles.group_roles["analyst"]: Creation complete after 0s [id=nebari/85152b40-7279-4f8a-8fb6-cb8d5b87c14a] [terraform]: module.kubernetes-nfs-server[0].kubernetes_deployment.main: Still creating... [10s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_persistent_volume_claim.main: Still creating... [10s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [10s elapsed] [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_manifest.jupyterhub-ssh-ingress: Creation complete after 2s [terraform]: module.kubernetes-conda-store-server.kubernetes_manifest.jupyterhub: Creation complete after 2s [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_group_roles.group_roles["analyst"]: Creating... [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_group_roles.group_roles["analyst"]: Creation complete after 0s [id=nebari/85152b40-7279-4f8a-8fb6-cb8d5b87c14a] [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_group_roles.group_roles["developer"]: Creating... [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_group_roles.group_roles["developer"]: Creation complete after 0s [id=nebari/a951fc7c-4c33-46ed-970f-5f114a5246c3] [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_group_roles.group_roles["admin"]: Creating... [terraform]: module.jupyterhub.module.jupyterhub-openid-client.keycloak_group_roles.group_roles["admin"]: Creation complete after 1s [id=nebari/4e137164-08af-4b08-a503-35c248823dae] [terraform]: module.dask-gateway.kubernetes_manifest.chain-middleware: Creating... [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_group_roles.group_roles["developer"]: Creating... [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_group_roles.group_roles["developer"]: Creation complete after 0s [id=nebari/a951fc7c-4c33-46ed-970f-5f114a5246c3] [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_group_roles.group_roles["analyst"]: Creating... [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_group_roles.group_roles["analyst"]: Creation complete after 0s [id=nebari/85152b40-7279-4f8a-8fb6-cb8d5b87c14a] [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_group_roles.group_roles["admin"]: Creating... [terraform]: module.argo-workflows[0].module.argo-workflow-openid-client.keycloak_group_roles.group_roles["admin"]: Creation complete after 0s [id=nebari/4e137164-08af-4b08-a503-35c248823dae] [terraform]: module.argo-workflows[0].kubernetes_secret.argo-oidc-secret: Creating... [terraform]: module.argo-workflows[0].kubernetes_secret.argo-oidc-secret: Creation complete after 0s [id=dev/argo-server-sso] [terraform]: module.forwardauth.kubernetes_deployment.forwardauth-deployment: Creating... [terraform]: module.dask-gateway.kubernetes_manifest.chain-middleware: Creation complete after 0s [terraform]: module.kubernetes-conda-store-server.module.postgresql.helm_release.postgresql: Creating... [terraform]: module.kubernetes-nfs-server[0].kubernetes_deployment.main: Creation complete after 16s [id=dev/nfs-server-nfs] [terraform]: module.jupyterhub-nfs-mount.kubernetes_storage_class.main: Creating... [terraform]: module.jupyterhub-nfs-mount.kubernetes_storage_class.main: Creation complete after 0s [id=jupyterhub-dev-share] [terraform]: module.jupyterhub-nfs-mount.kubernetes_persistent_volume.main: Creating... [terraform]: module.jupyterhub-nfs-mount.kubernetes_persistent_volume.main: Creation complete after 0s [id=jupyterhub-dev-share] [terraform]: module.jupyterhub-nfs-mount.kubernetes_persistent_volume_claim.main: Creating... [terraform]: module.kubernetes-conda-store-server.module.redis.helm_release.redis: Creating... [terraform]: module.jupyterhub-nfs-mount.kubernetes_persistent_volume_claim.main: Creation complete after 0s [id=dev/jupyterhub-dev-share] [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_deployment.jupyterhub-sftp: Creating... [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_deployment.jupyterhub-ssh: Still creating... [10s elapsed] [terraform]: module.kubernetes-conda-store-server.module.minio.helm_release.minio: Still creating... [10s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Creating... [terraform]: module.kbatch[0].helm_release.kbatch: Creating... [terraform]: module.kubernetes-conda-store-server.kubernetes_persistent_volume_claim.main: Still creating... [20s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [20s elapsed] [terraform]: module.forwardauth.kubernetes_deployment.forwardauth-deployment: Still creating... [10s elapsed] [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_deployment.jupyterhub-ssh: Creation complete after 15s [id=dev/nebari-jupyterhub-ssh] [terraform]: module.kubernetes-conda-store-server.module.postgresql.helm_release.postgresql: Still creating... [10s elapsed] [terraform]: module.kubernetes-conda-store-server.module.redis.helm_release.redis: Still creating... [10s elapsed] [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_deployment.jupyterhub-sftp: Still creating... [10s elapsed] [terraform]: module.forwardauth.kubernetes_deployment.forwardauth-deployment: Creation complete after 15s [id=dev/forwardauth-deployment] [terraform]: module.forwardauth.kubernetes_service.forwardauth-service: Creating... [terraform]: module.forwardauth.kubernetes_service.forwardauth-service: Creation complete after 0s [id=dev/forwardauth-service] [terraform]: module.forwardauth.kubernetes_manifest.forwardauth-ingressroute: Creating... [terraform]: module.forwardauth.kubernetes_manifest.forwardauth-ingressroute: Creation complete after 1s [terraform]: module.kubernetes-conda-store-server.module.minio.helm_release.minio: Still creating... [20s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [10s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [10s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_persistent_volume_claim.main: Still creating... [30s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [30s elapsed] [terraform]: module.kubernetes-conda-store-server.module.postgresql.helm_release.postgresql: Still creating... [20s elapsed] [terraform]: module.kubernetes-conda-store-server.module.redis.helm_release.redis: Still creating... [20s elapsed] [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_deployment.jupyterhub-sftp: Still creating... [20s elapsed] [terraform]: module.kubernetes-conda-store-server.module.minio.helm_release.minio: Still creating... [30s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [20s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [20s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_persistent_volume_claim.main: Still creating... [40s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [40s elapsed] [terraform]: module.kubernetes-jupyterhub-ssh.kubernetes_deployment.jupyterhub-sftp: Creation complete after 26s [id=dev/nebari-jupyterhub-sftp] [terraform]: module.kubernetes-conda-store-server.module.postgresql.helm_release.postgresql: Still creating... [30s elapsed] [terraform]: module.kubernetes-conda-store-server.module.redis.helm_release.redis: Still creating... [30s elapsed] [terraform]: module.kubernetes-conda-store-server.module.minio.helm_release.minio: Still creating... [40s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [30s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [30s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_persistent_volume_claim.main: Still creating... [50s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [50s elapsed] [terraform]: module.kubernetes-conda-store-server.module.postgresql.helm_release.postgresql: Still creating... [40s elapsed] [terraform]: module.kubernetes-conda-store-server.module.redis.helm_release.redis: Still creating... [40s elapsed] [terraform]: module.kubernetes-conda-store-server.module.minio.helm_release.minio: Still creating... [50s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [40s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [40s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_persistent_volume_claim.main: Still creating... [1m0s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [1m0s elapsed] [terraform]: module.kubernetes-conda-store-server.module.postgresql.helm_release.postgresql: Still creating... [50s elapsed] [terraform]: module.kubernetes-conda-store-server.module.minio.helm_release.minio: Creation complete after 56s [id=nebari-conda-store-minio] [terraform]: module.kubernetes-conda-store-server.module.minio.kubernetes_manifest.minio-api: Creating... [terraform]: module.kubernetes-conda-store-server.module.minio.kubernetes_manifest.minio-api: Creation complete after 0s [terraform]: module.kubernetes-conda-store-server.module.redis.helm_release.redis: Still creating... [50s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [50s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [50s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_persistent_volume_claim.main: Still creating... [1m10s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [1m10s elapsed] [terraform]: module.kubernetes-conda-store-server.module.postgresql.helm_release.postgresql: Still creating... [1m0s elapsed] [terraform]: module.kubernetes-conda-store-server.module.redis.helm_release.redis: Still creating... [1m0s elapsed] [terraform]: module.kubernetes-conda-store-server.module.postgresql.helm_release.postgresql: Creation complete after 1m5s [id=nebari-conda-store-postgresql] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [1m0s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [1m0s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_persistent_volume_claim.main: Still creating... [1m20s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [1m20s elapsed] [terraform]: module.kubernetes-conda-store-server.module.redis.helm_release.redis: Still creating... [1m10s elapsed] [terraform]: module.kubernetes-conda-store-server.module.redis.helm_release.redis: Creation complete after 1m11s [id=nebari-conda-store-redis] [terraform]: module.kubernetes-conda-store-server.kubernetes_secret.conda-store-secret: Creating... [terraform]: module.kubernetes-conda-store-server.kubernetes_secret.conda-store-secret: Creation complete after 0s [id=dev/conda-store-secret] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Creating... [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Creating... [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [1m10s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [1m10s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_persistent_volume_claim.main: Still creating... [1m30s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [1m30s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_persistent_volume_claim.main: Creation complete after 1m33s [id=dev/nebari-conda-store-storage] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [10s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [10s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [1m20s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [1m20s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [1m40s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [20s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [20s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [1m30s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [1m30s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [1m50s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [30s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [30s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [1m40s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [1m40s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [2m0s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [40s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [40s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [1m50s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [1m50s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [2m10s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [50s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [50s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [2m0s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [2m0s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [2m20s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [1m0s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [1m0s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [2m10s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [2m10s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [2m30s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [1m10s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [1m10s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [2m20s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [2m20s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [2m40s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [1m20s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [1m20s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [2m30s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [2m30s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [2m50s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [1m30s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [1m30s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [2m40s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [2m40s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [3m0s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [1m40s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [1m40s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [2m50s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [2m50s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [3m10s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [1m50s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [1m50s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [3m0s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [3m0s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [3m20s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [2m0s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [2m0s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [3m10s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [3m10s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [3m30s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [2m10s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [2m10s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [3m20s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [3m20s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [3m40s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [2m20s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [2m20s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [3m30s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Still creating... [3m30s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [3m50s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [2m30s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [2m30s elapsed] [terraform]: module.kbatch[0].helm_release.kbatch: Creation complete after 3m38s [id=kbatch] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [3m40s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [4m0s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [2m40s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [2m40s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [3m50s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [4m10s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [2m50s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [2m50s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [4m0s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [4m20s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [3m0s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [3m0s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [4m10s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [4m30s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Still creating... [3m10s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Still creating... [3m10s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [4m20s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [4m40s elapsed] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.server: Creation complete after 3m16s [id=dev/nebari-conda-store-server] [terraform]: module.kubernetes-conda-store-server.kubernetes_deployment.worker: Creation complete after 3m16s [id=dev/nebari-conda-store-worker] [terraform]: module.conda-store-nfs-mount.kubernetes_storage_class.main: Creating... [terraform]: module.conda-store-nfs-mount.kubernetes_storage_class.main: Creation complete after 0s [id=conda-store-dev-share] [terraform]: module.conda-store-nfs-mount.kubernetes_persistent_volume_claim.main: Creating... [terraform]: module.conda-store-nfs-mount.kubernetes_persistent_volume.main: Creating... [terraform]: module.conda-store-nfs-mount.kubernetes_persistent_volume.main: Creation complete after 0s [id=conda-store-dev-share] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [4m30s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [4m50s elapsed] [terraform]: module.conda-store-nfs-mount.kubernetes_persistent_volume_claim.main: Still creating... [10s elapsed] [terraform]: module.conda-store-nfs-mount.kubernetes_persistent_volume_claim.main: Creation complete after 13s [id=dev/conda-store-dev-share] [terraform]: module.dask-gateway.kubernetes_secret.gateway: Creating... [terraform]: module.dask-gateway.kubernetes_secret.gateway: Creation complete after 0s [id=dev/nebari-daskgateway-gateway] [terraform]: module.dask-gateway.kubernetes_deployment.controller: Creating... [terraform]: module.dask-gateway.kubernetes_deployment.gateway: Creating... [terraform]: module.jupyterhub.helm_release.jupyterhub: Creating... [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [4m40s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [5m0s elapsed] [terraform]: module.dask-gateway.kubernetes_deployment.controller: Still creating... [10s elapsed] [terraform]: module.dask-gateway.kubernetes_deployment.gateway: Still creating... [10s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [10s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [4m50s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Still creating... [5m10s elapsed] [terraform]: module.dask-gateway.kubernetes_deployment.controller: Still creating... [20s elapsed] [terraform]: module.dask-gateway.kubernetes_deployment.gateway: Still creating... [20s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [20s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [5m0s elapsed] [terraform]: module.argo-workflows[0].helm_release.argo-workflows: Creation complete after 5m19s [id=argo-workflows] [terraform]: module.dask-gateway.kubernetes_deployment.controller: Still creating... [30s elapsed] [terraform]: module.dask-gateway.kubernetes_deployment.gateway: Still creating... [30s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [30s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Still creating... [5m10s elapsed] [terraform]: module.dask-gateway.kubernetes_deployment.controller: Creation complete after 36s [id=dev/nebari-daskgateway-controller] [terraform]: module.dask-gateway.kubernetes_cluster_role_binding.controller: Creating... [terraform]: module.dask-gateway.kubernetes_cluster_role_binding.controller: Creation complete after 0s [id=nebari-daskgateway-controller] [terraform]: module.dask-gateway.kubernetes_deployment.gateway: Still creating... [40s elapsed] [terraform]: module.monitoring[0].helm_release.prometheus-grafana: Creation complete after 5m16s [id=nebari] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [40s elapsed] [terraform]: module.dask-gateway.kubernetes_deployment.gateway: Creation complete after 46s [id=dev/nebari-daskgateway-gateway] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [50s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [1m0s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [1m10s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [1m20s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [1m30s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [1m40s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [1m50s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [2m0s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [2m10s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [2m20s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Still creating... [2m30s elapsed] [terraform]: module.jupyterhub.helm_release.jupyterhub: Creation complete after 2m31s [id=jupyterhub-dev] [terraform]:  [terraform]: Apply complete! Resources: 130 added, 0 changed, 0 destroyed. [terraform]:  [terraform]: Outputs: [terraform]: [terraform]: service_urls = { [terraform]: "argo-workflows" = { [terraform]: "health_url" = "https://domain/argo/" [terraform]: "url" = "https://domain/argo/" [terraform]: } [terraform]: "conda_store" = { [terraform]: "health_url" = "https://domain/conda-store/api/v1/" [terraform]: "url" = "https://domain/conda-store/" [terraform]: } [terraform]: "dask_gateway" = { [terraform]: "health_url" = "https://domain/gateway/api/version" [terraform]: "url" = "https://domain/gateway/" [terraform]: } [terraform]: "jupyterhub" = { [terraform]: "health_url" = "https://domain/hub/api/" [terraform]: "url" = "https://domain/" [terraform]: } [terraform]: "keycloak" = { [terraform]: "health_url" = "https://domain/auth/realms/master" [terraform]: "url" = "https://domain/auth/" [terraform]: } [terraform]: "monitoring" = { [terraform]: "health_url" = "https://domain/monitoring/api/health" [terraform]: "url" = "https://domain/monitoring/" [terraform]: } [terraform]: } Attempt 1 health check failed for url=https://domain/argo/ Attempt 2 health check failed for url=https://domain/argo/ Attempt 3 health check failed for url=https://domain/argo/ Attempt 4 health check failed for url=https://domain/argo/ Attempt 5 health check failed for url=https://domain/argo/ Attempt 6 health check failed for url=https://domain/argo/ Attempt 7 health check failed for url=https://domain/argo/ Attempt 8 health check failed for url=https://domain/argo/ Attempt 9 health check failed for url=https://domain/argo/ Attempt 10 health check failed for url=https://domain/argo/ ERROR: Service argo-workflows DOWN when checking url=https://domain/argo/