fab

package
v0.31.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 12, 2024 License: Apache-2.0 Imports: 16 Imported by: 0

README

Artifacts preparation

Flatcar

Stable version is listed on the Flatcar releases page.

export FLATCAR_VERSION="v3975.2.1"
export FLATCAR_VERSION_UPSTREAM="${FLATCAR_VERSION:1}"

wget "https://stable.release.flatcar-linux.net/amd64-usr/${FLATCAR_VERSION_UPSTREAM}/flatcar_production_qemu_image.img"
wget "https://stable.release.flatcar-linux.net/amd64-usr/${FLATCAR_VERSION_UPSTREAM}/flatcar_production_qemu_uefi_efi_code.fd"
wget "https://stable.release.flatcar-linux.net/amd64-usr/${FLATCAR_VERSION_UPSTREAM}/flatcar_production_qemu_uefi_efi_vars.fd"

mv flatcar_production_qemu_image.img flatcar.img
mv flatcar_production_qemu_uefi_efi_code.fd flatcar_efi_code.fd
mv flatcar_production_qemu_uefi_efi_vars.fd flatcar_efi_vars.fd

ls -lah

oras push "ghcr.io/githedgehog/fabricator/flatcar-vlab:${FLATCAR_VERSION}" flatcar.img flatcar_efi_code.fd flatcar_efi_vars.fd

K3s

export K3S_VERSION="v1.31.1-k3s1"
export K3S_VERSION_UPSTREAM="${K3S_VERSION//-/+}"

wget "https://github.com/k3s-io/k3s/releases/download/${K3S_VERSION_UPSTREAM}/k3s"
wget "https://github.com/k3s-io/k3s/releases/download/${K3S_VERSION_UPSTREAM}/k3s-airgap-images-amd64.tar.gz"
wget "https://raw.githubusercontent.com/k3s-io/k3s/${K3S_VERSION_UPSTREAM}/install.sh"

mv install.sh k3s-install.sh

oras push "ghcr.io/githedgehog/fabricator/k3s-airgap:${K3S_VERSION}" k3s k3s-airgap-images-amd64.tar.gz k3s-install.sh

Zot

export ZOT_VERSION="v2.1.1"
export ZOT_CHART_VERSION="0.1.60"

helm repo add project-zot http://zotregistry.dev/helm-charts
helm repo update project-zot

helm pull project-zot/zot --version "${ZOT_CHART_VERSION}"
tar xzf "zot-${ZOT_CHART_VERSION}.tgz"
helm package zot --version "${ZOT_VERSION}"
helm push "zot-${ZOT_VERSION}.tgz" oci://ghcr.io/githedgehog/fabricator/charts

skopeo copy "docker://ghcr.io/project-zot/zot-linux-amd64:${ZOT_VERSION}" "docker://ghcr.io/githedgehog/fabricator/zot:${ZOT_VERSION}"

docker image rm "ghcr.io/githedgehog/fabricator/zot:${ZOT_VERSION}"
docker pull --platform linux/amd64 "ghcr.io/githedgehog/fabricator/zot:${ZOT_VERSION}"
docker save -o zot-airgap-images-amd64.tar "ghcr.io/githedgehog/fabricator/zot:${ZOT_VERSION}"
pigz -v -c zot-airgap-images-amd64.tar > zot-airgap-images-amd64.tar.gz

cp zot-${ZOT_VERSION}.tgz zot-chart.tgz
oras push "ghcr.io/githedgehog/fabricator/zot-airgap:${ZOT_VERSION}" zot-airgap-images-amd64.tar.gz zot-chart.tgz

Cert-manager

export CERT_MANAGER_VERSION="v1.16.1"

helm repo add jetstack https://charts.jetstack.io
helm repo update jetstack

helm pull jetstack/cert-manager --version "${CERT_MANAGER_VERSION}"
helm push "cert-manager-${CERT_MANAGER_VERSION}.tgz" oci://ghcr.io/githedgehog/fabricator/charts

skopeo copy --all docker://{quay.io/jetstack,ghcr.io/githedgehog/fabricator}/cert-manager-controller:${CERT_MANAGER_VERSION}
skopeo copy --all docker://{quay.io/jetstack,ghcr.io/githedgehog/fabricator}/cert-manager-webhook:${CERT_MANAGER_VERSION}
skopeo copy --all docker://{quay.io/jetstack,ghcr.io/githedgehog/fabricator}/cert-manager-cainjector:${CERT_MANAGER_VERSION}
skopeo copy --all docker://{quay.io/jetstack,ghcr.io/githedgehog/fabricator}/cert-manager-acmesolver:${CERT_MANAGER_VERSION}
skopeo copy --all docker://{quay.io/jetstack,ghcr.io/githedgehog/fabricator}/cert-manager-startupapicheck:${CERT_MANAGER_VERSION}

