diff --git a/data/hackathon/README.org b/data/hackathon/README.org index 6c5ba05..1e40c9a 100644 --- a/data/hackathon/README.org +++ b/data/hackathon/README.org @@ -14,3 +14,280 @@ For our purposes we have clusters running in Equinix Metal provisioned via the [ * Cluster setup Follow the steps below to prepare each cluster in advance of the hackathon. + + +* Automated scenario population + +To quickly setup an example environment with all solutions populated you can use the following source blocks. + +** Exercise two - What about my legacy technical debt? + +#+begin_src tmux +# Create namespace +oc create namespace crusty-corp + +# Create the virtual machine template +#+begin_src tmux +cat << 'EOF' | oc apply --namespace crusty-corp -f - +kind: Template +apiVersion: template.openshift.io/v1 +metadata: + name: centos5-server-small + namespace: crusty-corp + labels: + app.kubernetes.io/part-of: hyperconverged-cluster + os.template.kubevirt.io/centos5.0: 'true' + flavor.template.kubevirt.io/small: 'true' + template.kubevirt.io/version: v0.25.0 + app.kubernetes.io/version: 4.13.8 + template.kubevirt.io/type: base + app.kubernetes.io/component: templating + app.kubernetes.io/managed-by: ssp-operator + template.kubevirt.io/default-os-variant: 'true' + app.kubernetes.io/name: common-templates + workload.template.kubevirt.io/server: 'true' + annotations: + template.kubevirt.io/provider: Red Hat + name.os.template.kubevirt.io/centos5.0: CentOS 5 or higher + template.kubevirt.io/provider-url: 'https://www.centos.org' + template.kubevirt.io/containerdisks: | + quay.io/containerdisks/centos:7-2009 + template.kubevirt.io/version: v1alpha1 + openshift.io/display-name: CentOS 5 VM + openshift.io/documentation-url: 'https://github.com/kubevirt/common-templates' + template.kubevirt.io/images: > + https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2 + operator-sdk/primary-resource-type: SSP.ssp.kubevirt.io + defaults.template.kubevirt.io/disk: rootdisk + template.kubevirt.io/editable: | + /objects[0].spec.template.spec.domain.cpu.sockets + /objects[0].spec.template.spec.domain.cpu.cores + /objects[0].spec.template.spec.domain.cpu.threads + /objects[0].spec.template.spec.domain.resources.requests.memory + /objects[0].spec.template.spec.domain.devices.disks + /objects[0].spec.template.spec.volumes + /objects[0].spec.template.spec.networks + template.openshift.io/bindable: 'false' + openshift.kubevirt.io/pronounceable-suffix-for-name-expression: 'true' + operator-sdk/primary-resource: openshift-cnv/ssp-kubevirt-hyperconverged + tags: 'hidden,kubevirt,virtualmachine,linux,centos' + template.kubevirt.io/provider-support-level: Community + description: >- + Template for CentOS 5 VM or newer. A PVC with the CentOS disk image must + be available. + openshift.io/support-url: 'https://github.com/kubevirt/common-templates/issues' + iconClass: icon-centos + openshift.io/provider-display-name: Red Hat +objects: + - apiVersion: kubevirt.io/v1 + kind: VirtualMachine + metadata: + annotations: + vm.kubevirt.io/validations: | + [ + { + "name": "minimal-required-memory", + "path": "jsonpath::.spec.domain.resources.requests.memory", + "rule": "integer", + "message": "This VM requires more memory.", + "min": 1073741824 + } + ] + labels: + app: '${NAME}' + vm.kubevirt.io/template: centos5-server-small + vm.kubevirt.io/template.revision: '1' + vm.kubevirt.io/template.version: v0.25.0 + name: '${NAME}' + spec: + dataVolumeTemplates: + - apiVersion: cdi.kubevirt.io/v1beta1 + kind: DataVolume + metadata: + name: '${NAME}' + spec: + sourceRef: + kind: DataSource + name: '${DATA_SOURCE_NAME}' + namespace: '${DATA_SOURCE_NAMESPACE}' + storage: + resources: + requests: + storage: 30Gi + running: false + template: + metadata: + annotations: + vm.kubevirt.io/flavor: small + vm.kubevirt.io/os: centos5 + vm.kubevirt.io/workload: server + labels: + kubevirt.io/domain: '${NAME}' + kubevirt.io/size: small + spec: + domain: + cpu: + cores: 1 + sockets: 1 + threads: 1 + devices: + disks: + - disk: + bus: virtio + name: rootdisk + - disk: + bus: virtio + name: cloudinitdisk + interfaces: + - masquerade: {} + model: virtio + name: default + networkInterfaceMultiqueue: true + rng: {} + machine: + type: pc-q35-rhel9.2.0 + resources: + requests: + memory: 2Gi + evictionStrategy: LiveMigrate + networks: + - name: default + pod: {} + terminationGracePeriodSeconds: 180 + volumes: + - dataVolume: + name: '${NAME}' + name: rootdisk + - cloudInitNoCloud: + userData: |- + #cloud-config + user: centos + password: ${CLOUD_USER_PASSWORD} + chpasswd: { expire: False } + name: cloudinitdisk +parameters: + - name: NAME + description: VM name + generate: expression + from: 'centos5-[a-z0-9]{16}' + - name: DATA_SOURCE_NAME + description: Name of the DataSource to clone + value: centos5 + - name: DATA_SOURCE_NAMESPACE + description: Namespace of the DataSource + value: openshift-virtualization-os-images + - name: CLOUD_USER_PASSWORD + description: Randomized password for the cloud-init user centos + generate: expression + from: '[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}' +EOF + +# Create the virtual machine from template +cat << 'EOF' | oc apply --namespace crusty-corp -f - +apiVersion: 'kubevirt.io/v1' +kind: 'VirtualMachine' +metadata: + labels: + app: 'crusty-corp-fun-financial-appliance' + vm.kubevirt.io/template: 'centos5-server-small' + vm.kubevirt.io/template.namespace: 'crusty-corp' + vm.kubevirt.io/template.revision: '1' + vm.kubevirt.io/template.version: 'v0.25.0' + name: 'crusty-corp-fun-financial-appliance' + namespace: 'crusty-corp' +spec: + dataVolumeTemplates: + - apiVersion: 'cdi.kubevirt.io/v1beta1' + kind: 'DataVolume' + metadata: + annotations: + cdi.kubevirt.io/storage.bind.immediate.requested: 'true' + creationTimestamp: null + name: 'crusty-corp-fun-financial-appliance' + spec: + source: + blank: {} + storage: + resources: + requests: + storage: '30Gi' + - metadata: + creationTimestamp: null + name: 'crusty-corp-fun-financial-appliance-installation-cdrom' + spec: + source: + http: + url: 'https://vault.centos.org/5.11/isos/x86_64/CentOS-5.11-x86_64-netinstall.iso' + storage: + resources: + requests: + storage: '5Gi' + running: false + template: + metadata: + annotations: + vm.kubevirt.io/flavor: 'small' + vm.kubevirt.io/os: 'centos5' + vm.kubevirt.io/workload: 'server' + creationTimestamp: null + labels: + kubevirt.io/domain: 'crusty-corp-fun-financial-appliance' + kubevirt.io/size: 'small' + spec: + domain: + cpu: + cores: 1 + sockets: 1 + threads: 1 + devices: + disks: + - bootOrder: 2 + disk: + bus: 'virtio' + name: 'rootdisk' + - bootOrder: 3 + disk: + bus: 'virtio' + name: 'cloudinitdisk' + - bootOrder: 1 + cdrom: + bus: 'sata' + name: 'installation-cdrom' + interfaces: + - macAddress: '02:d5:73:00:00:06' + masquerade: {} + model: 'virtio' + name: 'default' + networkInterfaceMultiqueue: true + rng: {} + machine: + type: 'pc-q35-rhel9.2.0' + resources: + requests: + memory: '2Gi' + evictionStrategy: 'LiveMigrate' + networks: + - name: 'default' + pod: {} + terminationGracePeriodSeconds: 180 + volumes: + - dataVolume: + name: 'crusty-corp-fun-financial-appliance' + name: 'rootdisk' + - cloudInitNoCloud: + userData: "#cloud-config\nuser: centos\npassword: cqud-lhel-rd0b\nchpasswd: { expire: False }" + name: 'cloudinitdisk' + - dataVolume: + name: 'crusty-corp-fun-financial-appliance-installation-cdrom' + name: 'installation-cdrom' +EOF +#+end_src + + +* Automated scenario cleanup + +If you need to quickly reset an example environment to have no solutions populated you can use the following source blocks. + +#+begin_src tmux +oc delete namespace crusty-corp +#+end_src diff --git a/data/workshop/scenario1.mdx b/data/workshop/scenario1.mdx index 6ac47f9..39b6481 100644 --- a/data/workshop/scenario1.mdx +++ b/data/workshop/scenario1.mdx @@ -30,7 +30,7 @@ Your hackathon team are the pre-sales technical team engaging with Acme technica ## 1.1 - Understanding the environment -For this challenge you'll be given a fresh bare metal OpenShift 4 cluster with the OpenShift Virtualisation operator already installed. +For this challenge you'll be given a fresh bare metal OpenShift 4 cluster **with the OpenShift Virtualisation operator already installed**. All challenge tasks must be performed on this cluster so your solutions can be graded successfully. diff --git a/data/workshop/scenario2.mdx b/data/workshop/scenario2.mdx index 57b5967..d94841d 100644 --- a/data/workshop/scenario2.mdx +++ b/data/workshop/scenario2.mdx @@ -1,7 +1,7 @@ --- title: What about my legacy technical debt? exercise: 2 -date: '2024-04-05' +date: '2024-04-14' tags: ['openshift','virtualisation','kubernetes','kubevirt'] draft: false authors: ['default'] @@ -10,7 +10,7 @@ summary: "Will OpenShift Virtualisation run Acme virtual machines?" As a sales team you've got an upcoming demo with the Acme Financial Services linux team. They are concerned a modern cloud native virtualisation platform like OpenShift Virtualistion won't run their **Crusty Corp Fun Financial Applianceā„¢** vm appliances which run CentOS Linux `5.11` and cannot be updated or altered in any way 🤯. -The Acme team are well aware these virtual machines would not be "supported" but ultimately the deal rests on your teams ability to prove that an old operating system will boot successfully within OpenShift Virtualisation. +The Acme team are well aware these virtual machines would not be "supported" but ultimately the deal rests on your teams ability to prove that such an old operating system will boot successfully within OpenShift Virtualisation. ## 2.1 - Create the virtual machine @@ -38,6 +38,6 @@ For this challenge you will know you are successful and will be awarded points w If your **Crusty Corp Financial Appliance** has booted please post a message in `#event-anz-ocp-virt-hackathon` with the message: -> Please review team [name] solution for exercise 2. +> Please review [team name] solution for exercise 2. This exercise is worth 25 points. The event team will reply in slack to confirm your updated team total score. diff --git a/public/static/images/hackathon/crusty-corp.png b/public/static/images/hackathon/crusty-corp.png index 943ff64..263eb02 100644 Binary files a/public/static/images/hackathon/crusty-corp.png and b/public/static/images/hackathon/crusty-corp.png differ