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