def launch_date(self): """Returns the time and date of the last time the instance was started Returns: `datetime` """ return parse_date(self.get_property('launch_date').value)
def creation_date(self): """Returns the date and time the bucket was created. Returns: `datetime` """ return parse_date(self.get_property('creation_date').value)
def get_aws_regions(): """Load a list of AWS regions from file, provided the file exists and is fresh (less than one week old). If the file doesn't exist or is out of date, load a new copy from the AWS static data. Returns: :obj:`list` of `str` """ region_file = os.path.join(app.config.get('BASE_CFG_PATH'), 'aws_regions.json') if os.path.exists(region_file): data = json.load(open(region_file, 'r')) if parse_date(data['created']) < datetime.now() + timedelta(weeks=1): return data['regions'] data = requests.get( 'https://ip-ranges.amazonaws.com/ip-ranges.json').json() rgx = re.compile(dbconfig.get('ignored_aws_regions_regexp', default=''), re.I) regions = sorted( list( set(x['region'] for x in data['prefixes'] if not rgx.search(x['region'])))) json.dump({ 'created': datetime.now().isoformat(), 'regions': regions }, open(region_file, 'w')) return regions
def end(self): """Returns the `datetime` of when the issue was fixed, or `None` if not set Returns: `datetime`,`None` """ return parse_date(self.get_property('end').value)
def last_notice(self): """Returns the `datetime` of when the issue was last notified, or `None` if not set Returns: `datetime`,`None` """ return parse_date(self.get_property('last_notice').value)
def start(self): """Returns the `datetime` of when the issue was detected, or None if not set Returns: `datetime`,`None` """ return parse_date(self.get_property('start').value)
def shutdown_on(self): """Returns the `datetime` the instance will be shutdown if not fixed, or None if not set Returns: `datetime`,`None` """ return parse_date(self.get_property('shutdown_on').value)
def next_change(self): """Returns the `datetime` of the next change to the object, or None if not set Returns: `datetime`,`None` """ return parse_date(self.get_property('next_change').value)
def last_change(self): """Returns a `datetime` object, showing the last time changes were detected on the issue, or `None` if not set Returns: `datetime`,`None` """ return parse_date(self.get_property('last_change').value)
def last_alert(self): """Returns a timestamp for the last time an alert was sent for this hijacking event Returns: `datetime`,`None` """ try: return parse_date(self.get_property('last_alert').value) except AttributeError: return None
def update_amis(self): """Update list of AMIs for the account / region Returns: `None` """ self.log.debug('Updating AMIs for {}/{}'.format( self.account.account_name, self.region)) ec2 = self.session.resource('ec2', region_name=self.region) try: existing_images = AMI.get_all(self.account, self.region) images = {x.id: x for x in ec2.images.filter(Owners=['self'])} for data in list(images.values()): if data.id in existing_images: ami = existing_images[data.id] if ami.update(data): self.log.debug( 'Changed detected for AMI {}/{}/{}'.format( self.account.account_name, self.region, ami.resource.resource_id)) else: properties = { 'architecture': data.architecture, 'creation_date': parse_date(data.creation_date or '1970-01-01 00:00:00'), 'description': data.description, 'name': data.name, 'platform': data.platform or 'Linux', 'state': data.state, } tags = { tag['Key']: tag['Value'] for tag in data.tags or {} } AMI.create(data.id, account_id=self.account.account_id, location=self.region, properties=properties, tags=tags) self.log.debug('Added new AMI {}/{}/{}'.format( self.account.account_name, self.region, data.id)) db.session.commit() # Check for deleted instances ik = set(list(images.keys())) eik = set(list(existing_images.keys())) try: for image_id in eik - ik: db.session.delete(existing_images[image_id].resource) self.log.debug('Deleted AMI {}/{}/{}'.format( self.account.account_name, self.region, image_id, )) db.session.commit() except: db.session.rollback() finally: del ec2