Skip to content

Commit

Permalink
Add service_OneKE
Browse files Browse the repository at this point in the history
  • Loading branch information
xorel committed Oct 25, 2023
1 parent ea4af97 commit 288e9e6
Show file tree
Hide file tree
Showing 40 changed files with 4,762 additions and 3 deletions.
22 changes: 19 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,20 @@ include Makefile.config
#------------------------------------------------------------------------------
# All, alliases
#------------------------------------------------------------------------------
all: $(patsubst %, all-%, $(DISTROS))
all: $(patsubst %, distros-%, $(DISTROS)) $(patsubst %, services-%, $(SERVICES))
@:

# allow individual distribution targets (e.g., "make debian11")
$(DISTROS): %: all-% ;
$(DISTROS): %: distros-% ;
$(SERVICES): %: services-% ;

# pattern rule for dependencies
all-%: download-% installer-% customize-%
distros-%: download-% installer-% customize-%
@${INFO} "All done for ${*}"

services-%: svc-installer-% customize-%
@:

#------------------------------------------------------------------------------
# Download
# - validate target is in $DISTRO list + SHA256|512_$DISTRO is defined
Expand Down Expand Up @@ -91,6 +95,15 @@ ${DIR_EXPORT}/%-${VERSION}-${RELEASE}.qcow2: ${DIR_INSTALL}/%.qcow2
@${INFO} "Starting $* customization"
@guestfish/run.sh ${*} ${@}

#------------------------------------------------------------------------------
# Services
#------------------------------------------------------------------------------
svc-installer-%: ${DIR_INSTALL}/%.qcow2
@${INFO} "Installer ${*} done"

${DIR_INSTALL}/service_OneKE.qcow2: ${DIR_BASE}/ubuntu2204.img
packer/service_OneKE/run.sh ${@}

#------------------------------------------------------------------------------
# clean
#------------------------------------------------------------------------------
Expand All @@ -115,6 +128,9 @@ help:
@echo 'Available distros:'
@echo ' $(DISTROS)'
@echo
@echo 'Available services:'
@echo ' $(SERVICES)'
@echo
@echo 'Usage examples:'
@echo ' make -- build all distros'
@echo ' make download -- download all base images'
Expand Down
2 changes: 2 additions & 0 deletions Makefile.config
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ $(shell mkdir -p ${DIR_BASE} ${DIR_INSTALL})
.SECONDARY: $(patsubst %, $(DIR_BASE)/%.img, $(DISTROS))
.SECONDARY: $(patsubst %, $(DIR_INSTALL)/%.qcow2, $(DISTROS))
.SECONDARY: $(patsubst %, $(DIR_EXPORT)/%-$(VERSION)-$(RELEASE).qcow2, $(DISTROS))
.SECONDARY: $(patsubst %, $(DIR_INSTALL)/%.qcow2, $(SERVICES))
.SECONDARY: $(patsubst %, $(DIR_EXPORT)/%-$(VERSION)-$(RELEASE).qcow2, $(SERVICES))

.PHONY: context-linux download installer customize help

Expand Down
2 changes: 2 additions & 0 deletions Makefile.distros
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ DISTROS := alma8 alma9 \
rocky8 rocky9 \
ubuntu2004 ubuntu2004min ubuntu2204 ubuntu2204min

SERVICES := service_OneKE

# URLS
URL_alma8 := https://repo.almalinux.org/almalinux/8/cloud/x86_64/images/AlmaLinux-8-OpenNebula-latest.x86_64.qcow2
URL_alma9 := https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/AlmaLinux-9-OpenNebula-latest.x86_64.qcow2
Expand Down
11 changes: 11 additions & 0 deletions appliances/OneKE/appliance.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/usr/bin/env bash

service_bootstrap() { ruby -- "${BASH_SOURCE%.*}/appliance.rb" bootstrap; }

service_cleanup() { ruby -- "${BASH_SOURCE%.*}/appliance.rb" cleanup; }

