Apply k8s files for rook

pull/353/head
Frostebite 2022-03-13 23:32:37 +00:00
parent 1814ab4f64
commit cebe329680
8 changed files with 199 additions and 21 deletions

115
dist/index.js vendored
View File

@ -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')

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

1
sample.txt 100644
View File

@ -0,0 +1 @@
sample

View File

@ -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,
};
}

View File

@ -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,

View File

@ -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;

View File

@ -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,

View File

@ -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')