original_docstring: 
          Release public port of cloud service according to private port of virtual machine
          Return False if failed
          :param cloud_service_name:
          :param deployment_slot:
          :param virtual_machine_name:
          :param private_port:
          :return:
          
docstring: Release public port of cloud service according to private port of virtual machine
  Return False if failed
docstring_tokens: Release public port of cloud service according to private port of virtual machine Return False if failed
code: def release_public_port(self, cloud_service_name, deployment_slot, virtual_machine_name, private_port):
          """
          Release public port of cloud service according to private port of virtual machine
          Return False if failed
          :param cloud_service_name:
          :param deployment_slot:
          :param virtual_machine_name:
          :param private_port:
          :return:
          """
          # decompose network config to update
          try:
              deployment = self.sms.get_deployment_by_slot(cloud_service_name, deployment_slot)
          except Exception as e:
              log.error(e)
              return False
          network = self.__decompose_network_config(cloud_service_name,
                                                    deployment.name,
                                                    virtual_machine_name,
                                                    private_port)
          if network is None:
              return False
          try:
              result = self.sms.update_role(cloud_service_name,
                                            deployment.name,
                                            virtual_machine_name,
                                            network_config=network)
          except Exception as e:
              log.error(e)
              return False
          if not self.__wait_for_async(result.request_id, 5, 200):
              log.error(WAIT_FOR_ASYNC + ' ' + FAIL)
              return False
          if not self.__wait_for_role(cloud_service_name,
                                      deployment.name,
                                      virtual_machine_name,
                                      5,
                                      200):
              log.error('%s %s not ready' % (VIRTUAL_MACHINE, virtual_machine_name))
              return False
          return True
code_tokens: def release_public_port ( self , cloud_service_name , deployment_slot , virtual_machine_name , private_port ) : try : deployment = self . sms . get_deployment_by_slot ( cloud_service_name , deployment_slot ) except Exception as e : log . error ( e ) return False network = self . __decompose_network_config ( cloud_service_name , deployment . name , virtual_machine_name , private_port ) if network is None : return False try : result = self . sms . update_role ( cloud_service_name , deployment . name , virtual_machine_name , network_config = network ) except Exception as e : log . error ( e ) return False if not self . __wait_for_async ( result . request_id , 5 , 200 ) : log . error ( WAIT_FOR_ASYNC + ' ' + FAIL ) return False if not self . __wait_for_role ( cloud_service_name , deployment . name , virtual_machine_name , 5 , 200 ) : log . error ( '%s %s not ready' % ( VIRTUAL_MACHINE , virtual_machine_name ) ) return False return True
short_docstring: Release public port of cloud service according to private port of virtual machine
  Return False if failed
short_docstring_tokens: Release public port of cloud service according to private port of virtual machine Return False if failed
comment: """
          Release public port of cloud service according to private port of virtual machine
          Return False if failed
          :param cloud_service_name:
          :param deployment_slot:
          :param virtual_machine_name:
          :param private_port:
          :return:
          """$SEP$# decompose network config to update