Skip to content

Commit 85d76ba

Browse files
Merge pull request #43 from antstackio/dev
feature : add profile in cli deployment
2 parents 56a7b86 + a08d5b2 commit 85d76ba

File tree

7 files changed

+173
-94
lines changed

7 files changed

+173
-94
lines changed

bin/index.ts

Lines changed: 121 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,94 @@ let res: any = [];
1414
let resources: any = [];
1515
let stack_resource_Name: any = [];
1616
let AppType;
17-
let template = {};
17+
let template:AnyObject = {};
1818
let config;
19+
let testdata={
20+
"app_name": "teststruct",
21+
"language": "node",
22+
"Stacks": {
23+
"BaseModuleRlbao": "BaseModule",
24+
"BaseModuleKogle": "BaseModule",
25+
"EmailAuthModulePsaih": "EmailAuthModule",
26+
"EmailAuthModuleWjzvl": "EmailAuthModule",
27+
"RDSModuleLzxxx": "RDSModule",
28+
"RDSModuleCnxwn": "RDSModule",
29+
"CRUDModuleVuayw": "CRUDModule",
30+
"CRUDModuleWwaex": "CRUDModule"
31+
},
32+
"StackParams": {
33+
"BaseModuleRlbao": {},
34+
"BaseModuleKogle": {},
35+
"EmailAuthModulePsaih": {},
36+
"EmailAuthModuleWjzvl": {},
37+
"RDSModuleLzxxx": {},
38+
"RDSModuleCnxwn": {},
39+
"CRUDModuleVuayw": {
40+
"Book": {
41+
"path": "/book",
42+
"methods": [
43+
"put",
44+
"get",
45+
"post",
46+
"delete",
47+
"options"
48+
],
49+
"resourcetype": "lambda"
50+
},
51+
"Author": {
52+
"path": "/author",
53+
"methods": [
54+
"put",
55+
"get",
56+
"post",
57+
"delete",
58+
"options"
59+
],
60+
"resourcetype": "lambda"
61+
}
62+
},
63+
"CRUDModuleWwaex": {
64+
"Book": {
65+
"path": "/Book",
66+
"methods": [
67+
"put",
68+
"get",
69+
"post",
70+
"delete",
71+
"options"
72+
],
73+
"resourcetype": "lambda"
74+
},
75+
"Author": {
76+
"path": "/author",
77+
"methods": [
78+
"put",
79+
"get",
80+
"post",
81+
"delete",
82+
"options"
83+
],
84+
"resourcetype": "lambda"
85+
}
86+
}
87+
},
88+
"CustomStacks": {
89+
"custom": [
90+
"S3 Lambda",
91+
"CRUD API",
92+
"S3 Bucket",
93+
"Lambda",
94+
"DynamoDB"
95+
],
96+
"custo": [
97+
"S3 Lambda",
98+
"CRUD API",
99+
"S3 Bucket",
100+
"Lambda",
101+
"DynamoDB"
102+
]
103+
}
104+
}
19105
async function roverADD() {
20106
let app_name = await util.inputString("app_name", "", false, "App Name");
21107
await rover_utilities.samValidate(app_name["app_name"]);
@@ -25,7 +111,7 @@ async function roverADD() {
25111
let CompStacks = await rover_utilities.checkNested(file_name);
26112
return { "appname": app_name, "language": language, "filename": file_name,"compstack":CompStacks }
27113
}
28-
async function CRUDObject(stackName,AppType) {
114+
async function CRUDObject(stackName:string,AppType:string) {
29115
let crud: AnyObject = {};
30116
let StackParams: AnyObject = {};
31117
let paramModule: AnyObject = {};
@@ -46,37 +132,37 @@ async function CRUDObject(stackName,AppType) {
46132

47133
return StackParams
48134
}
49-
async function CustomObject(i) {
135+
async function CustomObject(i:number) {
50136
let customStacks: any = {};
51137
let choice = cliConfig.customizable.components;
52138
let customstack_name = await util.inputString(`customStackName${i}`,"",false,`Stack ${i} Name: `);
53139
let CustomStacks = await util.multichoice("app_type", choice);
54140
customStacks[customstack_name[`customStackName${i}`]] = CustomStacks.app_type;
55141
return customStacks
56142
}
57-
async function createModules(app_name,language) {
143+
async function createModules(app_name:AnyObject,language:string) {
58144
let stack_names: any = {};
59145
let customStacks: any = {};
60146
let paramModule: AnyObject = {};
61147
let basecrud: AnyObject = {};
62148
let StackParams: any = {};
63149
let moreStack: any;
64-
let stackname: object = {};
150+
let stackname: AnyObject = {};
65151
let i = 1;
66152
let obj: AnyObject = {};
67153
do {
68154
let app_Types: any = [];
69155
let AppType: string = await util.appType("Module Type :");
70-
if (AppType !== "Customizable") {
71-
stackname[`stackName${i}`] ="rover" + rover_utilities.makeid(5);
156+
if (AppType !== "CustomizableModule") {
157+
stackname[`stackName${i}`] =AppType+rover_utilities.makeid(5);
72158
let stack_name = stackname;
73159
let stackName: string = stack_name[`stackName${i}`];
74-
if (AppType === "CRUD") {
160+
if (AppType === "CRUDModule") {
75161
StackParams = { ...StackParams,... await CRUDObject(stackName,AppType)};
76162
} else {
77163

78164
obj[stackName] = basecrud;
79-
StackParams = { ...obj };
165+
StackParams = { ...obj ,...StackParams};
80166
}
81167
stack_names[stack_name[`stackName${i}`]] = AppType;
82168
} else {
@@ -96,7 +182,13 @@ async function createModules(app_name,language) {
96182
return template
97183

98184
}
185+
async function listProfiles() {
186+
let profiles = (exec("aws configure list-profiles").toString()).split("\n")
187+
if (profiles[profiles.length - 1] == "") profiles.splice(profiles.length - 1, 1)
188+
return profiles
189+
}
99190
async function run(argv: AnyObject) {
191+
//rover_utilities.generateSAM(testdata);
100192
try {
101193
if (rover_utilities.npmrootTest()) {
102194
const commandError = `rover ${argv.join(
@@ -106,7 +198,7 @@ async function run(argv: AnyObject) {
106198
if (argv.length === 1 && argv[0] === "init") {
107199
let editedSam = await util.confirmation();
108200
if (editedSam === "create new SAM project") {
109-
let app_name: object = await util.inputString(
201+
let app_name: AnyObject = await util.inputString(
110202
"app_name",
111203
"",
112204
false,
@@ -115,8 +207,9 @@ async function run(argv: AnyObject) {
115207
await rover_utilities.checkFile(app_name["app_name"], "no");
116208
let language = await util.languageChoice();
117209

118-
template= await createModules(app_name,language)
119-
await rover_utilities.generateSAM({ template }["template"]);
210+
template = await createModules(app_name, language)
211+
console.log(JSON.stringify(template))
212+
//await rover_utilities.generateSAM({ template }["template"]);
120213

121214
} else if (editedSam === "add components to existing SAM") {
122215

@@ -184,20 +277,23 @@ async function run(argv: AnyObject) {
184277
if (r === "repository and pipeline") {
185278
console.log("Work in progress...");
186279
} else if (r === "generate pipeline") {
187-
await rover_utilities.samValidate(undefined);
280+
await rover_utilities.samValidate("");
188281
let lang: string = await rover_utilities.langValue();
189282
let pipeline = await util.samBuild(lang);
190283
let repoConfig = { ...pipeline };
191284
template = { ...template, repoConfig };
192285
let repoconfig = await Promise.resolve(util.jsonCreation(template));
193286
if (repoconfig !== undefined) {
287+
194288
await deployment.setupRepo(JSON.parse(repoconfig)["repoConfig"]);
289+
rover_utilities.generateRoverConfig("",JSON.parse(repoconfig)["repoConfig"],"rover_generate_pipeline")
195290
}
196291
} else {
197-
await rover_utilities.samValidate(undefined);
292+
await rover_utilities.samValidate("");
198293
if (fs.existsSync("samconfig.toml")) {
199294
exec("rm -rf samconfig.toml");
200295
}
296+
let profiles=await listProfiles()
201297
let filenamearray = exec("pwd").toString().split("/");
202298
let file_name = filenamearray[filenamearray.length - 1].replace(
203299
"\n",
@@ -216,6 +312,8 @@ async function run(argv: AnyObject) {
216312
"Bucket Name(optional) :"
217313
);
218314
let choice = buildConfig.samConfig.choices.deploymentregion;
315+
let profile = (await util.inputType("AWS profile", profiles))["AWS profile"]
316+
console.log(profile)
219317
let deploymentregion = await util.inputType(
220318
"Deployment region",
221319
choice
@@ -232,18 +330,14 @@ async function run(argv: AnyObject) {
232330
}
233331
let region = deploymentregion["Deployment region"];
234332

235-
exec(
236-
"sh " +
237-
rover_config.npmroot +
238-
"/@rover-tools/cli/cli-main/exec.sh " +
239-
file_name +
240-
" " +
241-
stack_name +
242-
" " +
243-
region +
244-
" " +
245-
bucketName
246-
);
333+
exec("sh " + rover_config.npmroot + "/@rover-tools/cli/cli-main/exec.sh " + file_name + " " + stack_name + " " + region + " " + bucketName + " "+profile);
334+
335+
let configdata:AnyObject = {}
336+
configdata["bucket"] = bucketName
337+
configdata["stack name"] = stack_name
338+
configdata["region"] = region
339+
configdata["profile"] = profile
340+
rover_utilities.generateRoverConfig("",configdata,"rover_deploy_cli")
247341
}
248342
} else if (argv[0] === "-v" || argv[0] === "--version") {
249343
// show current package version in the console
@@ -260,7 +354,7 @@ async function run(argv: AnyObject) {
260354
);
261355
}
262356
} catch (error) {
263-
console.log("Error: ", error.message);
357+
console.log("Error: ", error);
264358
}
265359
}
266360
export let stackNames: any = stack_resource_Name;

cli-main/cliConfig.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { AnyArray, AnyObject } from "immer/dist/internal";
12

23
const rovercomponents = require("@rover-tools/engine").rover_components;
34
const Stack = require("@rover-tools/engine").rover_modules;
@@ -13,13 +14,13 @@ export let LanguageSupport = {
1314
extension: ".py",
1415
},
1516
};
16-
let keys = []
17-
let values=[]
18-
Stack.ModuleDescription.filter(ele => {
17+
let keys:AnyArray = []
18+
let values:AnyArray=[]
19+
Stack.ModuleDescription.filter(function(ele:AnyObject) {
1920
keys.push(ele["key"])
2021
values.push(ele["value"])
2122
})
22-
export let app =
23+
export let app:AnyObject =
2324
{
2425
choices:{
2526
methods:["put","get","post","delete"],

cli-main/exec.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
sam build
2-
sam deploy --no-confirm-changeset --capabilities CAPABILITY_NAMED_IAM CAPABILITY_IAM CAPABILITY_AUTO_EXPAND --stack-name $2 --region $3 $4
2+
sam deploy --no-confirm-changeset --capabilities CAPABILITY_NAMED_IAM CAPABILITY_IAM CAPABILITY_AUTO_EXPAND --stack-name $2 --region $3 --profile $5 $4

cli-main/util.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -246,38 +246,38 @@ export let inputCli = async function (
246246
res[`${sobj.key}`] = objListArr;
247247
} else if (sobj.value === "multipleChoice") {
248248
if (sobj.key === "Action") {
249-
let choice = init.stackNames.map(({ key, value }) => value);
250-
choice = choice.filter((item, pos) => choice.indexOf(item) == pos);
249+
let choice = init.stackNames.map(({ key, value }:AnyObject) => value);
250+
choice = choice.filter((item:string, pos:number) => choice.indexOf(item) == pos);
251251
let p = await inputType(sobj.key, choice,sobj.message);
252252
choice = obj.choices[p];
253253

254254
let r = await multichoice(p, choice);
255255

256-
let actionArr = r[p].map((ele) => `${p}:${ele}`);
256+
let actionArr = r[p].map((ele:string) => `${p}:${ele}`);
257257
res = { Action: actionArr };
258258
} else {
259259
let choice = obj.choices[sobj.key];
260260
let r = await multichoice(sobj.key, choice,);
261261
res = { ...res, ...r };
262262
}
263263
} else if (sobj.value === "choiceReference") {
264-
let choice = init.stackNames.map(({ key, value }) => value);
265-
choice = choice.filter((item, pos) => choice.indexOf(item) == pos);
264+
let choice = init.stackNames.map(({ key, value }:AnyObject) => value);
265+
choice = choice.filter((item:AnyObject, pos:number) => choice.indexOf(item) == pos);
266266
if (
267267
(sobj.key === "resource" || sobj.key === "Ref") &&
268268
choice.length > 0
269269
) {
270270
let p = await inputType(sobj.key, choice);
271271
let choiceNames = init.stackNames
272-
.filter(({ key, value }) => value === p)
273-
.map(({ key, value }) => key);
272+
.filter(({ key, value }:AnyObject) => value === p)
273+
.map(({ key, value }:AnyObject) => key);
274274
let r = await inputType(p, choiceNames);
275275

276276
res[`${sobj.key}`] = r;
277277
} else if (sobj.key === "role" && choice.indexOf("iamrole") !== -1) {
278278
let choiceNames = init.stackNames
279-
.filter(({ key, value }) => value === "iamrole")
280-
.map(({ key, value }) => key);
279+
.filter(({ key, value }:AnyObject) => value === "iamrole")
280+
.map(({ key, value }:AnyObject) => key);
281281
res[sobj.key] = choiceNames[0];
282282
} else {
283283
let name = await inputString("name","",false, `${sobj.message}-->Name`);
@@ -346,11 +346,11 @@ export let password = async function(userName:string,message:string=""){
346346
return r;
347347
}
348348

349-
export let samBuild = async function (lang) {
349+
export let samBuild = async function (lang:string) {
350350
let obj = buildConfig.samConfig;
351351
let subObj = buildConfig.samConfig.samBuild;
352-
let sam:object = await inputCli(obj, subObj, "");
353-
let temp:object={}
352+
let sam:AnyObject = await inputCli(obj, subObj, "");
353+
let temp:AnyObject={}
354354
Object.values(sam).map(ele=>{
355355
Object.assign(temp,ele)
356356
})
@@ -370,7 +370,7 @@ Object.assign(temp,ele)
370370
envs.push(envName);
371371
let stepsChoice = buildConfig.samConfig.choices.dev;
372372
let step = await multichoice("steps required for "+`${envName}`+" environment " , stepsChoice);
373-
let steps1:object={}
373+
let steps1:AnyObject={}
374374
step=Object.keys(step).map(ele=>{
375375
let name:string=ele.replace("steps required for ","")
376376
name=name.replace(" environment ","")
@@ -459,8 +459,8 @@ export let params = async function(module:string){
459459
let choice:AnyObject = cliConfig.app.choices;
460460
let name:AnyObject ={};
461461
let res:AnyObject ={};
462-
if(module==="CRUD"){
463-
let modulesParams= moduleParams.ModuleParams.CRUD.params;
462+
if(module==="CRUDModule"){
463+
let modulesParams= moduleParams.ModuleParams.CRUDModule.params;
464464
let paramslength = modulesParams.length;
465465

466466
if(paramslength>0){

0 commit comments

Comments
 (0)