ironcore
Renders IronCore Machines, Volumes, Networks, NetworkInterfaces, VirtualIPs, LoadBalancers, NATGateways and NetworkPolicies from inventory parameters.
- Latest
- 1.0.1 ·
- License
- Apache-2.0
- Owners
- Moep90
- Source
- github.com/kadet-hub/generators · 0 repo stars, shared by 35 generators
- Thumbs up
- 👍 0 on GitHub Discussions
- Popularity
- 17 · 307 pulls
Request a feature Report a problem
Badge
Show the latest listed version in your README. shields.io draws the badge from this page's badge.json, which every catalog build updates; once no version is listed, it reads "not listed".
[](https://kadet-hub.org/generators/ironcore/)
IronCore Generator
Published on kadet-hub: pin a released version by digest from its catalog page.
Kapitan kadet generator for IronCore IaaS resources. Built for IronCore 0.8.0 (v1alpha1, the only version of these groups at that release):
| Kind | API group |
|---|---|
| Machine | compute.ironcore.dev/v1alpha1 |
| Volume | storage.ironcore.dev/v1alpha1 |
| Network, NetworkInterface, VirtualIP, LoadBalancer, NATGateway, NetworkPolicy | networking.ironcore.dev/v1alpha1 |
MachineClass, MachinePool, VolumeClass, VolumePool and IPAM Prefixes are operator-managed and only referenced. Secrets for ignition and disk encryption belong in the kubernetes generator.
Usage
Kapitan Configuration
parameters:
kapitan:
dependencies:
- type: oci
source: ghcr.io/kadet-hub/ironcore@sha256:<digest>
output_path: lib/ironcore
compile:
- output_path: manifests/ironcore/
input_type: kadet
output_type: yml
input_paths:
- lib/ironcoreInventory Contract
All keys live under parameters.generators.ironcore. The namespace resolves per resource: namespace on the resource, then generators.ironcore.namespace, then parameters.namespace, then default.
| Key | Kind | Output file |
|---|---|---|
networks.<name> |
Network | <namespace>/<name>-network.yaml |
network_interfaces.<name> |
NetworkInterface | <namespace>/<name>-nic.yaml |
virtual_ips.<name> |
VirtualIP | <namespace>/<name>-vip.yaml |
volumes.<name> |
Volume | <namespace>/<name>-volume.yaml |
machines.<name> |
Machine | <namespace>/<name>-machine.yaml |
load_balancers.<name> |
LoadBalancer | <namespace>/<name>-lb.yaml |
nat_gateways.<name> |
NATGateway | <namespace>/<name>-natgw.yaml |
network_policies.<name> |
NetworkPolicy | <namespace>/<name>-netpol.yaml |
Every resource accepts namespace, labels, annotations and spec. Precedence is generator defaults < spec < flat keys; a flat key that overrides a spec value logs Flat key '<key>' overrides spec passthrough '<field>' for resource '<name>'.
Flat keys are the snake_case spelling of the spec fields; the camelCase spelling is accepted too. Values nested inside them use the API’s camelCase field names.
| Kind | Flat keys |
|---|---|
| Network | peerings, provider_id |
| NetworkInterface | network_ref, ip_families, ips, prefixes, virtual_ip, provider_id, attributes |
| VirtualIP | type, ip_family |
| LoadBalancer | type, ip_families, network_ref, ips, network_interface_selector, ports |
| NATGateway | type, ip_family, network_ref, ports_per_network_interface |
| NetworkPolicy | network_ref, network_interface_selector, ingress, egress, policy_types |
| Volume | volume_class_ref, volume_pool_ref, volume_pool_selector, resources, data_source, encryption, unclaimable, tolerations |
| Machine | machine_class_ref, machine_pool_ref, machine_pool_selector, power, network_interfaces, volumes, ignition_ref, efi_vars, tolerations |
Shorthands (a dict passes through unchanged, for example networkRef: {name: x, namespace: y}; other keys of peerings, ports and Machine attachments stay verbatim):
| Input | Result |
|---|---|
*_ref: <name> (network, class, pool) |
{name: <name>} |
ips: [10.0.0.10], prefixes: [10.0.0.0/24] |
[{value: ...}] |
ignition_ref: <name> |
ignitionRef: {name: <name>}; a dict keeps key |
peering networkRef: <name> |
networkRef: {name: <name>} |
encryption: <secret> |
encryption: {secretRef: {name: <secret>}} |
data_source: {osImage: <image>} |
dataSource: {osImage: {image: <image>}} |
data_source: {volumeSnapshotRef: <name>} |
dataSource: {volumeSnapshotRef: {name: <name>}} |
Machine network_interfaces[].networkInterfaceRef, volumes[].volumeRef: <name> |
{name: <name>} |
Machine power: true/false (YAML 1.1 On/Off) |
power: On/Off |
Defaults and derived values:
| Field | Value | Why |
|---|---|---|
VirtualIP, NATGateway type |
Public |
Required and the only supported type (VirtualIP, NATGateway validation). |
NetworkInterface, LoadBalancer ipFamilies |
one family per entry of ips: the family of a value, else the prefix template’s ipFamily; the compile fails if neither is set |
The API server derives it the same way (defaulting), but the OpenAPI schema marks it required, so the gate’s schema check needs it in the output. |
Required inputs without a default: LoadBalancer type (Public exposes the selected interfaces to the internet, so choose Public or Internal), VirtualIP and NATGateway ip_family, LoadBalancer ip_families when it has no ips, and NetworkInterface ips (an ephemeral IP needs a parent Prefix only the operator knows). Without them the schema check fails. A VirtualIP is bound to an interface through the NetworkInterface’s virtual_ip: {virtualIPRef: <name>}; targetRef needs the interface UID, which is unknown at compile time. NetworkPolicy policyTypes, NATGateway portsPerNetworkInterface, Machine power and volume device are left to the API server, which derives policyTypes from ingress/egress, defaults the others and assigns od* device names. A default-deny policy without rules needs policy_types set explicitly.
Example
parameters:
generators:
ironcore:
namespace: production
networks:
main-net: {}
network_interfaces:
web-01:
network_ref: main-net
ips:
- 10.0.1.10
- "2001:db8::10"
labels:
role: web
volumes:
web-01-root:
volume_class_ref: fast
resources:
storage: 20Gi
data_source:
osImage: registry.example.com/os-images/ubuntu:24.04
machines:
web-01:
machine_class_ref: x1-medium
network_interfaces:
- name: primary
networkInterfaceRef: web-01
volumes:
- name: root
volumeRef: web-01-root
ignition_ref:
name: web-01-ignition
key: ignition.json
load_balancers:
web:
type: Public
ip_families:
- IPv4
network_ref: main-net
network_interface_selector:
matchLabels:
role: web
ports:
- port: 443
protocol: TCP
nat_gateways:
egress:
ip_family: IPv4
network_ref: main-net
network_policies:
web-ingress:
network_ref: main-net
network_interface_selector:
matchLabels:
role: web
ingress:
- ports:
- port: 443
protocol: TCPSchemas
IronCore serves these kinds through an aggregated API server, not CRDs. The schemas under schemas/ come from the generated OpenAPI v3 documents in gen/v3/ at IronCore v0.8.0 (Apache-2.0); see schemas/sources.yaml.
Versions
Add a version's inventory entry, then compile with the consumer workflow, which verifies the artifact and runs Kapitan in the sandbox.
Free of charge, as is and on a best-effort basis: use at your own risk, and review the compiled output before you apply it. Terms
This catalog was built from index serial 47. Set index_serial: 47 in .kapitan-sandbox.yaml and the consumer workflow refuses any older index, so a rolled-back index cannot bring back a yanked version.
Checks find known patterns; they do not prove a generator safe. What a listing covers
| Version | Built for (schema-checked) |
|---|---|
| 1.0.1 | IronCore 0.8.0 |
| 1.0.0 | IronCore 0.8.0 |
1.0.1#
Inventory
parameters:
kapitan:
dependencies:
- type: oci
source: ghcr.io/kadet-hub/ironcore:1.0.1@sha256:c5f256802249507b21574cd378f2116ce7e00b94bd85e2f4c3e2510cc2b1b0eb
output_path: lib/ironcore
Verify
gh attestation verify \
oci://ghcr.io/kadet-hub/ironcore@sha256:c5f256802249507b21574cd378f2116ce7e00b94bd85e2f4c3e2510cc2b1b0eb \
--owner kadet-hub \
--cert-identity https://github.com/kadet-hub/registry/.github/workflows/release.yml@refs/heads/main
Transparency log: Rekor entry 3244111225, in Sigstore's public, append-only log, so the attestation stays checkable independent of this site.
- Kapitan declared
- >=0.36.3,<0.37
- Kapitan checked
- 0.36.3
- Backends checked
- not recorded
- With --cache
- not recorded
- krab
- compatible
- Built for (schema-checked)
- IronCore 0.8.0
- Source
- ironcore-v1.0.1 ·
9166cb30e0ae4874bc8f229c6a6823eff7451d04· ironcore - Binaries
- none
- Output capabilities
- none
- Digest
sha256:c5f256802249507b21574cd378f2116ce7e00b94bd85e2f4c3e2510cc2b1b0eb
Checks
Checked by the release run on , gate at ebaee1d1d6a0.
- Secrets gitleaks 8.30.1
No secret matched the marketplace's gitleaks rules. - Malware ClamAV 1.5.4
No file matched a ClamAV signature. - Malicious package heuristics GuardDog 3.2.0
No GuardDog threat rule matched. - Dangerous code Semgrep 1.180.0
No marketplace Semgrep rule matched, such as eval, subprocess or network calls. - Python errors Ruff 0.17.0
No syntax error or undefined name (Ruff, error rules only). - File tree tree_check.py
No symlink, executable or banned file; imports within the allowlist. - Sandboxed compile gVisor 20261005, Kapitan 0.36.3
The fixture compiled without network, with decoy credentials; no undeclared program ran, no decoy was read. - Output capabilities Conftest 0.71.1
The compiled output uses only the capabilities the manifest declares. - CI detection Kapitan 0.36.3
The output is the same with CI variables set.
Output diff
No output diff recorded: this version was published before the release run recorded one.
1.0.0#
Inventory
parameters:
kapitan:
dependencies:
- type: oci
source: ghcr.io/kadet-hub/ironcore:1.0.0@sha256:ad22cf5d8e0eb607d72514840c05b9b0c04f19ca30c4b49ae7e38ffb23378cb1
output_path: lib/ironcore
Verify
gh attestation verify \
oci://ghcr.io/kadet-hub/ironcore@sha256:ad22cf5d8e0eb607d72514840c05b9b0c04f19ca30c4b49ae7e38ffb23378cb1 \
--owner kadet-hub \
--cert-identity https://github.com/kadet-hub/registry/.github/workflows/release.yml@refs/heads/main
Transparency log: Rekor entry 3224502723, in Sigstore's public, append-only log, so the attestation stays checkable independent of this site.
- Kapitan declared
- >=0.36.3,<0.37
- Kapitan checked
- 0.36.3
- Backends checked
- not recorded
- With --cache
- not recorded
- krab
- compatible
- Built for (schema-checked)
- IronCore 0.8.0
- Source
- ironcore-v1.0.0 ·
137c498e84898a08a5139e1960d4de815b26f4f2· ironcore - Binaries
- none
- Output capabilities
- none
- Digest
sha256:ad22cf5d8e0eb607d72514840c05b9b0c04f19ca30c4b49ae7e38ffb23378cb1
Checks
Checked by the release run on , gate at 2077a67d60c7.
- Secrets gitleaks 8.30.1
No secret matched the marketplace's gitleaks rules. - Malware ClamAV 1.5.4
No file matched a ClamAV signature. - Malicious package heuristics GuardDog 3.2.0
No GuardDog threat rule matched. - Dangerous code Semgrep 1.180.0
No marketplace Semgrep rule matched, such as eval, subprocess or network calls. - Python errors Ruff 0.17.0
No syntax error or undefined name (Ruff, error rules only). - File tree tree_check.py
No symlink, executable or banned file; imports within the allowlist. - Sandboxed compile gVisor 20261005, Kapitan 0.36.3
The fixture compiled without network, with decoy credentials; no undeclared program ran, no decoy was read. - Output capabilities Conftest 0.71.1
The compiled output uses only the capabilities the manifest declares. - CI detection Kapitan 0.36.3
The output is the same with CI variables set.
Output diff
No output diff recorded: this version was published before the release run recorded one.