flake: format

This commit is contained in:
Bryton Hall 2023-06-03 03:11:07 -04:00
parent eb3ec20f46
commit baa1a6c949
16 changed files with 86 additions and 72 deletions

View file

@ -1,8 +1,8 @@
{ kubenix ? import ../../../.. }: {kubenix ? import ../../../..}:
kubenix.evalModules.${builtins.currentSystem} { kubenix.evalModules.${builtins.currentSystem} {
module = { kubenix, ... }: { module = {kubenix, ...}: {
# instead of defining everything inline, let's import it # instead of defining everything inline, let's import it
imports = [ ./module.nix ]; imports = [./module.nix];
# annotate the generated resources with a project name # annotate the generated resources with a project name
kubenix.project = "example"; kubenix.project = "example";

View file

@ -1,5 +1,5 @@
{ kubenix, ... }: { {kubenix, ...}: {
imports = [ kubenix.modules.k8s ]; imports = [kubenix.modules.k8s];
kubernetes.resources = { kubernetes.resources = {
deployments.nginx.spec = { deployments.nginx.spec = {
@ -51,10 +51,12 @@
services.nginx.spec = { services.nginx.spec = {
selector.app = "nginx"; selector.app = "nginx";
ports = [{ ports = [
name = "http"; {
port = 80; name = "http";
}]; port = 80;
}
];
}; };
}; };
} }

View file

@ -1,7 +1,7 @@
{ kubenix ? import ../../../.. }: {kubenix ? import ../../../..}:
kubenix.evalModules.${builtins.currentSystem} { kubenix.evalModules.${builtins.currentSystem} {
module = { kubenix, ... }: { module = {kubenix, ...}: {
imports = [ kubenix.modules.helm ]; imports = [kubenix.modules.helm];
kubernetes.helm.releases.example = { kubernetes.helm.releases.example = {
chart = kubenix.lib.helm.fetch { chart = kubenix.lib.helm.fetch {
repo = "https://charts.bitnami.com/bitnami"; repo = "https://charts.bitnami.com/bitnami";

View file

@ -1,10 +1,15 @@
{ kubenix ? import ../../../.. }: {kubenix ? import ../../../..}:
kubenix.evalModules.${builtins.currentSystem} { kubenix.evalModules.${builtins.currentSystem} {
module = { kubenix, config, pkgs, ... }: { module = {
imports = with kubenix.modules; [ k8s docker ]; kubenix,
config,
pkgs,
...
}: {
imports = with kubenix.modules; [k8s docker];
docker = { docker = {
registry.url = "docker.somewhere.io"; registry.url = "docker.somewhere.io";
images.example.image = pkgs.callPackage ./image.nix { }; images.example.image = pkgs.callPackage ./image.nix {};
}; };
kubernetes.resources.pods.example.spec.containers = { kubernetes.resources.pods.example.spec.containers = {
custom.image = config.docker.images.example.path; custom.image = config.docker.images.example.path;

View file

@ -1,7 +1,10 @@
{ dockerTools, nginx }: {
dockerTools,
nginx,
}:
dockerTools.buildLayeredImage { dockerTools.buildLayeredImage {
name = "nginx"; name = "nginx";
contents = [ nginx ]; contents = [nginx];
extraCommands = '' extraCommands = ''
mkdir -p etc mkdir -p etc
chmod u+w etc chmod u+w etc
@ -9,9 +12,9 @@ dockerTools.buildLayeredImage {
echo "nginx:x:1000:nginx" > etc/group echo "nginx:x:1000:nginx" > etc/group
''; '';
config = { config = {
Cmd = [ "nginx" "-c" "/etc/nginx/nginx.conf" ]; Cmd = ["nginx" "-c" "/etc/nginx/nginx.conf"];
ExposedPorts = { ExposedPorts = {
"80/tcp" = { }; "80/tcp" = {};
}; };
}; };
} }

View file

@ -1,7 +1,7 @@
{ kubenix ? import ../../../.. }: {kubenix ? import ../../../..}:
kubenix.evalModules.${builtins.currentSystem} { kubenix.evalModules.${builtins.currentSystem} {
module = { kubenix, ... }: { module = {kubenix, ...}: {
imports = [ ./module.nix ]; imports = [./module.nix];
kubenix.project = "multi-namespace-example"; kubenix.project = "multi-namespace-example";
kubernetes.version = "1.24"; kubernetes.version = "1.24";

View file

@ -54,9 +54,9 @@
kubernetes = lib.mkMerge [ kubernetes = lib.mkMerge [
# Use instance name as namespace # Use instance name as namespace
{ namespace = name; } {namespace = name;}
# Create namespace object # Create namespace object
{ resources.namespaces.${name} = {}; } {resources.namespaces.${name} = {};}
# All resources defined here will use the above namespace # All resources defined here will use the above namespace
args.kubernetes args.kubernetes
]; ];

View file

@ -1,11 +1,11 @@
# let's creata a function whose only input is the kubenix package # let's creata a function whose only input is the kubenix package
{ kubenix ? import ../../../.. }: {kubenix ? import ../../../..}:
# evalModules is our main entrypoint # evalModules is our main entrypoint
kubenix.evalModules.${builtins.currentSystem} { kubenix.evalModules.${builtins.currentSystem} {
# to it, we pass a module that accepts a (different) kubenix object # to it, we pass a module that accepts a (different) kubenix object
module = { kubenix, ... }: { module = {kubenix, ...}: {
# in order to define options, we need to import their definitions # in order to define options, we need to import their definitions
imports = [ kubenix.modules.k8s ]; imports = [kubenix.modules.k8s];
# now we have full access to define Kubernetes resources # now we have full access to define Kubernetes resources
kubernetes.resources.pods = { kubernetes.resources.pods = {
# "example" is the name of our pod # "example" is the name of our pod

View file

@ -1,7 +1,7 @@
{ kubenix ? import ../../../.. }: {kubenix ? import ../../../..}:
kubenix.evalModules.${builtins.currentSystem} { kubenix.evalModules.${builtins.currentSystem} {
module = { kubenix, ... }: { module = {kubenix, ...}: {
imports = [ kubenix.modules.k8s ]; imports = [kubenix.modules.k8s];
kubernetes.resources.secrets.example.stringData = { kubernetes.resources.secrets.example.stringData = {
password = "ref+file:///path/to/secret"; password = "ref+file:///path/to/secret";
}; };

View file

@ -1,15 +1,17 @@
{ kubenix ? import ../../../.. }: {kubenix ? import ../../../..}:
kubenix.evalModules.x86_64-linux { kubenix.evalModules.x86_64-linux {
module = { kubenix, ... }: { module = {kubenix, ...}: {
imports = [ kubenix.modules.testing ]; imports = [kubenix.modules.testing];
testing = { testing = {
tests = [ ./test.nix ]; tests = [./test.nix];
common = [{ common = [
features = [ "k8s" ]; {
options = { features = ["k8s"];
kubernetes.version = "1.24"; options = {
}; kubernetes.version = "1.24";
}]; };
}
];
}; };
}; };
} }

View file

@ -1,5 +1,9 @@
{ kubenix, test, ... }: { {
imports = [ kubenix.modules.test ]; kubenix,
test,
...
}: {
imports = [kubenix.modules.test];
test = { test = {
name = "example"; name = "example";

View file

@ -13,19 +13,13 @@
}; };
}; };
outputs = { outputs = inputs @ {self, ...}:
self,
nixpkgs,
...
} @ inputs:
(inputs.flake-utils.lib.eachDefaultSystem ( (inputs.flake-utils.lib.eachDefaultSystem (
system: let system: let
pkgs = import inputs.nixpkgs { pkgs = import inputs.nixpkgs {
overlays = [
self.overlays.default
];
config.allowUnsupportedSystem = true;
inherit system; inherit system;
overlays = [self.overlays.default];
config.allowUnsupportedSystem = true;
}; };
inherit (pkgs) lib; inherit (pkgs) lib;

View file

@ -170,21 +170,25 @@ with lib; let
else else
# make it an attribute set of submodules if only x-kubernetes-patch-merge-key is present, or # make it an attribute set of submodules if only x-kubernetes-patch-merge-key is present, or
# x-kubernetes-patch-merge-key == x-kubernetes-list-map-keys. # x-kubernetes-patch-merge-key == x-kubernetes-list-map-keys.
if hasAttr "properties" swagger.definitions.${refDefinition property.items} && if
hasAttr "name" swagger.definitions.${refDefinition property.items}.properties hasAttr "properties" swagger.definitions.${refDefinition property.items}
&& hasAttr "name" swagger.definitions.${refDefinition property.items}.properties
then let then let
mergeKey = "name"; mergeKey = "name";
in { in {
type = requiredOrNot (coerceAttrsOfSubmodulesToListByKey (refDefinition property.items) mergeKey (if hasAttr "x-kubernetes-list-map-keys" property then property."x-kubernetes-list-map-keys" else [])); type = requiredOrNot (coerceAttrsOfSubmodulesToListByKey (refDefinition property.items) mergeKey (
if hasAttr "x-kubernetes-list-map-keys" property
then property."x-kubernetes-list-map-keys"
else []
));
apply = attrsToList; apply = attrsToList;
} }
else {
else { type =
type = if (refDefinition property.items) == _name
if (refDefinition property.items) == _name then types.unspecified # do not allow self-referential values
then types.unspecified # do not allow self-referential values else requiredOrNot (types.listOf (submoduleOf definitions (refDefinition property.items)));
else requiredOrNot (types.listOf (submoduleOf definitions (refDefinition property.items))); }
}
# in other case it only references a simple type # in other case it only references a simple type
else { else {
type = requiredOrNot (types.listOf (mapType property.items)); type = requiredOrNot (types.listOf (mapType property.items));

View file

@ -19,7 +19,7 @@ with lib;
# kubernetes version to template chart for # kubernetes version to template chart for
kubeVersion ? null, kubeVersion ? null,
# whether to include CRD # whether to include CRD
includeCRDs ? false includeCRDs ? false,
}: let }: let
valuesJsonFile = builtins.toFile "${name}-values.json" (builtins.toJSON values); valuesJsonFile = builtins.toFile "${name}-values.json" (builtins.toJSON values);
in in
@ -31,7 +31,7 @@ with lib;
${optionalString (kubeVersion != null) "--kube-version ${kubeVersion}"} \ ${optionalString (kubeVersion != null) "--kube-version ${kubeVersion}"} \
${optionalString (namespace != null) "--namespace ${namespace}"} \ ${optionalString (namespace != null) "--namespace ${namespace}"} \
${optionalString (values != {}) "-f ${valuesJsonFile}"} \ ${optionalString (values != {}) "-f ${valuesJsonFile}"} \
${optionalString (includeCRDs) "--include-crds"} \ ${optionalString includeCRDs "--include-crds"} \
${chart} >resources.yaml ${chart} >resources.yaml
# split multy yaml file into multiple files # split multy yaml file into multiple files

View file

@ -82,13 +82,13 @@ in {
}; };
includeCRDs = mkOption { includeCRDs = mkOption {
description = '' description = ''
Whether to include CRDs. Whether to include CRDs.
Warning: Always including CRDs here is dangerous and can break CRs in your cluster as CRDs may be updated unintentionally. Warning: Always including CRDs here is dangerous and can break CRs in your cluster as CRDs may be updated unintentionally.
An interactive `helm install` NEVER updates CRDs, only installs them when they are not existing. An interactive `helm install` NEVER updates CRDs, only installs them when they are not existing.
See https://github.com/helm/community/blob/aa8e13054d91ee69857b13149a9652be09133a61/hips/hip-0011.md See https://github.com/helm/community/blob/aa8e13054d91ee69857b13149a9652be09133a61/hips/hip-0011.md
Only set this to true if you know what you are doing and are manually checking the included CRDs for breaking changes whenever updating the Helm chart. Only set this to true if you know what you are doing and are manually checking the included CRDs for breaking changes whenever updating the Helm chart.
''; '';
type = types.bool; type = types.bool;

View file

@ -335,12 +335,12 @@ in {
customTypes = mkOption { customTypes = mkOption {
description = "Custom resource types to make API for"; description = "Custom resource types to make API for";
example = { example = {
helmchartconfig = { helmchartconfig = {
attrName = "helmchartconfig"; attrName = "helmchartconfig";
kind = "HelmChartConfig"; kind = "HelmChartConfig";
version = "v1"; version = "v1";
group = "helm.cattle.io"; group = "helm.cattle.io";
}; };
}; };
type = type =
coerceListOfSubmodulesToAttrs coerceListOfSubmodulesToAttrs