Skip to content

Commit 436f2b5

Browse files
committed
added build arch in config, code refactors
1 parent f39b9f1 commit 436f2b5

File tree

4 files changed

+59
-47
lines changed

4 files changed

+59
-47
lines changed

config/config.exs

+2-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ config :discovery,
5454
service_account: "discovery-sa",
5555
use_external_ingress_class: true,
5656
ingress_class: "nginx-external",
57-
image_pull_secrets: "dockerhub-auth-discovery"
57+
image_pull_secrets: "dockerhub-auth-discovery",
58+
kubernetes_arch: "amd64"
5859

5960
config :discovery, :api_version,
6061
config_map: "v1",

lib/discovery/resources/deployment.ex

+54-45
Original file line numberDiff line numberDiff line change
@@ -7,58 +7,67 @@ defmodule Discovery.Resources.Deployment do
77

88
import Discovery.K8Config
99

10+
@template_path "#{:code.priv_dir(:discovery)}/templates/deploy.yml"
11+
1012
@spec create_deployment(DeployUtils.app()) :: {:error, any()} | {:ok, map()}
1113
def create_deployment(app) do
12-
with {:ok, map} <-
13-
"#{:code.priv_dir(:discovery)}/templates/deploy.yml"
14-
|> YamlElixir.read_from_file(atoms: false),
15-
map <- put_in(map["apiVersion"], api_version(:deployment)),
16-
map <- put_in(map, ["metadata", "name"], "#{app.app_name}-#{app.uid}"),
17-
map <- put_in(map, ["metadata", "annotations", "app_id"], "#{app.app_name}"),
18-
map <- add_service_account(map),
19-
map <-
20-
put_in(map, ["spec", "selector", "matchLabels", "app"], "#{app.app_name}-#{app.uid}"),
21-
map <-
22-
put_in(map, ["spec", "template", "spec", "imagePullSecrets"], [
23-
%{"name" => Application.get_env(:discovery, :image_pull_secrets)}
24-
]),
25-
map <-
26-
put_in(
27-
map,
28-
["spec", "template", "metadata", "labels", "app"],
29-
"#{app.app_name}-#{app.uid}"
30-
) do
31-
deployment_container = map["spec"]["template"]["spec"]["containers"] |> hd
32-
33-
deployment_container =
34-
put_in(deployment_container["envFrom"], [
35-
%{
36-
"configMapRef" => %{"name" => "#{app.app_name}-#{app.uid}"}
37-
}
38-
])
39-
40-
deployment_container = put_in(deployment_container["image"], "#{app.app_image}")
41-
deployment_container = put_in(deployment_container["name"], "#{app.app_name}")
42-
43-
deployment_container =
44-
put_in(deployment_container["ports"], [
45-
%{
46-
"containerPort" => app.app_container_port,
47-
"name" => "#{app.app_name}-port",
48-
"protocol" => "TCP"
49-
}
50-
])
51-
52-
deployment_container = put_in(deployment_container["resources"], resources())
53-
54-
map = put_in(map["spec"]["template"]["spec"]["containers"], [deployment_container])
55-
56-
{:ok, map}
14+
with {:ok, map} <- read_deployment_template(),
15+
updated_map <- update_deployment_map(map, app),
16+
{:ok, updated_map} <- update_container(updated_map, app),
17+
{:ok, final_map} <- update_labels(updated_map, app) do
18+
{:ok, final_map}
5719
else
5820
{:error, _} -> {:error, "error in creating deployment config"}
5921
end
6022
end
6123

24+
defp read_deployment_template() do
25+
"#{@template_path}"
26+
|> YamlElixir.read_from_file(atoms: false)
27+
end
28+
29+
defp update_deployment_map(map, app) do
30+
map =
31+
map
32+
|> put_in(["apiVersion"], api_version(:deployment))
33+
|> put_in(["metadata", "name"], "#{app.app_name}-#{app.uid}")
34+
|> put_in(["metadata", "annotations", "app_id"], "#{app.app_name}")
35+
|> add_service_account()
36+
|> put_in(["spec", "selector", "matchLabels", "app"], "#{app.app_name}-#{app.uid}")
37+
|> put_in(["spec", "template", "spec", "nodeSelector"], %{
38+
"kubernetes.io/arch" => Application.get_env(:discovery, :kubernetes_arch)
39+
})
40+
|> put_in(["spec", "template", "spec", "imagePullSecrets"], [
41+
%{"name" => Application.get_env(:discovery, :image_pull_secrets)}
42+
])
43+
44+
{:ok, map}
45+
end
46+
47+
defp update_container(map, app) do
48+
[deployment_container | _] = get_in(map, ["spec", "template", "spec", "containers"])
49+
50+
deployment_container =
51+
deployment_container
52+
|> put_in(["envFrom"], [%{"configMapRef" => %{"name" => "#{app.app_name}-#{app.uid}"}}])
53+
|> put_in(["image"], "#{app.app_image}")
54+
|> put_in(["name"], "#{app.app_name}")
55+
|> put_in(["ports"], [
56+
%{
57+
"containerPort" => app.app_container_port,
58+
"name" => "#{app.app_name}-port",
59+
"protocol" => "TCP"
60+
}
61+
])
62+
|> put_in(["resources"], resources())
63+
64+
map |> put_in(["spec", "template", "spec", "containers"], [deployment_container])
65+
end
66+
67+
defp update_labels(map, app) do
68+
map |> put_in(["spec", "template", "metadata", "labels", "app"], "#{app.app_name}-#{app.uid}")
69+
end
70+
6271
@spec write_to_file(map, String.t()) :: :ok
6372
def write_to_file(map, location) do
6473
Utils.to_yml(map, location)

makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
VERSION_DEV = 0.2.3
1+
VERSION_DEV = 0.2.5
22
VERSION_PROD = 0.1.0
33

44
commit:

priv/templates/deploy.yml

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ spec:
2121
labels:
2222
app: APP_NAME-UID
2323
spec:
24+
nodeSelector:
25+
kubernetes.io/arch: amd64
2426
serviceAccountName: discovery-sa
2527
containers:
2628
- name: APP_NAME

0 commit comments

Comments
 (0)