var create = function (err, event, context) {
  if (err) {
    return util.done(err);
  }

  /*
    Here is where CREATE code should be placed.

    Always call util.done when finished to end the lambda
    execution.

    util.done(err,event,context, data, physicalResourceId)
  */

  util.done('CREATE NOT IMPLEMENTED', event, context, {}, 'ID');
};
Ejemplo n.º 2
0
				successCb: function(spotResponse) {
					if(typeof body == "string"){
						body = JSON.parse(body)
					}
					console.log("Delete Ocean launch spec Success: " + JSON.stringify(spotResponse, null, 2))
					util.done(null, event, context, body);
				}
var destroy = function (err, event, context) {
  if (err) {
    return util.done(err);
  }

  /*
    Here is where DELETE code should be placed.

    Always call util.done when finished to end the lambda
    execution.

    util.done(err,event,context, data)
  */

  util.done('DELETE NOT IMPLEMENTED', event, context, {});
};
Ejemplo n.º 4
0
 successCb: function(spotResponse) {
   var options = {
     cfn_responder: {
       returnError: false
     }
   };
   util.done(err, event, context, body, body.response.items[0].id, options);
 }
Ejemplo n.º 5
0
  spotUtil.getTokenAndConfig(event, function(err, tc) {
    if(err) return util.done(err, event, context);

    // take out region asgname, dryrun
    var accountId = spotUtil.getSpotinstAccountId(event)

    var importOptions = {
      method:  'POST',
      url:     'https://api.spotinst.io/aws/ec2/group/autoScalingGroup/import',
      qs:      {
        accountId            : accountId,
        region               : asgLib.getRegion(event),
        autoScalingGroupName : spotUtil.getASGName(event),
        dryRun               : true
      },
      headers: {
        'content-type' : 'application/json',
        'Authorization': 'Bearer ' + tc.token,
        'User-Agent'   : spotUtil.getUserAgent()
      },
      json:    {
        group: tc.config
      }
    };

    var groupConfig     = asgLib.getGroupConfig(event)

    request(importOptions, function(err, res, body) {
      spotUtil.validateResponse({
        err:       err,
        res:       res,
        body:      body,
        event:     event,
        context:   context,
        resource:  'ASG',
        action:    'Import',
        successCb: function(spotResponse) {
          var importedGroupConfig = _.get(body, 'response.items[0]');
          var placements          = _.get(importedGroupConfig, 'compute.availabilityZones');
          
          _.forEach(placements, placement => placement.subnetId = undefined);
          _.merge(importedGroupConfig, groupConfig)          

          spotUtil.createGroupFromImport(importedGroupConfig, tc.config, event, context, tc.token, accountId)
            .then((groupId)=>{
              var options = {
                cfn_responder: {
                  returnError: false,
                  logLevel:    "debug"
                }
              };

              util.done(err, event, context, {}, groupId, options);
            });
        }
      });
    });
  });
Ejemplo n.º 6
0
            .then((groupId)=>{
              var options = {
                cfn_responder: {
                  returnError: false,
                  logLevel:    "debug"
                }
              };

              util.done(err, event, context, {}, groupId, options);
            });
Ejemplo n.º 7
0
 spotUtil.getToken(event, function(err, token) {
   if(err) return util.done(err, event, context);
   
   var refId = event.id || event.PhysicalResourceId;
   
   // Let CloudFormation rollbacks happen for failed stacks
   if(event.StackId && !_.startsWith(refId, 'sis'))
     return util.done(null, event, context);
   
   var createOptions = {
     method:  'DELETE',
     qs:      {
       accountId: spotUtil.getSpotinstAccountId(event)
     },
     url:     'https://api.spotinst.io/healthCheck/' + refId,
     headers: {
       'content-type' : 'application/json',
       'Authorization': 'Bearer ' + token,
       'User-Agent'   : spotUtil.getUserAgent()
     }
   };
   
   console.log('Deleting health check ' + refId);
   request(createOptions, function(err, res, body) {
     spotUtil.validateResponse({
       err:       err,
       res:       res,
       body:      body,
       event:     event,
       context:   context,
       resource:  'healthCheck',
       action:    'delete',
       successCb: function(spotResponse) {
         // Ensure JSON
         body = JSON.parse(body.toString());
         
         util.done(err, event, context, body);
       }
     });
   });
   
 });
Ejemplo n.º 8
0
    async.retry({times: 5, interval: 1000, errorFilter: errorFilter}, createRequest, (err, res)=>{
      if(err){
        let physicalResourceId = event.PhysicalResourceId || "ResourceFailed";
        let error =  "elasticgroup create failed: " + err.errMsg;
        console.log(`${physicalResourceId} failed: ${error}`)

        return util.done(error, event, context, null, physicalResourceId);
      }
      else{
        let options = {
          cfn_responder: {
            returnError: false,
            logLevel:    "debug"
          }
        };
        let physicalResourceId = res.body.response.items[0].id
        console.log(`${physicalResourceId} creation success`)

        return util.done(null, res.event, res.context, null, physicalResourceId, options);
      }
    })
Ejemplo n.º 9
0
				successCb: function(spotResponse) {
					console.log('Ocean Update Success: ' + JSON.stringify(body, null, 2));

					let options = {
						cfn_responder: {
							returnError: false,
							logLevel:    "debug"
						}
					};

					util.done(null, event, context, null, refId, options);
				}
Ejemplo n.º 10
0
				successCb: function(spotResponse) {
					console.log('Ocean Creation Success: ' + JSON.stringify(body, null, 2));

					let physicalResourceId = body.response.items[0].id

					let options = {
						cfn_responder: {
							returnError: false,
							logLevel:    "debug"
						}
					};

					util.done(null, event, context, null, physicalResourceId, options);
				}
Ejemplo n.º 11
0
var create = function(err, event, context) {
  if(err) {
    return util.done(err);
  }

  spotUtil.getTokenAndConfig(event, function(err, tc) {
    if(err) return util.done(err, event, context);

    var createOptions = {
      method:  'POST',
      url:     'https://api.spotinst.io/spectrum/metrics/action',
      qs:      {
        accountId: spotUtil.getSpotinstAccountId(event)
      },
      headers: {
        'content-type' : 'application/json',
        'Authorization': 'Bearer ' + tc.token,
        'User-Agent'   : spotUtil.getUserAgent()
      },
      json:    {
        action: tc.config
      }
    };

    console.log('Creating spectrum action: ' + JSON.stringify(tc.config, null, 2));
    request(createOptions, function(err, res, body) {
      spotUtil.validateResponse({
        err:       err,
        res:       res,
        body:      body,
        event:     event,
        context:   context,
        resource:  'spectrumAction',
        action:    'create',
        successCb: function(spotResponse) {
          var options = {
            cfn_responder: {
              returnError: false
            }
          };
          util.done(err, event, context, body, body.response.items[0].id, options);
        }
      });
    });

  });

};
Ejemplo n.º 12
0
var create = function (err, event, context) {
  if (err) {
    return util.done(err);
  }

  var region = event.Region || process.env.AWS_DEFAULT_REGION;

  var params = event.ResourceProperties;
  var kms = new AWS.KMS({region: region});

  kms.createGrant(params, function(err, data) {
    if (err) return util.done(err,event,context);

    util.done(null, event, context, data, data.GrantId);
  });

};
Ejemplo n.º 13
0
	spotUtil.getToken(event, function(err, token) {
		if(err) return util.done(err, event, context);

		var refId = event.id || event.PhysicalResourceId;

		let oceanDeleteOptions = {
			uri:     "https://api.spotinst.io/ocean/aws/k8s/launchSpec/" + refId,
			method:  "DELETE",
			qs:      {
				accountId      : spotUtil.getSpotinstAccountId(event)
			},
			headers: {
				'Content-Type' : 'application/json',
				'Authorization': 'Bearer ' + token,
				'User-Agent'   : spotUtil.getUserAgent()
			}
		}

		console.log(`Deleting ocean launch spec ${refId}`)

		request(oceanDeleteOptions, function(err, res, body) {
			spotUtil.validateResponse({
				err:       err,
				res:       res,
				body:      body,
				event:     event,
				context:   context,
				resource:  'ocean launch spec',
				action:    'delete',
				successCb: function(spotResponse) {
					if(typeof body == "string"){
						body = JSON.parse(body)
					}
					console.log("Delete Ocean launch spec Success: " + JSON.stringify(spotResponse, null, 2))
					util.done(null, event, context, body);
				}
			});
		});
	})
Ejemplo n.º 14
0
  kms.createGrant(params, function(err, data) {
    if (err) return util.done(err,event,context);

    util.done(null, event, context, data, data.GrantId);
  });
Ejemplo n.º 15
0
 	spotUtil.getTokenAndConfig(event, function(err, tc) {
		if(err) {
			return util.done(err, event, context);
		}

		let oceanClusterConfig  = tc.config; 

		if(spotUtil.checkAutoTag(event)){
			let autoTags = spotUtil.generateTags(event)
			
			if(spotUtil.tagsExsist(oceanClusterConfig)){
				autoTags.forEach((singleTag)=>{
					oceanClusterConfig.compute.launchSpecification.tags.push(singleTag)
				})
			}else{
				oceanClusterConfig.compute.launchSpecification.tags = autoTags
			}
		}

		let createOceanOptions = {
			uri:     "https://api.spotinst.io/ocean/aws/k8s/cluster",
			method:  "POST",
			qs:      {
				accountId      : spotUtil.getSpotinstAccountId(event)
			},
			headers: {
				'Content-Type' : 'application/json',
				'Authorization': 'Bearer ' + tc.token,
				'User-Agent'   : spotUtil.getUserAgent()
			},
			json:    {
				cluster: oceanClusterConfig
			}
		}

		console.log('Creating ocean cluster: ' + JSON.stringify(oceanClusterConfig, null, 2))

		request(createOceanOptions, function(err, res, body) {
			spotUtil.validateResponse({
				err:       err,
				res:       res,
				body:      body,
				event:     event,
				context:   context,
				resource:  'ocean',
				action:    'create',
				successCb: function(spotResponse) {
					console.log('Ocean Creation Success: ' + JSON.stringify(body, null, 2));

					let physicalResourceId = body.response.items[0].id

					let options = {
						cfn_responder: {
							returnError: false,
							logLevel:    "debug"
						}
					};

					util.done(null, event, context, null, physicalResourceId, options);
				}
			})
		})
	})
Ejemplo n.º 16
0
  spotUtil.getTokenAndConfig(event, function(err, tc) {
    if(err) {
      return util.done(err, event, context);
    }
    
    var environmentId   = _.get(tc, 'config.beanstalk.environmentId');
    var environmentName = _.get(tc, 'config.beanstalk.environmentName');
    var region          = _.get(tc, 'config.region');

    var groupConfig     = _.get(tc, 'config.groupConfig');
    
    var accountId       = spotUtil.getSpotinstAccountId(event);
    
    console.log('Importing beanstalk configurations for: ' + JSON.stringify(tc.config, null, 2));
    
    var importOptions = {
      method:  'GET',
      url:     'https://api.spotinst.io/aws/ec2/group/beanstalk/import',
      qs:      {
        accountId,
        region,
        environmentName,
        environmentId
      },
      headers: {
        'Content-Type' : 'application/json',
        'Authorization': 'Bearer ' + tc.token,
        'User-Agent'   : spotUtil.getUserAgent()
      }
    };
    
    console.log('Creating beanstalk group: ' + JSON.stringify(importOptions, null, 2));

    request(importOptions, function(err, res, body) {
      spotUtil.validateResponse({
        err:       err,
        res:       res,
        body:      body,
        event:     event,
        context:   context,
        resource:  'beanstalkElastigroup',
        action:    'import',
        successCb: function() {
          var jsonBody            = JSON.parse(body);
          var importedGroupConfig = _.get(jsonBody, 'response.items[0]');
          _.merge(importedGroupConfig, groupConfig)          
          var placements          = _.get(importedGroupConfig, 'compute.availabilityZones');
          _.forEach(placements, placement => placement.subnetId = undefined);
          
          spotUtil.createGroupFromImport(importedGroupConfig, tc.config, event, context, tc.token, accountId)
            .then((groupId)=>{
              var options = {
                cfn_responder: {
                  returnError: false,
                  logLevel:    "debug"
                }
              };

              util.done(err, event, context, {}, groupId, options);
            });
        }
      });
    });
  });
Ejemplo n.º 17
0
 	spotUtil.getTokenAndConfig(event, function(err, tc) {
		if(err) {
			return util.done(err, event, context);
		}
		let refId               = event.id || event.PhysicalResourceId;
		let oceanUpdateConfig   = tc.config;

		_.unset(oceanUpdateConfig, 'region')

		let updatePolicy = spotUtil.getUpdatePolicyConfig(event) || {};
		let shouldUpdateTargetCapacity = spotUtil.parseBoolean(updatePolicy.shouldUpdateTargetCapacity);

		if(shouldUpdateTargetCapacity === false) {
			_.unset(oceanUpdateConfig, 'capacity.target');
		}

		if(spotUtil.checkAutoTag(event)){
			let autoTags = spotUtil.generateTags(event)
			if(spotUtil.tagsExsist(oceanUpdateConfig)){
				autoTags.forEach((singleTag)=>{
					oceanUpdateConfig.compute.launchSpecification.tags.push(singleTag)
				})
			}else{
				oceanUpdateConfig.compute.launchSpecification.tags = autoTags
			}
		}

		let updateOceanOptions = {
			uri :     "https://api.spotinst.io/ocean/aws/k8s/cluster/" + refId,
			method :  "PUT",
			qs :      {
				accountId      : spotUtil.getSpotinstAccountId(event),
			},
			headers : {
				'Content-Type' : 'application/json',
				'Authorization': 'Bearer ' + tc.token,
				'User-Agent'   : spotUtil.getUserAgent()
			},
			json :    {
				cluster: oceanUpdateConfig
			}
		}

		console.log('Update ocean cluster: ' + JSON.stringify(oceanUpdateConfig, null, 2))

		request(updateOceanOptions, function(err, res, body) {
			spotUtil.validateResponse({
				err:       err,
				res:       res,
				body:      body,
				event:     event,
				context:   context,
				resource:  'ocean',
				action:    'update',
				successCb: function(spotResponse) {
					console.log('Ocean Update Success: ' + JSON.stringify(body, null, 2));

					let options = {
						cfn_responder: {
							returnError: false,
							logLevel:    "debug"
						}
					};

					util.done(null, event, context, null, refId, options);
				}
			})
		})
	})
Ejemplo n.º 18
0
 successCb: function(spotResponse) {
   // Ensure JSON
   body = JSON.parse(body.toString());
   
   util.done(err, event, context, body);
 }
Ejemplo n.º 19
0
  spotUtil.getTokenAndConfig(event, function(err, tc) {
    if(err) {
      return util.done(err, event, context);
    }
    
    let createPolicy  = getCreatePolicyConfig(event) || {};
    let groupConfig   = spotUtil.parseGroupConfig(tc.config);

    if(spotUtil.checkAutoTag(event)){
      let autoTags = spotUtil.generateTags(event)

      if(spotUtil.tagsExsist(groupConfig)){
        autoTags.forEach((singleTag)=>{
          groupConfig.compute.launchSpecification.tags.push(singleTag)
        })
      }
      else{
        groupConfig.compute.launchSpecification.tags = autoTags
      }
    }

    let createOptions = {
      method:  'POST',
      url:     'https://api.spotinst.io/aws/ec2/group',
      qs:      {
        accountId:              spotUtil.getSpotinstAccountId(event),
        ignoreInitHealthChecks: createPolicy.ignoreInitHealthChecks
      },
      headers: {
        'Content-Type' : 'application/json',
        'Authorization': 'Bearer ' + tc.token,
        'User-Agent'   : spotUtil.getUserAgent()
      },
      json:    {
        group: groupConfig
      }
    };
    
    console.log('Creating group: ' + JSON.stringify(groupConfig, null, 2));

    let createRequest = (cb, err) =>{
      request(createOptions, function(err, res, body) {
        spotUtil.validateResponse({
          err:       err,
          res:       res,
          body:      body,
          event:     event,
          context:   context,
          resource:  'elasticgroup',
          action:    'create',
          successCb: function(spotResponse) {
            cb(null, spotResponse)  
          },
          failureCb: function(spotResponse){
            cb(spotResponse);
          }
        });
      });
    } 

    let errorFilter = (spotResponse)=>{
      let errors = spotResponse.body.response.errors
      for(err in errors){
        if(errors[err].code === "RequestLimitExceeded"){
          return true
        }
      }
      return false
    }

    async.retry({times: 5, interval: 1000, errorFilter: errorFilter}, createRequest, (err, res)=>{
      if(err){
        let physicalResourceId = event.PhysicalResourceId || "ResourceFailed";
        let error =  "elasticgroup create failed: " + err.errMsg;
        console.log(`${physicalResourceId} failed: ${error}`)

        return util.done(error, event, context, null, physicalResourceId);
      }
      else{
        let options = {
          cfn_responder: {
            returnError: false,
            logLevel:    "debug"
          }
        };
        let physicalResourceId = res.body.response.items[0].id
        console.log(`${physicalResourceId} creation success`)

        return util.done(null, res.event, res.context, null, physicalResourceId, options);
      }
    })

  });