in source/packages/services/installer/src/commands/modules/service/provisioning.ts [54:261]
public async prompts(answers: Answers): Promise<Answers> {
delete answers.provisioning?.redeploy;
let updatedAnswers: Answers = await inquirer.prompt(
[redeployIfAlreadyExistsPrompt(this.name, this.stackName)],
answers
);
if ((updatedAnswers.provisioning?.redeploy ?? true) === false) {
return updatedAnswers;
}
if (updatedAnswers.provisioning === undefined) {
updatedAnswers.provisioning = {};
}
const pcaAliases = await this.getPcaAliases(answers);
updatedAnswers.provisioning.pcaAliases = pcaAliases;
const iotCaAliases = await this.getIotCaAliases(answers);
updatedAnswers.provisioning.iotCaAliases = iotCaAliases;
// eslint-disable-next-line
const _ = this;
updatedAnswers = await inquirer.prompt(
[
{
message: `ACM PCA integration enabled ?`,
type: 'confirm',
name: 'provisioning.pcaIntegrationEnabled',
default: answers.provisioning?.pcaIntegrationEnabled ?? false,
askAnswered: true,
},
{
message: `If using ACM PCA, and ACM PCA is located in another AWS Account, enter the IAM cross-account role (leave blank otherwise)`,
type: 'input',
name: 'provisioning.pcaCrossAccountRoleArn',
default: answers.provisioning?.pcaCrossAccountRoleArn ?? '',
askAnswered: true,
validate(answer: string) {
if (answer?.length === 0) {
return true;
}
return CommonArnValidations.validateAwsIAMRoleArn(answer);
},
when(answers: Answers) {
return answers.provisioning?.pcaIntegrationEnabled;
},
},
{
message: `If ACM PCA is located in a different region, enter the region name (leave blank for default region)`,
type: 'input',
name: 'provisioning.pcaRegion',
default: answers.provisioning?.pcaRegion ?? answers.region,
askAnswered: true,
validate(answer: string) {
if (answer?.length === 0) {
return false;
}
return true;
},
when(answers: Answers) {
return answers.provisioning?.pcaIntegrationEnabled;
},
},
],
updatedAnswers
);
updatedAnswers = await inquirer.prompt(
[
{
message: `Create or modify AWS IoT CA alias list ?`,
type: 'confirm',
name: 'provisioning.setIotCaAliases',
default: answers.provisioning?.setIotCaAliases ?? true,
askAnswered: true,
when(answers: Answers) {
return answers.provisioning?.pcaIntegrationEnabled;
},
},
],
updatedAnswers
);
//Collect the IoT CA List
let iotCaFinished = false;
if (updatedAnswers.provisioning?.setIotCaAliases) {
while (!iotCaFinished) {
const iotCaAliases = await this.getIotCaAliases(updatedAnswers);
updatedAnswers.provisioning.iotCaAliases = iotCaAliases;
updatedAnswers = await inquirer.prompt(
[..._.getIoTCAPrompt(answers, iotCaAliases)],
updatedAnswers
);
// Update the iotCaAlias to upper case
if (updatedAnswers.provisioning.iotCaAlias === undefined) {
updatedAnswers.provisioning.iotCaFinished = true;
} else {
updatedAnswers.provisioning.iotCaAlias =
updatedAnswers.provisioning.iotCaAlias.toUpperCase();
if (
!updatedAnswers.provisioning.iotCaAliases.list.includes(
updatedAnswers.provisioning.iotCaAlias
)
) {
const alias = updatedAnswers.provisioning.iotCaAlias;
const value = updatedAnswers.provisioning.iotCaArn;
updatedAnswers.provisioning.iotCaAliases.cas.push({ alias, value });
updatedAnswers.provisioning.iotCaAliases.list.push(alias);
}
}
iotCaFinished = updatedAnswers.provisioning.iotCaFinished;
}
}
updatedAnswers = await inquirer.prompt(
[
{
message: `Create or modify ACM PCA CA alias list ?`,
type: 'confirm',
name: 'provisioning.setPcaAliases',
default: answers.provisioning?.setPcaAliases ?? true,
askAnswered: true,
when(answers: Answers) {
return answers.provisioning?.pcaIntegrationEnabled;
},
},
],
updatedAnswers
);
//Collect the ACM PCA List
let pcaFinished = false;
if (updatedAnswers.provisioning?.setPcaAliases) {
while (!pcaFinished) {
const pcaAliases = await this.getPcaAliases(updatedAnswers);
updatedAnswers.provisioning.pcaAliases = pcaAliases;
updatedAnswers = await inquirer.prompt(
[..._.getPCAPrompt(answers, pcaAliases)],
updatedAnswers
);
if (updatedAnswers.provisioning.pcaAlias === undefined) {
updatedAnswers.provisioning.pcaFinished = true;
} else {
// Update the pcaAlias to upper case to be stored in the installer config
updatedAnswers.provisioning.pcaAlias =
updatedAnswers.provisioning.pcaAlias.toUpperCase();
if (
!updatedAnswers.provisioning.pcaAliases.list.includes(
updatedAnswers.provisioning.pcaAlias
)
) {
const alias = updatedAnswers.provisioning.pcaAlias;
const value = updatedAnswers.provisioning.pcaArn;
updatedAnswers.provisioning.pcaAliases.cas.push({ alias, value });
updatedAnswers.provisioning.pcaAliases.list.push(alias);
}
}
pcaFinished = updatedAnswers.provisioning.pcaFinished;
}
}
updatedAnswers = await inquirer.prompt(
[
...customDomainPrompt(this.name, answers),
...applicationConfigurationPrompt(this.name, answers, [
{
question: 'Allow service to delete AWS IoT Certificates ?',
defaultConfiguration: false,
propertyName: 'deleteCertificates',
},
{
question: 'Allow service to delete AWS IoT Policies ?',
defaultConfiguration: false,
propertyName: 'deletePolicies',
},
{
question: 'Certificate expiry in days ?',
defaultConfiguration: 365,
propertyName: 'certificateExpiryInDays',
},
{
question: 'The S3 key suffix where templates are stored ?',
defaultConfiguration: '.json',
propertyName: 'templateSuffix',
},
{
question: 'The S3 key prefix where templates are stored ?',
defaultConfiguration: 'templates/',
propertyName: 'templatesPrefix',
},
{
question: 'The S3 key prefix where bulk requests are stored ?',
defaultConfiguration: 'bullkrequests/',
propertyName: 'bulkRequestsPrefix',
},
]),
],
updatedAnswers
);
return updatedAnswers;
}