Apply k8s files for rook
							parent
							
								
									1814ab4f64
								
							
						
					
					
						commit
						cebe329680
					
				|  | @ -327,6 +327,7 @@ class BuildParameters { | |||
|                 cachePushOverrideCommand: input_1.default.cachePushOverrideCommand(), | ||||
|                 readInputOverrideCommand: input_1.default.readInputOverrideCommand(), | ||||
|                 readInputFromOverrideList: input_1.default.readInputFromOverrideList(), | ||||
|                 kubeStorageClass: input_1.default.kubeStorageClass, | ||||
|             }; | ||||
|         }); | ||||
|     } | ||||
|  | @ -1916,7 +1917,7 @@ const async_wait_until_1 = __importDefault(__nccwpck_require__(41299)); | |||
| const kubernetes_job_spec_factory_1 = __importDefault(__nccwpck_require__(1739)); | ||||
| const kubernetes_service_account_1 = __importDefault(__nccwpck_require__(42915)); | ||||
| const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); | ||||
| const cloud_runner_system_1 = __nccwpck_require__(66879); | ||||
| const kubernetes_rook_1 = __importDefault(__nccwpck_require__(20859)); | ||||
| class Kubernetes { | ||||
|     constructor(buildParameters) { | ||||
|         this.buildGuid = ''; | ||||
|  | @ -1945,14 +1946,7 @@ class Kubernetes { | |||
|                 this.pvcName = `unity-builder-pvc-${buildGuid}`; | ||||
|                 this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`; | ||||
|                 this.serviceAccountName = `service-account-${buildGuid}`; | ||||
|                 if (yield cloud_runner_system_1.CloudRunnerSystem.Run(`kubectl`)) { | ||||
|                     yield cloud_runner_system_1.CloudRunnerSystem.Run(` | ||||
|           git clone --single-branch --branch v1.8.6 https://github.com/rook/rook.git
 | ||||
|           cd rook/deploy/examples | ||||
|           kubectl create -f crds.yaml -f common.yaml -f operator.yaml | ||||
|           kubectl create -f cluster.yaml | ||||
|         `);
 | ||||
|                 } | ||||
|                 yield kubernetes_rook_1.default.InitRook(buildParameters.kubeStorageClass); | ||||
|                 yield kubernetes_storage_1.default.createPersistentVolumeClaim(buildParameters, this.pvcName, this.kubeClient, this.namespace); | ||||
|                 yield kubernetes_service_account_1.default.createServiceAccount(this.serviceAccountName, this.namespace, this.kubeClient); | ||||
|             } | ||||
|  | @ -2220,6 +2214,103 @@ class KubernetesJobSpecFactory { | |||
| exports["default"] = KubernetesJobSpecFactory; | ||||
| 
 | ||||
| 
 | ||||
| /***/ }), | ||||
| 
 | ||||
| /***/ 20859: | ||||
| /***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { | ||||
| 
 | ||||
| "use strict"; | ||||
| 
 | ||||
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||||
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||||
|     return new (P || (P = Promise))(function (resolve, reject) { | ||||
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||||
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||||
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||||
|         step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||||
|     }); | ||||
| }; | ||||
| var __importDefault = (this && this.__importDefault) || function (mod) { | ||||
|     return (mod && mod.__esModule) ? mod : { "default": mod }; | ||||
| }; | ||||
| Object.defineProperty(exports, "__esModule", ({ value: true })); | ||||
| const fs_1 = __importDefault(__nccwpck_require__(57147)); | ||||
| const cloud_runner_system_1 = __nccwpck_require__(66879); | ||||
| const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); | ||||
| class KubernetesRook { | ||||
|     static InitRook(storageName) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|             if (storageName === '' && (yield cloud_runner_system_1.CloudRunnerSystem.Run(`kubectl`))) { | ||||
|                 storageName = KubernetesRook.rookStorageName; | ||||
|                 cloud_runner_logger_1.default.log('Using rook storage as no kubeStorageClass provided'); | ||||
|                 yield cloud_runner_system_1.CloudRunnerSystem.Run(` | ||||
|         git clone --single-branch --branch v1.8.6 https://github.com/rook/rook.git
 | ||||
|         cd rook/deploy/examples | ||||
|         kubectl create -f crds.yaml -f common.yaml -f operator.yaml | ||||
|         kubectl create -f cluster.yaml | ||||
|       `);
 | ||||
|                 fs_1.default.writeFileSync('filesystem.yaml', ` | ||||
|         apiVersion: ceph.rook.io/v1 | ||||
|         kind: CephFilesystem | ||||
|         metadata: | ||||
|           name: myfs | ||||
|           namespace: rook-ceph | ||||
|         spec: | ||||
|           metadataPool: | ||||
|             replicated: | ||||
|               size: 3 | ||||
|           dataPools: | ||||
|             - name: replicated | ||||
|               replicated: | ||||
|                 size: 3 | ||||
|           preserveFilesystemOnDelete: true | ||||
|           metadataServer: | ||||
|             activeCount: 1 | ||||
|             activeStandby: true | ||||
|       `);
 | ||||
|                 fs_1.default.writeFileSync('storageclass.yaml', ` | ||||
|         apiVersion: storage.k8s.io/v1 | ||||
|         kind: StorageClass | ||||
|         metadata: | ||||
|           name: ${storageName} | ||||
|         # Change "rook-ceph" provisioner prefix to match the operator namespace if needed | ||||
|         provisioner: rook-ceph.cephfs.csi.ceph.com | ||||
|         parameters: | ||||
|           # clusterID is the namespace where the rook cluster is running | ||||
|           # If you change this namespace, also change the namespace below where the secret namespaces are defined | ||||
|           clusterID: rook-ceph | ||||
| 
 | ||||
|           # CephFS filesystem name into which the volume shall be created | ||||
|           fsName: myfs | ||||
| 
 | ||||
|           # Ceph pool into which the volume shall be created | ||||
|           # Required for provisionVolume: "true" | ||||
|           pool: myfs-replicated | ||||
| 
 | ||||
|           # The secrets contain Ceph admin credentials. These are generated automatically by the operator | ||||
|           # in the same namespace as the cluster. | ||||
|           csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner | ||||
|           csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph | ||||
|           csi.storage.k8s.io/controller-expand-secret-name: rook-csi-cephfs-provisioner | ||||
|           csi.storage.k8s.io/controller-expand-secret-namespace: rook-ceph | ||||
|           csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node | ||||
|           csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph | ||||
|         reclaimPolicy: Delete | ||||
|       `);
 | ||||
|                 yield cloud_runner_system_1.CloudRunnerSystem.Run(` | ||||
|         kubectl create -f storageclass.yaml -f filesystem.yaml | ||||
|       `);
 | ||||
|             } | ||||
|             else { | ||||
|                 cloud_runner_logger_1.default.log(`Using kubeStorageClass ${storageName}`); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
| } | ||||
| KubernetesRook.rookStorageName = 'rook-cephfs-game-ci'; | ||||
| exports["default"] = KubernetesRook; | ||||
| 
 | ||||
| 
 | ||||
| /***/ }), | ||||
| 
 | ||||
| /***/ 71586: | ||||
|  | @ -2377,6 +2468,7 @@ const core = __importStar(__nccwpck_require__(42186)); | |||
| const k8s = __importStar(__nccwpck_require__(89679)); | ||||
| const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); | ||||
| const yaml_1 = __importDefault(__nccwpck_require__(44603)); | ||||
| const kubernetes_rook_1 = __importDefault(__nccwpck_require__(20859)); | ||||
| class KubernetesStorage { | ||||
|     static createPersistentVolumeClaim(buildParameters, pvcName, kubeClient, namespace) { | ||||
|         return __awaiter(this, void 0, void 0, function* () { | ||||
|  | @ -2441,7 +2533,7 @@ class KubernetesStorage { | |||
|             }; | ||||
|             pvc.spec = { | ||||
|                 accessModes: ['ReadWriteOnce'], | ||||
|                 storageClassName: process.env.K8s_STORAGE_CLASS || 'standard', | ||||
|                 storageClassName: buildParameters.kubeStorageClass === '' ? kubernetes_rook_1.default.rookStorageName : buildParameters.kubeStorageClass, | ||||
|                 resources: { | ||||
|                     requests: { | ||||
|                         storage: buildParameters.kubeVolumeSize, | ||||
|  | @ -4088,6 +4180,9 @@ class Input { | |||
|     static get kubeVolumeSize() { | ||||
|         return Input.getInput('kubeVolumeSize') || '5Gi'; | ||||
|     } | ||||
|     static get kubeStorageClass() { | ||||
|         return Input.getInput('kubeStorageClass') || ''; | ||||
|     } | ||||
|     static ToEnvVarFormat(input) { | ||||
|         return input | ||||
|             .replace(/([A-Z])/g, ' $1') | ||||
|  |  | |||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -0,0 +1 @@ | |||
| sample | ||||
|  | @ -40,6 +40,7 @@ class BuildParameters { | |||
|   public cloudRunnerCpu!: string; | ||||
|   public kubeVolumeSize!: string; | ||||
|   public kubeVolume!: string; | ||||
|   public kubeStorageClass!: string; | ||||
|   public chownFilesTo!: string; | ||||
|   public customJobHooks!: string; | ||||
|   public cachePushOverrideCommand!: string; | ||||
|  | @ -133,6 +134,7 @@ class BuildParameters { | |||
|       cachePushOverrideCommand: Input.cachePushOverrideCommand(), | ||||
|       readInputOverrideCommand: Input.readInputOverrideCommand(), | ||||
|       readInputFromOverrideList: Input.readInputFromOverrideList(), | ||||
|       kubeStorageClass: Input.kubeStorageClass, | ||||
|     }; | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
|  | @ -12,7 +12,7 @@ import KubernetesJobSpecFactory from './kubernetes-job-spec-factory'; | |||
| import KubernetesServiceAccount from './kubernetes-service-account'; | ||||
| import CloudRunnerLogger from '../services/cloud-runner-logger'; | ||||
| import { CoreV1Api } from '@kubernetes/client-node'; | ||||
| import { CloudRunnerSystem } from '../../cli/remote-client/remote-client-services/cloud-runner-system'; | ||||
| import KubernetesRook from './kubernetes-rook'; | ||||
| 
 | ||||
| class Kubernetes implements CloudRunnerProviderInterface { | ||||
|   private kubeConfig: k8s.KubeConfig; | ||||
|  | @ -51,14 +51,7 @@ class Kubernetes implements CloudRunnerProviderInterface { | |||
|       this.pvcName = `unity-builder-pvc-${buildGuid}`; | ||||
|       this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`; | ||||
|       this.serviceAccountName = `service-account-${buildGuid}`; | ||||
|       if (await CloudRunnerSystem.Run(`kubectl`)) { | ||||
|         await CloudRunnerSystem.Run(` | ||||
|           git clone --single-branch --branch v1.8.6 https://github.com/rook/rook.git
 | ||||
|           cd rook/deploy/examples | ||||
|           kubectl create -f crds.yaml -f common.yaml -f operator.yaml | ||||
|           kubectl create -f cluster.yaml | ||||
|         `);
 | ||||
|       } | ||||
|       await KubernetesRook.InitRook(buildParameters.kubeStorageClass); | ||||
|       await KubernetesStorage.createPersistentVolumeClaim( | ||||
|         buildParameters, | ||||
|         this.pvcName, | ||||
|  |  | |||
|  | @ -0,0 +1,80 @@ | |||
| import fs from 'fs'; | ||||
| import { CloudRunnerSystem } from '../../cli/remote-client/remote-client-services/cloud-runner-system'; | ||||
| import CloudRunnerLogger from '../services/cloud-runner-logger'; | ||||
| 
 | ||||
| class KubernetesRook { | ||||
|   public static readonly rookStorageName = 'rook-cephfs-game-ci'; | ||||
|   public static async InitRook(storageName) { | ||||
|     if (storageName === '' && (await CloudRunnerSystem.Run(`kubectl`))) { | ||||
|       storageName = KubernetesRook.rookStorageName; | ||||
|       CloudRunnerLogger.log('Using rook storage as no kubeStorageClass provided'); | ||||
|       await CloudRunnerSystem.Run(` | ||||
|         git clone --single-branch --branch v1.8.6 https://github.com/rook/rook.git
 | ||||
|         cd rook/deploy/examples | ||||
|         kubectl create -f crds.yaml -f common.yaml -f operator.yaml | ||||
|         kubectl create -f cluster.yaml | ||||
|       `);
 | ||||
|       fs.writeFileSync( | ||||
|         'filesystem.yaml', | ||||
|         ` | ||||
|         apiVersion: ceph.rook.io/v1 | ||||
|         kind: CephFilesystem | ||||
|         metadata: | ||||
|           name: myfs | ||||
|           namespace: rook-ceph | ||||
|         spec: | ||||
|           metadataPool: | ||||
|             replicated: | ||||
|               size: 3 | ||||
|           dataPools: | ||||
|             - name: replicated | ||||
|               replicated: | ||||
|                 size: 3 | ||||
|           preserveFilesystemOnDelete: true | ||||
|           metadataServer: | ||||
|             activeCount: 1 | ||||
|             activeStandby: true | ||||
|       `,
 | ||||
|       ); | ||||
|       fs.writeFileSync( | ||||
|         'storageclass.yaml', | ||||
|         ` | ||||
|         apiVersion: storage.k8s.io/v1 | ||||
|         kind: StorageClass | ||||
|         metadata: | ||||
|           name: ${storageName} | ||||
|         # Change "rook-ceph" provisioner prefix to match the operator namespace if needed | ||||
|         provisioner: rook-ceph.cephfs.csi.ceph.com | ||||
|         parameters: | ||||
|           # clusterID is the namespace where the rook cluster is running | ||||
|           # If you change this namespace, also change the namespace below where the secret namespaces are defined | ||||
|           clusterID: rook-ceph | ||||
| 
 | ||||
|           # CephFS filesystem name into which the volume shall be created | ||||
|           fsName: myfs | ||||
| 
 | ||||
|           # Ceph pool into which the volume shall be created | ||||
|           # Required for provisionVolume: "true" | ||||
|           pool: myfs-replicated | ||||
| 
 | ||||
|           # The secrets contain Ceph admin credentials. These are generated automatically by the operator | ||||
|           # in the same namespace as the cluster. | ||||
|           csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner | ||||
|           csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph | ||||
|           csi.storage.k8s.io/controller-expand-secret-name: rook-csi-cephfs-provisioner | ||||
|           csi.storage.k8s.io/controller-expand-secret-namespace: rook-ceph | ||||
|           csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node | ||||
|           csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph | ||||
|         reclaimPolicy: Delete | ||||
|       `,
 | ||||
|       ); | ||||
|       await CloudRunnerSystem.Run(` | ||||
|         kubectl create -f storageclass.yaml -f filesystem.yaml | ||||
|       `);
 | ||||
|     } else { | ||||
|       CloudRunnerLogger.log(`Using kubeStorageClass ${storageName}`); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| export default KubernetesRook; | ||||
|  | @ -4,6 +4,7 @@ import * as k8s from '@kubernetes/client-node'; | |||
| import BuildParameters from '../../build-parameters'; | ||||
| import CloudRunnerLogger from '../services/cloud-runner-logger'; | ||||
| import YAML from 'yaml'; | ||||
| import KubernetesRook from './kubernetes-rook'; | ||||
| 
 | ||||
| class KubernetesStorage { | ||||
|   public static async createPersistentVolumeClaim( | ||||
|  | @ -83,7 +84,8 @@ class KubernetesStorage { | |||
|     }; | ||||
|     pvc.spec = { | ||||
|       accessModes: ['ReadWriteOnce'], | ||||
|       storageClassName: process.env.K8s_STORAGE_CLASS || 'standard', | ||||
|       storageClassName: | ||||
|         buildParameters.kubeStorageClass === '' ? KubernetesRook.rookStorageName : buildParameters.kubeStorageClass, | ||||
|       resources: { | ||||
|         requests: { | ||||
|           storage: buildParameters.kubeVolumeSize, | ||||
|  |  | |||
|  | @ -82,6 +82,7 @@ class Input { | |||
|   static get region(): string { | ||||
|     return Input.getInput('region') || 'eu-west-2'; | ||||
|   } | ||||
| 
 | ||||
|   static async githubRepo() { | ||||
|     return ( | ||||
|       Input.getInput('GITHUB_REPOSITORY') || | ||||
|  | @ -274,6 +275,10 @@ class Input { | |||
|     return Input.getInput('kubeVolumeSize') || '5Gi'; | ||||
|   } | ||||
| 
 | ||||
|   static get kubeStorageClass(): string { | ||||
|     return Input.getInput('kubeStorageClass') || ''; | ||||
|   } | ||||
| 
 | ||||
|   public static ToEnvVarFormat(input: string) { | ||||
|     return input | ||||
|       .replace(/([A-Z])/g, ' $1') | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue