Пример #1
0
    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)
Пример #2
0
    def creation_date(self):
        """Returns the date and time the bucket was created.

        Returns:
            `datetime`
        """
        return parse_date(self.get_property('creation_date').value)
Пример #3
0
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
Пример #4
0
    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)
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
    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)
Пример #8
0
    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)
Пример #9
0
    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)
Пример #10
0
    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
Пример #11
0
    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