Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add user feedback when job versions don't match master #3516

Merged
merged 7 commits into from
Jan 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/teraslice-cli/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "teraslice-cli",
"displayName": "Teraslice CLI",
"version": "0.60.0",
"version": "0.60.1",
"description": "Command line manager for teraslice jobs, assets, and cluster references.",
"keywords": [
"teraslice"
Expand Down
2 changes: 1 addition & 1 deletion packages/teraslice-cli/src/cmds/tjm/await.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
import { CMD } from '../../interfaces';
import YargsOptions from '../../helpers/yargs-options';
import Config from '../../helpers/config';
import Jobs from '../../helpers/jobs';
import { validateAndUpdateCliConfig } from '../../helpers/tjm-util';
import Jobs from '../../helpers/jobs';

const yargsOptions = new YargsOptions();

Expand Down
2 changes: 1 addition & 1 deletion packages/teraslice-cli/src/cmds/tjm/errors.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { CMD } from '../../interfaces';
import YargsOptions from '../../helpers/yargs-options';
import Config from '../../helpers/config';
import Jobs from '../../helpers/jobs';
import { validateAndUpdateCliConfig } from '../../helpers/tjm-util';
import Jobs from '../../helpers/jobs';

const yargsOptions = new YargsOptions();

Expand Down
2 changes: 1 addition & 1 deletion packages/teraslice-cli/src/cmds/tjm/pause.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { CMD } from '../../interfaces';
import YargsOptions from '../../helpers/yargs-options';
import Config from '../../helpers/config';
import Jobs from '../../helpers/jobs';
import { validateAndUpdateCliConfig } from '../../helpers/tjm-util';
import Jobs from '../../helpers/jobs';

const yargsOptions = new YargsOptions();

Expand Down
3 changes: 1 addition & 2 deletions packages/teraslice-cli/src/cmds/tjm/restart.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { CMD } from '../../interfaces';
import YargsOptions from '../../helpers/yargs-options';
import Config from '../../helpers/config';
import Jobs from '../../helpers/jobs';
import { validateAndUpdateCliConfig } from '../../helpers/tjm-util';
import Jobs from '../../helpers/jobs';

const yargsOptions = new YargsOptions();

Expand All @@ -26,7 +26,6 @@ export = {
},
async handler(argv) {
const cliConfig = new Config(argv);

validateAndUpdateCliConfig(cliConfig);

const jobs = new Jobs(cliConfig);
Expand Down
2 changes: 1 addition & 1 deletion packages/teraslice-cli/src/cmds/tjm/resume.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { CMD } from '../../interfaces';
import YargsOptions from '../../helpers/yargs-options';
import Config from '../../helpers/config';
import Jobs from '../../helpers/jobs';
import { validateAndUpdateCliConfig } from '../../helpers/tjm-util';
import Jobs from '../../helpers/jobs';

const yargsOptions = new YargsOptions();

Expand Down
4 changes: 3 additions & 1 deletion packages/teraslice-cli/src/cmds/tjm/start.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { validateAndUpdateCliConfig } from '../../helpers/tjm-util';
import Config from '../../helpers/config';
import { CMD } from '../../interfaces';
import Jobs from '../../helpers/jobs';
import YargsOptions from '../../helpers/yargs-options';
import Jobs from '../../helpers/jobs';

const yargsOptions = new YargsOptions();

Expand Down Expand Up @@ -31,6 +31,8 @@ export = {

const jobs = new Jobs(cliConfig);

jobs.verifyK8sImageContinuity(cliConfig);

await jobs.initialize();

await jobs.start();
Expand Down
2 changes: 1 addition & 1 deletion packages/teraslice-cli/src/cmds/tjm/status.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { CMD } from '../../interfaces';
import YargsOptions from '../../helpers/yargs-options';
import Config from '../../helpers/config';
import Jobs from '../../helpers/jobs';
import { validateAndUpdateCliConfig } from '../../helpers/tjm-util';
import Jobs from '../../helpers/jobs';

const yargsOptions = new YargsOptions();

Expand Down
2 changes: 1 addition & 1 deletion packages/teraslice-cli/src/cmds/tjm/stop.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { CMD } from '../../interfaces';
import { validateAndUpdateCliConfig } from '../../helpers/tjm-util';
import Config from '../../helpers/config';
import Jobs from '../../helpers/jobs';
import YargsOptions from '../../helpers/yargs-options';
import Jobs from '../../helpers/jobs';

const yargsOptions = new YargsOptions();

Expand Down
2 changes: 1 addition & 1 deletion packages/teraslice-cli/src/cmds/tjm/view.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { CMD } from '../../interfaces';
import YargsOptions from '../../helpers/yargs-options';
import Config from '../../helpers/config';
import Jobs from '../../helpers/jobs';
import { validateAndUpdateCliConfig } from '../../helpers/tjm-util';
import Jobs from '../../helpers/jobs';

const yargsOptions = new YargsOptions();

Expand Down
39 changes: 39 additions & 0 deletions packages/teraslice-cli/src/helpers/jobs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,33 @@ import { JobConfig } from '@terascope/job-components';
import TerasliceUtil from './teraslice-util';
import Display from '../helpers/display';
import reply from '../helpers/reply';
import { getJobConfigFromFile } from './tjm-util';
import Config from './config';

import {
JobMetadata,
JobConfigFile,
StatusUpdate,
RegisteredStatus
} from '../interfaces';

const display = new Display();

/// Extracts verison of teraslice out of kubernetes image name
function getK8sJobVersion(imageTag: string | any): string {
// Define the version number regex pattern
const versionRegex = /v(\d+\.\d+\.\d+)/;

// Use match to find the first match in the input string
// It's important that the teraslice version is first in
// the image tag or it will give an incorrect verion number
const match = imageTag.match(versionRegex);

// If a match is found, return the entire matched version
// otherwise, return error string
return match ? match[0] : 'Version number not available';
}

export default class Jobs {
/**
*
Expand Down Expand Up @@ -68,6 +86,27 @@ export default class Jobs {
}
}

async verifyK8sImageContinuity(cliConfig: Config) {
/// Grab all job files and verify each
const clusterStats = await this.teraslice.client.cluster.info();
for (const jobFile of cliConfig.args.jobFile) {
const jobConfig = getJobConfigFromFile(cliConfig.args.srcDir, jobFile) as JobConfigFile;
if (
clusterStats.clustering_type === 'kubernetes'
&& jobConfig.kubernetes_image !== undefined
&& !jobConfig.kubernetes_image?.includes(clusterStats.teraslice_version)
&& !jobConfig.kubernetes_image?.includes('dev-')
) {
const k8sJobVersion = getK8sJobVersion(jobConfig.kubernetes_image);
reply.warning('--------');
reply.warning('Teraslice Cluster is using a different version of teraslice than this job');
reply.warning(`Cluster: ${this.teraslice.config.clusterUrl}, TS version: ${clusterStats.teraslice_version}`);
reply.warning(`Job: ${jobConfig.name}, TS Version: ${k8sJobVersion}`);
reply.warning('--------');
}
}
}

async initialize() {
await this.getJobMetadata();
}
Expand Down
2 changes: 2 additions & 0 deletions packages/teraslice-cli/src/helpers/tjm-util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ function fileMetadataToCliArgs(cliConfig: Config, jobConfig: JobConfigFile) {

export async function updateJobConfig(cliConfig: Config) {
const job = new Jobs(cliConfig);
job.verifyK8sImageContinuity(cliConfig);

for (const jobFile of cliConfig.args.jobFile) {
const jobConfig = getJobConfigFromFile(cliConfig.args.srcDir, jobFile) as JobConfigFile;
Expand Down Expand Up @@ -103,6 +104,7 @@ export async function updateJobConfig(cliConfig: Config) {

export async function registerJobToCluster(cliConfig: Config) {
const job = new Jobs(cliConfig);
job.verifyK8sImageContinuity(cliConfig);

for (const jobFile of cliConfig.args.jobFile) {
const jobConfig = getJobConfigFromFile(cliConfig.args.srcDir, jobFile) as JobConfigFile;
Expand Down
Loading