initial commit
static docker registry is working
This commit is contained in:
3
build.sh
Executable file
3
build.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
./build_containers.sh
|
||||
./build_registry.py > static_registry/default.nix
|
||||
14
build_containers.sh
Executable file
14
build_containers.sh
Executable file
@@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
set -x
|
||||
for dir in $(ls static_registry)
|
||||
do
|
||||
[ ! -d static_registry/$dir ] && continue
|
||||
pushd .
|
||||
echo $dir
|
||||
cd static_registry/$dir
|
||||
COMMIT_HASH=$(docker build . | tail -n 1 | cut -d ' ' -f3)
|
||||
TAG=$(basename $(pwd)):$COMMIT_HASH
|
||||
docker tag $COMMIT_HASH $TAG
|
||||
docker save $TAG | gzip > $COMMIT_HASH.tar.gz
|
||||
popd
|
||||
done
|
||||
24
build_registry.py
Executable file
24
build_registry.py
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env python3
|
||||
from pathlib import Path
|
||||
|
||||
pathlist = Path("static_registry").glob('**/*.tar.gz')
|
||||
registry = {
|
||||
}
|
||||
|
||||
def build_images(name, images):
|
||||
return '{\n' + "\n".join([ f' {name}_{tag} = {{ image = "${{{image}}}"; tag = "{name}:{tag}"; }};' for tag, image in images.items() ]) + '\n };'
|
||||
|
||||
def build_registry(registry):
|
||||
return '{\n' + "\n".join([ f' {name} = ' + build_images(name, images) for name, images in registry.items() ]) + '\n}'
|
||||
|
||||
def print_registry(registry):
|
||||
print(build_registry(registry))
|
||||
|
||||
for path in pathlist:
|
||||
name = path.parts[-2]
|
||||
image = str(path.resolve())
|
||||
tag = path.parts[-1].split('.', 1)[0]
|
||||
if name not in registry:
|
||||
registry[name] = {}
|
||||
registry[name][tag] = image
|
||||
print_registry(registry)
|
||||
18
module.nix
Normal file
18
module.nix
Normal file
@@ -0,0 +1,18 @@
|
||||
{ config, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.foo.bar;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
options.foo.bar = {
|
||||
enable = mkEnableOption "foobar";
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
# ...
|
||||
};
|
||||
}
|
||||
1
static_registry/nginx/Dockerfile
Normal file
1
static_registry/nginx/Dockerfile
Normal file
@@ -0,0 +1 @@
|
||||
FROM nginx:1.19-alpine
|
||||
37
tests.nix
Normal file
37
tests.nix
Normal file
@@ -0,0 +1,37 @@
|
||||
{ system ? builtins.currentSystem
|
||||
, pkgs ? import <nixpkgs> { inherit system; }
|
||||
}:
|
||||
|
||||
with import <nixpkgs/nixos/lib/testing-python.nix> { inherit system pkgs; };
|
||||
|
||||
let
|
||||
registry = import ./static_registry/default.nix;
|
||||
in
|
||||
{
|
||||
mytest = makeTest {
|
||||
machine = { ... }: {
|
||||
imports = [ ./module.nix ];
|
||||
|
||||
virtualisation.cores = 4;
|
||||
virtualisation.memorySize = 1024;
|
||||
|
||||
foo.bar.enable = true;
|
||||
|
||||
docker-containers.nginx = let
|
||||
image = registry.nginx.nginx_7d0cdcc60a96;
|
||||
in
|
||||
{
|
||||
image = image.tag;
|
||||
imageFile = image.image;
|
||||
ports = ["8181:80"];
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.start()
|
||||
machine.wait_for_unit("docker-nginx.service")
|
||||
machine.wait_for_open_port(8181)
|
||||
machine.wait_until_succeeds("curl http://localhost:8181")
|
||||
'';
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user