diff --git a/config/runtime.exs b/config/runtime.exs index 1512fbd..5882821 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -52,9 +52,6 @@ if cookie = System.get_env("RELEASE_COOKIE") do config :elixir, :cookie, cookie end -config :policy_service, PolicyServiceWeb.Endpoint, - http: [port: String.to_integer(System.get_env("PORT", "4000"))] - if config_env() == :prod do database_url = System.get_env("DATABASE_URL") || @@ -67,13 +64,14 @@ if config_env() == :prod do config :policy_service, PolicyService.Repo, url: database_url, - pool_size: 1, + pool_size: String.to_integer(System.get_env("DATABASE_POOL_SIZE") || "1"), socket_options: maybe_ipv6 config :policy_service, PolicyService.EventStore, serializer: Commanded.Serialization.JsonSerializer, url: database_url, - pool_size: 1 + schema: "eventstore", + pool_size: String.to_integer(System.get_env("EVENTSTORE_POOL_SIZE") || "1") secret_key_base = System.get_env("SECRET_KEY_BASE") || @@ -87,9 +85,10 @@ if config_env() == :prod do config :policy_service, :dns_cluster_query, System.get_env("DNS_CLUSTER_QUERY") config :policy_service, PolicyServiceWeb.Endpoint, - url: [host: host, port: 80, scheme: "http"], + url: [host: host, port: String.to_integer(System.get_env("PORT", "4000")), scheme: "http"], http: [ - ip: {0, 0, 0, 0, 0, 0, 0, 0} + ip: {0, 0, 0, 0, 0, 0, 0, 0}, + port: String.to_integer(System.get_env("PORT", "4000")) ], secret_key_base: secret_key_base end diff --git a/lib/policy_service/release.ex b/lib/policy_service/release.ex new file mode 100644 index 0000000..d91715c --- /dev/null +++ b/lib/policy_service/release.ex @@ -0,0 +1,37 @@ +defmodule PolicyService.Release do + @moduledoc """ + Used for executing DB release tasks when run in production without Mix + installed. + """ + @app :policy_service + + def migrate do + load_app() + init_event_store() + + for repo <- repos() do + {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :up, all: true)) + end + end + + def rollback(repo, version) do + load_app() + {:ok, _, _} = Ecto.Migrator.with_repo(repo, &Ecto.Migrator.run(&1, :down, to: version)) + end + + defp repos do + Application.fetch_env!(@app, :ecto_repos) + end + + defp load_app do + Application.ensure_all_started(:ssl) + Application.ensure_all_started(:postgrex) + Application.ensure_loaded(@app) + end + + def init_event_store do + config = PolicyService.EventStore.config() + + :ok = EventStore.Tasks.Init.exec(config, []) + end +end \ No newline at end of file diff --git a/ops/chart/values.yaml b/ops/chart/values.yaml index 411ae86..d8ddfee 100644 --- a/ops/chart/values.yaml +++ b/ops/chart/values.yaml @@ -3,22 +3,33 @@ controllers: enabled: true type: deployment replicas: 1 - # initContainers: - # migrate: - # image: - # repository: gitea.corredorconect.com/software-engineering/policy-service - # tag: '{{ $.Chart.AppVersion }}' - # command: - # - /bin/sh - # - -c - # - "/opt/policy_service/bin/policy_service eval 'Mix.Tasks.Ecto.Create.run([])' --no-start && /opt/policy_service/bin/policy_service eval 'Mix.Tasks.Ecto.Migrate.run([])' --no-start && /opt/policy_service/bin/policy_service eval 'Mix.Tasks.EventStore.Create.run([])' --no-start && /opt/policy_service/bin/policy_service eval 'Mix.Tasks.EventStore.Init.run([])' --no-start" - # env: - # MIX_ENV: prod - # DATABASE_URL: - # valueFrom: - # secretKeyRef: - # name: policy-service-pg-app - # key: uri + initContainers: + migrate: + image: + repository: gitea.corredorconect.com/software-engineering/policy-service + tag: '{{ $.Chart.AppVersion }}' + command: + - "/bin/policy_service" + args: + - "eval" + - "PolicyService.Release.migrate" + env: + MIX_ENV: prod + SECRET_KEY_BASE: + valueFrom: + secretKeyRef: + name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-secrets' + key: secretKeyBase + RELEASE_COOKIE: + valueFrom: + secretKeyRef: + name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-secrets' + key: cookie + DATABASE_URL: + valueFrom: + secretKeyRef: + name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-pg-app' + key: uri containers: main: image: @@ -57,7 +68,7 @@ controllers: DATABASE_URL: valueFrom: secretKeyRef: - name: policy-service-cluster-pg-app + name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-pg-app' key: uri probes: liveness: @@ -177,3 +188,18 @@ rawResources: owner: policy_service storage: size: 5Gi + + database: + enabled: true + apiVersion: postgresql.cnpg.io/v1 + kind: Database + suffix: database + spec: + spec: + name: policy_service + owner: policy_service + cluster: + name: '{{ include "bjw-s.common.lib.chart.names.fullname" $ }}-cluster-pg' + schemas: + - name: eventstore + owner: policy_service