service_configure() { ruby -- "${BASH_SOURCE%.*}/appliance.rb" configure; }

service_install() { ruby -- "${BASH_SOURCE%.*}/appliance.rb" install; }

return
30 changes: 30 additions & 0 deletions appliances/OneKE/appliance/.rubocop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
AllCops:
Exclude:
- '*_spec.rb'

Lint/MissingCopEnableDirective:
Enabled: false

Layout/FirstArrayElementIndentation:
Enabled: false

Layout/FirstHashElementIndentation:
Enabled: false

Layout/HashAlignment:
Enabled: false

Layout/HeredocIndentation:
Enabled: false

Layout/IndentationWidth:
Enabled: false

Layout/MultilineMethodCallIndentation:
Enabled: false

Metrics/BlockLength:
Enabled: false

Metrics/MethodLength:
Enabled: false
81 changes: 81 additions & 0 deletions appliances/OneKE/appliance/appliance.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# frozen_string_literal: true

require_relative 'config.rb'
require_relative 'helpers.rb'

require_relative 'vnf.rb'
require_relative 'kubernetes.rb'

require_relative 'multus.rb'
require_relative 'calico.rb'
require_relative 'canal.rb'
require_relative 'cilium.rb'

require_relative 'metallb.rb'
require_relative 'traefik.rb'
require_relative 'longhorn.rb'
require_relative 'cleaner.rb'

if caller.empty?
case ARGV[0].to_sym
when :install
install_packages PACKAGES

with_policy_rc_d_disabled do
install_kubernetes
end

install_metallb
install_traefik
install_longhorn
install_cleaner

# NOTE: Longhorn images are pulled separately.
pull_addon_images if ONE_SERVICE_AIRGAPPED

msg :info, 'Installation completed successfully'

when :configure
prepare_dedicated_storage unless ONEAPP_STORAGE_DEVICE.nil?

configure_vnf

if ONE_SERVICE_AIRGAPPED
include_images 'rke2-images-core'
include_images 'rke2-images-multus' if ONEAPP_K8S_MULTUS_ENABLED
include_images 'rke2-images-cilium' if ONEAPP_K8S_CNI_PLUGIN == 'cilium'

include_images 'one-longhorn' if ONEAPP_K8S_LONGHORN_ENABLED
include_images 'one-metallb' if ONEAPP_K8S_METALLB_ENABLED
include_images 'one-traefik' if ONEAPP_K8S_TRAEFIK_ENABLED
include_images 'one-cleaner'
end

node = configure_kubernetes(
configure_cni: ->{
configure_multus if ONEAPP_K8S_MULTUS_ENABLED
configure_calico if ONEAPP_K8S_CNI_PLUGIN == 'calico'
configure_canal if ONEAPP_K8S_CNI_PLUGIN == 'canal'
configure_cilium if ONEAPP_K8S_CNI_PLUGIN == 'cilium'
},
configure_addons: ->{
configure_metallb if ONEAPP_K8S_METALLB_ENABLED

include_manifests 'one-longhorn' if ONEAPP_K8S_LONGHORN_ENABLED
include_manifests 'one-metallb' if ONEAPP_K8S_METALLB_ENABLED
include_manifests 'one-traefik' if ONEAPP_K8S_TRAEFIK_ENABLED
include_manifests 'one-cleaner'
}
)

if node[:join_worker]
vnf_ingress_setup_https_backend
vnf_ingress_setup_http_backend
end

msg :info, 'Configuration completed successfully'

when :bootstrap
puts 'bootstrap_success'
end
end
33 changes: 33 additions & 0 deletions appliances/OneKE/appliance/calico.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# frozen_string_literal: true

require 'base64'
require 'yaml'

require_relative 'config.rb'
require_relative 'helpers.rb'

def configure_calico(manifest_dir = K8S_MANIFEST_DIR)
msg :info, 'Configure Calico'