docker image rm "ghcr.io/githedgehog/fabricator/cert-manager-controller:${CERT_MANAGER_VERSION}"
docker image rm "ghcr.io/githedgehog/fabricator/cert-manager-webhook:${CERT_MANAGER_VERSION}"
docker image rm "ghcr.io/githedgehog/fabricator/cert-manager-cainjector:${CERT_MANAGER_VERSION}"
docker image rm "ghcr.io/githedgehog/fabricator/cert-manager-acmesolver:${CERT_MANAGER_VERSION}"
docker image rm "ghcr.io/githedgehog/fabricator/cert-manager-startupapicheck:${CERT_MANAGER_VERSION}"

docker pull --platform linux/amd64 "ghcr.io/githedgehog/fabricator/cert-manager-controller:${CERT_MANAGER_VERSION}"
docker pull --platform linux/amd64 "ghcr.io/githedgehog/fabricator/cert-manager-webhook:${CERT_MANAGER_VERSION}"
docker pull --platform linux/amd64 "ghcr.io/githedgehog/fabricator/cert-manager-cainjector:${CERT_MANAGER_VERSION}"
docker pull --platform linux/amd64 "ghcr.io/githedgehog/fabricator/cert-manager-acmesolver:${CERT_MANAGER_VERSION}"
docker pull --platform linux/amd64 "ghcr.io/githedgehog/fabricator/cert-manager-startupapicheck:${CERT_MANAGER_VERSION}"

docker save -o cert-manager-airgap-images-amd64.tar ghcr.io/githedgehog/fabricator/cert-manager-{controller,webhook,cainjector,acmesolver,startupapicheck}:${CERT_MANAGER_VERSION}
pigz -v -c cert-manager-airgap-images-amd64.tar > cert-manager-airgap-images-amd64.tar.gz

cp cert-manager-${CERT_MANAGER_VERSION}.tgz cert-manager-chart.tgz
oras push "ghcr.io/githedgehog/fabricator/cert-manager-airgap:${CERT_MANAGER_VERSION}" cert-manager-airgap-images-amd64.tar.gz cert-manager-chart.tgz

K9s

export K9S_VERSION="v0.32.5"

wget "https://github.com/derailed/k9s/releases/download/${K9S_VERSION}/k9s_Linux_amd64.tar.gz"
tar -xzvf k9s_Linux_amd64.tar.gz

oras push "ghcr.io/githedgehog/fabricator/k9s:${K9S_VERSION}" k9s

ONIE

Manually prepared ONIE image. Probably should be shrunk to the minimum size using qemu-img convert -O qcow2 <from> <to>.

export ONIE_VERSION="v0.2.0"

oras push "ghcr.io/githedgehog/fabricator/onie-vlab:${ONIE_VERSION}" onie-kvm_x86_64.qcow2 onie_efi_code.fd onie_efi_vars.fd

NTP

Image is basically taken from cturra/ntp:latest at some point in time.

export NTP_VERSION="v0.0.2"

docker image rm cturra/ntp:latest
docker pull --platform linux/amd64 cturra/ntp:latest
docker tag cturra/ntp:latest ghcr.io/githedgehog/fabricator/ntp:${NTP_VERSION}
docker push ghcr.io/githedgehog/fabricator/ntp:${NTP_VERSION}

Documentation

Index

Constants

View Source
const (
	DevAdminPasswordHash = "$5$8nAYPGcl4l6G7Av1$Qi4/gnM0yPtGv9kjpMh78NuNSfQWy7vR1rulHpurL36" //nolint:gosec
	DevSSHKey            = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGpF2+9I1Nj4BcN7y6DjzTbq1VcUYIRGyfzId5ZoBEFj"
)

Variables

