diff --git a/lib/kubernetes-deploy/kubernetes_resource/cloudsql.rb b/lib/kubernetes-deploy/kubernetes_resource/cloudsql.rb index a696ab648..91fa4ede1 100644 --- a/lib/kubernetes-deploy/kubernetes_resource/cloudsql.rb +++ b/lib/kubernetes-deploy/kubernetes_resource/cloudsql.rb @@ -62,9 +62,9 @@ def mysql_service_exists? def cloudsql_resource_uuid return @cloudsql_resource_uuid if defined?(@cloudsql_resource_uuid) && @cloudsql_resource_uuid - redis, _err, st = kubectl.run("get", "cloudsqls", @name, "-o=json") + cloudsql, _err, st = kubectl.run("get", "cloudsqls", @name, "-o=json") if st.success? - parsed = JSON.parse(redis) + parsed = JSON.parse(cloudsql) @cloudsql_resource_uuid = parsed.dig("metadata", "uid") end diff --git a/lib/kubernetes-deploy/kubernetes_resource/memcached.rb b/lib/kubernetes-deploy/kubernetes_resource/memcached.rb new file mode 100644 index 000000000..678d180c9 --- /dev/null +++ b/lib/kubernetes-deploy/kubernetes_resource/memcached.rb @@ -0,0 +1,61 @@ +# frozen_string_literal: true +module KubernetesDeploy + class Memcached < KubernetesResource + TIMEOUT = 5.minutes + SECRET_NAME = "memcached-url" + + def sync + _, _err, st = kubectl.run("get", type, @name) + @found = st.success? + @deployment_exists = memcached_deployment_exists? + @service_exists = memcached_service_exists? + @secret_exists = memcached_secret_exists? + + @status = if @deployment_exists && @service_exists && @secret_exists + "Provisioned" + else + "Unknown" + end + end + + def deploy_succeeded? + @deployment_exists && @service_exists && @secret_exists + end + + def deploy_failed? + false + end + + def exists? + @found + end + + private + + def memcached_deployment_exists? + deployments, _err, st = kubectl.run("get", "deployments", "-l name=#{@name}", "-o=json") + return false unless st.success? + parsed = JSON.parse(deployments) + return false if parsed.fetch("items", []).count == 0 + deployment = parsed.fetch("items", []).first + status = deployment.fetch("status", {}) + status.fetch("availableReplicas", -1) == status.fetch("replicas", 0) + end + + def memcached_service_exists? + services, _err, st = kubectl.run("get", "services", "-l name=#{@name}", "-o=json") + return false unless st.success? + parsed = JSON.parse(services) + return false if parsed.fetch("items", []).count == 0 + service = parsed.fetch("items", []).first + service.dig("spec", "clusterIP").present? + end + + def memcached_secret_exists? + secret, _err, st = kubectl.run("get", "secrets", SECRET_NAME, "-o=json") + return false unless st.success? + parsed = JSON.parse(secret) + parsed.dig("data", @name).present? + end + end +end diff --git a/lib/kubernetes-deploy/runner.rb b/lib/kubernetes-deploy/runner.rb index 7183eebf6..0cc412a9c 100644 --- a/lib/kubernetes-deploy/runner.rb +++ b/lib/kubernetes-deploy/runner.rb @@ -14,6 +14,7 @@ persistent_volume_claim pod redis + memcached service pod_template bugsnag @@ -38,6 +39,7 @@ class Runner ResourceQuota Cloudsql Redis + Memcached Bugsnag ConfigMap PersistentVolumeClaim