Apply k8s files for rook
							parent
							
								
									1814ab4f64
								
							
						
					
					
						commit
						cebe329680
					
				|  | @ -327,6 +327,7 @@ class BuildParameters { | ||||||
|                 cachePushOverrideCommand: input_1.default.cachePushOverrideCommand(), |                 cachePushOverrideCommand: input_1.default.cachePushOverrideCommand(), | ||||||
|                 readInputOverrideCommand: input_1.default.readInputOverrideCommand(), |                 readInputOverrideCommand: input_1.default.readInputOverrideCommand(), | ||||||
|                 readInputFromOverrideList: input_1.default.readInputFromOverrideList(), |                 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_job_spec_factory_1 = __importDefault(__nccwpck_require__(1739)); | ||||||
| const kubernetes_service_account_1 = __importDefault(__nccwpck_require__(42915)); | const kubernetes_service_account_1 = __importDefault(__nccwpck_require__(42915)); | ||||||
| const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); | 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 { | class Kubernetes { | ||||||
|     constructor(buildParameters) { |     constructor(buildParameters) { | ||||||
|         this.buildGuid = ''; |         this.buildGuid = ''; | ||||||
|  | @ -1945,14 +1946,7 @@ class Kubernetes { | ||||||
|                 this.pvcName = `unity-builder-pvc-${buildGuid}`; |                 this.pvcName = `unity-builder-pvc-${buildGuid}`; | ||||||
|                 this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`; |                 this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`; | ||||||
|                 this.serviceAccountName = `service-account-${buildGuid}`; |                 this.serviceAccountName = `service-account-${buildGuid}`; | ||||||
|                 if (yield cloud_runner_system_1.CloudRunnerSystem.Run(`kubectl`)) { |                 yield kubernetes_rook_1.default.InitRook(buildParameters.kubeStorageClass); | ||||||
|                     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_storage_1.default.createPersistentVolumeClaim(buildParameters, this.pvcName, this.kubeClient, this.namespace); |                 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); |                 yield kubernetes_service_account_1.default.createServiceAccount(this.serviceAccountName, this.namespace, this.kubeClient); | ||||||
|             } |             } | ||||||
|  | @ -2220,6 +2214,103 @@ class KubernetesJobSpecFactory { | ||||||
| exports["default"] = 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: | /***/ 71586: | ||||||
|  | @ -2377,6 +2468,7 @@ const core = __importStar(__nccwpck_require__(42186)); | ||||||
| const k8s = __importStar(__nccwpck_require__(89679)); | const k8s = __importStar(__nccwpck_require__(89679)); | ||||||
| const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); | const cloud_runner_logger_1 = __importDefault(__nccwpck_require__(22855)); | ||||||
| const yaml_1 = __importDefault(__nccwpck_require__(44603)); | const yaml_1 = __importDefault(__nccwpck_require__(44603)); | ||||||
|  | const kubernetes_rook_1 = __importDefault(__nccwpck_require__(20859)); | ||||||
| class KubernetesStorage { | class KubernetesStorage { | ||||||
|     static createPersistentVolumeClaim(buildParameters, pvcName, kubeClient, namespace) { |     static createPersistentVolumeClaim(buildParameters, pvcName, kubeClient, namespace) { | ||||||
|         return __awaiter(this, void 0, void 0, function* () { |         return __awaiter(this, void 0, void 0, function* () { | ||||||
|  | @ -2441,7 +2533,7 @@ class KubernetesStorage { | ||||||
|             }; |             }; | ||||||
|             pvc.spec = { |             pvc.spec = { | ||||||
|                 accessModes: ['ReadWriteOnce'], |                 accessModes: ['ReadWriteOnce'], | ||||||
|                 storageClassName: process.env.K8s_STORAGE_CLASS || 'standard', |                 storageClassName: buildParameters.kubeStorageClass === '' ? kubernetes_rook_1.default.rookStorageName : buildParameters.kubeStorageClass, | ||||||
|                 resources: { |                 resources: { | ||||||
|                     requests: { |                     requests: { | ||||||
|                         storage: buildParameters.kubeVolumeSize, |                         storage: buildParameters.kubeVolumeSize, | ||||||
|  | @ -4088,6 +4180,9 @@ class Input { | ||||||
|     static get kubeVolumeSize() { |     static get kubeVolumeSize() { | ||||||
|         return Input.getInput('kubeVolumeSize') || '5Gi'; |         return Input.getInput('kubeVolumeSize') || '5Gi'; | ||||||
|     } |     } | ||||||
|  |     static get kubeStorageClass() { | ||||||
|  |         return Input.getInput('kubeStorageClass') || ''; | ||||||
|  |     } | ||||||
|     static ToEnvVarFormat(input) { |     static ToEnvVarFormat(input) { | ||||||
|         return input |         return input | ||||||
|             .replace(/([A-Z])/g, ' $1') |             .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 cloudRunnerCpu!: string; | ||||||
|   public kubeVolumeSize!: string; |   public kubeVolumeSize!: string; | ||||||
|   public kubeVolume!: string; |   public kubeVolume!: string; | ||||||
|  |   public kubeStorageClass!: string; | ||||||
|   public chownFilesTo!: string; |   public chownFilesTo!: string; | ||||||
|   public customJobHooks!: string; |   public customJobHooks!: string; | ||||||
|   public cachePushOverrideCommand!: string; |   public cachePushOverrideCommand!: string; | ||||||
|  | @ -133,6 +134,7 @@ class BuildParameters { | ||||||
|       cachePushOverrideCommand: Input.cachePushOverrideCommand(), |       cachePushOverrideCommand: Input.cachePushOverrideCommand(), | ||||||
|       readInputOverrideCommand: Input.readInputOverrideCommand(), |       readInputOverrideCommand: Input.readInputOverrideCommand(), | ||||||
|       readInputFromOverrideList: Input.readInputFromOverrideList(), |       readInputFromOverrideList: Input.readInputFromOverrideList(), | ||||||
|  |       kubeStorageClass: Input.kubeStorageClass, | ||||||
|     }; |     }; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -12,7 +12,7 @@ import KubernetesJobSpecFactory from './kubernetes-job-spec-factory'; | ||||||
| import KubernetesServiceAccount from './kubernetes-service-account'; | import KubernetesServiceAccount from './kubernetes-service-account'; | ||||||
| import CloudRunnerLogger from '../services/cloud-runner-logger'; | import CloudRunnerLogger from '../services/cloud-runner-logger'; | ||||||
| import { CoreV1Api } from '@kubernetes/client-node'; | 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 { | class Kubernetes implements CloudRunnerProviderInterface { | ||||||
|   private kubeConfig: k8s.KubeConfig; |   private kubeConfig: k8s.KubeConfig; | ||||||
|  | @ -51,14 +51,7 @@ class Kubernetes implements CloudRunnerProviderInterface { | ||||||
|       this.pvcName = `unity-builder-pvc-${buildGuid}`; |       this.pvcName = `unity-builder-pvc-${buildGuid}`; | ||||||
|       this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`; |       this.cleanupCronJobName = `unity-builder-cronjob-${buildGuid}`; | ||||||
|       this.serviceAccountName = `service-account-${buildGuid}`; |       this.serviceAccountName = `service-account-${buildGuid}`; | ||||||
|       if (await CloudRunnerSystem.Run(`kubectl`)) { |       await KubernetesRook.InitRook(buildParameters.kubeStorageClass); | ||||||
|         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 KubernetesStorage.createPersistentVolumeClaim( |       await KubernetesStorage.createPersistentVolumeClaim( | ||||||
|         buildParameters, |         buildParameters, | ||||||
|         this.pvcName, |         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 BuildParameters from '../../build-parameters'; | ||||||
| import CloudRunnerLogger from '../services/cloud-runner-logger'; | import CloudRunnerLogger from '../services/cloud-runner-logger'; | ||||||
| import YAML from 'yaml'; | import YAML from 'yaml'; | ||||||
|  | import KubernetesRook from './kubernetes-rook'; | ||||||
| 
 | 
 | ||||||
| class KubernetesStorage { | class KubernetesStorage { | ||||||
|   public static async createPersistentVolumeClaim( |   public static async createPersistentVolumeClaim( | ||||||
|  | @ -83,7 +84,8 @@ class KubernetesStorage { | ||||||
|     }; |     }; | ||||||
|     pvc.spec = { |     pvc.spec = { | ||||||
|       accessModes: ['ReadWriteOnce'], |       accessModes: ['ReadWriteOnce'], | ||||||
|       storageClassName: process.env.K8s_STORAGE_CLASS || 'standard', |       storageClassName: | ||||||
|  |         buildParameters.kubeStorageClass === '' ? KubernetesRook.rookStorageName : buildParameters.kubeStorageClass, | ||||||
|       resources: { |       resources: { | ||||||
|         requests: { |         requests: { | ||||||
|           storage: buildParameters.kubeVolumeSize, |           storage: buildParameters.kubeVolumeSize, | ||||||
|  |  | ||||||
|  | @ -82,6 +82,7 @@ class Input { | ||||||
|   static get region(): string { |   static get region(): string { | ||||||
|     return Input.getInput('region') || 'eu-west-2'; |     return Input.getInput('region') || 'eu-west-2'; | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|   static async githubRepo() { |   static async githubRepo() { | ||||||
|     return ( |     return ( | ||||||
|       Input.getInput('GITHUB_REPOSITORY') || |       Input.getInput('GITHUB_REPOSITORY') || | ||||||
|  | @ -274,6 +275,10 @@ class Input { | ||||||
|     return Input.getInput('kubeVolumeSize') || '5Gi'; |     return Input.getInput('kubeVolumeSize') || '5Gi'; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   static get kubeStorageClass(): string { | ||||||
|  |     return Input.getInput('kubeStorageClass') || ''; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   public static ToEnvVarFormat(input: string) { |   public static ToEnvVarFormat(input: string) { | ||||||
|     return input |     return input | ||||||
|       .replace(/([A-Z])/g, ' $1') |       .replace(/([A-Z])/g, ' $1') | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue