blob: 3f46b10ea201789cd2d38243ab76629714f86e45 [file] [log] [blame]
<template>
<v-container grid-list-md class="ma-5">
<div v-if="loading && !installationComplete && !error">
<h3>Please wait while Jemo creates the installation resources.</h3>
<v-progress-linear :indeterminate="true"></v-progress-linear>
<div v-if="terraformOutput">
<pre>{{terraformOutput}}</pre>
<div class="pa-3">
<v-progress-circular indeterminate :size="16"></v-progress-circular>
</div>
</div>
</div>
<div v-if="error">
<div v-if="error.code === 'TERRAFORM_NOT_INSTALLED'">
<h3>The server can not find the terraform command.</h3>
Either terraform is not installed (<a
href="https://learn.hashicorp.com/terraform/getting-started/install.html" target="_blank">Installation
instructions</a>),
or it is not in the path. (e.g. run: terraform -version).
<br/>
<br/>
<v-btn @click="install" color="primary" :loading="loading">Fixed</v-btn>
</div>
<div v-else>
<h3>Terraform failed to create the installation resources. The following error occurred:</h3>
<pre>{{error.message}}</pre>
<br/>
<v-btn :to="{name: 'delete', params: {csp: this.csp, mode: 'INSTALL'}}" color="primary">Revert</v-btn>
</div>
</div>
<div v-if="installationComplete">
<h3>Setup Completed</h3>
<br/>
Installation has finished successfully. Terraform reported the following created resources and outputs.
<br/>
<br/>
<v-toolbar flat color="white">
<v-toolbar-title>Created Resources</v-toolbar-title>
</v-toolbar>
<v-data-table
:items=createItems(terraformResult.createdResources)
class="elevation-1"
hide-actions
hide-headers
>
<template slot="items" slot-scope="props" >
<td>{{ props.item.name }}</td>
<td>{{ props.item.value }}</td>
</template>
</v-data-table>
<br/>
<v-toolbar flat color="white">
<v-toolbar-title>Outputs</v-toolbar-title>
</v-toolbar>
<v-data-table
:items=createItems(terraformResult.outputs)
class="elevation-1"
hide-actions
hide-headers
>
<template slot="items" slot-scope="props" >
<td>{{ props.item.name }}</td>
<td>{{ props.item.value }}</td>
</template>
</v-data-table>
<br/>
Please, click the following button to input Jemo parameters<br/><br/>
<v-btn @click="redirectToParamSet" color="primary">Next</v-btn>
</div>
</v-container>
</template>
<script>
export default {
data() {
return {
csp: this.$route.params.csp,
parameters: this.$route.params.parameters,
installationComplete: false,
error: null,
terraformResult: null,
terraformOutput: null,
loading: false,
timer: null
}
},
watch: {
'$route'(to) {
if (to.name === 'install') {
if (to.params.csp) {
this.csp = to.params.csp;
this.parameters = to.params.parameters ? to.params.parameters : this.parameters;
this.installationComplete = false;
this.loading = false;
this.error = null;
this.terraformResult = null;
this.terraformOutput = null;
this.install();
}
}
}
},
mounted() {
this.install();
},
methods: {
install() {
this.loading = true;
const payload = {
csp: this.csp.name,
parameters: this.parameters
};
this.$http.post('install', payload)
.then(response => {
console.log(response);
this.timer = setInterval(this.pollForInstallResult, 10000);
}, response => {
console.log(response);
this.error = response.data;
});
},
pollForInstallResult() {
this.$http.get('install/result/' + this.csp.name + "/" + this.parameters.region)
.then(response => {
console.log(response);
this.terraformOutput = response.data.output;
if (response.data.status === 'FINISHED') {
clearInterval(this.timer);
if (response.data.error) {
this.error = response.data.error;
} else {
this.installationComplete = true;
this.error = null;
this.terraformResult = response.data.terraformResult;
}
}
}, response => {
clearInterval(this.timer);
console.log(response);
this.error = response.data;
alert(response.data);
});
},
redirectToParamSet() {
this.$http.get('jemoparams/paramsets/' + this.csp.name)
.then(response => {
console.log(response);
this.$router.push({name: 'jemo-param-set', params: {csp: this.csp, paramSets: response.data}})
}, response => {
console.log(response);
alert(response.data);
});
},
createItems(jsonObject) {
const items = [];
for (let key in jsonObject) {
items.push({
name: key,
value: jsonObject[key]
});
}
console.log(items);
return items;
}
}
}
</script>