View Source
var (
	FabricatorVersion = meta.Version(version.Version)
	FabricVersion     = meta.Version("v0.53.1")
)
View Source
var DefaultConfig = fabapi.FabConfig{
	Control: fabapi.ControlConfig{
		ManagementSubnet:  "172.30.0.0/21",
		VIP:               "172.30.0.1/32",
		TLSSAN:            []string{},
		KubeClusterSubnet: "172.28.0.0/16",
		KubeServiceSubnet: "172.29.0.0/16",
		KubeClusterDNS:    "172.29.0.10",
		DummySubnet:       "172.30.90.0/24",
		DefaultUser:       fabapi.ControlUser{},
	},
	Registry: fabapi.RegistryConfig{
		Mode: fabapi.RegistryModeAirgap,
	},
	Fabric: fabapi.FabricConfig{
		Mode:                fmeta.FabricModeSpineLeaf,
		ManagementDHCPStart: "172.30.4.0",
		ManagementDHCPEnd:   "172.30.7.254",
		SpineASN:            65100,
		LeafASNStart:        65101,
		LeafASNEnd:          65534,
		ProtocolSubnet:      "172.30.8.0/22",
		VTEPSubnet:          "172.30.12.0/22",
		FabricSubnet:        "172.30.128.0/17",
		BaseVPCCommunity:    "50000:0",
		VPCIRBVLANs: []fmeta.VLANRange{
			{From: 3000, To: 3999},
		},
		VPCWorkaroundVLANs: []fmeta.VLANRange{
			{From: 100, To: 3999},
		},
		VPCWorkaroundSubnet: "172.30.96.0/19",
		ESLAGMACBase:        "f2:00:00:00:00:00",
		ESLAGESIPrefix:      "00:f2:00:00:",
		MCLAGSessionSubnet:  "172.30.95.0/31",
		DefaultSwitchUsers:  map[string]fabapi.SwitchUser{},
		DefaultAlloyConfig:  fmeta.AlloyConfig{},
	},
}

IPs for ~1000 switches, ASNs are for 433 leafs

View Source
var Versions = fabapi.Versions{
	Platform: fabapi.PlatformVersions{
		K3s:         "v1.31.1-k3s1",
		Zot:         "v2.1.1",
		CertManager: "v1.16.1",
		K9s:         "v0.32.5",
		Toolbox:     "latest",
		Reloader:    "v1.0.40",
		NTP:         "v0.0.2",
		NTPChart:    FabricatorVersion,
	},
	Fabricator: fabapi.FabricatorVersions{
		API:            FabricatorVersion,
		Controller:     FabricatorVersion,
		ControlUSBRoot: "v3815.2.5-hh2",
	},
	Fabric: fabapi.FabricVersions{
		API:        FabricVersion,
		Controller: FabricVersion,
		DHCPD:      FabricVersion,
		Boot:       FabricVersion,
		Agent:      FabricVersion,
		Ctl:        FabricVersion,
		Alloy:      "v1.1.1",
		ProxyChart: FabricVersion,
		Proxy:      "1.9.1",
		NOS: map[string]meta.Version{
			string(fmeta.NOSTypeSONiCBCMVS):     "v4.4.0",
			string(fmeta.NOSTypeSONiCBCMBase):   "v4.4.0",
			string(fmeta.NOSTypeSONiCBCMCampus): "v4.4.0",
		},
		ONIE: map[string]meta.Version{
			switchprofile.DellS5232FON.Spec.Platform:         "v0.1.0",
			switchprofile.DellS5248FON.Spec.Platform:         "v0.1.0",
			switchprofile.CelesticaDS3000.Spec.Platform:      "v0.1.0",
			switchprofile.CelesticaDS4000.Spec.Platform:      "v0.1.0",
			switchprofile.EdgecoreDCS203.Spec.Platform:       "v0.1.0",
			switchprofile.EdgecoreDCS204.Spec.Platform:       "v0.1.0",
			switchprofile.EdgecoreDCS501.Spec.Platform:       "v0.1.0",
			switchprofile.EdgecoreEPS203.Spec.Platform:       "v0.1.0",
			switchprofile.SupermicroSSEC4632SB.Spec.Platform: "v0.1.0",
			switchprofile.VS.Spec.Platform:                   "v0.1.0",
		},
	},
	VLAB: fabapi.VLABVersions{
		ONIE:    "v0.2.0",
		Flatcar: "v3975.2.1",
	},
}

Functions

func GetFabAndControls added in v0.30.0

func GetFabAndControls(ctx context.Context, kube client.Reader, allowNotHydrated bool) (fabapi.Fabricator, []fabapi.ControlNode, error)

func InitConfig added in v0.30.0

func InitConfig(ctx context.Context, in InitConfigInput) ([]byte, error)

Types

type InitConfigInput added in v0.30.0

type InitConfigInput struct {
	FabricMode                meta.FabricMode
	TLSSAN                    []string
	DefaultPasswordHash       string
	DefaultAuthorizedKeys     []string
	Dev                       bool
	IncludeONIE               bool
	RegUpstream               *fabapi.ControlConfigRegistryUpstream
	ControlNodeManagementLink string
}

Directories

Path Synopsis
f8r
k3s
k9s
ntp
zot

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL