private NeptuneClusterMetadata cloneCluster()

in src/main/java/com/amazonaws/services/neptune/cluster/AddCloneTask.java [71:121]


    private NeptuneClusterMetadata cloneCluster() {

        System.err.println("Cloning cluster " + sourceClusterId + "...");
        System.err.println();

        NeptuneClusterMetadata sourceClusterMetadata =
                NeptuneClusterMetadata.createFromClusterId(sourceClusterId, amazonNeptuneClientSupplier);

        InstanceType instanceType = StringUtils.isEmpty(cloneClusterInstanceType) ?
                InstanceType.parse(sourceClusterMetadata.instanceMetadataFor(sourceClusterMetadata.primary()).instanceType()) :
                InstanceType.parse(cloneClusterInstanceType);

        System.err.println(String.format("Source clusterId           : %s", sourceClusterId));
        System.err.println(String.format("Target clusterId           : %s", targetClusterId));
        System.err.println(String.format("Target instance type       : %s", instanceType));

        NeptuneClient neptune = amazonNeptuneClientSupplier.get();

        DBClusterParameterGroup dbClusterParameterGroup = Timer.timedActivity(
                "creating DB cluster parameter group",
                (Activity.Callable<DBClusterParameterGroup>) () ->
                        createDbClusterParameterGroup(sourceClusterMetadata, neptune));

        DBParameterGroup dbParameterGroup = Timer.timedActivity(
                "creating parameter groups",
                (Activity.Callable<DBParameterGroup>) () -> createDbParameterGroup(sourceClusterMetadata, neptune));


        DBCluster targetDbCluster = Timer.timedActivity(
                "creating target cluster",
                (Activity.Callable<DBCluster>) () ->
                        createCluster(sourceClusterMetadata, neptune, dbClusterParameterGroup));

        Timer.timedActivity("creating primary", (Activity.Runnable) () ->
                createInstance("primary",
                        neptune,
                        sourceClusterMetadata,
                        instanceType,
                        dbParameterGroup,
                        targetDbCluster));

        if (replicaCount > 0) {

            Timer.timedActivity("creating replicas", (Activity.Runnable) () ->
                    createReplicas(sourceClusterMetadata, instanceType, neptune, dbParameterGroup, targetDbCluster));
        }

        neptune.close();

        return NeptuneClusterMetadata.createFromClusterId(targetClusterId, amazonNeptuneClientSupplier);
    }