blob: a76efdd06e1f6296028998afb2d99147e3bd5752 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
{ channel ? "stable", pkgs ? import <nixpkgs> {} }:
let
helloService = pkgs.callPackage ./service-hello {};
worldService = pkgs.callPackage ./service-world {};
joinerService = pkgs.callPackage ./service-joiner {};
kubenix = pkgs.callPackage ./nix/kubenix.nix {};
buildConfig = t: kubenix.buildResources { configuration = import ./configuration.nix { type = t; }; };
helloImage = pkgs.dockerTools.buildLayeredImage {
name = "hello-service";
tag = "latest";
config.Cmd = [ "${helloService}/bin/service-hello" ];
};
worldImage = pkgs.dockerTools.buildLayeredImage {
name = "world-service";
tag = "latest";
config.Cmd = [ "${worldService}/bin/service-world" ];
};
joinerImage = pkgs.dockerTools.buildLayeredImage {
name = "joiner-service";
tag = "latest";
config.Cmd = [ "${joinerService}/bin/service-joiner" ];
};
in rec {
inherit helloImage worldImage joinerImage;
test-deployment = pkgs.callPackage ./nix/test-deployment.nix { };
deploy-to-kind = pkgs.callPackage ./nix/deploy-to-kind.nix {
inherit helloImage worldImage joinerImage;
config = buildConfig "dev";
};
config = buildConfig "dev";
redeploy = pkgs.writeScriptBin "redeploy" ''
cat ${config} | ${pkgs.kubectl}/bin/kubectl apply -f -
'';
deploy-and-test = pkgs.mkShell {
buildInputs = [ pkgs.kind deploy-to-kind test-deployment ];
shellHook = ''
deploy-to-kind
export KUBECONFIG=$(kind get kubeconfig-path)
wait-for-deployment hello
test-deployment
kind delete cluster
'';
};
postgresDb = "helloworlddb";
postgresUser = "helloworlduser";
postgresPassword = "asdfghjkl";
postgresContainerName = "helloworld-dev-db";
run-dev-postgres-container = pkgs.writeScriptBin "run-dev-postgres-container" ''
${pkgs.docker}/bin/docker run \
--name ${postgresContainerName} \
-e POSTGRES_PASSWORD="${postgresPassword}" \
-p 5432:5432 \
-m 512m \
-d \
--rm \
postgres
sleep 2 # because postgres needs to spin up
docker exec -it ${postgresContainerName} psql -U postgres -c "CREATE USER ${postgresUser} PASSWORD '${postgresPassword}' SUPERUSER CREATEDB INHERIT LOGIN"
docker exec -it ${postgresContainerName} createdb -U postgres ${postgresDb}
'';
destroy-dev-postgres-container = pkgs.writeScriptBin "destroy-dev-postgres-container" ''
docker stop ${postgresContainerName}
'';
shell = let
moz_overlay = import (
builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz
);
pkgs = import <nixpkgs> { overlays = [ moz_overlay ]; };
rustchannel = pkgs.rustChannelOf { inherit channel; };
in
pkgs.mkShell {
buildInputs = with pkgs; [
kind
deploy-to-kind
test-deployment
redeploy
run-dev-postgres-container
destroy-dev-postgres-container
curl
docker
kubectl
diesel-cli
rustchannel.rust-std
rustchannel.rust
rustchannel.rustc
rustchannel.cargo
cmake
curl
gcc
openssl
pkgconfig
postgresql
];
POSTGRES_PASSWORD = "${postgresPassword}";
DATABASE_URL="postgres://${postgresUser}:${postgresPassword}@localhost/${postgresDb}";
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang}/lib";
};
}
|