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