style: fmt

This commit is contained in:
David Arnold 2021-05-28 17:58:04 -05:00
parent e575c23570
commit 348d922b18
No known key found for this signature in database
GPG key ID: 6D6A936E69C59D08
6 changed files with 148 additions and 222 deletions

View file

@ -1,6 +1,7 @@
{ system ? builtins.currentSystem }:
let
in (
in
(
(import ./compat.nix).flake-compat {
src = ./.;
inherit system;

View file

@ -1,6 +1,7 @@
{ system ? builtins.currentSystem }:
let
in (
in
(
(import ./compat.nix).flake-compat {
src = ./.;
inherit system;

View file

@ -5,11 +5,13 @@ with lib;
let
getDefaults = resource: group: version: kind:
catAttrs "default" (filter (default:
catAttrs "default" (filter
(default:
(default.resource == null || default.resource == resource)
&& (default.group == null || default.group == group)
&& (default.version == null || default.version == version)
&& (default.kind == null || default.kind == kind)) config.defaults);
&& (default.kind == null || default.kind == kind))
config.defaults);
types = lib.types // rec {
str = mkOptionType {
@ -34,7 +36,8 @@ let
else
let coerced = coerceFunc val; in assert finalType.check coerced; coerced;
in finalType.merge loc (map (def: def // { value = coerceVal def.value; }) defs);
in
finalType.merge loc (map (def: def // { value = coerceVal def.value; }) defs);
getSubOptions = finalType.getSubOptions;
getSubModules = finalType.getSubModules;
substSubModules = m: coercedTo coercedType coerceFunc (finalType.substSubModules m);
@ -46,11 +49,15 @@ let
mkOptionDefault = mkOverride 1001;
mergeValuesByKey = mergeKey: values:
listToAttrs (map (value:
nameValuePair (if isAttrs value.${mergeKey} then
listToAttrs (map
(value:
nameValuePair
(if isAttrs value.${mergeKey} then
toString value.${mergeKey}.content
else
(toString value.${mergeKey})) value) values);
(toString value.${mergeKey}))
value)
values);
submoduleOf = ref:
types.submodule ({ name, ... }: {
@ -63,7 +70,8 @@ let
let
convertName = name:
if definitions."${ref}".options.${mergeKey}.type == types.int then toInt name else name;
in {
in
{
options = definitions."${ref}".options;
config = definitions."${ref}".config // {
${mergeKey} = mkOverride 1002 (convertName name);
@ -72,7 +80,8 @@ let
submoduleForDefinition = ref: resource: kind: group: version:
let apiVersion = if group == "core" then version else "${group}/${version}";
in types.submodule ({ name, ... }: {
in
types.submodule ({ name, ... }: {
imports = getDefaults resource group version kind;
options = definitions."${ref}".options;
config = mkMerge [
@ -18038,9 +18047,7 @@ let
config = { "labelSelectorPath" = mkOverride 1002 null; };
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.CustomResourceSubresourceStatus" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.CustomResourceSubresourceStatus" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.CustomResourceSubresources" = {
options = {
@ -18097,9 +18104,7 @@ let
};
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSON" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSON" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps" = {
options = {
@ -18378,15 +18383,9 @@ let
};
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrArray" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrBool" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrStringArray" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrArray" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrBool" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrStringArray" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.ServiceReference" = {
options = {
@ -18875,9 +18874,7 @@ let
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceStatus" =
{
};
{ };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources" = {
options = {
@ -18934,9 +18931,7 @@ let
};
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps" = {
options = {
@ -19215,15 +19210,9 @@ let
};
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ServiceReference" = {
options = {
@ -19292,9 +19281,7 @@ let
};
};
"io.k8s.apimachinery.pkg.api.resource.Quantity" = {
};
"io.k8s.apimachinery.pkg.api.resource.Quantity" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" = {
options = {
@ -19536,9 +19523,7 @@ let
};
};
"io.k8s.apimachinery.pkg.apis.meta.v1.FieldsV1" = {
};
"io.k8s.apimachinery.pkg.apis.meta.v1.FieldsV1" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery" = {
options = {
@ -19680,9 +19665,7 @@ let
};
};
"io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime" = {
};
"io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" = {
options = {
@ -19846,9 +19829,7 @@ let
};
};
"io.k8s.apimachinery.pkg.apis.meta.v1.Patch" = {
};
"io.k8s.apimachinery.pkg.apis.meta.v1.Patch" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions" = {
options = {
@ -20018,9 +19999,7 @@ let
};
};
"io.k8s.apimachinery.pkg.apis.meta.v1.Time" = {
};
"io.k8s.apimachinery.pkg.apis.meta.v1.Time" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" = {
options = {
@ -20042,12 +20021,8 @@ let
config = { };
};
"io.k8s.apimachinery.pkg.runtime.RawExtension" = {
};
"io.k8s.apimachinery.pkg.util.intstr.IntOrString" = {
};
"io.k8s.apimachinery.pkg.runtime.RawExtension" = { };
"io.k8s.apimachinery.pkg.util.intstr.IntOrString" = { };
"io.k8s.apimachinery.pkg.version.Info" = {
options = {
@ -20470,7 +20445,8 @@ let
};
};
in {
in
{
# all resource versions
options = {
resources = {

View file

@ -5,11 +5,13 @@ with lib;
let
getDefaults = resource: group: version: kind:
catAttrs "default" (filter (default:
catAttrs "default" (filter
(default:
(default.resource == null || default.resource == resource)
&& (default.group == null || default.group == group)
&& (default.version == null || default.version == version)
&& (default.kind == null || default.kind == kind)) config.defaults);
&& (default.kind == null || default.kind == kind))
config.defaults);
types = lib.types // rec {
str = mkOptionType {
@ -34,7 +36,8 @@ let
else
let coerced = coerceFunc val; in assert finalType.check coerced; coerced;
in finalType.merge loc (map (def: def // { value = coerceVal def.value; }) defs);
in
finalType.merge loc (map (def: def // { value = coerceVal def.value; }) defs);
getSubOptions = finalType.getSubOptions;
getSubModules = finalType.getSubModules;
substSubModules = m: coercedTo coercedType coerceFunc (finalType.substSubModules m);
@ -46,11 +49,15 @@ let
mkOptionDefault = mkOverride 1001;
mergeValuesByKey = mergeKey: values:
listToAttrs (map (value:
nameValuePair (if isAttrs value.${mergeKey} then
listToAttrs (map
(value:
nameValuePair
(if isAttrs value.${mergeKey} then
toString value.${mergeKey}.content
else
(toString value.${mergeKey})) value) values);
(toString value.${mergeKey}))
value)
values);
submoduleOf = ref:
types.submodule ({ name, ... }: {
@ -63,7 +70,8 @@ let
let
convertName = name:
if definitions."${ref}".options.${mergeKey}.type == types.int then toInt name else name;
in {
in
{
options = definitions."${ref}".options;
config = definitions."${ref}".config // {
${mergeKey} = mkOverride 1002 (convertName name);
@ -72,7 +80,8 @@ let
submoduleForDefinition = ref: resource: kind: group: version:
let apiVersion = if group == "core" then version else "${group}/${version}";
in types.submodule ({ name, ... }: {
in
types.submodule ({ name, ... }: {
imports = getDefaults resource group version kind;
options = definitions."${ref}".options;
config = mkMerge [
@ -1145,9 +1154,7 @@ let
};
};
"io.k8s.api.apiserverinternal.v1alpha1.StorageVersionSpec" = {
};
"io.k8s.api.apiserverinternal.v1alpha1.StorageVersionSpec" = { };
"io.k8s.api.apiserverinternal.v1alpha1.StorageVersionStatus" = {
options = {
@ -19062,9 +19069,7 @@ let
config = { "labelSelectorPath" = mkOverride 1002 null; };
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.CustomResourceSubresourceStatus" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.CustomResourceSubresourceStatus" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.CustomResourceSubresources" = {
options = {
@ -19121,9 +19126,7 @@ let
};
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSON" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSON" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps" = {
options = {
@ -19402,15 +19405,9 @@ let
};
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrArray" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrBool" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrStringArray" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrArray" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrBool" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrStringArray" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.ServiceReference" = {
options = {
@ -19899,9 +19896,7 @@ let
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceStatus" =
{
};
{ };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources" = {
options = {
@ -19958,9 +19953,7 @@ let
};
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps" = {
options = {
@ -20239,15 +20232,9 @@ let
};
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ServiceReference" = {
options = {
@ -20316,9 +20303,7 @@ let
};
};
"io.k8s.apimachinery.pkg.api.resource.Quantity" = {
};
"io.k8s.apimachinery.pkg.api.resource.Quantity" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" = {
options = {
@ -20596,9 +20581,7 @@ let
};
};
"io.k8s.apimachinery.pkg.apis.meta.v1.FieldsV1" = {
};
"io.k8s.apimachinery.pkg.apis.meta.v1.FieldsV1" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery" = {
options = {
@ -20740,9 +20723,7 @@ let
};
};
"io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime" = {
};
"io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" = {
options = {
@ -20906,9 +20887,7 @@ let
};
};
"io.k8s.apimachinery.pkg.apis.meta.v1.Patch" = {
};
"io.k8s.apimachinery.pkg.apis.meta.v1.Patch" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions" = {
options = {
@ -21078,9 +21057,7 @@ let
};
};
"io.k8s.apimachinery.pkg.apis.meta.v1.Time" = {
};
"io.k8s.apimachinery.pkg.apis.meta.v1.Time" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" = {
options = {
@ -21102,12 +21079,8 @@ let
config = { };
};
"io.k8s.apimachinery.pkg.runtime.RawExtension" = {
};
"io.k8s.apimachinery.pkg.util.intstr.IntOrString" = {
};
"io.k8s.apimachinery.pkg.runtime.RawExtension" = { };
"io.k8s.apimachinery.pkg.util.intstr.IntOrString" = { };
"io.k8s.apimachinery.pkg.version.Info" = {
options = {
@ -21530,7 +21503,8 @@ let
};
};
in {
in
{
# all resource versions
options = {
resources = {

View file

@ -5,11 +5,13 @@ with lib;
let
getDefaults = resource: group: version: kind:
catAttrs "default" (filter (default:
catAttrs "default" (filter
(default:
(default.resource == null || default.resource == resource)
&& (default.group == null || default.group == group)
&& (default.version == null || default.version == version)
&& (default.kind == null || default.kind == kind)) config.defaults);
&& (default.kind == null || default.kind == kind))
config.defaults);
types = lib.types // rec {
str = mkOptionType {
@ -34,7 +36,8 @@ let
else
let coerced = coerceFunc val; in assert finalType.check coerced; coerced;
in finalType.merge loc (map (def: def // { value = coerceVal def.value; }) defs);
in
finalType.merge loc (map (def: def // { value = coerceVal def.value; }) defs);
getSubOptions = finalType.getSubOptions;
getSubModules = finalType.getSubModules;
substSubModules = m: coercedTo coercedType coerceFunc (finalType.substSubModules m);
@ -46,11 +49,15 @@ let
mkOptionDefault = mkOverride 1001;
mergeValuesByKey = mergeKey: values:
listToAttrs (map (value:
nameValuePair (if isAttrs value.${mergeKey} then
listToAttrs (map
(value:
nameValuePair
(if isAttrs value.${mergeKey} then
toString value.${mergeKey}.content
else
(toString value.${mergeKey})) value) values);
(toString value.${mergeKey}))
value)
values);
submoduleOf = ref:
types.submodule ({ name, ... }: {
@ -63,7 +70,8 @@ let
let
convertName = name:
if definitions."${ref}".options.${mergeKey}.type == types.int then toInt name else name;
in {
in
{
options = definitions."${ref}".options;
config = definitions."${ref}".config // {
${mergeKey} = mkOverride 1002 (convertName name);
@ -72,7 +80,8 @@ let
submoduleForDefinition = ref: resource: kind: group: version:
let apiVersion = if group == "core" then version else "${group}/${version}";
in types.submodule ({ name, ... }: {
in
types.submodule ({ name, ... }: {
imports = getDefaults resource group version kind;
options = definitions."${ref}".options;
config = mkMerge [
@ -1145,9 +1154,7 @@ let
};
};
"io.k8s.api.apiserverinternal.v1alpha1.StorageVersionSpec" = {
};
"io.k8s.api.apiserverinternal.v1alpha1.StorageVersionSpec" = { };
"io.k8s.api.apiserverinternal.v1alpha1.StorageVersionStatus" = {
options = {
@ -19285,9 +19292,7 @@ let
config = { "labelSelectorPath" = mkOverride 1002 null; };
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.CustomResourceSubresourceStatus" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.CustomResourceSubresourceStatus" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.CustomResourceSubresources" = {
options = {
@ -19344,9 +19349,7 @@ let
};
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSON" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSON" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaProps" = {
options = {
@ -19625,15 +19628,9 @@ let
};
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrArray" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrBool" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrStringArray" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrArray" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrBool" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.JSONSchemaPropsOrStringArray" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1.ServiceReference" = {
options = {
@ -20122,9 +20119,7 @@ let
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresourceStatus" =
{
};
{ };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.CustomResourceSubresources" = {
options = {
@ -20181,9 +20176,7 @@ let
};
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSON" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaProps" = {
options = {
@ -20462,15 +20455,9 @@ let
};
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray" = {
};
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrArray" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrBool" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.JSONSchemaPropsOrStringArray" = { };
"io.k8s.apiextensions-apiserver.pkg.apis.apiextensions.v1beta1.ServiceReference" = {
options = {
@ -20539,9 +20526,7 @@ let
};
};
"io.k8s.apimachinery.pkg.api.resource.Quantity" = {
};
"io.k8s.apimachinery.pkg.api.resource.Quantity" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.APIGroup" = {
options = {
@ -20819,9 +20804,7 @@ let
};
};
"io.k8s.apimachinery.pkg.apis.meta.v1.FieldsV1" = {
};
"io.k8s.apimachinery.pkg.apis.meta.v1.FieldsV1" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.GroupVersionForDiscovery" = {
options = {
@ -20963,9 +20946,7 @@ let
};
};
"io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime" = {
};
"io.k8s.apimachinery.pkg.apis.meta.v1.MicroTime" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" = {
options = {
@ -21129,9 +21110,7 @@ let
};
};
"io.k8s.apimachinery.pkg.apis.meta.v1.Patch" = {
};
"io.k8s.apimachinery.pkg.apis.meta.v1.Patch" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.Preconditions" = {
options = {
@ -21301,9 +21280,7 @@ let
};
};
"io.k8s.apimachinery.pkg.apis.meta.v1.Time" = {
};
"io.k8s.apimachinery.pkg.apis.meta.v1.Time" = { };
"io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" = {
options = {
@ -21325,12 +21302,8 @@ let
config = { };
};
"io.k8s.apimachinery.pkg.runtime.RawExtension" = {
};
"io.k8s.apimachinery.pkg.util.intstr.IntOrString" = {
};
"io.k8s.apimachinery.pkg.runtime.RawExtension" = { };
"io.k8s.apimachinery.pkg.util.intstr.IntOrString" = { };
"io.k8s.apimachinery.pkg.version.Info" = {
options = {
@ -21753,7 +21726,8 @@ let
};
};
in {
in
{
# all resource versions
options = {
resources = {