function handleJoin(provider, bigIp, masterIid, options) {
        const deferred = q.defer();

        logger.info('Cluster action JOIN');

        logger.info('Initializing encryption');
        initEncryption.call(this, provider, bigIp)
            .then(() => {
                let promise;

                // If we are master and are replacing an expired master, other instances
                // will join to us. Just set our config sync ip.
                if (this.instance.isMaster) {
                    if (!provider.hasFeature(CloudProvider.FEATURE_MESSAGING)) {
                        logger.info('Storing master credentials.');
                        promise = provider.putMasterCredentials();
                    } else {
                        promise = q();
                    }

                    promise
                        .then((response) => {
                            logger.debug(response);

                            // Configure cm configsync-ip on this BIG-IP node
                            if (!options.blockSync) {
                                logger.info('Setting config sync IP.');
                                return bigIp.cluster.configSyncIp(this.instance.privateIp);
                            }
                            logger.info('Not seting config sync IP because block-sync is specified.');
                            return q();
                        })
                        .then(() => {
                            deferred.resolve();
                        })
                        .catch((err) => {
                            // rethrow here, otherwise error is hidden
                            throw err;
                        });
                } else {
                    // We're not the master

                    // Make sure the master file is not on our disk
                    if (fs.existsSync(MASTER_FILE_PATH)) {
                        fs.unlinkSync(MASTER_FILE_PATH);
                    }

                    // Configure cm configsync-ip on this BIG-IP node and join the cluster
                    logger.info('Setting config sync IP.');
                    bigIp.cluster.configSyncIp(this.instance.privateIp)
                        .then(() => {
                            // If there is a master, join it. Otherwise wait for an update event
                            // when we have a master.
                            if (masterIid) {
                                return joinCluster.call(this, provider, bigIp, masterIid, options);
                            }
                            return q();
                        })
                        .then(() => {
                            deferred.resolve();
                        })
                        .catch((err) => {
                            // rethrow here, otherwise error is hidden
                            throw err;
                        });
                }
            });

        return deferred.promise;
    }
function handleJoin(provider, bigIp, masterIid, options) {
        const deferred = q.defer();

        logger.info('Cluster action JOIN');

        logger.info('Initializing encryption');
        initEncryption.call(this, provider, bigIp)
            .then(() => {
                let promise;

                
                
                if (this.instance.isMaster) {
                    if (!provider.hasFeature(CloudProvider.FEATURE_MESSAGING)) {
                        logger.info('Storing master credentials.');
                        promise = provider.putMasterCredentials();
                    } else {
                        promise = q();
                    }

                    promise
                        .then((response) => {
                            logger.debug(response);

                            
                            if (!options.blockSync) {
                                logger.info('Setting config sync IP.');
                                return bigIp.cluster.configSyncIp(this.instance.privateIp);
                            }
                            logger.info('Not seting config sync IP because block-sync is specified.');
                            return q();
                        })
                        .then(() => {
                            deferred.resolve();
                        })
                        .catch((err) => {
                            
                            throw err;
                        });
                } else {
                    

                    
                    if (fs.existsSync(MASTER_FILE_PATH)) {
                        fs.unlinkSync(MASTER_FILE_PATH);
                    }

                    
                    logger.info('Setting config sync IP.');
                    bigIp.cluster.configSyncIp(this.instance.privateIp)
                        .then(() => {
                            
                            
                            if (masterIid) {
                                return joinCluster.call(this, provider, bigIp, masterIid, options);
                            }
                            return q();
                        })
                        .then(() => {
                            deferred.resolve();
                        })
                        .catch((err) => {
                            
                            throw err;
                        });
                }
            });

        return deferred.promise;
    }
function handleJoin ( provider , bigIp , masterIid , options ) { const deferred = q . defer ( ) ; logger . info ( 'Cluster action JOIN' ) ; logger . info ( 'Initializing encryption' ) ; initEncryption . call ( this , provider , bigIp ) . then ( ( ) => { let promise ; // If we are master and are replacing an expired master, other instances // will join to us. Just set our config sync ip. if ( this . instance . isMaster ) { if ( ! provider . hasFeature ( CloudProvider . FEATURE_MESSAGING ) ) { logger . info ( 'Storing master credentials.' ) ; promise = provider . putMasterCredentials ( ) ; } else { promise = q ( ) ; } promise . then ( ( response ) => { logger . debug ( response ) ; // Configure cm configsync-ip on this BIG-IP node if ( ! options . blockSync ) { logger . info ( 'Setting config sync IP.' ) ; return bigIp . cluster . configSyncIp ( this . instance . privateIp ) ; } logger . info ( 'Not seting config sync IP because block-sync is specified.' ) ; return q ( ) ; } ) . then ( ( ) => { deferred . resolve ( ) ; } ) . catch ( ( err ) => { // rethrow here, otherwise error is hidden throw err ; } ) ; } else { // We're not the master // Make sure the master file is not on our disk if ( fs . existsSync ( MASTER_FILE_PATH ) ) { fs . unlinkSync ( MASTER_FILE_PATH ) ; } // Configure cm configsync-ip on this BIG-IP node and join the cluster logger . info ( 'Setting config sync IP.' ) ; bigIp . cluster . configSyncIp ( this . instance . privateIp ) . then ( ( ) => { // If there is a master, join it. Otherwise wait for an update event // when we have a master. if ( masterIid ) { return joinCluster . call ( this , provider , bigIp , masterIid , options ) ; } return q ( ) ; } ) . then ( ( ) => { deferred . resolve ( ) ; } ) . catch ( ( err ) => { // rethrow here, otherwise error is hidden throw err ; } ) ; } } ) ; return deferred . promise ; }
Handles --cluster-action join

Called with this bound to the caller
Handles -- cluster - action join