# coding=utf-8
#
# Copyright 2017 F5 Networks Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""BIG-IP® Advanced Firewall Manager™ (AFM®) module.
REST URI
``http://localhost/mgmt/tm/security/protocol-inspection``
GUI Path
``Security --> Protocol Security --> Inspection_Profiles
Security --> Protocol Security --> Inspection_List
``
REST Kind
``tm:security:protocol-inspection*``
"""
from f5.bigip.mixins import CommandExecutionMixin
from f5.bigip.resource import Collection
from f5.bigip.resource import OrganizingCollection
from f5.bigip.resource import Resource
from f5.bigip.resource import UnnamedResource
from f5.sdk_exception import UnsupportedMethod
[docs]class Protocol_Inspection(OrganizingCollection):
"""BIG-IP® Protocol Inspection Organizing collection"""
def __init__(self, security):
super(Protocol_Inspection, self).__init__(security)
self._meta_data['allowed_lazy_attributes'] = [
Profiles,
Compliances,
Profile_Status,
Learning_Suggestions,
Signatures,
Staging
]
[docs]class Profiles(Collection):
""""BIG-IP® Protocol Inspection Profile collection"""
def __init__(self, protocol_inspection):
super(Profiles, self).__init__(protocol_inspection)
self._meta_data['allowed_lazy_attributes'] = [Profile]
self._meta_data['attribute_registry'] = \
{'tm:security:protocol-inspection:profile:profilestate':
Profile}
[docs]class Profile(Resource):
"""BIG-IP® Protocol Inspection Profile resource"""
def __init__(self, profiles):
super(Profile, self).__init__(profiles)
self._meta_data['required_json_kind'] = \
'tm:security:protocol-inspection:profile:profilestate'
self._meta_data['required_creation_parameters'].update(('partition',))
[docs]class Compliances(Collection):
def __init__(self, protocol_inspection):
super(Compliances, self).__init__(protocol_inspection)
self._meta_data['allowed_lazy_attributes'] = [Compliance]
self._meta_data['attribute_registry'] = \
{'tm:security:protocol-inspection:compliance:compliancestate':
Compliance}
[docs]class Compliance(Resource):
"""BIG-IP® Protocol Inspection Compliance resource"""
def __init__(self, compliances):
super(Compliance, self).__init__(compliances)
self._meta_data['required_json_kind'] = \
'tm:security:protocol-inspection:compliance:compliancestate'
self._meta_data['required_load_parameters'] = set()
[docs] def create(self, **kwargs):
raise UnsupportedMethod(
"%s does not support the create method" % self.__class__.__name__
)
[docs] def delete(self, **kwargs):
raise UnsupportedMethod(
"%s does not support the delete method" % self.__class__.__name__
)
[docs] def modify(self, **kwargs):
raise UnsupportedMethod(
"%s does not support the delete method" % self.__class__.__name__
)
[docs]class Learning_Suggestions(UnnamedResource, CommandExecutionMixin):
"""BIG-IP® Protocol Inspection Compliance resource"""
def __init__(self, protocol_inspection):
super(Learning_Suggestions, self).__init__(protocol_inspection)
self._meta_data['obj_has_stats'] = True
self._meta_data['required_load_parameters'] = set()
self._meta_data['required_json_kind'] = \
'tm:security:protocol-inspection:learning-suggestion:learning-suggestionsstats'
self._meta_data['allowed_commands'].append('publish')
self._meta_data['allowed_commands'].append('delete')
[docs]class Staging(UnnamedResource, CommandExecutionMixin):
"""BIG-IP® Protocol Inspection Compliance resource"""
def __init__(self, protocol_inspection):
super(Staging, self).__init__(protocol_inspection)
self._meta_data['obj_has_stats'] = True
self._meta_data['required_load_parameters'] = set()
self._meta_data['required_json_kind'] = \
'tm:security:protocol-inspection:staging:stagingstats'
self._meta_data['allowed_commands'].append('start')
self._meta_data['allowed_commands'].append('stop')
[docs]class Profile_Status(UnnamedResource):
"""BIG-IP® Protocol Inspection Compliance resource"""
def __init__(self, protocol_inspection):
super(Profile_Status, self).__init__(protocol_inspection)
self._meta_data['obj_has_stats'] = True
self._meta_data['required_json_kind'] = \
'tm:security:protocol-inspection:profile-status:profile-statusstats'
[docs] def update(self, **kwargs):
'''Update is not supported.
:raises: :exc:`~f5.BIG-IP.resource.UnsupportedMethod`
'''
raise UnsupportedMethod(
'Stats do not support create, only load and refresh')
[docs]class Signatures(Collection):
"""BIG-IP® Protocol Inspection Signature collection"""
def __init__(self, protocol_inspection):
super(Signatures, self).__init__(protocol_inspection)
self._meta_data['allowed_lazy_attributes'] = [Signature]
self._meta_data['attribute_registry'] = \
{'tm:security:protocol-inspection:signature:signaturestate':
Signature}
[docs]class Signature(Resource):
"""BIG-IP® Protocol Inspection Signature resource"""
def __init__(self, signatures):
super(Signature, self).__init__(signatures)
self._meta_data['required_json_kind'] = \
'tm:security:protocol-inspection:signature:signaturestate'
self._meta_data['required_creation_parameters'].update((
'partition', 'sig', 'description'))