Skip to content

Commit 0b4f4fe

Browse files
committed
support: set aksk and terraform init/plan/apply/destroy cmd
1 parent 59b0849 commit 0b4f4fe

File tree

10 files changed

+93
-56
lines changed

10 files changed

+93
-56
lines changed

package.json

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,9 @@
3939
"onCommand:tcTerraform.init",
4040
"onCommand:tcTerraform.plan",
4141
"onCommand:tcTerraform.apply",
42-
"onCommand:tcTerraform.import",
43-
"onCommand:tcTerraform.validate",
4442
"onCommand:tcTerraform.refresh",
4543
"onCommand:tcTerraform.destroy",
46-
"onCommand:tcTerraform.visualize",
47-
"onCommand:tcTerraform.test",
48-
"onCommand:tcTerraform.push",
4944
"onCommand:tcTerraformer.import",
50-
"onCommand:tcTerraformer.plan",
5145
"workspaceContains:**/*.tf",
5246
"onLanguage:terraform"
5347
],
@@ -120,7 +114,8 @@
120114
"commands": [
121115
{
122116
"command": "tcTerraform.login",
123-
"title": "%TcTerraform.view.login.welcome%"
117+
"title": "Login: %TcTerraform.view.login.welcome%",
118+
"category": "TencentCloud Terraform"
124119
},
125120
{
126121
"command": "tcTerraform.resourcesExplorer.refresh",

src/client/runner/baseRunner.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export abstract class BaseRunner {
99
public tfExecutor: any;
1010

1111
constructor() {
12-
this.init();
12+
// this.init();
1313
}
1414

1515
public abstract init(): void;

src/client/runner/terraformRunner.ts

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,21 +29,24 @@ export class TerraformRunner extends BaseRunner {
2929
return TerraformRunner.ins;
3030
}
3131

32-
public init(): void {
33-
// throw new Error("Method not implemented.");
32+
public async init(): Promise<any> {
33+
console.debug("[DEBUG]#### TerraformRunner init begin.");
34+
35+
this.setAKSK();
36+
37+
terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Init);
38+
39+
return "init success";
3440
}
3541

3642
public async executePlan(cwd: string, args: any): Promise<string> {
3743
console.debug("[DEBUG]#### TerraformRunner executePlan begin.");
3844

39-
const resAddress = `${args.resource.type}.${args.resource.name}`;
45+
// this.setAKSK();
4046

41-
// reset state
42-
await this.resetTFState(resAddress);
47+
terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Plan);
4348

44-
terraformShellManager.getIntegratedShell(TerraformRunner.getInstance()).runTerraformCmd(TerraformCommand.Plan);
45-
46-
return "";
49+
return "plan success";
4750
}
4851

4952
public async executeShow(cwd: string, args?: any): Promise<string> {
@@ -125,6 +128,12 @@ export class TerraformRunner extends BaseRunner {
125128
await terraformShellManager.getIntegratedShell(TerraformRunner.getInstance())
126129
.runTerraformCmd(TerraformCommand.State, ['rm', '-lock=false', resAddress]);
127130
}
131+
132+
private setAKSK(runner?: any) {
133+
const [ak, sk] = settingUtils.getAKSK();
134+
terraformShellManager.getIntegratedShell(runner).runNormalCmd("export TENCENTCLOUD_SECRET_ID=" + ak);
135+
terraformShellManager.getIntegratedShell(runner).runNormalCmd("export TENCENTCLOUD_SECRET_KEY=" + sk);
136+
}
128137
}
129138

130139
export function getCheckTerraformCmd(): boolean {
@@ -134,5 +143,3 @@ export function getCheckTerraformCmd(): boolean {
134143
export function setCheckTerraformCmd(checked: boolean): void {
135144
vscode.workspace.getConfiguration().update("tcTerraform.checkTerraformCmd", checked);
136145
}
137-
138-

src/client/terminal/integratedShell.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,24 @@ export class IntegratedShell extends BaseShell {
129129
await commands.executeCommand("vscode.open", Uri.file(tfFile), ViewColumn.Active || ViewColumn.One);
130130
}
131131

132+
// run terraform init command
133+
public async init(params?: any): Promise<void> {
134+
console.debug("[DEBUG]#### IntegratedShell init begin. params:[%v]", params);
135+
136+
await this.runner.checkInstalled();
137+
if (this.runner instanceof TerraformRunner) {
138+
139+
const cwd: string = await selectWorkspaceFolder();
140+
if (!cwd) {
141+
TelemetryWrapper.sendError(Error("noWorkspaceSelected"));
142+
return;
143+
}
144+
145+
const result = await this.runner.init();
146+
console.debug("[DEBUG]#### Executed init. result:[%s]", result);
147+
}
148+
}
149+
132150
// run terraform plan command
133151
public async plan(params: any): Promise<void> {
134152
console.debug("[DEBUG]#### IntegratedShell plan begin. params:[%v]", params);

src/client/terminal/terraformShellManager.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ class TerraformShellManager implements ITerraformShellManager {
2828

2929
TelemetryWrapper.addContextProperty("isCloudShell", isCloudShell.toString());
3030
if (isCloudShell) {
31-
return TerraformShellManager.cloudShell;
31+
return this.getCloudShell();
3232
}
33-
return TerraformShellManager.integratedShell;
33+
return this.getIntegratedShell();
3434
}
3535

3636
public getCloudShell(): TencentCloudShell {
@@ -39,14 +39,13 @@ class TerraformShellManager implements ITerraformShellManager {
3939

4040
public getIntegratedShell(runner?: any): IntegratedShell {
4141
if (!TerraformShellManager.integratedShell) {
42+
// default runner is Terraformer
43+
TerraformShellManager.integratedShell = new IntegratedShell(TerraformerRunner.getInstance());
44+
// specify runner
4245
if (runner) {
4346
TerraformShellManager.integratedShell = new IntegratedShell(runner);
44-
} else {
45-
// default runner is Terraformer
46-
TerraformShellManager.integratedShell = new IntegratedShell(TerraformerRunner.getInstance());
4747
}
4848
}
49-
5049
return TerraformShellManager.integratedShell;
5150
}
5251

src/commons/customCmdRegister.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ export function regResourceRelatedCommands() {
4545
terraformShellManager.getIntegratedShell(TerraformerRunner.getInstance()).import(param, param.fileName);
4646
});
4747

48+
commands.registerCommand("tcTerraform.init", function (param: any) {
49+
terraformShellManager.getIntegratedShell(TerraformRunner.getInstance()).init();
50+
});
51+
4852
commands.registerCommand("tcTerraform.plan", function (param: any) {
4953
terraformShellManager.getIntegratedShell(TerraformRunner.getInstance()).plan(param);
5054
});

src/commons/tencent/user/index.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,6 @@ export namespace user {
5151
process.env.TENCENTCLOUD_SECRET_ID = accessKey;
5252
process.env.TENCENTCLOUD_SECRET_KEY = secretKey;
5353

54-
terraformShellManager.getShell().runNormalCmd("export TENCENTCLOUD_SECRET_ID=" + accessKey);
55-
terraformShellManager.getShell().runNormalCmd("export TENCENTCLOUD_SECRET_KEY=" + secretKey);
56-
5754
tree.refreshTreeData();
5855
window.showInformationMessage(localize("TcTerraform.login.success"));
5956
}

src/connectivity/client.ts

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import * as vscode from "vscode";
44
import { Client as CvmClient } from "tencentcloud-sdk-nodejs-cvm/tencentcloud/services/cvm/v20170312/cvm_client";
55
import { Client as TkeClient } from "tencentcloud-sdk-nodejs-tke/tencentcloud/services/tke/v20180525/tke_client";
66
import { localize } from "vscode-nls-i18n";
7-
import * as utils from "../utils/settingUtils";
7+
import * as settingUtils from "../utils/settingUtils";
88

99
const tkeClient = TkeClient;
1010
const cvmClient = CvmClient;
@@ -36,13 +36,43 @@ export async function getTkeClient(): Promise<TkeClient> {
3636
}
3737

3838
export async function getCvmClient(region?: string): Promise<CvmClient> {
39-
const secretIdConfig = utils.getSecretIdFromUI();
40-
const secretKeyConfig = utils.getSecretKeyFromUI();
41-
const secretIdEnv = utils.getSecretIdFromEnv();
42-
const secretKeyEnv = utils.getSecretKeyFromEnv();
39+
// const secretIdConfig = utils.getSecretIdFromUI();
40+
// const secretKeyConfig = utils.getSecretKeyFromUI();
41+
// const secretIdEnv = utils.getSecretIdFromEnv();
42+
// const secretKeyEnv = utils.getSecretKeyFromEnv();
4343

44-
const secretId = (secretIdEnv === undefined) ? secretIdConfig : secretIdEnv;
45-
const secretKey = (secretKeyEnv === undefined) ? secretKeyConfig : secretKeyEnv;
44+
// const secretId = (secretIdEnv === undefined) ? secretIdConfig : secretIdEnv;
45+
// const secretKey = (secretKeyEnv === undefined) ? secretKeyConfig : secretKeyEnv;
46+
const [secretId, secretKey] = settingUtils.getAKSK();
47+
48+
if (secretId === undefined || secretKey === undefined || secretId === null || secretKey === null) {
49+
let msg = localize("TcTerraform.msg.aksk.notfound");
50+
vscode.window.showErrorMessage(msg);
51+
return null;
52+
}
53+
54+
return new CvmClient({
55+
credential: {
56+
secretId: secretId,
57+
secretKey: secretKey,
58+
},
59+
// 产品地域
60+
region: (process.env.TENCENTCLOUD_REGION === undefined) ?
61+
"ap-guangzhou" : process.env.TENCENTCLOUD_REGION,
62+
// 可选配置实例
63+
profile: {
64+
// signMethod: "TC3-HMAC-SHA256", // 签名方法
65+
httpProfile: {
66+
reqMethod: "POST", // 请求方法
67+
// reqTimeout: 60, // 请求超时时间,默认60s
68+
endpoint: "cvm.tencentcloudapi.com",
69+
},
70+
},
71+
})
72+
}
73+
74+
export async function getStsClient(region?: string): Promise<CvmClient> {
75+
const [secretId, secretKey] = settingUtils.getAKSK();
4676

4777
if (secretId === undefined || secretKey === undefined || secretId === null || secretKey === null) {
4878
let msg = localize("TcTerraform.msg.aksk.notfound");

src/extension.ts

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,29 +27,7 @@ export async function activate(context: vscode.ExtensionContext) {
2727
await TerraformRunner.getInstance().checkInstalled();
2828
await TerraformerRunner.getInstance().checkInstalled();
2929

30-
// let disposableLogin = vscode.commands.registerCommand('tcTerraform.login', async () => {
31-
// // to-do
32-
// // wait for cloudshell and tccli implement ready
33-
// let accessKey = settingUtils.getSecretIdFromUI();
34-
// let secretKey = settingUtils.getSecretKeyFromUI();
35-
36-
// terraformShellManager.getShell().runNormalCmd("export TENCENTCLOUD_SECRET_ID=" + accessKey);
37-
// terraformShellManager.getShell().runNormalCmd("export TENCENTCLOUD_SECRET_KEY=" + secretKey);
38-
// });
39-
40-
// context.subscriptions.push(disposableLogin);
41-
4230
// terraform cmd
43-
context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.init', () => {
44-
terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Init);
45-
}));
46-
47-
// move plan to customCmdRegister
48-
// context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.plan', () => {
49-
// await terraformShellManager.getIntegratedShell(TerraformRunner.getInstance()).plan();
50-
51-
// }));
52-
5331
context.subscriptions.push(vscode.commands.registerCommand('tcTerraform.apply', () => {
5432
terraformShellManager.getShell().runTerraformCmd(TerraformCommand.Apply);
5533
}));

src/utils/settingUtils.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,15 @@ export function getSecretKeyFromUI(): string {
3535
return vscode.workspace.getConfiguration().get("tcTerraform.properties.secretKey");
3636
}
3737

38+
export function getAKSK(): [string, string] {
39+
const secretIdConfig = getSecretIdFromUI();
40+
const secretKeyConfig = getSecretKeyFromUI();
41+
const secretIdEnv = getSecretIdFromEnv();
42+
const secretKeyEnv = getSecretKeyFromEnv();
43+
44+
return [secretIdEnv ?? secretIdConfig, secretKeyEnv ?? secretKeyConfig];
45+
}
46+
3847
export function getSecretIdFromEnv(): string {
3948
return process.env.TENCENTCLOUD_SECRET_ID;
4049
}

0 commit comments

Comments
 (0)