Skip to content

Commit 0d90bbc

Browse files
committed
organize to multiple provision
1 parent dc7f72a commit 0d90bbc

20 files changed

+452
-100
lines changed

arion-pkgs.nix

-1
This file was deleted.

arion-compose.nix arion/arion-compose.nix

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
environment = {
99
VAULT_ADDR = "0.0.0.0";
1010
VAULT_DEV_ROOT_TOKEN_ID = "root-token";
11-
VAULT_LOG_LEVEL = "debug";
11+
VAULT_LOG_LEVEL = "trace";
1212
};
1313
};
1414
};
1515
vault-setup = { config, pkgs, ... }: {
1616
service = {
1717
image = "vault:latest";
1818
depends_on = [ "vault" ];
19-
volumes = [ "./scripts/vault-init.sh:/init.sh" ];
19+
volumes = [ "../scripts/vault-init.sh:/init.sh" ];
2020
entrypoint = "/init.sh";
2121
environment = {
2222
VAULT_ADDR = "http://vault:8200";

arion/arion-pkgs.nix

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import ../nixpkgs { system = "x86_64-linux"; }

deploys/consul/default.nix

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ in {
5252
environment.sessionVariables = variables;
5353
environment = { inherit variables; };
5454
deployment = {
55-
tags = [ "consul" "server" "test" ];
55+
tags = [ "consul" "server" datacenter ];
5656
targetUser = "main";
5757
targetPort = 22;
5858
};

devShell.nix

+31
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,36 @@
11
{ pkgs, system, ... }:
22
with pkgs;
33
let
4+
inherit (builtins) readFile;
5+
inherit (writers) writeBash;
46
build = writeScriptBin "build" ''
57
nix build .#$*
68
'';
79
build-qcow = writeScriptBin "build-qcow" ''
810
build qcow
11+
# add image to cache
12+
git add -Nf ./result
913
'';
1014
apply = writeScriptBin "apply" ''
15+
# defaults to local
16+
nix run .#apply
17+
'';
18+
apply-local = writeScriptBin "apply-local" ''
19+
nix run .#apply-local
20+
'';
21+
apply-gcp = writeScriptBin "apply-gcp" ''
1122
nix run .#apply
1223
'';
1324
destroy = writeScriptBin "destroy" ''
25+
# defaults to local
1426
nix run .#destroy
1527
'';
28+
destroy-local = writeScriptBin "destroy-local" ''
29+
nix run .#destroy-local
30+
'';
31+
destroy-gcp = writeScriptBin "destroy-gcp" ''
32+
nix run .#destroy-gcp
33+
'';
1634
deploy = writeScriptBin "deploy" ''
1735
nix run .#deploy
1836
'';
@@ -25,17 +43,29 @@ let
2543
local-k8s = writeScriptBin "local-k8s" ''
2644
nix run .#local-k8s
2745
'';
46+
terranix-apply =
47+
writeBash "terraform-apply" (readFile ./scripts/terranix-apply.sh);
48+
terranix-destroy =
49+
writeBash "terraform-destroy" (readFile ./scripts/terranix-destroy.sh);
2850
in mkShell {
2951
packages = [
3052
# custom
3153
build
3254
build-qcow
55+
minikube
3356
apply
57+
apply-local
58+
apply-gcp
59+
destroy-local
60+
destroy-gcp
3461
destroy
3562
deploy
3663
clean-ssh
3764
local-vault
3865
local-k8s
66+
# terranix
67+
# terranix-apply
68+
# terranix-destroy
3969
# pkgs
4070
consul
4171
consul-template
@@ -50,6 +80,7 @@ in mkShell {
5080
qemu-utils
5181
colmena
5282
vault
83+
bashInteractive
5384
];
5485
shellHook = ''
5586
export NIX_PATH=${pkgs.path}

provision.nix env/gcp/config.nix

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{ config, lib, pkgs, ... }: {
2-
imports = [ ./provision/libvirt ];
3-
provision.libvirt = {
2+
provision.gcp = {
43
networks = {
54
n1 = {
65
mode = "nat";

env/gcp/output.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}

env/local/config.nix

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
{ config, lib, pkgs, ... }: {
2+
provision.libvirt = {
3+
networks = {
4+
n1 = {
5+
mode = "nat";
6+
domain = "n1.local";
7+
addresses = [ "10.0.62.0/24" ];
8+
dhcp.enable = true;
9+
dns.enable = true;
10+
};
11+
};
12+
volumes = {
13+
nixos = { source = ../../result/nixos.qcow2; };
14+
c1v1 = { source = "nixos"; };
15+
c1v2 = { source = "nixos"; };
16+
c1v3 = { source = "nixos"; };
17+
c2v1 = { source = "nixos"; };
18+
c2v2 = { source = "nixos"; };
19+
c2v3 = { source = "nixos"; };
20+
};
21+
replicas = {
22+
c1r1 = {
23+
interfaces = { n1.addresses = [ "10.0.62.11" ]; };
24+
disks = [ "c1v1" ];
25+
};
26+
c1r2 = {
27+
interfaces = { n1.addresses = [ "10.0.62.12" ]; };
28+
disks = [ "c1v2" ];
29+
};
30+
c1r3 = {
31+
interfaces = { n1.addresses = [ "10.0.62.13" ]; };
32+
disks = [ "c1v3" ];
33+
};
34+
c2r1 = {
35+
interfaces = { n1.addresses = [ "10.0.62.14" ]; };
36+
disks = [ "c2v1" ];
37+
};
38+
c2r2 = {
39+
interfaces = { n1.addresses = [ "10.0.62.15" ]; };
40+
disks = [ "c2v2" ];
41+
};
42+
c2r3 = {
43+
interfaces = { n1.addresses = [ "10.0.62.16" ]; };
44+
disks = [ "c2v3" ];
45+
};
46+
};
47+
};
48+
}

env/local/output.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}

flake.nix

+63-36
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,17 @@
2222
overlays = [ self.overlays.default ];
2323
};
2424
system = "x86_64-linux";
25-
terraform =
26-
pkgs.terraform.withPlugins (p: [ p.null p.external p.libvirt ]);
27-
terraformConfiguration = terranix.lib.terranixConfiguration {
28-
inherit system pkgs;
29-
modules = [ ./provision.nix ];
30-
};
25+
terraform = pkgs.terraform.withPlugins
26+
(p: [ p.null p.external p.libvirt p.google p.azurerm ]);
27+
28+
genConfig = env:
29+
terranix.lib.terranixConfiguration {
30+
inherit system pkgs;
31+
modules = [ ./provision ./env/${env}/config.nix ];
32+
};
33+
34+
localConfig = genConfig "local";
35+
gcpConfig = genConfig "gcp";
3136
in {
3237
# overlay
3338
overlays = import ./overlays;
@@ -47,24 +52,33 @@
4752

4853
# Apps
4954
apps.${system} = {
55+
5056
# nix run ".#apply"
51-
apply = {
57+
# defaults to local
58+
apply = self.apps.${system}.apply-local;
59+
60+
# nix run ".#apply-local"
61+
apply-local = {
5262
type = "app";
53-
program = toString (pkgs.writers.writeBash "apply" ''
54-
set -euo pipefail
55-
if [[ -e config.tf.json ]]; then rm -f config.tf.json; fi
56-
cp ${terraformConfiguration} config.tf.json \
57-
&& ${terraform}/bin/terraform init \
58-
&& ${terraform}/bin/terraform apply \
59-
&& ${terraform}/bin/terraform output -json > output.json
63+
program = toString (pkgs.writers.writeBash "apply-local" ''
64+
scripts/terranix-apply.sh "local" ${localConfig}
65+
'');
66+
};
67+
68+
# nix run ".#apply-gcp"
69+
apply-gcp = {
70+
type = "app";
71+
program = toString (pkgs.writers.writeBash "apply-gcp" ''
72+
scripts/terranix-apply.sh "gcp" ${gcpConfig}
6073
'');
6174
};
75+
6276
# nix run ".#local-vault"
6377
local-vault = {
6478
type = "app";
6579
program = toString (pkgs.writers.writeBash "local-vault" ''
6680
set -euo pipefail
67-
81+
cd arion/
6882
arion up
6983
'');
7084
};
@@ -74,29 +88,37 @@
7488
type = "app";
7589
program = toString (pkgs.writers.writeBash "local-k8s" ''
7690
set -euo pipefail
77-
scripts/local-k8s.sh
78-
scripts/configre.sh
91+
scripts/k8s/local-k8s.sh
92+
scripts/k8s/configre.sh
7993
'');
8094
};
8195

8296
# nix run ".#destroy"
83-
destroy = {
97+
# defaults to local
98+
destroy = self.apps.${system}.destroy-local;
99+
100+
# nix run ".#destroy-local"
101+
destroy-local = {
84102
type = "app";
85-
program = toString (pkgs.writers.writeBash "destroy" ''
86-
set -euo pipefail
87-
if [[ -e config.tf.json ]]; then rm -f config.tf.json; fi
88-
cp ${terraformConfiguration} config.tf.json \
89-
&& ${terraform}/bin/terraform init \
90-
&& ${terraform}/bin/terraform destroy \
91-
&& rm -f output.json
103+
program = toString (pkgs.writers.writeBash "destroy-local" ''
104+
scripts/terranix-destroy.sh "local" ${localConfig}
105+
'');
106+
};
107+
108+
# nix run ".#destroy-gcp
109+
destroy-gcp = {
110+
type = "app";
111+
program = toString (pkgs.writers.writeBash "destroy-gcp" ''
112+
scripts/terranix-destroy.sh "gcp" ${gcpConfig}
92113
'');
93114
};
115+
94116
# nix run ".#clean-ssh"
95117
clean-ssh = {
96118
type = "app";
97119
program = toString (pkgs.writers.writeBash "clean-ssh" ''
98120
set -euo pipefail
99-
for ip in $(${pkgs.jq}/bin/jq -r '.[].value' output.json); do
121+
for ip in $(${pkgs.jq}/bin/jq -r '.[].value.ip.pub' ./env/*/output.json); do
100122
ssh-keygen -R "$ip"
101123
done
102124
'');
@@ -118,19 +140,24 @@
118140
colmena = let
119141
# read attributes from ouput.json gerated by `nix run .#apply`
120142
inherit (builtins) fromJSON readFile foldl' attrNames;
121-
output = fromJSON (readFile ./output.json);
122143
keys = import ./keys; # datacenter: {...}
144+
genOutput = env:
145+
let output = fromJSON (readFile ./env/${env}/output.json);
146+
in foldl' (a: b: a // b) { } (map (name:
147+
let host = output.${name}.value;
148+
in {
149+
# generate hosts by name prefix
150+
${name} = {
151+
deployment = {
152+
tags = [ env ];
153+
targetHost = host.ip.pub;
154+
keys = import ./keys;
155+
};
156+
};
157+
}) (attrNames output));
123158
in {
124159
meta = { nixpkgs = pkgs; };
125160
defaults = import ./deploys/consul;
126-
} // foldl' (a: b: a // b) { } (map (name: {
127-
# generate hosts by name prefix
128-
${name} = {
129-
deployment = {
130-
targetHost = output.${name}.value;
131-
keys = import ./keys;
132-
};
133-
};
134-
}) (attrNames output));
161+
} // (genOutput "local") // (genOutput "gcp");
135162
};
136163
}

generators/minimal-libvirt.nix

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{ modulesPath, ... }:
22
let
3-
ssh-keys = import ../ssh-keys.nix;
3+
ssh-keys = import ./ssh-keys.nix;
44
username = "main";
55
password = "alface";
66
in {
File renamed without changes.

provision/default.nix

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{ config, lib, pkgs, ... }:
2+
3+
{
4+
imports = [ ./libvirt ];
5+
}

0 commit comments

Comments
 (0)