def update_on_device(self): params = self.changes.api_params() uri = "https://{0}:{1}/mgmt/tm/security/log/profile/{2}/network/{3}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.profile_name), self._internal_name()) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content)
def _create_existing_policy_draft(self): params = dict(createDraft=True) uri = "https://{0}:{1}/mgmt/tm/ltm/policy/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name)) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) return True
def read_current_from_device(self): uri = "https://{0}:{1}/mgmt/tm/ltm/profile/server-ssl/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name) ) resp = self.client.api.get(uri) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) return ApiParameters(params=response)
def update_on_device(self): params = self.changes.api_params() uri = "https://{0}:{1}/mgmt/tm/ltm/profile/server-ssl/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name) ) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] in [400, 404]: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content)
def read_current_from_device(self): uri = "https://{0}:{1}/mgmt/tm/security/dos/profile/{2}/protocol-sip/{3}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.profile), self.want.profile) resp = self.client.api.get(uri) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) return response.get('sipAttackVector', [])
def exists(self): if not self.profile_exists(): raise F5ModuleError( 'Specified DOS profile: {0} on partition: {1} does not exist.'. format(self.want.profile, self.want.partition)) uri = "https://{0}:{1}/mgmt/tm/security/dos/profile/{2}/application/{3}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.profile), self.want.profile) resp = self.client.api.get(uri) try: response = resp.json() except ValueError: return False if resp.status == 404 or 'code' in response and response['code'] == 404: return False return True
def read_current_from_device(self): uri = "https://{0}:{1}/mgmt/tm/security/dos/device-config/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name('Common', 'dos-device-config')) resp = self.client.api.get(uri) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) result = response.get('dosDeviceVector', []) return result
def update_on_device(self): params = self.changes.api_params() uri = "https://{0}:{1}/mgmt/tm/security/dos/device-config/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name('Common', 'dos-device-config') ) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content)
def update_on_device(self): params = self.changes.api_params() uri = "https://{0}:{1}/mgmt/tm/gtm/monitor/tcp/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name), ) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if resp.status in [ 200, 201 ] or 'code' in response and response['code'] in [200, 201]: return True raise F5ModuleError(resp.content)
def _upload_to_file(self, name, type, remote_path, update=False): self.upload_file_to_device(self.want.records_src, name) if update: uri = "https://{0}:{1}/mgmt/tm/sys/file/data-group/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, name) ) params = {'sourcePath': 'file:{0}'.format(remote_path)} resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) else: uri = "https://{0}:{1}/mgmt/tm/sys/file/data-group/".format( self.client.provider['server'], self.client.provider['server_port'], ) params = dict( name=name, type=type, sourcePath='file:{0}'.format(remote_path) ) resp = self.client.api.post(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] in [400, 403]: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) return response['name']
def create_on_device(self): params = self.changes.api_params() params['name'] = self.want.name params['partition'] = self.want.partition uri = "https://{0}:{1}/mgmt/tm/gtm/server/{2}/virtual-servers/".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.server_name)) resp = self.client.api.post(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] in [400, 403, 404]: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content)
def read_current_from_device(self): self._generate_template_checksum_on_device() uri = "https://{0}:{1}/mgmt/tm/sys/application/template/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name)) resp = self.client.api.get(uri) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if resp.status in [ 200, 201 ] or 'code' in response and response['code'] in [200, 201]: return ApiParameters(params=response) raise F5ModuleError(resp.content)
def move_rule_to_front(self, rule): params = dict(placeAfter='last') uri = "https://{0}:{1}/mgmt/tm/security/firewall/policy/{2}/rules/{3}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name), rule.replace('/', '_')) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] in [400, 403]: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) return response['selfLink']
def update_on_device(self): params = self.changes.api_params() name = self.want.name name = name.replace('%', '%25') uri = "https://{0}:{1}/mgmt/tm/ltm/virtual-address/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, name)) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content)
def exists(self): # This addresses cases where the name includes a % sign. The URL in the REST # API escapes a % sign as %25. If you don't do this, you will get errors in # the exists() method. name = self.want.name name = name.replace('%', '%25') uri = "https://{0}:{1}/mgmt/tm/ltm/virtual-address/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, name) ) resp = self.client.api.get(uri) try: response = resp.json() except ValueError: return False if resp.status == 404 or 'code' in response and response['code'] == 404: return False return True
def update_on_device(self): content = StringIO(self.want.content) self.upload_file_to_device(content, self.want.filename) params = self.changes.api_params() uri = "https://{0}:{1}/mgmt/tm/sys/file/ssl-cert/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.filename)) resp = self.client.api.put(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content)
def read_current_from_device(self): uri = "https://{0}:{1}/mgmt/tm/ltm/message-routing/generic/transport-config/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name) ) query = '?expandSubcollections=true' resp = self.client.api.get(uri + query) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) return ApiParameters(params=response)
def exists(self): if not self._profile_exists(): raise F5ModuleError( "Specified AFM log profile: {0} does not exist".format(self.want.profile_name) ) uri = "https://{0}:{1}/mgmt/tm/security/log/profile/{2}/network/{3}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.profile_name), self._internal_name() ) resp = self.client.api.get(uri) try: response = resp.json() except ValueError: return False if resp.status == 404 or 'code' in response and response['code'] == 404: return False return True
def update_on_device(self): params = self.changes.api_params() if not params: return uri = "https://{0}:{1}/mgmt/tm/auth/ldap/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name('Common', 'system-auth')) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if resp.status in [ 200, 201 ] or 'code' in response and response['code'] in [200, 201]: return True raise F5ModuleError(resp.content)
def create_on_device(self): params = self.changes.api_params() params['name'] = self.want.name params['partition'] = self.want.partition uri = "https://{0}:{1}/mgmt/tm/net/self/".format( self.client.provider['server'], self.client.provider['server_port'], ) resp = self.client.api.post(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] in [400, 403]: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) if self.want.fw_enforced_policy: payload = dict( fwEnforcedPolicy=self.want.fw_enforced_policy, fwEnforcedPolicyReference=self.want.fw_policy_link ) uri = "https://{0}:{1}/mgmt/tm/net/self/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name), ) resp = self.client.api.patch(uri, json=payload) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] in [400, 403]: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) return True
def update_on_device(self): params = self.changes.api_params() uri = "https://{0}:{1}/mgmt/tm/ltm/policy/{2}/rules/{3}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.policy, sub_path='Drafts'), self.want.name ) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content)
def update_on_device(self): params = self.changes.api_params() if not params: return uri = "https://{0}:{1}/mgmt/tm/cm/device/".format( self.client.provider['server'], self.client.provider['server_port'], ) resp = self.client.api.get(uri) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) for item in response['items']: if item['selfDevice'] == 'true': uri = "https://{0}:{1}/mgmt/tm/cm/device/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(item['partition'], item['name']) ) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) return raise F5ModuleError( "The host device was not found." )
def read_current_from_device(self): db = self.read_cluster_mirroring_from_device() uri = "https://{0}:{1}/mgmt/tm/cm/device/".format( self.client.provider['server'], self.client.provider['server_port'], ) resp = self.client.api.get(uri) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) for item in response['items']: if item['selfDevice'] == 'true': uri = "https://{0}:{1}/mgmt/tm/cm/device/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(item['partition'], item['name']) ) resp = self.client.api.get(uri) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) if db: response['cluster_mirroring'] = db['value'] return ApiParameters(params=response) raise F5ModuleError( "The host device was not found." )
def create_on_device(self): params = self.changes.api_params() params['name'] = self.want.profile uri = "https://{0}:{1}/mgmt/tm/security/dos/profile/{2}/application/".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.profile), ) resp = self.client.api.post(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] in [400, 409]: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) return True
def update_on_device(self): params = self.changes.api_params() uri = "https://{0}:{1}/mgmt/tm/security/firewall/policy/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name) ) if params: resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if resp.status in [200, 201] or 'code' in response and response['code'] in [200, 201]: return True raise F5ModuleError(resp.content) if self.changes.rules is not None: self._upsert_policy_rules_on_device()
def update_on_device(self): params = self.changes.api_params() if params: uri = "https://{0}:{1}/mgmt/tm/ltm/monitor/external/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name)) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if resp.status not in [ 200, 201 ] or 'code' in response and response['code'] not in [200, 201]: raise F5ModuleError(resp.content) if self.changes.variables: self.set_variable_on_device(self.changes.variables)
def update_node_offline_on_device(self): params = dict( session="user-disabled", state="user-down" ) uri = "https://{0}:{1}/mgmt/tm/ltm/node/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name) ) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content)
def create_on_device(self): params = self.changes.api_params() params['name'] = self.want.full_name params['partition'] = self.want.partition uri = "https://{0}:{1}/mgmt/tm/ltm/pool/{2}/members".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(name=fq_name(self.want.partition, self.want.pool)), ) resp = self.client.api.post(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] in [400, 403]: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content) return response['selfLink']
def update_on_device(self): params = self.want.api_params() # The 'network' attribute is not updatable params.pop('network', None) uri = "https://{0}:{1}/mgmt/tm/net/route/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name)) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content)
def update_on_device(self): params = self.changes.api_params() uri = "https://{0}:{1}/mgmt/tm/auth/remote-role/role-info/{2}".format( self.client.provider['server'], self.client.provider['server_port'], transform_name(self.want.partition, self.want.name) ) resp = self.client.api.patch(uri, json=params) try: response = resp.json() except ValueError as ex: raise F5ModuleError(str(ex)) if 'code' in response and response['code'] == 400: if 'message' in response: if 'Once configured [All] partition, remote user group cannot' in response['message']: raise F5ModuleError( "The specified 'attribute_string' is already used in the 'all' partition." ) raise F5ModuleError(response['message']) else: raise F5ModuleError(resp.content)