def rules(self):
        """
        Returns a sorted list of firewall rules.

        Returns:
            list
        """
        list_of_rules = []

        for main_row in self.dict_rules:
            if 'rules' in main_row:
                for rule_row in main_row['rules']:
                    if 'grants' in rule_row:
                        for grant_row in rule_row['grants']:
                            if 'group_id' in grant_row:
                                # Set a var to not go over 80 chars
                                group_id = grant_row['group_id']

                                # Some VPC grants don't specify a name
                                if 'name' in grant_row:
                                    row_name = grant_row['name']
                                else:
                                    row_name = None

                                fr = FirewallRule(
                                    main_row['id'],
                                    main_row['name'],
                                    main_row['description'],
                                    rules_direction=rule_row['direction'],
                                    rules_ip_protocol=rule_row['ip_protocol'],
                                    rules_from_port=rule_row['from_port'],
                                    rules_to_port=rule_row['to_port'],
                                    rules_grants_group_id=group_id,
                                    rules_grants_name=row_name,
                                    rules_description=grant_row['description'])

                                list_of_rules.append(fr)
                            elif 'cidr_ip' in grant_row:
                                fr = FirewallRule(
                                    main_row['id'],
                                    main_row['name'],
                                    main_row['description'],
                                    rules_direction=rule_row['direction'],
                                    rules_ip_protocol=rule_row['ip_protocol'],
                                    rules_from_port=rule_row['from_port'],
                                    rules_to_port=rule_row['to_port'],
                                    rules_grants_cidr_ip=grant_row['cidr_ip'],
                                    rules_description=grant_row['description'])
                                list_of_rules.append(fr)
                            else:
                                raise ValueError("Unsupported grant:",
                                                 grant_row)
                    else:
                        fr = FirewallRule(
                            main_row['id'],
                            main_row['name'],
                            main_row['description'],
                            rules_direction=rule_row['direction'],
                            rules_ip_protocol=rule_row['ip_protocol'],
                            rules_from_port=rule_row['from_port'],
                            rules_to_port=rule_row['to_port'])
                        list_of_rules.append(fr)
            else:
                fr = FirewallRule(main_row['id'],
                                  main_row['name'],
                                  main_row['description'])
                list_of_rules.append(fr)

        # Sort the data in order to get a consistent output
        sorted_list = sorted(list_of_rules,
                             key=lambda fr: (str(fr.id),
                                             str(fr.name),
                                             str(fr.description),
                                             str(fr.rules_direction),
                                             str(fr.rules_ip_protocol),
                                             str(fr.rules_from_port),
                                             str(fr.rules_to_port),
                                             str(fr.rules_grants_group_id),
                                             str(fr.rules_grants_name),
                                             str(fr.rules_grants_cidr_ip)))

        return sorted_list
Returns a sorted list of firewall rules.

        Returns:
            list