From 8a4a5300994e13ee7f1ed181e781df3059f56f4b Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Thu, 14 Dec 2023 21:13:02 +0800 Subject: [PATCH 1/8] enable json load --- src/client/runner/terraformRunner.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/client/runner/terraformRunner.ts b/src/client/runner/terraformRunner.ts index 184d901..e58203f 100644 --- a/src/client/runner/terraformRunner.ts +++ b/src/client/runner/terraformRunner.ts @@ -61,6 +61,10 @@ export class TerraformRunner extends BaseRunner { ); } + public async executeVersion(params: type): Promise { + + } + public async preImport(cwd: string, args: any, file: string): Promise<{ importArgs: string, tfFile: string }> { const fileName = file ?? args.resource.type + '.tf'; From 07234e3ce566d7436250d34882cd7181128052f8 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Tue, 19 Dec 2023 20:35:25 +0800 Subject: [PATCH 2/8] fix multiple json issue --- package.json | 2 +- src/autocomplete/TerraformTipsProvider.ts | 1 + src/client/runner/terraformRunner.ts | 4 ---- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 28e38f9..6601ea2 100644 --- a/package.json +++ b/package.json @@ -251,7 +251,7 @@ "lint": "eslint src --ext ts", "test": "npm run compile", "vscode:prepublish": "npm run esbuild-base -- --minify", - "esbuild-base": "esbuild ./src/extension.ts --bundle --outfile=out/main.js --external:vscode --format=cjs --platform=node", + "esbuild-base": "esbuild ./src/extension.ts --bundle --outfile=out/main.js --external:vscode --external:config/tips --format=cjs --platform=node", "esbuild": "npm run esbuild-base -- --sourcemap", "esbuild-watch": "npm run esbuild-base -- --sourcemap --watch", "test-compile": "tsc -p ./" diff --git a/src/autocomplete/TerraformTipsProvider.ts b/src/autocomplete/TerraformTipsProvider.ts index 5293ff9..6990891 100644 --- a/src/autocomplete/TerraformTipsProvider.ts +++ b/src/autocomplete/TerraformTipsProvider.ts @@ -449,6 +449,7 @@ async function loadResource(extPath: string): Promise { tipFiles.some(file => { if (compareVersions(tfVersion, file.version) >= 0) { + console.log(`loaded json version:${file.version}`); result = file.json as Tips; return true; } diff --git a/src/client/runner/terraformRunner.ts b/src/client/runner/terraformRunner.ts index e58203f..184d901 100644 --- a/src/client/runner/terraformRunner.ts +++ b/src/client/runner/terraformRunner.ts @@ -61,10 +61,6 @@ export class TerraformRunner extends BaseRunner { ); } - public async executeVersion(params: type): Promise { - - } - public async preImport(cwd: string, args: any, file: string): Promise<{ importArgs: string, tfFile: string }> { const fileName = file ?? args.resource.type + '.tf'; From 5b5ccda1da723b9c250012726872815dad3c14cd Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Wed, 20 Dec 2023 13:03:27 +0800 Subject: [PATCH 3/8] 1.fix the logic of JSON files match. 2.use the extensionPath instead of __dirname. 3.load json files with sync(await). 4.rm pre-release trigger when PR merged. --- package.json | 2 +- src/autocomplete/TerraformTipsProvider.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 6601ea2..28e38f9 100644 --- a/package.json +++ b/package.json @@ -251,7 +251,7 @@ "lint": "eslint src --ext ts", "test": "npm run compile", "vscode:prepublish": "npm run esbuild-base -- --minify", - "esbuild-base": "esbuild ./src/extension.ts --bundle --outfile=out/main.js --external:vscode --external:config/tips --format=cjs --platform=node", + "esbuild-base": "esbuild ./src/extension.ts --bundle --outfile=out/main.js --external:vscode --format=cjs --platform=node", "esbuild": "npm run esbuild-base -- --sourcemap", "esbuild-watch": "npm run esbuild-base -- --sourcemap --watch", "test-compile": "tsc -p ./" diff --git a/src/autocomplete/TerraformTipsProvider.ts b/src/autocomplete/TerraformTipsProvider.ts index 6990891..5293ff9 100644 --- a/src/autocomplete/TerraformTipsProvider.ts +++ b/src/autocomplete/TerraformTipsProvider.ts @@ -449,7 +449,6 @@ async function loadResource(extPath: string): Promise { tipFiles.some(file => { if (compareVersions(tfVersion, file.version) >= 0) { - console.log(`loaded json version:${file.version}`); result = file.json as Tips; return true; } From 80722bb7a06d71872c7d6a4fc64c6f02c4f27aa6 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Wed, 20 Dec 2023 13:16:14 +0800 Subject: [PATCH 4/8] 0.0.26 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index df8988b..0914eca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-tencentcloud-terraform", - "version": "0.0.25", + "version": "0.0.26", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-tencentcloud-terraform", - "version": "0.0.25", + "version": "0.0.26", "license": "MIT", "dependencies": { "@types/jsdom": "^21.1.4", diff --git a/package.json b/package.json index 28e38f9..1b003aa 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-tencentcloud-terraform", "displayName": "Tencent Cloud Terraform", "description": "VS Code extension for developing with Terraform on Tencent Cloud", - "version": "0.0.25", + "version": "0.0.26", "license": "MIT", "publisher": "Tencent-Cloud", "icon": "images/tc-tf-logo.png", From ccbdffac81a0cb967ee1938cd588a1228364b243 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Fri, 29 Dec 2023 20:56:02 +0800 Subject: [PATCH 5/8] add request client --- src/commons/tencent/user/index.ts | 28 ++++++++++++++++++++++------ src/connectivity/client.ts | 15 +++++++++++---- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/commons/tencent/user/index.ts b/src/commons/tencent/user/index.ts index 0b91656..c1b7b89 100644 --- a/src/commons/tencent/user/index.ts +++ b/src/commons/tencent/user/index.ts @@ -1,5 +1,5 @@ import { localize } from "vscode-nls-i18n"; -import { ExtensionContext, workspace, ConfigurationTarget, window, ProgressLocation, MessageItem } from "vscode"; +import { ExtensionContext, workspace, ConfigurationTarget, window, ProgressLocation, MessageItem, extensions } from "vscode"; import { container } from "../../container"; import { Context } from "../../context"; @@ -7,7 +7,7 @@ import { tree } from "../treeDataProvider"; import { getCredentailByInput } from "./auth"; import { AbstractClient } from "tencentcloud-sdk-nodejs/tencentcloud/common/abstract_client"; import { Credential } from "tencentcloud-sdk-nodejs/tencentcloud/common/interface"; -import { getCamClient, getStsClient } from "@/connectivity/client"; +import { getCamClient, getCommonClient, getStsClient } from "@/connectivity/client"; import * as loginMgt from "../../../views/login/loginMgt"; import * as settingUtils from "../../../utils/settingUtils"; @@ -24,6 +24,7 @@ export namespace user { arn?: string; } + export const REQUEST_CLIENT_PREFIX = "Terraform-Vscode-";//Terraform-1.81.61@vscode"; export const AKSK_TITLE = "TcTerraform.pickup.aksk"; export const OAUTH_TITLE = "TcTerraform.pickup.oauth"; export const AKSK_PLACEHOLD = "TcTerraform.pickup.aksk.placeholder"; @@ -71,10 +72,16 @@ export namespace user { try { // query user info const stsClient = await getStsClient(); - const stsResp = await stsClient?.GetCallerIdentity(). + const currentVersion = getExtensionVersion(); + const reqCli = `${REQUEST_CLIENT_PREFIX}v${currentVersion}`; + stsClient.sdkVersion = reqCli; + console.log('[DEBUG]--------------------getStsClient:', stsClient); + // const stsClient = await getCommonClient("sts.tencentcloudapi.com", "2018-08-13"); + // const stsResp = await stsClient.request("GetCallerIdentity", req). + const stsResp = await stsClient?.GetCallerIdentity(null). then( (result) => { - console.debug('[DEBUG]--------------------------------result:', result); + console.debug('[DEBUG]--------------------------------GetCallerIdentity result:', result); if (!result) { throw new Error('[Warn] GetCallerIdentity result.TotalCount is 0.'); } @@ -84,12 +91,15 @@ export namespace user { throw new Error(err); } ); + // ) as stsModels.GetCallerIdentityResponse; const camClient = await getCamClient(); - const camResp = await camClient?.GetUserAppId(). + camClient.sdkVersion = reqCli; + console.log('[DEBUG]--------------------getCamClient:', camClient); + const camResp = await camClient?.GetUserAppId(null). then( (result) => { - console.debug('[DEBUG]--------------------------------result:', result); + console.debug('[DEBUG]--------------------------------GetUserAppId result:', result); if (!result) { throw new Error('[Warn] GetUserAppId result.TotalCount is 0.'); } @@ -122,6 +132,12 @@ export namespace user { } } + function getExtensionVersion(): string { + let extension = extensions.getExtension('Tencent-Cloud.vscode-tencentcloud-terraform'); + let currentVersion = extension.packageJSON.version; + return currentVersion; + } + export async function loginOut() { const yesBtn: MessageItem = { title: localize("TcTerraform.common.yes") }; const action = await window.showWarningMessage( diff --git a/src/connectivity/client.ts b/src/connectivity/client.ts index 2a0b240..f724487 100644 --- a/src/connectivity/client.ts +++ b/src/connectivity/client.ts @@ -11,6 +11,7 @@ import * as tencentcloud from "tencentcloud-sdk-nodejs"; import { localize } from "vscode-nls-i18n"; import * as settingUtils from "../utils/settingUtils"; +const DefaultReqCliHeader = { "X-TC-RequestClient": "Terraform-Vscode-v0.0.26" }; export async function getTkeClient(): Promise { const [secretId, secretKey, region] = settingUtils.getAKSKandRegion(); @@ -32,6 +33,7 @@ export async function getTkeClient(): Promise { httpProfile: { reqMethod: "POST", // 请求方法 reqTimeout: 30, // 请求超时时间,默认60s + headers: DefaultReqCliHeader, }, }, }); @@ -60,12 +62,13 @@ export async function getCvmClient(): Promise { reqMethod: "POST", // 请求方法 // reqTimeout: 60, // 请求超时时间,默认60s endpoint: "cvm.tencentcloudapi.com", + headers: DefaultReqCliHeader, }, }, }); } -export async function getCommonClient(): Promise { +export async function getCommonClient(ep?, version?, reqCli?: string): Promise { const [secretId, secretKey, region] = settingUtils.getAKSKandRegion(); if (secretId === undefined || secretKey === undefined || secretId === null || secretKey === null || secretId === '' || secretKey === '') { @@ -75,20 +78,24 @@ export async function getCommonClient(): Promise { } const client = new AbstractClient( - "open.test.tencentcloudapi.com", - "2018-12-25", + ep ?? "open.test.tencentcloudapi.com", + version ?? "2018-12-25", { credential: { secretId: secretId, secretKey: secretKey, }, + region: region ?? "ap-guangzhou", profile: { httpProfile: { - proxy: "http://9.135.97.58:8899", + reqMethod: "POST", // 请求方法 + endpoint: ep ?? "open.test.tencentcloudapi.com", + headers: DefaultReqCliHeader, }, }, } ); + client.sdkVersion = reqCli ?? "Terraform-1.81.61@vscode"; return client; } From eedef0083042bc9db64ffb030469ce76e496c52b Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Fri, 29 Dec 2023 20:56:23 +0800 Subject: [PATCH 6/8] 0.0.27 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0914eca..8023169 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-tencentcloud-terraform", - "version": "0.0.26", + "version": "0.0.27", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-tencentcloud-terraform", - "version": "0.0.26", + "version": "0.0.27", "license": "MIT", "dependencies": { "@types/jsdom": "^21.1.4", diff --git a/package.json b/package.json index 1b003aa..a05971a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-tencentcloud-terraform", "displayName": "Tencent Cloud Terraform", "description": "VS Code extension for developing with Terraform on Tencent Cloud", - "version": "0.0.26", + "version": "0.0.27", "license": "MIT", "publisher": "Tencent-Cloud", "icon": "images/tc-tf-logo.png", From 5832858c25e14a368bcc10701f223bdc3811d415 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Tue, 2 Jan 2024 18:07:26 +0800 Subject: [PATCH 7/8] fix cvm explorer issue when instances are null --- src/import/cvm.ts | 2 +- src/views/resources/resExplorer.ts | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/import/cvm.ts b/src/import/cvm.ts index 0a6089d..31796a4 100644 --- a/src/import/cvm.ts +++ b/src/import/cvm.ts @@ -27,7 +27,7 @@ export class CvmService implements ITencentCloudAPI { (result) => { // console.debug('[DEBUG]--------------------------------result:', result); if (result.TotalCount === 0) { - throw new Error('[Warn] DescribeInstances result.TotalCount is 0.'); + console.warn('[Warn] DescribeInstances result.TotalCount is 0.'); } return result.InstanceSet; }, diff --git a/src/views/resources/resExplorer.ts b/src/views/resources/resExplorer.ts index 4fe650d..d0adf8c 100644 --- a/src/views/resources/resExplorer.ts +++ b/src/views/resources/resExplorer.ts @@ -21,8 +21,12 @@ export class CvmResProvider extends tencent.tree.TreeDataProvider { const service = new CvmService(); const instances = await service.describeInstances(); const config = await service.getConfig(); + let items: tencent.tree.TreeItem[] = []; + if (!Array.isArray(instances)) { + return items;// return [] if instances nil + } - const items: tencent.tree.TreeItem[] = Array.isArray(instances) + items = instances.length > 0 ? instances.map(instance => ({ label: `${instance.InstanceName}(${instance.InstanceId})`, id: instance.InstanceId, @@ -42,12 +46,12 @@ export class CvmResProvider extends tencent.tree.TreeDataProvider { }], }, })) - : [];// return [] if instances nil + : [{ label: "No instance." }]; // return none tips if instance is empty return items; } catch (error) { console.error('[Error]#### getChildren got a error:[%s] from CvmService. stack:%s', error.message, error.stack); - return error; + return []; } } else { From 25a9322c5ebdcb9ee5f31e6e4b89a320c133d0f0 Mon Sep 17 00:00:00 2001 From: nickyinluo Date: Tue, 2 Jan 2024 19:32:35 +0800 Subject: [PATCH 8/8] 0.0.28 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8023169..04eaf7f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "vscode-tencentcloud-terraform", - "version": "0.0.27", + "version": "0.0.28", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-tencentcloud-terraform", - "version": "0.0.27", + "version": "0.0.28", "license": "MIT", "dependencies": { "@types/jsdom": "^21.1.4", diff --git a/package.json b/package.json index a05971a..387a81b 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-tencentcloud-terraform", "displayName": "Tencent Cloud Terraform", "description": "VS Code extension for developing with Terraform on Tencent Cloud", - "version": "0.0.27", + "version": "0.0.28", "license": "MIT", "publisher": "Tencent-Cloud", "icon": "images/tc-tf-logo.png",