Merge pull request #17 from Azure/users/shigupt/addingKubectlDescribeOutputInLogs

Users/shigupt/adding kubectl describe output in logs
This commit is contained in:
shigupt202 2020-01-27 14:07:58 +05:30 коммит произвёл GitHub
Родитель a3bb31ec16 e4bc5e8873
Коммит eb22293c53
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 49 добавлений и 7 удалений

Просмотреть файл

@ -1,9 +1,10 @@
'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) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
@ -13,12 +14,20 @@ const utils = require("./utility");
const KubernetesConstants = require("../constants");
function checkManifestStability(kubectl, resources) {
return __awaiter(this, void 0, void 0, function* () {
const rolloutStatusResults = [];
let rolloutStatusHasErrors = false;
const numberOfResources = resources.length;
for (let i = 0; i < numberOfResources; i++) {
const resource = resources[i];
if (KubernetesConstants.workloadTypesWithRolloutStatus.indexOf(resource.type.toLowerCase()) >= 0) {
rolloutStatusResults.push(kubectl.checkRolloutStatus(resource.type, resource.name));
try {
var result = kubectl.checkRolloutStatus(resource.type, resource.name);
utils.checkForErrors([result]);
}
catch (ex) {
core.error(ex);
kubectl.describe(resource.type, resource.name);
rolloutStatusHasErrors = true;
}
}
if (utils.isEqual(resource.type, KubernetesConstants.KubernetesWorkload.pod, true)) {
try {
@ -26,6 +35,7 @@ function checkManifestStability(kubectl, resources) {
}
catch (ex) {
core.warning(`CouldNotDeterminePodStatus ${JSON.stringify(ex)}`);
kubectl.describe(resource.type, resource.name);
}
}
if (utils.isEqual(resource.type, KubernetesConstants.DiscoveryAndLoadBalancerResource.service, true)) {
@ -44,10 +54,13 @@ function checkManifestStability(kubectl, resources) {
}
catch (ex) {
core.warning(`CouldNotDetermineServiceStatus of: ${resource.name} Error: ${JSON.stringify(ex)}`);
kubectl.describe(resource.type, resource.name);
}
}
}
utils.checkForErrors(rolloutStatusResults);
if (rolloutStatusHasErrors) {
throw new Error('RolloutStatusTimedout');
}
});
}
exports.checkManifestStability = checkManifestStability;
@ -56,6 +69,7 @@ function checkPodStatus(kubectl, podName) {
const sleepTimeout = 10 * 1000; // 10 seconds
const iterations = 60; // 60 * 10 seconds timeout = 10 minutes max timeout
let podStatus;
let kubectlDescribeNeeded = false;
for (let i = 0; i < iterations; i++) {
yield utils.sleep(sleepTimeout);
core.debug(`Polling for pod status: ${podName}`);
@ -71,18 +85,26 @@ function checkPodStatus(kubectl, podName) {
if (isPodReady(podStatus)) {
console.log(`pod/${podName} is successfully rolled out`);
}
else {
kubectlDescribeNeeded = true;
}
break;
case 'Pending':
if (!isPodReady(podStatus)) {
core.warning(`pod/${podName} rollout status check timedout`);
kubectlDescribeNeeded = true;
}
break;
case 'Failed':
core.error(`pod/${podName} rollout failed`);
kubectlDescribeNeeded = true;
break;
default:
core.warning(`pod/${podName} rollout status: ${podStatus.phase}`);
}
if (kubectlDescribeNeeded) {
kubectl.describe('pod', podName);
}
});
}
exports.checkPodStatus = checkPodStatus;

Просмотреть файл

@ -6,18 +6,26 @@ import * as KubernetesConstants from '../constants';
import { Kubectl, Resource } from '../kubectl-object-model';
export async function checkManifestStability(kubectl: Kubectl, resources: Resource[]): Promise<void> {
const rolloutStatusResults = [];
let rolloutStatusHasErrors = false;
const numberOfResources = resources.length;
for (let i = 0; i < numberOfResources; i++) {
const resource = resources[i];
if (KubernetesConstants.workloadTypesWithRolloutStatus.indexOf(resource.type.toLowerCase()) >= 0) {
rolloutStatusResults.push(kubectl.checkRolloutStatus(resource.type, resource.name));
try {
var result = kubectl.checkRolloutStatus(resource.type, resource.name);
utils.checkForErrors([result]);
} catch (ex) {
core.error(ex);
kubectl.describe(resource.type, resource.name);
rolloutStatusHasErrors = true;
}
}
if (utils.isEqual(resource.type, KubernetesConstants.KubernetesWorkload.pod, true)) {
try {
await checkPodStatus(kubectl, resource.name);
} catch (ex) {
core.warning(`CouldNotDeterminePodStatus ${JSON.stringify(ex)}`);
kubectl.describe(resource.type, resource.name);
}
}
if (utils.isEqual(resource.type, KubernetesConstants.DiscoveryAndLoadBalancerResource.service, true)) {
@ -34,17 +42,21 @@ export async function checkManifestStability(kubectl: Kubectl, resources: Resour
}
} catch (ex) {
core.warning(`CouldNotDetermineServiceStatus of: ${resource.name} Error: ${JSON.stringify(ex)}`);
kubectl.describe(resource.type, resource.name);
}
}
}
utils.checkForErrors(rolloutStatusResults);
if (rolloutStatusHasErrors) {
throw new Error('RolloutStatusTimedout');
}
}
export async function checkPodStatus(kubectl: Kubectl, podName: string): Promise<void> {
const sleepTimeout = 10 * 1000; // 10 seconds
const iterations = 60; // 60 * 10 seconds timeout = 10 minutes max timeout
let podStatus;
let kubectlDescribeNeeded = false;
for (let i = 0; i < iterations; i++) {
await utils.sleep(sleepTimeout);
core.debug(`Polling for pod status: ${podName}`);
@ -59,19 +71,27 @@ export async function checkPodStatus(kubectl: Kubectl, podName: string): Promise
case 'Running':
if (isPodReady(podStatus)) {
console.log(`pod/${podName} is successfully rolled out`);
} else {
kubectlDescribeNeeded = true;
}
break;
case 'Pending':
if (!isPodReady(podStatus)) {
core.warning(`pod/${podName} rollout status check timedout`);
kubectlDescribeNeeded = true;
}
break;
case 'Failed':
core.error(`pod/${podName} rollout failed`);
kubectlDescribeNeeded = true;
break;
default:
core.warning(`pod/${podName} rollout status: ${podStatus.phase}`);
}
if(kubectlDescribeNeeded) {
kubectl.describe('pod', podName);
}
}
function getPodStatus(kubectl: Kubectl, podName: string) {