2022-02-14 00:43:48 -06:00
/////////////////////////////////////////////////////////////
//
// pgAdmin 4 - PostgreSQL Tools
//
2024-01-01 02:43:48 -06:00
// Copyright (C) 2013 - 2024, The pgAdmin Development Team
2022-02-14 00:43:48 -06:00
// This software is released under the PostgreSQL Licence
//
//////////////////////////////////////////////////////////////
import gettext from 'sources/gettext' ;
import url _for from 'sources/url_for' ;
import React from 'react' ;
2022-04-26 06:11:10 -05:00
import { Box , Paper } from '@material-ui/core' ;
2022-02-14 00:43:48 -06:00
import { makeStyles } from '@material-ui/core/styles' ;
import Wizard from '../../../../static/js/helpers/wizard/Wizard' ;
import WizardStep from '../../../../static/js/helpers/wizard/WizardStep' ;
2022-04-26 06:11:10 -05:00
import { FormFooterMessage , MESSAGE _TYPE } from '../../../../static/js/components/FormComponents' ;
2022-02-14 00:43:48 -06:00
import getApiInstance from '../../../../static/js/api_instance' ;
import PropTypes from 'prop-types' ;
import pgAdmin from 'sources/pgadmin' ;
2022-04-26 06:11:10 -05:00
import { ToggleButtons , FinalSummary } from './cloud_components' ;
import { PrimaryButton } from '../../../../static/js/components/Buttons' ;
2022-06-15 00:52:42 -05:00
import { AwsCredentials , AwsInstanceDetails , AwsDatabaseDetails , validateCloudStep1 , validateCloudStep2 , validateCloudStep3 } from './aws' ;
2023-03-24 05:37:02 -05:00
import { BigAnimalInstance , BigAnimalDatabase , BigAnimalClusterType , validateBigAnimal , validateBigAnimalStep2 , validateBigAnimalStep3 , validateBigAnimalStep4 } from './biganimal' ;
2022-05-24 01:04:23 -05:00
import { isEmptyString } from 'sources/validators' ;
2023-03-13 04:26:16 -05:00
import { AWSIcon , BigAnimalIcon , AzureIcon , GoogleCloudIcon } from '../../../../static/js/components/ExternalIcon' ;
2022-06-15 00:52:42 -05:00
import { AzureCredentials , AzureInstanceDetails , AzureDatabaseDetails , checkClusternameAvailbility , validateAzureStep2 , validateAzureStep3 } from './azure' ;
2023-03-13 04:26:16 -05:00
import { GoogleCredentials , GoogleInstanceDetails , GoogleDatabaseDetails , validateGoogleStep2 , validateGoogleStep3 } from './google' ;
2022-06-15 00:52:42 -05:00
import EventBus from '../../../../static/js/helpers/EventBus' ;
2023-03-13 04:26:16 -05:00
import { CLOUD _PROVIDERS , CLOUD _PROVIDERS _LABELS } from './cloud_constants' ;
2023-10-23 07:13:17 -05:00
import { LAYOUT _EVENTS } from '../../../../static/js/helpers/Layout' ;
2023-01-09 01:02:26 -06:00
2022-02-14 00:43:48 -06:00
const useStyles = makeStyles ( ( ) =>
( {
messageBox : {
marginBottom : '1em' ,
display : 'flex' ,
} ,
messagePadding : {
2022-04-26 06:11:10 -05:00
paddingTop : '10px' ,
flex : 2.5 ,
} ,
buttonMarginEDB : {
position : 'relative' ,
top : '20%' ,
2022-02-14 00:43:48 -06:00
} ,
toggleButton : {
height : '100px' ,
} ,
2022-04-26 06:11:10 -05:00
summaryContainer : {
flexGrow : 1 ,
minHeight : 0 ,
overflow : 'auto' ,
2022-02-14 00:43:48 -06:00
} ,
2022-04-26 06:11:10 -05:00
boxText : {
paddingBottom : '5px'
2022-02-14 00:43:48 -06:00
} ,
2022-06-15 00:52:42 -05:00
authButton : {
marginLeft : '12em'
}
2022-02-14 00:43:48 -06:00
} ) ,
) ;
2022-06-15 00:52:42 -05:00
export const CloudWizardEventsContext = React . createContext ( ) ;
2023-10-23 07:13:17 -05:00
export default function CloudWizard ( { nodeInfo , nodeData , onClose , cloudPanelId } ) {
2022-02-14 00:43:48 -06:00
const classes = useStyles ( ) ;
2022-06-15 00:52:42 -05:00
const eventBus = React . useRef ( new EventBus ( ) ) ;
2023-01-09 01:02:26 -06:00
let steps = [ gettext ( 'Cloud Provider' ) , gettext ( 'Credentials' ) , gettext ( 'Cluster Type' ) ,
2022-04-29 05:48:28 -05:00
gettext ( 'Instance Specification' ) , gettext ( 'Database Details' ) , gettext ( 'Review' ) ] ;
2022-02-14 00:43:48 -06:00
const [ currentStep , setCurrentStep ] = React . useState ( '' ) ;
const [ selectionVal , setCloudSelection ] = React . useState ( '' ) ;
const [ errMsg , setErrMsg ] = React . useState ( '' ) ;
const [ cloudInstanceDetails , setCloudInstanceDetails ] = React . useState ( { } ) ;
const [ cloudDBCred , setCloudDBCred ] = React . useState ( { } ) ;
const [ cloudDBDetails , setCloudDBDetails ] = React . useState ( { } ) ;
const [ callRDSAPI , setCallRDSAPI ] = React . useState ( { } ) ;
2022-02-28 06:49:18 -06:00
const [ hostIP , setHostIP ] = React . useState ( '127.0.0.1/32' ) ;
2022-04-26 06:11:10 -05:00
const [ cloudProvider , setCloudProvider ] = React . useState ( '' ) ;
const [ verificationIntiated , setVerificationIntiated ] = React . useState ( false ) ;
2023-03-13 04:26:16 -05:00
2022-04-26 06:11:10 -05:00
const [ bigAnimalInstanceData , setBigAnimalInstanceData ] = React . useState ( { } ) ;
const [ bigAnimalDatabaseData , setBigAnimalDatabaseData ] = React . useState ( { } ) ;
2023-01-09 01:02:26 -06:00
const [ bigAnimalClusterTypeData , setBigAnimalClusterTypeData ] = React . useState ( { } ) ;
2022-04-26 06:11:10 -05:00
2022-06-15 00:52:42 -05:00
const [ azureCredData , setAzureCredData ] = React . useState ( { } ) ;
const [ azureInstanceData , setAzureInstanceData ] = React . useState ( { } ) ;
const [ azureDatabaseData , setAzureDatabaseData ] = React . useState ( { } ) ;
2022-05-24 01:04:23 -05:00
2023-03-13 04:26:16 -05:00
const [ googleCredData , setGoogleCredData ] = React . useState ( { } ) ;
const [ googleInstanceData , setGoogleInstanceData ] = React . useState ( { } ) ;
const [ googleDatabaseData , setGoogleDatabaseData ] = React . useState ( { } ) ;
2022-02-14 00:43:48 -06:00
const axiosApi = getApiInstance ( ) ;
2022-04-26 06:11:10 -05:00
const [ verificationURI , setVerificationURI ] = React . useState ( '' ) ;
const [ verificationCode , setVerificationCode ] = React . useState ( '' ) ;
2023-10-23 07:13:17 -05:00
const authInterval = React . useRef ( ) ;
2022-06-15 00:52:42 -05:00
React . useEffect ( ( ) => {
eventBus . current . registerListener ( 'SET_ERROR_MESSAGE_FOR_CLOUD_WIZARD' , ( msg ) => {
setErrMsg ( msg ) ;
} ) ;
eventBus . current . registerListener ( 'SET_CRED_VERIFICATION_INITIATED' , ( initiated ) => {
setVerificationIntiated ( initiated ) ;
} ) ;
2023-10-23 07:13:17 -05:00
const onWizardClosing = ( panelId ) => {
if ( panelId == cloudPanelId ) {
clearInterval ( authInterval . current ) ;
onClose ( ) ;
}
} ;
pgAdmin . Browser . docker . eventBus . registerListener ( LAYOUT _EVENTS . CLOSING , onWizardClosing ) ;
return ( ) => {
pgAdmin . Browser . docker . eventBus . deregisterListener ( LAYOUT _EVENTS . CLOSING , onWizardClosing ) ;
} ;
2022-06-15 00:52:42 -05:00
} , [ ] ) ;
2022-02-28 06:49:18 -06:00
React . useEffect ( ( ) => {
let _url = url _for ( 'cloud.get_host_ip' ) ;
axiosApi . get ( _url )
. then ( ( res ) => {
if ( res . data . data ) {
setHostIP ( res . data . data ) ;
}
} )
. catch ( ( error ) => {
2023-10-23 07:13:17 -05:00
pgAdmin . Browser . notifier . error ( gettext ( ` Error while getting the host ip: ${ error . response . data . errormsg } ` ) ) ;
2022-02-28 06:49:18 -06:00
} ) ;
2022-04-26 06:11:10 -05:00
} , [ cloudProvider ] ) ;
2022-02-14 00:43:48 -06:00
const wizardStepChange = ( data ) => {
setCurrentStep ( data . currentStep ) ;
} ;
2022-04-26 06:11:10 -05:00
const onSave = ( ) => {
2022-09-08 04:46:48 -05:00
let _url = url _for ( 'cloud.deploy_on_cloud' ) ,
2022-04-26 06:11:10 -05:00
post _data = { } ;
2023-03-13 04:26:16 -05:00
if ( cloudProvider == CLOUD _PROVIDERS . AWS ) {
2022-04-26 06:11:10 -05:00
post _data = {
gid : nodeInfo . server _group . _id ,
cloud : cloudProvider ,
secret : cloudDBCred ,
instance _details : cloudInstanceDetails ,
db _details : cloudDBDetails
} ;
2023-01-09 01:02:26 -06:00
} else if ( cloudProvider == CLOUD _PROVIDERS . AZURE ) {
2022-06-15 00:52:42 -05:00
post _data = {
gid : nodeInfo . server _group . _id ,
secret : azureCredData ,
cloud : cloudProvider ,
instance _details : azureInstanceData ,
db _details : azureDatabaseData
} ;
2023-03-13 04:26:16 -05:00
} else if ( cloudProvider == CLOUD _PROVIDERS . GOOGLE ) {
post _data = {
gid : nodeInfo . server _group . _id ,
secret : googleCredData ,
cloud : cloudProvider ,
instance _details : googleInstanceData ,
db _details : googleDatabaseData
} ;
2022-06-15 00:52:42 -05:00
} else {
2022-04-26 06:11:10 -05:00
post _data = {
gid : nodeInfo . server _group . _id ,
cloud : cloudProvider ,
2023-01-09 01:02:26 -06:00
cluster _details : bigAnimalClusterTypeData ,
instance _details : bigAnimalInstanceData ,
2022-04-26 06:11:10 -05:00
db _details : bigAnimalDatabaseData
} ;
2022-02-14 00:43:48 -06:00
}
axiosApi . post ( _url , post _data )
. then ( ( res ) => {
pgAdmin . Browser . Events . trigger ( 'pgadmin:browser:tree:add' , res . data . data . node , { 'server_group' : nodeInfo [ 'server_group' ] } ) ;
2022-08-11 00:19:45 -05:00
pgAdmin . Browser . BgProcessManager . startProcess ( res . data . data . job _id , res . data . data . desc ) ;
2022-07-27 23:44:04 -05:00
onClose ( ) ;
2022-02-14 00:43:48 -06:00
} )
. catch ( ( error ) => {
2023-10-23 07:13:17 -05:00
pgAdmin . Browser . notifier . error ( gettext ( ` Error while saving cloud wizard data: ${ error . response . data . errormsg } ` ) ) ;
2022-02-14 00:43:48 -06:00
} ) ;
} ;
const disableNextCheck = ( ) => {
setCallRDSAPI ( currentStep ) ;
2022-04-26 06:11:10 -05:00
let isError = ( cloudProvider == '' ) ;
switch ( cloudProvider ) {
2023-03-13 04:26:16 -05:00
case CLOUD _PROVIDERS . AWS :
2022-04-26 06:11:10 -05:00
switch ( currentStep ) {
case 0 :
2023-03-13 04:26:16 -05:00
setCloudSelection ( CLOUD _PROVIDERS . AWS ) ;
2022-04-26 06:11:10 -05:00
break ;
case 1 :
isError = validateCloudStep1 ( cloudDBCred ) ;
break ;
case 2 :
break ;
case 3 :
2023-01-09 01:02:26 -06:00
isError = validateCloudStep2 ( cloudInstanceDetails , hostIP ) ;
break ;
case 4 :
2022-04-26 06:11:10 -05:00
isError = validateCloudStep3 ( cloudDBDetails , nodeInfo ) ;
break ;
default :
break ;
}
2022-02-14 00:43:48 -06:00
break ;
2023-01-09 01:02:26 -06:00
case CLOUD _PROVIDERS . BIGANIMAL :
2022-04-26 06:11:10 -05:00
switch ( currentStep ) {
case 0 :
2023-01-09 01:02:26 -06:00
setCloudSelection ( CLOUD _PROVIDERS . BIGANIMAL ) ;
2022-04-26 06:11:10 -05:00
break ;
case 1 :
isError = ! verificationIntiated ;
break ;
case 2 :
2023-01-09 01:02:26 -06:00
isError = validateBigAnimalStep2 ( bigAnimalClusterTypeData ) ;
2022-04-26 06:11:10 -05:00
break ;
case 3 :
2023-01-09 01:02:26 -06:00
isError = validateBigAnimalStep3 ( bigAnimalInstanceData ) ;
break ;
case 4 :
isError = validateBigAnimalStep4 ( bigAnimalDatabaseData , nodeInfo ) ;
2022-04-26 06:11:10 -05:00
break ;
default :
break ;
}
2022-02-14 00:43:48 -06:00
break ;
2023-01-09 01:02:26 -06:00
case CLOUD _PROVIDERS . AZURE :
2022-06-15 00:52:42 -05:00
switch ( currentStep ) {
case 0 :
2023-01-09 01:02:26 -06:00
setCloudSelection ( CLOUD _PROVIDERS . AZURE ) ;
2022-06-15 00:52:42 -05:00
break ;
case 1 :
isError = ! verificationIntiated ;
break ;
case 2 :
break ;
case 3 :
2023-01-09 01:02:26 -06:00
isError = validateAzureStep2 ( azureInstanceData ) ;
break ;
case 4 :
2022-06-15 00:52:42 -05:00
isError = validateAzureStep3 ( azureDatabaseData , nodeInfo ) ;
break ;
default :
break ;
}
break ;
2023-03-13 04:26:16 -05:00
case CLOUD _PROVIDERS . GOOGLE :
switch ( currentStep ) {
case 0 :
setCloudSelection ( CLOUD _PROVIDERS . GOOGLE ) ;
break ;
case 1 :
isError = ! verificationIntiated ;
break ;
case 2 :
break ;
case 3 :
isError = validateGoogleStep2 ( googleInstanceData ) ;
break ;
case 4 :
isError = validateGoogleStep3 ( googleDatabaseData , nodeInfo ) ;
break ;
default :
break ;
}
2022-02-14 00:43:48 -06:00
}
return isError ;
} ;
2023-01-09 01:02:26 -06:00
const onBeforeBack = ( activeStep ) => {
return new Promise ( ( resolve ) => {
2023-03-13 04:26:16 -05:00
if ( activeStep == 3 && ( cloudProvider == CLOUD _PROVIDERS . AWS || cloudProvider == CLOUD _PROVIDERS . AZURE || cloudProvider == CLOUD _PROVIDERS . GOOGLE ) ) {
2023-01-09 01:02:26 -06:00
resolve ( true ) ;
}
2023-03-20 07:52:16 -05:00
else if ( activeStep == 1 && ( cloudProvider == CLOUD _PROVIDERS . AWS || cloudProvider == CLOUD _PROVIDERS . AZURE || cloudProvider == CLOUD _PROVIDERS . GOOGLE ) ) {
setVerificationIntiated ( false ) ;
}
setErrMsg ( [ '' , '' ] ) ;
2023-01-09 01:02:26 -06:00
resolve ( ) ;
} ) ;
} ;
2022-02-14 00:43:48 -06:00
const onBeforeNext = ( activeStep ) => {
return new Promise ( ( resolve , reject ) => {
2023-03-13 04:26:16 -05:00
if ( activeStep == 1 && cloudProvider == CLOUD _PROVIDERS . AWS ) {
2022-08-18 03:11:27 -05:00
setErrMsg ( [ MESSAGE _TYPE . INFO , gettext ( 'Validating credentials...' ) ] ) ;
2022-09-08 04:46:48 -05:00
let _url = url _for ( 'rds.verify_credentials' ) ;
2022-02-14 00:43:48 -06:00
const post _data = {
cloud : selectionVal ,
secret : cloudDBCred ,
} ;
axiosApi . post ( _url , post _data )
. then ( ( res ) => {
if ( ! res . data . success ) {
setErrMsg ( [ MESSAGE _TYPE . ERROR , res . data . info ] ) ;
reject ( ) ;
} else {
setErrMsg ( [ '' , '' ] ) ;
2023-01-09 01:02:26 -06:00
if ( activeStep == 1 ) {
resolve ( true ) ;
} else {
resolve ( false ) ;
}
2022-02-14 00:43:48 -06:00
}
} )
. catch ( ( ) => {
2022-08-18 03:11:27 -05:00
setErrMsg ( [ MESSAGE _TYPE . ERROR , gettext ( 'Error while checking cloud credentials' ) ] ) ;
2022-02-14 00:43:48 -06:00
reject ( ) ;
} ) ;
2023-01-09 01:02:26 -06:00
} else if ( activeStep == 0 && cloudProvider == CLOUD _PROVIDERS . BIGANIMAL ) {
2022-05-24 01:04:23 -05:00
if ( ! isEmptyString ( verificationURI ) ) { resolve ( ) ; return ; }
2022-08-18 03:11:27 -05:00
setErrMsg ( [ MESSAGE _TYPE . INFO , gettext ( 'Getting EDB BigAnimal verification URL...' ) ] ) ;
2022-04-26 06:11:10 -05:00
validateBigAnimal ( )
. then ( ( res ) => {
setVerificationURI ( res ) ;
setVerificationCode ( res . substring ( res . indexOf ( '=' ) + 1 ) ) ;
setErrMsg ( [ '' , '' ] ) ;
resolve ( ) ;
} )
. catch ( ( error ) => {
setErrMsg ( [ MESSAGE _TYPE . ERROR , gettext ( error ) ] ) ;
reject ( ) ;
} ) ;
2023-01-09 01:02:26 -06:00
} else if ( cloudProvider == CLOUD _PROVIDERS . AZURE ) {
if ( activeStep == 1 ) {
// Skip the current step
2023-03-13 04:26:16 -05:00
setErrMsg ( [ '' , '' ] ) ;
2023-01-09 01:02:26 -06:00
resolve ( true ) ;
} else if ( activeStep == 2 ) {
setErrMsg ( [ MESSAGE _TYPE . INFO , gettext ( 'Checking cluster name availability...' ) ] ) ;
checkClusternameAvailbility ( azureInstanceData . name )
. then ( ( res ) => {
if ( res . data && res . data . success == 0 ) {
setErrMsg ( [ MESSAGE _TYPE . ERROR , gettext ( 'Specified cluster name is already used.' ) ] ) ;
} else {
setErrMsg ( [ '' , '' ] ) ;
}
resolve ( ) ;
} ) . catch ( ( error ) => {
setErrMsg ( [ MESSAGE _TYPE . ERROR , gettext ( error ) ] ) ;
reject ( ) ;
} ) ;
} else {
resolve ( ) ;
}
2023-03-13 04:26:16 -05:00
} else if ( cloudProvider == CLOUD _PROVIDERS . GOOGLE ) {
if ( activeStep == 1 ) {
// Skip the current step
setErrMsg ( [ '' , '' ] ) ;
resolve ( true ) ;
} else if ( activeStep == 2 ) { resolve ( true ) ; } else {
resolve ( ) ;
}
2022-04-26 06:11:10 -05:00
}
else {
2022-06-15 00:52:42 -05:00
setErrMsg ( [ '' , '' ] ) ;
2022-02-14 00:43:48 -06:00
resolve ( ) ;
}
} ) ;
} ;
2022-04-26 06:11:10 -05:00
const authenticateBigAnimal = ( ) => {
2022-09-08 04:46:48 -05:00
let loading _icon _url = url _for (
2022-04-26 06:11:10 -05:00
'static' , { 'filename' : 'img/loading.gif' }
) ;
2022-02-14 00:43:48 -06:00
2022-08-18 03:11:27 -05:00
setErrMsg ( [ MESSAGE _TYPE . INFO , gettext ( 'EDB BigAnimal authentication process is in progress...' ) + '<img src="' + loading _icon _url + '" alt="' + gettext ( 'Loading...' ) + '">' ] ) ;
2022-09-15 08:14:07 -05:00
let child = window . open ( verificationURI , 'edb_biganimal_authentication' ) ;
2022-04-26 06:11:10 -05:00
let _url = url _for ( 'biganimal.verification_ack' ) ;
2022-12-12 02:53:25 -06:00
let countdown = 60 ;
2023-10-23 07:13:17 -05:00
authInterval . current = setInterval ( ( ) => {
2022-04-26 06:11:10 -05:00
axiosApi . get ( _url )
. then ( ( res ) => {
if ( res . data && res . data . success == 1 ) {
2022-06-09 03:37:05 -05:00
setErrMsg ( [ MESSAGE _TYPE . SUCCESS , gettext ( 'Authentication completed successfully. Click the Next button to proceed.' ) ] ) ;
2022-04-26 06:11:10 -05:00
setVerificationIntiated ( true ) ;
2023-10-23 07:13:17 -05:00
clearInterval ( authInterval . current ) ;
2022-12-12 02:53:25 -06:00
} else if ( res . data && res . data . success == 0 && res . data . errormsg == 'access_denied' ) {
2022-06-09 03:37:05 -05:00
setErrMsg ( [ MESSAGE _TYPE . INFO , gettext ( 'Verification failed. Access Denied...' ) ] ) ;
2022-04-26 06:11:10 -05:00
setVerificationIntiated ( false ) ;
2023-10-23 07:13:17 -05:00
clearInterval ( authInterval . current ) ;
2022-12-12 02:53:25 -06:00
} else if ( res . data && res . data . success == 0 && res . data . errormsg == 'forbidden' ) {
2022-06-09 03:37:05 -05:00
setErrMsg ( [ MESSAGE _TYPE . INFO , gettext ( 'Authentication completed successfully but you do not have permission to create the cluster.' ) ] ) ;
2022-04-26 06:11:10 -05:00
setVerificationIntiated ( false ) ;
2023-10-23 07:13:17 -05:00
clearInterval ( authInterval . current ) ;
2022-12-12 02:53:25 -06:00
} else if ( child . closed && ! verificationIntiated && countdown <= 0 ) {
2022-09-15 08:14:07 -05:00
setVerificationIntiated ( false ) ;
setErrMsg ( [ MESSAGE _TYPE . ERROR , gettext ( 'Authentication is aborted.' ) ] ) ;
2023-10-23 07:13:17 -05:00
clearInterval ( authInterval . current ) ;
2022-04-26 06:11:10 -05:00
}
2023-10-23 07:13:17 -05:00
authInterval . current = null ;
2022-04-26 06:11:10 -05:00
} )
. catch ( ( error ) => {
2022-08-17 06:47:13 -05:00
setErrMsg ( [ MESSAGE _TYPE . ERROR , gettext ( ` Error while verifying EDB BigAnimal: ${ error . response . data . errormsg } ` ) ] ) ;
2022-04-26 06:11:10 -05:00
} ) ;
2022-12-12 02:53:25 -06:00
countdown = countdown - 1 ;
2022-04-26 06:11:10 -05:00
} , 1000 ) ;
} ;
2022-02-14 00:43:48 -06:00
2022-04-26 06:11:10 -05:00
const onDialogHelp = ( ) => {
window . open ( url _for ( 'help.static' , { 'filename' : 'cloud_deployment.html' } ) , 'pgadmin_help' ) ;
} ;
2022-02-14 00:43:48 -06:00
const onErrClose = React . useCallback ( ( ) => {
setErrMsg ( [ ] ) ;
} ) ;
2023-03-13 04:26:16 -05:00
let cloud _providers = [
{ label : gettext ( CLOUD _PROVIDERS _LABELS . AWS ) , value : CLOUD _PROVIDERS . AWS , icon : < AWSIcon className = { classes . icon } / > } ,
{ label : gettext ( CLOUD _PROVIDERS _LABELS . BIGANIMAL ) , value : CLOUD _PROVIDERS . BIGANIMAL , icon : < BigAnimalIcon className = { classes . icon } / > } ,
{ label : gettext ( CLOUD _PROVIDERS _LABELS . AZURE ) , value : CLOUD _PROVIDERS . AZURE , icon : < AzureIcon className = { classes . icon } / > } ,
{ label : gettext ( CLOUD _PROVIDERS _LABELS . GOOGLE ) , value : CLOUD _PROVIDERS . GOOGLE , icon : < GoogleCloudIcon className = { classes . icon } / > } ] ;
2022-06-28 08:18:41 -05:00
2022-02-14 00:43:48 -06:00
return (
2022-06-15 00:52:42 -05:00
< CloudWizardEventsContext.Provider value = { eventBus . current } >
< >
< Wizard
title = { gettext ( 'Deploy Cloud Instance' ) }
stepList = { steps }
disableNextStep = { disableNextCheck }
onStepChange = { wizardStepChange }
onSave = { onSave }
onHelp = { onDialogHelp }
2023-01-09 01:02:26 -06:00
beforeNext = { onBeforeNext }
beforeBack = { onBeforeBack } >
2022-06-15 00:52:42 -05:00
< WizardStep stepId = { 0 } >
< Box className = { classes . messageBox } >
2023-03-13 04:26:16 -05:00
< Box className = { classes . messagePadding } > { gettext ( 'Select a cloud provider for PostgreSQL database.' ) } < / Box >
2022-06-15 00:52:42 -05:00
< / Box >
< Box className = { classes . messageBox } >
< ToggleButtons cloudProvider = { cloudProvider } setCloudProvider = { setCloudProvider }
2022-06-28 08:18:41 -05:00
options = { cloud _providers }
2022-06-15 00:52:42 -05:00
> < / ToggleButtons >
< / Box >
< FormFooterMessage type = { errMsg [ 0 ] } message = { errMsg [ 1 ] } onClose = { onErrClose } / >
< / WizardStep >
< WizardStep stepId = { 1 } >
< Box className = { classes . buttonMarginEDB } >
2023-01-09 01:02:26 -06:00
{ cloudProvider == CLOUD _PROVIDERS . BIGANIMAL && < Box className = { classes . messageBox } >
2022-06-15 00:52:42 -05:00
< Box > { gettext ( 'The verification code to authenticate the pgAdmin to EDB BigAnimal is: ' ) } < strong > { verificationCode } < / strong >
< br / > { gettext ( 'By clicking the below button, you will be redirected to the EDB BigAnimal authentication page in a new tab.' ) }
< / Box >
< / Box > }
2023-01-09 01:02:26 -06:00
{ cloudProvider == CLOUD _PROVIDERS . BIGANIMAL && < PrimaryButton onClick = { authenticateBigAnimal } disabled = { verificationIntiated ? true : false } >
2022-06-15 00:52:42 -05:00
{ gettext ( 'Click here to authenticate yourself to EDB BigAnimal' ) }
< / PrimaryButton > }
2023-01-09 01:02:26 -06:00
{ cloudProvider == CLOUD _PROVIDERS . BIGANIMAL && < Box className = { classes . messageBox } >
2022-06-15 00:52:42 -05:00
< Box > < / Box >
< / Box > }
< / Box >
2023-03-13 04:26:16 -05:00
{ cloudProvider == CLOUD _PROVIDERS . AWS && < AwsCredentials cloudProvider = { cloudProvider } nodeInfo = { nodeInfo } nodeData = { nodeData } setCloudDBCred = { setCloudDBCred } / > }
{ cloudProvider == CLOUD _PROVIDERS . AZURE &&
< Box flexGrow = { 1 } >
2024-02-22 05:24:20 -06:00
< AzureCredentials cloudProvider = { cloudProvider } setAzureCredData = { setAzureCredData } / >
2023-03-13 04:26:16 -05:00
< / Box > }
2022-07-06 01:13:49 -05:00
< Box flexGrow = { 1 } >
2024-02-22 05:24:20 -06:00
{ cloudProvider == CLOUD _PROVIDERS . GOOGLE && < GoogleCredentials cloudProvider = { cloudProvider } setGoogleCredData = { setGoogleCredData } / > }
2022-06-15 00:52:42 -05:00
< / Box >
< FormFooterMessage type = { errMsg [ 0 ] } message = { errMsg [ 1 ] } onClose = { onErrClose } / >
< / WizardStep >
< WizardStep stepId = { 2 } >
2023-01-09 01:02:26 -06:00
{ cloudProvider == CLOUD _PROVIDERS . BIGANIMAL && callRDSAPI == 2 && < BigAnimalClusterType
cloudProvider = { cloudProvider }
nodeInfo = { nodeInfo }
nodeData = { nodeData }
setBigAnimalClusterTypeData = { setBigAnimalClusterTypeData }
hostIP = { hostIP }
/ > }
< FormFooterMessage type = { errMsg [ 0 ] } message = { errMsg [ 1 ] } onClose = { onErrClose } / >
< / WizardStep >
< WizardStep stepId = { 3 } >
2023-03-13 04:26:16 -05:00
{ cloudProvider == CLOUD _PROVIDERS . AWS && callRDSAPI == 3 && < AwsInstanceDetails
2022-06-15 00:52:42 -05:00
cloudProvider = { cloudProvider }
nodeInfo = { nodeInfo }
nodeData = { nodeData }
setCloudInstanceDetails = { setCloudInstanceDetails }
hostIP = { hostIP } / > }
2023-01-09 01:02:26 -06:00
{ cloudProvider == CLOUD _PROVIDERS . BIGANIMAL && callRDSAPI == 3 && < BigAnimalInstance
2022-06-15 00:52:42 -05:00
cloudProvider = { cloudProvider }
nodeInfo = { nodeInfo }
nodeData = { nodeData }
setBigAnimalInstanceData = { setBigAnimalInstanceData }
hostIP = { hostIP }
2023-01-09 01:02:26 -06:00
bigAnimalClusterTypeData = { bigAnimalClusterTypeData }
2022-06-15 00:52:42 -05:00
/ > }
2023-01-09 01:02:26 -06:00
{ cloudProvider == CLOUD _PROVIDERS . AZURE && callRDSAPI == 3 && < AzureInstanceDetails
2022-06-15 00:52:42 -05:00
cloudProvider = { cloudProvider }
nodeInfo = { nodeInfo }
nodeData = { nodeData }
setAzureInstanceData = { setAzureInstanceData }
hostIP = { hostIP }
azureInstanceData = { azureInstanceData }
/ > }
2023-03-13 04:26:16 -05:00
{ cloudProvider == CLOUD _PROVIDERS . GOOGLE && callRDSAPI == 3 && < GoogleInstanceDetails
cloudProvider = { cloudProvider }
nodeInfo = { nodeInfo }
nodeData = { nodeData }
setGoogleInstanceData = { setGoogleInstanceData }
hostIP = { hostIP }
googleInstanceData = { googleInstanceData }
/ > }
2022-06-15 00:52:42 -05:00
< FormFooterMessage type = { errMsg [ 0 ] } message = { errMsg [ 1 ] } onClose = { onErrClose } / >
< / WizardStep >
2023-01-09 01:02:26 -06:00
< WizardStep stepId = { 4 } >
2023-03-13 04:26:16 -05:00
{ cloudProvider == CLOUD _PROVIDERS . AWS && < AwsDatabaseDetails
2022-04-26 06:11:10 -05:00
cloudProvider = { cloudProvider }
2022-06-15 00:52:42 -05:00
nodeInfo = { nodeInfo }
nodeData = { nodeData }
setCloudDBDetails = { setCloudDBDetails }
2022-04-26 06:11:10 -05:00
/ >
}
2023-01-09 01:02:26 -06:00
{ cloudProvider == CLOUD _PROVIDERS . BIGANIMAL && callRDSAPI == 4 && < BigAnimalDatabase
2022-04-26 06:11:10 -05:00
cloudProvider = { cloudProvider }
2022-06-15 00:52:42 -05:00
nodeInfo = { nodeInfo }
nodeData = { nodeData }
setBigAnimalDatabaseData = { setBigAnimalDatabaseData }
2023-01-09 01:02:26 -06:00
bigAnimalClusterTypeData = { bigAnimalClusterTypeData }
2022-04-26 06:11:10 -05:00
/ >
}
2023-01-09 01:02:26 -06:00
{ cloudProvider == CLOUD _PROVIDERS . AZURE && < AzureDatabaseDetails
2022-06-15 00:52:42 -05:00
cloudProvider = { cloudProvider }
nodeInfo = { nodeInfo }
nodeData = { nodeData }
setAzureDatabaseData = { setAzureDatabaseData }
/ >
}
2023-03-13 04:26:16 -05:00
{ cloudProvider == CLOUD _PROVIDERS . GOOGLE && < GoogleDatabaseDetails
cloudProvider = { cloudProvider }
nodeInfo = { nodeInfo }
nodeData = { nodeData }
setGoogleDatabaseData = { setGoogleDatabaseData }
/ >
}
2022-06-15 00:52:42 -05:00
< / WizardStep >
2023-01-09 01:02:26 -06:00
< WizardStep stepId = { 5 } >
2022-06-15 00:52:42 -05:00
< Box className = { classes . boxText } > { gettext ( 'Please review the details before creating the cloud instance.' ) } < / Box >
< Paper variant = "outlined" elevation = { 0 } className = { classes . summaryContainer } >
2023-03-13 04:26:16 -05:00
{ cloudProvider == CLOUD _PROVIDERS . AWS && callRDSAPI == 5 && < FinalSummary
2022-06-15 00:52:42 -05:00
cloudProvider = { cloudProvider }
instanceData = { cloudInstanceDetails }
databaseData = { cloudDBDetails }
/ >
}
2023-01-09 01:02:26 -06:00
{ cloudProvider == CLOUD _PROVIDERS . BIGANIMAL && callRDSAPI == 5 && < FinalSummary
2022-06-15 00:52:42 -05:00
cloudProvider = { cloudProvider }
instanceData = { bigAnimalInstanceData }
databaseData = { bigAnimalDatabaseData }
2023-01-09 01:02:26 -06:00
clusterTypeData = { bigAnimalClusterTypeData }
2022-06-15 00:52:42 -05:00
/ >
}
2023-01-09 01:02:26 -06:00
{ cloudProvider == CLOUD _PROVIDERS . AZURE && callRDSAPI == 5 && < FinalSummary
2022-06-15 00:52:42 -05:00
cloudProvider = { cloudProvider }
instanceData = { azureInstanceData }
databaseData = { azureDatabaseData }
/ >
}
2023-03-13 04:26:16 -05:00
{ cloudProvider == CLOUD _PROVIDERS . GOOGLE && callRDSAPI == 5 && < FinalSummary
cloudProvider = { cloudProvider }
instanceData = { googleInstanceData }
databaseData = { googleDatabaseData }
/ >
}
2022-06-15 00:52:42 -05:00
< / Paper >
< / WizardStep >
< / Wizard >
< / >
< / CloudWizardEventsContext.Provider >
2022-02-14 00:43:48 -06:00
) ;
}
CloudWizard . propTypes = {
nodeInfo : PropTypes . object ,
nodeData : PropTypes . object ,
2022-09-15 08:14:07 -05:00
onClose : PropTypes . func ,
2023-10-23 07:13:17 -05:00
cloudPanelId : PropTypes . string ,
2022-02-14 00:43:48 -06:00
} ;