if ONEAPP_K8S_CNI_CONFIG.nil?
msg :info, 'Create Calico CRD config from user-provided ranges'

documents = YAML.load_stream <<~MANIFEST
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-calico
namespace: kube-system
spec:
valuesContent: |-
MANIFEST
else
msg :info, 'Use Calico user-provided config'
documents = YAML.load_stream Base64.decode64 ONEAPP_K8S_CNI_CONFIG
end

msg :info, 'Generate Calico config manifest'
manifest = YAML.dump_stream *documents
file "#{manifest_dir}/rke2-calico-config.yaml", manifest, overwrite: true
end
33 changes: 33 additions & 0 deletions appliances/OneKE/appliance/canal.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# frozen_string_literal: true

require 'base64'
require 'yaml'

require_relative 'config.rb'
require_relative 'helpers.rb'

def configure_canal(manifest_dir = K8S_MANIFEST_DIR)
msg :info, 'Configure Canal'

if ONEAPP_K8S_CNI_CONFIG.nil?
msg :info, 'Create Canal CRD config from user-provided ranges'

documents = YAML.load_stream <<~MANIFEST
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-canal
namespace: kube-system
spec:
valuesContent: |-
MANIFEST
else
msg :info, 'Use Canal user-provided config'
documents = YAML.load_stream Base64.decode64 ONEAPP_K8S_CNI_CONFIG
end

msg :info, 'Generate Canal config manifest'
manifest = YAML.dump_stream *documents
file "#{manifest_dir}/rke2-canal-config.yaml", manifest, overwrite: true
end
71 changes: 71 additions & 0 deletions appliances/OneKE/appliance/cilium.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# frozen_string_literal: true

require 'base64'
require 'uri'
require 'yaml'

require_relative 'config.rb'
require_relative 'helpers.rb'

def configure_cilium(manifest_dir = K8S_MANIFEST_DIR, endpoint = K8S_CONTROL_PLANE_EP)
msg :info, 'Configure Cilium'

ep = URI.parse "https://#{endpoint}"

if ONEAPP_K8S_CNI_CONFIG.nil?
msg :info, 'Create Cilium CRD config from user-provided ranges'

documents = YAML.load_stream <<~MANIFEST
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-cilium
namespace: kube-system
spec:
valuesContent: |-
kubeProxyReplacement: strict
k8sServiceHost: "#{ep.host}"
k8sServicePort: #{ep.port}
cni:
chainingMode: "none"
exclusive: false
bgpControlPlane:
enabled: true
---
apiVersion: cilium.io/v2alpha1
kind: CiliumLoadBalancerIPPool
metadata:
name: default
namespace: kube-system
spec:
cidrs: {}
MANIFEST

unless ONEAPP_K8S_CILIUM_RANGES.empty?
ip_address_pool = documents.find do |doc|
doc['kind'] == 'CiliumLoadBalancerIPPool' && doc.dig('metadata', 'name') == 'default'
end
ip_address_pool['spec']['cidrs'] = extract_cilium_ranges.map do |item|
{ 'cidr' => item.join('/') }
end
end
else
msg :info, 'Use Cilium user-provided config'
documents = YAML.load_stream Base64.decode64 ONEAPP_K8S_CNI_CONFIG
end

msg :info, 'Generate Cilium config manifest'
manifest = YAML.dump_stream *documents
file "#{manifest_dir}/rke2-cilium-config.yaml", manifest, overwrite: true
end

def extract_cilium_ranges(ranges = ONEAPP_K8S_CILIUM_RANGES)
ranges.compact
.map(&:strip)
.reject(&:empty?)
.map { |item| item.split('/').map(&:strip) }
.reject { |item| item.length > 2 }
.reject { |item| item.map(&:empty?).any? }
.reject { |item| !(ipv4?(item.first) && integer?(item.last)) }
end
Loading

0 comments on commit 288e9e6

Please sign in to comment.