diff --git a/.pipelines/azure_pipeline_validation_appmonitoring.yaml b/.pipelines/azure_pipeline_validation_appmonitoring.yaml index 75605ba67..1063c6d02 100644 --- a/.pipelines/azure_pipeline_validation_appmonitoring.yaml +++ b/.pipelines/azure_pipeline_validation_appmonitoring.yaml @@ -56,8 +56,6 @@ jobs: fullImageName: ${{ variables.repoImageName }}:$(imageTag) javaTestAppImageName: 'aicommon.azurecr.io/demoaks-java-app:latest' javaTestAppName: 'test-app-java' - dotnetTestAppImageName: 'aicommon.azurecr.io/demoaks-dotnet-app:latest' - dotnetTestAppName: 'test-app-dotnet' nodeTestAppImageName: 'aicommon.azurecr.io/demoaks-nodejs-app:latest' nodeTestAppName: 'test-app-nodejs' testNamespace: 'test-ns' @@ -205,16 +203,13 @@ jobs: az aks get-credentials --resource-group ${{ variables.AKSResourceGroup }} --name ${{ variables.AKSResourceName }} export JAVA_TEST_IMAGE_NAME=${{ variables.javaTestAppImageName }} - export DOTNET_TEST_IMAGE_NAME=${{ variables.dotnetTestAppImageName }} export NODEJS_TEST_IMAGE_NAME=${{ variables.nodeTestAppImageName }} export TEST_NS="${{ variables.testNamespace }}" export AI_CONNECTION_STRING="${{ variables.aiConnectionString }}" - export DOTNET_TEST_APP_NAME="${{ variables.dotnetTestAppName }}" export JAVA_TEST_APP_NAME="${{ variables.javaTestAppName }}" export NODEJS_TEST_APP_NAME="${{ variables.nodeTestAppName }}" cat java-test-app.yaml | envsubst | kubectl delete -f - - cat dotnet-test-app.yaml | envsubst | kubectl delete -f - cat node-test-app.yaml | envsubst | kubectl delete -f - cat appmonitoring-cr.yaml | envsubst | kubectl delete -f - @@ -228,7 +223,6 @@ jobs: sleep 10 cat java-test-app.yaml | envsubst | kubectl apply -f - - cat dotnet-test-app.yaml | envsubst | kubectl apply -f - cat node-test-app.yaml | envsubst | kubectl apply -f - echo "Wait for 60s for charts to be applied..." @@ -247,7 +241,7 @@ jobs: az aks get-credentials --resource-group ${{ variables.AKSResourceGroup }} --name ${{ variables.AKSResourceName }} sudo chmod u+x ./validate-mutation.sh - ./validate-mutation.sh "test-app-dotnet" "test-app-java" "test-app-nodejs" "test-ns" + ./validate-mutation.sh "test-app-java" "test-app-nodejs" "test-ns" - task: AzureCLI@2 displayName: "Check test apps are sending telemetry to AI" @@ -260,7 +254,6 @@ jobs: pwd az account set --subscription ${{ variables.subscription }} az aks get-credentials --resource-group ${{ variables.AKSResourceGroup }} --name ${{ variables.AKSResourceName }} - export DOTNET_TEST_APP_NAME="${{ variables.dotnetTestAppName }}" export JAVA_TEST_APP_NAME="${{ variables.javaTestAppName }}" export NODEJS_TEST_APP_NAME="${{ variables.nodeTestAppName }}" @@ -268,7 +261,7 @@ jobs: sleep 180 sudo chmod u+x ./validate_ai.sh - ./validate_ai.sh "test-app-dotnet" "test-app-java" "test-app-nodejs" "${{ variables.aiResourceId }}" "test-ns" + ./validate_ai.sh "test-app-java" "test-app-nodejs" "${{ variables.aiResourceId }}" "test-ns" - task: AzureCLI@2 displayName: "Retag the image as ready to deploy" diff --git a/appmonitoring/scripts/validate-mutation.sh b/appmonitoring/scripts/validate-mutation.sh index f12536d5b..f21869be9 100644 --- a/appmonitoring/scripts/validate-mutation.sh +++ b/appmonitoring/scripts/validate-mutation.sh @@ -1,19 +1,17 @@ -DEPLOYMENT_deployment#!/bin/bash +#!/bin/bash # Define the pod name and namespace -DEPLOYMENT_DOTNET_NAME=$1 -DEPLOYMENT_JAVA_NAME=$2 -DEPLOYMENT_NODEJS_NAME=$3 -NAMESPACE=$4 +DEPLOYMENT_JAVA_NAME=$1 +DEPLOYMENT_NODEJS_NAME=$2 +NAMESPACE=$3 # Define the property to check for PROPERTY="APPLICATIONINSIGHTS_CONNECTION_STRING" -DOTNET_DEPLOYMENT_NAME=$(kubectl get deployment -n "$NAMESPACE" -o custom-columns=NAME:.metadata.name | grep "$DEPLOYMENT_DOTNET_NAME") JAVA_DEPLOYMENT_NAME=$(kubectl get deployment -n "$NAMESPACE" -o custom-columns=NAME:.metadata.name | grep "$DEPLOYMENT_JAVA_NAME") NODEJS_DEPLOYMENT_NAME=$(kubectl get deployment -n "$NAMESPACE" -o custom-columns=NAME:.metadata.name | grep "$DEPLOYMENT_NODEJS_NAME") -checkit() { +checkMutation() { local deploymentName="$1" # The first argument to the function is stored in 'name' DEPLOYMENT_YAML=$(kubectl get deployment "$deploymentName" -n "$NAMESPACE" -o yaml) @@ -26,6 +24,5 @@ checkit() { fi } -checkit "$DEPLOYMENT_DOTNET_NAME" -checkit "$DEPLOYMENT_JAVA_NAME" -checkit "$DEPLOYMENT_NODEJS_NAME" +checkMutation "$DEPLOYMENT_JAVA_NAME" +checkMutation "$DEPLOYMENT_NODEJS_NAME" diff --git a/appmonitoring/scripts/validate_ai.sh b/appmonitoring/scripts/validate_ai.sh index 86da0b2f6..3210ce5bc 100644 --- a/appmonitoring/scripts/validate_ai.sh +++ b/appmonitoring/scripts/validate_ai.sh @@ -1,15 +1,13 @@ #!/bin/bash -DEPLOYMENT_DOTNET_NAME=$1 -DEPLOYMENT_JAVA_NAME=$2 -DEPLOYMENT_NODEJS_NAME=$3 -AI_RES_ID=$4 -$NS=$5 +DEPLOYMENT_JAVA_NAME=$1 +DEPLOYMENT_NODEJS_NAME=$2 +AI_RES_ID=$3 +NAMESPACE=$4 -POD_DOTNET_NAME=$(kubectl get pods -n test-ns -l app=$DEPLOYMENT_DOTNET_NAME --no-headers -o custom-columns=":metadata.name" | head -n 1) -POD_JAVA_NAME=$(kubectl get pods -n test-ns -l app=$DEPLOYMENT_JAVA_NAME --no-headers -o custom-columns=":metadata.name" | head -n 1) -POD_NODEJS_NAME=$(kubectl get pods -n test-ns -l app=$DEPLOYMENT_NODEJS_NAME --no-headers -o custom-columns=":metadata.name" | head -n 1) +POD_JAVA_NAME=$(kubectl get pods -n "$NAMESPACE" -l app=$DEPLOYMENT_JAVA_NAME --no-headers -o custom-columns=":metadata.name" | head -n 1) +POD_NODEJS_NAME=$(kubectl get pods -n "$NAMESPACE" -l app=$DEPLOYMENT_NODEJS_NAME --no-headers -o custom-columns=":metadata.name" | head -n 1) # Get an access token @@ -17,7 +15,7 @@ result_rsp=$(curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-ver # echo "Result: $result_rsp" access_token=$(echo $result_rsp | jq -r '.access_token') -echo $AI_RES_ID +echo "$AI_RES_ID" # Define your variables url="https://api.loganalytics.io/v1$AI_RES_ID/query" @@ -35,7 +33,7 @@ verify_AI_telemetry() { } }"; - echo $json_body + echo "$json_body" # Make the POST request response=$(curl -s -X POST $url \ @@ -55,7 +53,6 @@ verify_AI_telemetry() { fi } -verify_AI_telemetry "$POD_DOTNET_NAME" "dotnet" verify_AI_telemetry "$POD_JAVA_NAME" "java" verify_AI_telemetry "$POD_NODEJS_NAME" "nodejs" diff --git a/appmonitoring/ts/src/Mutations.ts b/appmonitoring/ts/src/Mutations.ts index bea94e8d4..aaada08ed 100644 --- a/appmonitoring/ts/src/Mutations.ts +++ b/appmonitoring/ts/src/Mutations.ts @@ -5,16 +5,11 @@ */ export class Mutations { // name of the init container - private static initContainerNameDotNet = "azure-monitor-auto-instrumentation-dotnet"; private static initContainerNameJava = "azure-monitor-auto-instrumentation-java"; private static initContainerNameNodeJs = "azure-monitor-auto-instrumentation-nodejs"; // agent image private static agentImageCommonPrefix = "mcr.microsoft.com/applicationinsights"; - private static agentImageDotNet = { - repositoryPath: "opentelemetry-auto-instrumentation/dotnet", - imageTag: "1.0.0-rc.3" - }; private static agentImageNodeJs = { repositoryPath: "opentelemetry-auto-instrumentation/nodejs", imageTag: "3.2.4" @@ -25,17 +20,14 @@ export class Mutations { }; // path on agent image to copy from - private static imagePathDotNet = "/dotnet-tracer-home/."; private static imagePathJava = "/agents/java/."; private static imagePathNodeJs = "/agents/nodejs/."; // agent volume (where init containers copy agent binaries to) - private static agentVolumeDotNet = "azure-monitor-auto-instrumentation-volume-dotnet"; private static agentVolumeJava = "azure-monitor-auto-instrumentation-volume-java"; private static agentVolumeNodeJs = "azure-monitor-auto-instrumentation-volume-nodejs"; // agent volume mount path (where customer app's runtime loads agents from) - private static agentVolumeMountPathDotNet = "/azure-monitor-auto-instrumentation-dotnet"; private static agentVolumeMountPathJava = "/azure-monitor-auto-instrumentation-java"; private static agentVolumeMountPathNodeJs = "/azure-monitor-auto-instrumentation-nodejs"; @@ -53,29 +45,6 @@ export class Mutations { for (let i = 0; i < platforms.length; i++) { switch (platforms[i] as AutoInstrumentationPlatforms) { - case AutoInstrumentationPlatforms.DotNet: - containers.push({ - name: Mutations.initContainerNameDotNet, - image: Mutations.generateImagePath(platforms[i], imageRepoPath), - command: ["cp"], - args: ["-a", Mutations.imagePathDotNet, Mutations.agentVolumeMountPathDotNet], // cp -a - volumeMounts: [{ - name: Mutations.agentVolumeDotNet, - mountPath: Mutations.agentVolumeMountPathDotNet - }], - resources: { - requests: { - cpu: "100m", - memory: "128Mi" - }, - limits: { - cpu: "2", - memory: "1Gi" - } - } - }); - break; - case AutoInstrumentationPlatforms.Java: containers.push({ name: Mutations.initContainerNameJava, @@ -202,52 +171,6 @@ ${ownerUidAttribute}` // platform-specific environment variables for (let i = 0; i < platforms.length; i++) { switch (platforms[i] as AutoInstrumentationPlatforms) { - case AutoInstrumentationPlatforms.DotNet: - returnValue.push(...[ - { - name: "OTEL_DOTNET_AUTO_LOG_DIRECTORY", - value: Mutations.agentLogsVolumeMountPath, - platformSpecific: platforms[i] - }, - { - name: "DOTNET_STARTUP_HOOKS", - value: `${Mutations.agentVolumeMountPathDotNet}/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll`, - platformSpecific: platforms[i] - }, - { - name: "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES", - value: "OpenTelemetry.AutoInstrumentation.AspNetCoreBootstrapper", - platformSpecific: platforms[i] - }, - { - name: "DOTNET_ADDITIONAL_DEPS", - value: `${Mutations.agentVolumeMountPathDotNet}/AdditionalDeps`, - platformSpecific: platforms[i] - }, - { - name: "DOTNET_SHARED_STORE", - value: `${Mutations.agentVolumeMountPathDotNet}/store`, - platformSpecific: platforms[i] - }, - { - name: "OTEL_DOTNET_AUTO_HOME", - value: `${Mutations.agentVolumeMountPathDotNet}/`, - platformSpecific: platforms[i] - }, - { - name: "OTEL_DOTNET_AUTO_PLUGINS", - value: "Azure.Monitor.OpenTelemetry.AutoInstrumentation.AzureMonitorPlugin, Azure.Monitor.OpenTelemetry.AutoInstrumentation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", - platformSpecific: platforms[i] - }, - { - name: "OTEL_DOTNET_AUTO_LOGS_ENABLED", - value: "false", - platformSpecific: platforms[i], - doNotSet: !disableAppLogs - }] - ); - break; - case AutoInstrumentationPlatforms.Java: { returnValue.push(...[{ @@ -296,13 +219,6 @@ ${ownerUidAttribute}` for (let i = 0; i < platforms.length; i++) { switch (platforms[i] as AutoInstrumentationPlatforms) { - case AutoInstrumentationPlatforms.DotNet: - volumeMounts.push({ - name: Mutations.agentVolumeDotNet, - mountPath: Mutations.agentVolumeMountPathDotNet - }); - break; - case AutoInstrumentationPlatforms.Java: volumeMounts.push({ name: Mutations.agentVolumeJava, @@ -325,7 +241,6 @@ ${ownerUidAttribute}` let logVolumeMounted = false; for (let i = 0; i < platforms.length; i++) { switch (platforms[i] as AutoInstrumentationPlatforms) { - case AutoInstrumentationPlatforms.DotNet: case AutoInstrumentationPlatforms.Java: case AutoInstrumentationPlatforms.NodeJs: if(!logVolumeMounted) { @@ -350,13 +265,6 @@ ${ownerUidAttribute}` for (let i = 0; i < platforms.length; i++) { switch (platforms[i] as AutoInstrumentationPlatforms) { - case AutoInstrumentationPlatforms.DotNet: - volumes.push({ - name: Mutations.agentVolumeDotNet, - emptyDir: {} - }); - break; - case AutoInstrumentationPlatforms.Java: volumes.push({ name: Mutations.agentVolumeJava, @@ -379,7 +287,6 @@ ${ownerUidAttribute}` let logVolumeAdded = false; for (let i = 0; i < platforms.length; i++) { switch (platforms[i] as AutoInstrumentationPlatforms) { - case AutoInstrumentationPlatforms.DotNet: case AutoInstrumentationPlatforms.Java: case AutoInstrumentationPlatforms.NodeJs: if(!logVolumeAdded) { @@ -404,8 +311,6 @@ ${ownerUidAttribute}` } switch (platform as AutoInstrumentationPlatforms) { - case AutoInstrumentationPlatforms.DotNet: - return `${imagePath ?? Mutations.agentImageCommonPrefix}/${Mutations.agentImageDotNet.repositoryPath}:${Mutations.agentImageDotNet.imageTag}`; case AutoInstrumentationPlatforms.Java: return `${imagePath ?? Mutations.agentImageCommonPrefix}/${Mutations.agentImageJava.repositoryPath}:${Mutations.agentImageJava.imageTag}`; case AutoInstrumentationPlatforms.NodeJs: diff --git a/appmonitoring/ts/src/Mutator.ts b/appmonitoring/ts/src/Mutator.ts index ec527f2b6..a74898c16 100644 --- a/appmonitoring/ts/src/Mutator.ts +++ b/appmonitoring/ts/src/Mutator.ts @@ -145,11 +145,10 @@ export class Mutator { * Based on the admission review's inject-* annotations and available CRs, picks a CR to be applied to the admission review */ private pickCR(): string { - const injectDotNetAnnotation: string = this.admissionReview.request.object.spec.template.metadata?.annotations?.["instrumentation.opentelemetry.io/inject-dotnet"]; const injectJavaAnnotation: string = this.admissionReview.request.object.spec.template.metadata?.annotations?.["instrumentation.opentelemetry.io/inject-java"]; const injectNodeJsAnnotation: string = this.admissionReview.request.object.spec.template.metadata?.annotations?.["instrumentation.opentelemetry.io/inject-nodejs"]; - const injectAnnotationValues: string[] = [injectDotNetAnnotation, injectJavaAnnotation, injectNodeJsAnnotation]; + const injectAnnotationValues: string[] = [injectJavaAnnotation, injectNodeJsAnnotation]; // if any of the annotations contain a value other than "true" or "false", that must be the same value for all annotations, we can't apply multiple CRs to the same pod const specificCRNames: string[] = injectAnnotationValues.filter(value => value && value.toLowerCase() != "true" && value.toLowerCase() != "false", this); @@ -171,11 +170,10 @@ export class Mutator { // assuming annotation set is valid // annotations are on the pod template spec - const injectDotNetAnnotation: string = this.admissionReview.request.object.spec.template.metadata?.annotations?.["instrumentation.opentelemetry.io/inject-dotnet"]; const injectJavaAnnotation: string = this.admissionReview.request.object.spec.template.metadata?.annotations?.["instrumentation.opentelemetry.io/inject-java"]; const injectNodeJsAnnotation: string = this.admissionReview.request.object.spec.template.metadata?.annotations?.["instrumentation.opentelemetry.io/inject-nodejs"]; - const injectAnnotationValues: string[] = [injectDotNetAnnotation, injectJavaAnnotation, injectNodeJsAnnotation]; + const injectAnnotationValues: string[] = [injectJavaAnnotation, injectNodeJsAnnotation]; if(injectAnnotationValues.filter(value => value).length == 0) { // no annotations specified, use platform list from the CR @@ -185,10 +183,6 @@ export class Mutator { const platforms: AutoInstrumentationPlatforms[] = []; - if (injectDotNetAnnotation && injectDotNetAnnotation.toLowerCase() !== "false") { - platforms.push(AutoInstrumentationPlatforms.DotNet); - } - if (injectJavaAnnotation && injectJavaAnnotation.toLowerCase() !== "false") { platforms.push(AutoInstrumentationPlatforms.Java); } diff --git a/appmonitoring/ts/src/README.md b/appmonitoring/ts/src/README.md index f1f24474b..c4a96d3f2 100644 --- a/appmonitoring/ts/src/README.md +++ b/appmonitoring/ts/src/README.md @@ -1,3 +1,13 @@ # MutatingWebhook +# Making a change to the image +1. Prepare a change in a branch made off of _ai_prod_ branch. All work is confined within _appmonitoring/ts/src_. +2. Make sure the branch builds locally with _build.cmd_. +3. Build and push the image to a test ACR by running _dockerBuild.cmd v0_ where _v0_ is the image tag. +4. Create a standalone environment of AKS RP to test the change, or test it directly on an AKS cluster by plugging the modified image into a test workload. +5. Merge a PR into the _ai_prod_ branch. +6. Prepare a GitHub release following the _semver_ conventions. +7. Build and push the image to MCR by running the [ContainerInsights-MultiArch-MergedBranches-AppMonitoring](https://github-private.visualstudio.com/microsoft/_build?definitionId=539) pipeline. +8. Merge a PR into the AKS RP repo that updates the version of the image used. +9. Follow daily and weekly rollouts of AKS RP and watch change propagation on the dashboard. \ No newline at end of file diff --git a/appmonitoring/ts/src/RequestDefinition.ts b/appmonitoring/ts/src/RequestDefinition.ts index d70510630..b0befed12 100644 --- a/appmonitoring/ts/src/RequestDefinition.ts +++ b/appmonitoring/ts/src/RequestDefinition.ts @@ -30,7 +30,6 @@ export interface IInstrumentationState { export const InstrumentationAnnotationName = "monitor.azure.com/instrumentation"; export const EnableApplicationLogsAnnotationName = "monitor.azure.com/enable-application-logs"; export interface IAnnotations { - "instrumentation.opentelemetry.io/inject-dotnet"?: string; "instrumentation.opentelemetry.io/inject-java"?: string; "instrumentation.opentelemetry.io/inject-nodejs"?: string; @@ -176,7 +175,6 @@ export class PodInfo { } export enum AutoInstrumentationPlatforms { - DotNet = "DotNet", Java = "Java", NodeJs = "NodeJs" } diff --git a/appmonitoring/ts/src/package-lock.json b/appmonitoring/ts/src/package-lock.json index cf5dd839c..3c264efae 100644 --- a/appmonitoring/ts/src/package-lock.json +++ b/appmonitoring/ts/src/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@kubernetes/client-node": "^0.20.0", + "@kubernetes/client-node": "^0.22.1", "@types/node": "20.2.4", "@types/npm": "^7.19.0", "applicationinsights": "^2.7.0", @@ -829,6 +829,106 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1261,30 +1361,60 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jsep-plugin/assignment": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.2.1.tgz", + "integrity": "sha512-gaHqbubTi29aZpVbBlECRpmdia+L5/lh2BwtIJTmtxdbecEyyX/ejAOg7eQDGNvGOUmPY7Z2Yxdy9ioyH/VJeA==", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" + } + }, + "node_modules/@jsep-plugin/regex": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.3.tgz", + "integrity": "sha512-XfZgry4DwEZvSFtS/6Y+R48D7qJYJK6R9/yJFyUFHCIUMEEHuJ4X95TDgJp5QkmzfLYvapMPzskV5HpIDrREug==", + "engines": { + "node": ">= 10.16.0" + }, + "peerDependencies": { + "jsep": "^0.4.0||^1.0.0" + } + }, "node_modules/@kubernetes/client-node": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.20.0.tgz", - "integrity": "sha512-xxlv5GLX4FVR/dDKEsmi4SPeuB49aRc35stndyxcC73XnUEEwF39vXbROpHOirmDse8WE9vxOjABnSVS+jb7EA==", + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.22.1.tgz", + "integrity": "sha512-bNz2uoxJTA/m10h2TsM5e021I9OndpxYYj5hGdHnrmhA+Dk56ohhbbvnJz7TADTEgyBHQ6NAT0QrILypbdFusQ==", "dependencies": { "@types/js-yaml": "^4.0.1", - "@types/node": "^20.1.1", + "@types/node": "^22.0.0", "@types/request": "^2.47.1", "@types/ws": "^8.5.3", "byline": "^5.0.0", "isomorphic-ws": "^5.0.0", "js-yaml": "^4.1.0", - "jsonpath-plus": "^7.2.0", + "jsonpath-plus": "^10.0.0", "request": "^2.88.0", "rfc4648": "^1.3.0", "stream-buffers": "^3.0.2", - "tar": "^6.1.11", + "tar": "^7.0.0", "tslib": "^2.4.1", - "ws": "^8.11.0" + "ws": "^8.18.0" }, "optionalDependencies": { "openid-client": "^5.3.0" } }, + "node_modules/@kubernetes/client-node/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "dependencies": { + "undici-types": "~6.19.2" + } + }, "node_modules/@microsoft/applicationinsights-web-snippet": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.0.1.tgz", @@ -1416,6 +1546,15 @@ "node": ">=14" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -1928,7 +2067,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -1937,7 +2075,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2203,8 +2340,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", @@ -2372,11 +2508,11 @@ } }, "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/ci-info": { @@ -2454,7 +2590,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2465,8 +2600,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/combined-stream": { "version": "1.0.8", @@ -2535,7 +2669,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2683,6 +2816,11 @@ "node": ">=6.0.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -2736,8 +2874,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/error-ex": { "version": "1.3.2", @@ -3176,6 +3313,32 @@ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -3210,33 +3373,6 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fs-minipass/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -3599,7 +3735,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -3663,8 +3798,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isomorphic-ws": { "version": "5.0.0", @@ -3745,6 +3879,20 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jake": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", @@ -4349,6 +4497,14 @@ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, + "node_modules/jsep": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.3.9.tgz", + "integrity": "sha512-i1rBX5N7VPl0eYb6+mHNp52sEuaS2Wi8CDYx1X5sn9naevL78+265XJqy1qENEk7mRKwS06NHpUqiBwR7qeodw==", + "engines": { + "node": ">= 10.16.0" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -4415,11 +4571,20 @@ } }, "node_modules/jsonpath-plus": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz", - "integrity": "sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.0.0.tgz", + "integrity": "sha512-v7j76HGp/ibKlXYeZ7UrfCLSNDaBWuJMA0GaMjA4sZJtCtY89qgPyToDDcl2zdeHh4B5q/B3g2pQdW76fOg/dA==", + "dependencies": { + "@jsep-plugin/assignment": "^1.2.1", + "@jsep-plugin/regex": "^1.0.3", + "jsep": "^1.3.9" + }, + "bin": { + "jsonpath": "bin/jsonpath-cli.js", + "jsonpath-plus": "bin/jsonpath-cli.js" + }, "engines": { - "node": ">=12.0.0" + "node": ">=18.0.0" } }, "node_modules/jsprim": { @@ -4631,50 +4796,92 @@ } }, "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", + "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "minipass": "^7.0.4", + "rimraf": "^5.0.5" }, "engines": { - "node": ">= 8" + "node": ">= 18" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/minizlib/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { - "yallist": "^4.0.0" + "balanced-match": "^1.0.0" + } + }, + "node_modules/minizlib/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minizlib/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/minizlib/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", "bin": { - "mkdirp": "bin/cmd.js" + "mkdirp": "dist/cjs/src/bin.js" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/module-details-from-path": { @@ -4879,6 +5086,11 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -4931,7 +5143,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -4941,6 +5152,26 @@ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -5376,7 +5607,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -5388,7 +5618,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -5532,7 +5761,20 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -5546,7 +5788,18 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -5608,25 +5861,28 @@ } }, "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "engines": { + "node": ">=18" + } }, "node_modules/test-exclude": { "version": "6.0.0", @@ -5872,6 +6128,11 @@ "node": ">=14.17" } }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -5972,7 +6233,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -6009,6 +6269,23 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/appmonitoring/ts/src/package.json b/appmonitoring/ts/src/package.json index 0070dadd5..7c29eafef 100644 --- a/appmonitoring/ts/src/package.json +++ b/appmonitoring/ts/src/package.json @@ -15,7 +15,7 @@ "name": "Microsoft Corp" }, "dependencies": { - "@kubernetes/client-node": "^0.20.0", + "@kubernetes/client-node": "^0.22.1", "@types/node": "20.2.4", "@types/npm": "^7.19.0", "applicationinsights": "^2.7.0", diff --git a/appmonitoring/ts/src/test-app/cr-sample.yaml b/appmonitoring/ts/src/test-app/cr-sample.yaml index 4450796ed..fb4936b2f 100644 --- a/appmonitoring/ts/src/test-app/cr-sample.yaml +++ b/appmonitoring/ts/src/test-app/cr-sample.yaml @@ -23,16 +23,13 @@ apiVersion: monitor.azure.com/v1 kind: Instrumentation metadata: name: cr1 - namespace: zakima1 + namespace: alkaplan1 spec: settings: - #imageRepoPath: mycompany.azurecr.io/mcr-replicas/applicationinsights # optional Customers are obliged to keep their ACR in sync with MCR for new versions, or things will break - autoInstrumentationPlatforms: # required, could be empty - - DotNet - #- Java + - Java - NodeJs destination: # required diff --git a/appmonitoring/ts/src/tests/Mutator.spec.ts b/appmonitoring/ts/src/tests/Mutator.spec.ts index fdca54ccb..4383a36cc 100644 --- a/appmonitoring/ts/src/tests/Mutator.spec.ts +++ b/appmonitoring/ts/src/tests/Mutator.spec.ts @@ -69,7 +69,7 @@ describe("Mutator", () => { }, spec: { settings: { - autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.DotNet, AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs] + autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs] }, destination: { applicationInsightsConnectionString: "InstrumentationKey=default" @@ -85,7 +85,7 @@ describe("Mutator", () => { }, spec: { settings: { - autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.DotNet, AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs] + autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs] }, destination: { applicationInsightsConnectionString: "InstrumentationKey=cr1" @@ -118,7 +118,7 @@ describe("Mutator", () => { expect(annotationValue.crName).toBe(DefaultInstrumentationCRName); expect(annotationValue.crResourceVersion).toBe("1"); - expect(annotationValue.platforms).toStrictEqual([AutoInstrumentationPlatforms.DotNet, AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs]); + expect(annotationValue.platforms).toStrictEqual([AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs]); }); it("Mutating deployment - no inject- annotations, default CR not found", async () => { @@ -140,7 +140,7 @@ describe("Mutator", () => { }, spec: { settings: { - autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.DotNet, AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs] + autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs] }, destination: { applicationInsightsConnectionString: "InstrumentationKey=cr1" @@ -177,37 +177,9 @@ describe("Mutator", () => { // invalid sets of annotations, all pointing to multiple CRs const invalidAnnotationSets: IAnnotations[] = [ - { - "instrumentation.opentelemetry.io/inject-dotnet": "cr1", - "instrumentation.opentelemetry.io/inject-java": "cr2" - }, - { - "instrumentation.opentelemetry.io/inject-dotnet": "cr1", - "instrumentation.opentelemetry.io/inject-nodejs": "cr2" - }, { "instrumentation.opentelemetry.io/inject-java": "cr1", "instrumentation.opentelemetry.io/inject-nodejs": "cr2" - }, - { - "instrumentation.opentelemetry.io/inject-dotnet": "cr1", - "instrumentation.opentelemetry.io/inject-java": "cr2", - "instrumentation.opentelemetry.io/inject-nodejs": "cr3" - }, - { - "instrumentation.opentelemetry.io/inject-dotnet": "true", - "instrumentation.opentelemetry.io/inject-java": "cr2", - "instrumentation.opentelemetry.io/inject-nodejs": "cr3" - }, - { - "instrumentation.opentelemetry.io/inject-dotnet": "cr1", - "instrumentation.opentelemetry.io/inject-java": "true", - "instrumentation.opentelemetry.io/inject-nodejs": "cr3" - }, - { - "instrumentation.opentelemetry.io/inject-dotnet": "cr1", - "instrumentation.opentelemetry.io/inject-java": "cr2", - "instrumentation.opentelemetry.io/inject-nodejs": "true" } ]; @@ -240,7 +212,7 @@ describe("Mutator", () => { }, spec: { settings: { - autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.DotNet, AutoInstrumentationPlatforms.NodeJs] + autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs] }, destination: { applicationInsightsConnectionString: "InstrumentationKey=default" @@ -275,8 +247,7 @@ describe("Mutator", () => { const metadata: IMetadata = { annotations: { - "instrumentation.opentelemetry.io/inject-dotnet": "false", - "instrumentation.opentelemetry.io/inject-java": "true", + "instrumentation.opentelemetry.io/inject-java": "false", "instrumentation.opentelemetry.io/inject-nodejs": "true" } }; @@ -304,7 +275,7 @@ describe("Mutator", () => { expect(annotationValue.crName).toBe(DefaultInstrumentationCRName); expect(annotationValue.crResourceVersion).toBe("1"); - expect(annotationValue.platforms).toStrictEqual([AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs]); + expect(annotationValue.platforms).toStrictEqual([AutoInstrumentationPlatforms.NodeJs]); }); it("Mutating deployment - per language inject - annotations with specific CR", async () => { @@ -333,7 +304,7 @@ describe("Mutator", () => { }, spec: { settings: { - autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.DotNet] + autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.Java] }, destination: { applicationInsightsConnectionString: "InstrumentationKey=cr1" @@ -352,7 +323,6 @@ describe("Mutator", () => { const metadata: IMetadata = { annotations: { - "instrumentation.opentelemetry.io/inject-dotnet": "cr1", "instrumentation.opentelemetry.io/inject-java": "false", "instrumentation.opentelemetry.io/inject-nodejs": "cr1" } @@ -381,7 +351,7 @@ describe("Mutator", () => { expect(annotationValue.crName).toBe(cr1.metadata.name); expect(annotationValue.crResourceVersion).toBe("1"); - expect(annotationValue.platforms).toStrictEqual([AutoInstrumentationPlatforms.DotNet, AutoInstrumentationPlatforms.NodeJs]); + expect(annotationValue.platforms).toStrictEqual([AutoInstrumentationPlatforms.NodeJs]); }); it("Mutating deployment - per language inject - single inject - annotations is set to false", async () => { @@ -394,7 +364,7 @@ describe("Mutator", () => { }, spec: { settings: { - autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs] + autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.NodeJs] }, destination: { applicationInsightsConnectionString: "InstrumentationKey=default" @@ -412,7 +382,7 @@ describe("Mutator", () => { const metadata: IMetadata = { annotations: { - "instrumentation.opentelemetry.io/inject-dotnet": "false" + "instrumentation.opentelemetry.io/inject-java": "false" } }; diff --git a/appmonitoring/ts/src/tests/Patcher.spec.ts b/appmonitoring/ts/src/tests/Patcher.spec.ts index 54790daad..a4946926f 100644 --- a/appmonitoring/ts/src/tests/Patcher.spec.ts +++ b/appmonitoring/ts/src/tests/Patcher.spec.ts @@ -43,7 +43,7 @@ describe("Patcher", () => { const annotationValue: IInstrumentationState = JSON.parse(obj.metadata.annotations[InstrumentationAnnotationName]) as IInstrumentationState; expect(annotationValue.crName).toBe(cr1.metadata.name); expect(annotationValue.crResourceVersion).toBe("1"); - expect(annotationValue.platforms).toStrictEqual([AutoInstrumentationPlatforms.DotNet, AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs]); + expect(annotationValue.platforms).toStrictEqual([AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs]); expect((result[0]).op).toBe("replace"); expect((result[0]).path).toBe(""); @@ -299,10 +299,6 @@ describe("Patcher", () => { "name": "NODE_NAME", "value": "original conflicting value for node name" }, - { - "name": "OTEL_DOTNET_AUTO_LOGS_ENABLED", - "value": "original conflicting value for dotnet auto logs enabled" - }, { "name": "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED", "value": "original conflicting value for Java logging enabled" @@ -318,9 +314,8 @@ describe("Patcher", () => { const unpatchedResult: object[] = JSON.parse(JSON.stringify(Patcher.PatchObject(admissionReview.request.object, null, podInfo, [] as AutoInstrumentationPlatforms[], clusterArmId, clusterArmRegion, clusterName))); // ASSERT - expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.length).toBe(4); + expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.length).toBe(3); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "NODE_NAME").value).toBe("original conflicting value for node name"); - expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "OTEL_DOTNET_AUTO_LOGS_ENABLED").value).toBe("original conflicting value for dotnet auto logs enabled"); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED").value).toBe("original conflicting value for Java logging enabled"); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_CONFIGURATION_CONTENT").value).toBe("original conflicting value for NodeJs configuration content"); }); @@ -330,7 +325,7 @@ describe("Patcher", () => { const admissionReview: IAdmissionReview = JSON.parse(JSON.stringify(TestDeployment2)); const cr1: InstrumentationCR = JSON.parse(JSON.stringify(cr)); - cr1.spec.settings.autoInstrumentationPlatforms = [AutoInstrumentationPlatforms.DotNet]; + cr1.spec.settings.autoInstrumentationPlatforms = [AutoInstrumentationPlatforms.Java]; const platforms = cr1.spec.settings.autoInstrumentationPlatforms; const podInfo: PodInfo = { @@ -349,10 +344,6 @@ describe("Patcher", () => { "name": "NODE_NAME", "value": "original conflicting value for node name" }, - { - "name": "OTEL_DOTNET_AUTO_LOGS_ENABLED", - "value": "original conflicting value for dotnet auto logs enabled" - }, { "name": "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED", "value": "original conflicting value for Java logging enabled" @@ -368,9 +359,8 @@ describe("Patcher", () => { const unpatchedResult: object[] = JSON.parse(JSON.stringify(Patcher.PatchObject(admissionReview.request.object, null, podInfo, [] as AutoInstrumentationPlatforms[], clusterArmId, clusterArmRegion, clusterName))); // ASSERT - expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.length).toBe(4); + expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.length).toBe(3); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "NODE_NAME").value).toBe("original conflicting value for node name"); - expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "OTEL_DOTNET_AUTO_LOGS_ENABLED").value).toBe("original conflicting value for dotnet auto logs enabled"); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED").value).toBe("original conflicting value for Java logging enabled"); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_CONFIGURATION_CONTENT").value).toBe("original conflicting value for NodeJs configuration content"); }); @@ -421,10 +411,6 @@ describe("Patcher", () => { "name": "NODE_NAME", "value": "original conflicting value for node name" }, - { - "name": "OTEL_DOTNET_AUTO_LOGS_ENABLED", - "value": "original conflicting value for dotnet auto logs enabled" - }, { "name": "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED", "value": "original conflicting value for Java logging enabled" @@ -441,18 +427,15 @@ describe("Patcher", () => { // ASSERT expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "NODE_NAME").valueFrom.fieldRef.fieldPath).toBe("spec.nodeName"); - expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "OTEL_DOTNET_AUTO_LOGS_ENABLED").value).toBe("false"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED").value).toBe("false"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_CONFIGURATION_CONTENT").value).toBe(`{"instrumentationOptions":{"console": { "enabled": false }, "bunyan": { "enabled": false },"winston": { "enabled": false }}}`); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "NODE_NAME_BEFORE_AUTO_INSTRUMENTATION").value).toBe("original conflicting value for node name"); - expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "OTEL_DOTNET_AUTO_LOGS_ENABLED_BEFORE_AUTO_INSTRUMENTATION").value).toBe("original conflicting value for dotnet auto logs enabled"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED_BEFORE_AUTO_INSTRUMENTATION").value).toBe("original conflicting value for Java logging enabled"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_CONFIGURATION_CONTENT_BEFORE_AUTO_INSTRUMENTATION")?.value).toBeUndefined(); - expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.length).toBe(3); + expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.length).toBe(2); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "NODE_NAME").value).toBe("original conflicting value for node name"); - expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "OTEL_DOTNET_AUTO_LOGS_ENABLED").value).toBe("original conflicting value for dotnet auto logs enabled"); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED").value).toBe("original conflicting value for Java logging enabled"); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_CONFIGURATION_CONTENT")?.value).toBeUndefined(); }); @@ -481,10 +464,6 @@ describe("Patcher", () => { "name": "NODE_NAME", "value": "original conflicting value for node name" }, - { - "name": "OTEL_DOTNET_AUTO_LOGS_ENABLED", - "value": "original conflicting value for dotnet auto logs enabled" - }, { "name": "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED", "value": "original conflicting value for Java logging enabled" @@ -501,18 +480,15 @@ describe("Patcher", () => { // ASSERT expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "NODE_NAME").valueFrom.fieldRef.fieldPath).toBe("spec.nodeName"); - expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "OTEL_DOTNET_AUTO_LOGS_ENABLED").value).toBe("original conflicting value for dotnet auto logs enabled"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED").value).toBe("original conflicting value for Java logging enabled"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_CONFIGURATION_CONTENT").value).toBe("original conflicting value for NodeJs configuration content"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "NODE_NAME_BEFORE_AUTO_INSTRUMENTATION").value).toBe("original conflicting value for node name"); - expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "OTEL_DOTNET_AUTO_LOGS_ENABLED_BEFORE_AUTO_INSTRUMENTATION").value).toBe("original conflicting value for dotnet auto logs enabled"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED_BEFORE_AUTO_INSTRUMENTATION").value).toBe("original conflicting value for Java logging enabled"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_CONFIGURATION_CONTENT_BEFORE_AUTO_INSTRUMENTATION").value).toBe("original conflicting value for NodeJs configuration content"); - expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.length).toBe(4); + expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.length).toBe(3); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "NODE_NAME").value).toBe("original conflicting value for node name"); - expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "OTEL_DOTNET_AUTO_LOGS_ENABLED").value).toBe("original conflicting value for dotnet auto logs enabled"); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED").value).toBe("original conflicting value for Java logging enabled"); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_CONFIGURATION_CONTENT").value).toBe("original conflicting value for NodeJs configuration content"); }); @@ -541,10 +517,6 @@ describe("Patcher", () => { "name": "NODE_NAME", "value": "original conflicting value for node name" }, - { - "name": "OTEL_DOTNET_AUTO_LOGS_ENABLED", - "value": "original conflicting value for dotnet auto logs enabled" - }, { "name": "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED", "value": "original conflicting value for Java logging enabled" @@ -561,18 +533,15 @@ describe("Patcher", () => { // ASSERT expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "NODE_NAME").valueFrom.fieldRef.fieldPath).toBe("spec.nodeName"); - expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "OTEL_DOTNET_AUTO_LOGS_ENABLED").value).toBe("false"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED").value).toBe("false"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_CONFIGURATION_CONTENT").value).toBe(`{"instrumentationOptions":{"console": { "enabled": false }, "bunyan": { "enabled": false },"winston": { "enabled": false }}}`); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "NODE_NAME_BEFORE_AUTO_INSTRUMENTATION").value).toBe("original conflicting value for node name"); - expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "OTEL_DOTNET_AUTO_LOGS_ENABLED_BEFORE_AUTO_INSTRUMENTATION").value).toBe("original conflicting value for dotnet auto logs enabled"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED_BEFORE_AUTO_INSTRUMENTATION").value).toBe("original conflicting value for Java logging enabled"); expect((patchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_CONFIGURATION_CONTENT_BEFORE_AUTO_INSTRUMENTATION")?.value).toBeUndefined(); - expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.length).toBe(3); + expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.length).toBe(2); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "NODE_NAME").value).toBe("original conflicting value for node name"); - expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "OTEL_DOTNET_AUTO_LOGS_ENABLED").value).toBe("original conflicting value for dotnet auto logs enabled"); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_INSTRUMENTATION_LOGGING_ENABLED").value).toBe("original conflicting value for Java logging enabled"); expect((unpatchedResult[0]).value.spec.template.spec.containers[0].env.find((ev: IEnvironmentVariable) => ev.name === "APPLICATIONINSIGHTS_CONFIGURATION_CONTENT")?.value).toBeUndefined(); }); diff --git a/appmonitoring/ts/src/tests/testConsts.ts b/appmonitoring/ts/src/tests/testConsts.ts index 530e145c6..da5726c24 100644 --- a/appmonitoring/ts/src/tests/testConsts.ts +++ b/appmonitoring/ts/src/tests/testConsts.ts @@ -14,7 +14,7 @@ export const cr: InstrumentationCR = { }, spec: { settings: { - autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.DotNet, AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs], + autoInstrumentationPlatforms: [AutoInstrumentationPlatforms.Java, AutoInstrumentationPlatforms.NodeJs], }, destination: { applicationInsightsConnectionString: "InstrumentationKey=823201eb-fdbf-468a-bc7b-e685639439b2;IngestionEndpoint=https://uaecentral-0.in.applicationinsights.azure.com/" diff --git a/appmonitoring/validation-helm/appmonitoring-cr.yaml b/appmonitoring/validation-helm/appmonitoring-cr.yaml index 68f0da474..7e27b98a0 100644 --- a/appmonitoring/validation-helm/appmonitoring-cr.yaml +++ b/appmonitoring/validation-helm/appmonitoring-cr.yaml @@ -5,9 +5,7 @@ metadata: namespace: ${TEST_NS} spec: settings: - imageRepoPath: aicommon.azurecr.io/all-auto-instrumentation-images # optional Customers are obliged to keep their ACR in sync with MCR for new versions, or things will break autoInstrumentationPlatforms: # required, could be empty - - DotNet - Java - NodeJs destination: # required diff --git a/appmonitoring/validation-helm/appmonitoring-deployment.yaml b/appmonitoring/validation-helm/appmonitoring-deployment.yaml index 3cafe9a23..13f49f036 100644 --- a/appmonitoring/validation-helm/appmonitoring-deployment.yaml +++ b/appmonitoring/validation-helm/appmonitoring-deployment.yaml @@ -125,9 +125,6 @@ spec: required: - autoInstrumentationPlatforms properties: - imageRepoPath: - description: "Path to a repository to fetch auto-instrumentation images from. Only use if you have an Artifact Cache set up to host related images normally found on Microsoft Container Registry (MCR). See here for details: https://learn.microsoft.com/en-us/azure/container-registry/tutorial-artifact-cache" - type: string autoInstrumentationPlatforms: description: List of auto-instrumentation platforms to use (must match the type of the application running in the container). Can be empty to use none. Ignored for named (non-default) CRs. type: array @@ -135,7 +132,6 @@ spec: items: type: string enum: - - DotNet - Java - NodeJs destination: diff --git a/appmonitoring/validation-helm/dotnet-test-app.yaml b/appmonitoring/validation-helm/dotnet-test-app.yaml deleted file mode 100644 index 63f167d5a..000000000 --- a/appmonitoring/validation-helm/dotnet-test-app.yaml +++ /dev/null @@ -1,39 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: ${DOTNET_TEST_APP_NAME} - namespace: ${TEST_NS} - labels: - app: test-app-dotnet -spec: - replicas: 1 - selector: - matchLabels: - app: test-app-dotnet - template: - metadata: - labels: - app: test-app-dotnet - spec: - containers: - - name: test-app-dotnet - image: ${DOTNET_TEST_IMAGE_NAME} - imagePullPolicy: Always - ports: - - containerPort: 80 ---- -apiVersion: v1 -kind: Service -metadata: - name: test-app-dotnet-service - namespace: ${TEST_NS} - labels: - app: test-app-dotnet -spec: - type: LoadBalancer - ports: - - port: 80 - protocol: TCP - targetPort: 80 - selector: - app: test-app-dotnet \ No newline at end of file