docs: def start_transaction(hostname, username, password, label):
      '''
      A function to connect to a bigip device and start a new transaction.
  
      hostname
          The host/address of the bigip device
      username
          The iControl REST username
      password
          The iControl REST password
      label
          The name / alias for this transaction.  The actual transaction
          id will be stored within a grain called ``bigip_f5_trans:<label>``
  
      CLI Example::
  
          salt '*' bigip.start_transaction bigip admin admin my_transaction
  
      '''
  
      #build the session
      bigip_session = _build_session(username, password)
  
      payload = {}
  
      #post to REST to get trans id
      try:
          response = bigip_session.post(
              BIG_IP_URL_BASE.format(host=hostname) + '/transaction',
              data=salt.utils.json.dumps(payload)
          )
      except requests.exceptions.ConnectionError as e:
          return _load_connection_error(hostname, e)
  
      #extract the trans_id
      data = _load_response(response)
  
      if data['code'] == 200:
  
          trans_id = data['content']['transId']
  
          __salt__['grains.setval']('bigip_f5_trans', {label: trans_id})
  
          return 'Transaction: {trans_id} - has successfully been stored in the grain: bigip_f5_trans:{label}'.format(trans_id=trans_id,
                                                                                                                         label=label)
      else:
          return data