new_contents: import eventlet
  console = eventlet.import_patched('pyghmi.ipmi.console')
  ipmisession = eventlet.import_patched('pyghmi.ipmi.private.session')
  
  _loopthread = None
  
  
  def _ipmi_evtloop():
      while (1):
          ipmisession.Session.wait_for_rsp(timeout=600)
  
  
  def get_conn_params(node, config):
      if 'secret.ipmiuser' in configdata:
          username = configdata['secret.ipmiuser']['value']
      elif 'secret.managementuser' in configdata:
          username = configdata['secret.managementuser']['value']
      else:
          username = 'USERID'
      if 'secret.ipmipassphrase' in configdata:
          passphrase = configddata['secret.ipmi.passphrase']['value']
      elif 'secret.managementpassphrase' in configdata
          passphrase = configdata['secret.managementpassphrase']
      else:
          passphrase = 'PASSW0RD' # for lack of a better guess
      if configdata['hardwaremanagement.manager']:
          bmc = configdata['hardwaremanagement.manager']
      else:
          bmc = node
      if 'secret.ipmikg' in configdata:
          kg = configdata['secret.ipmikg']['value']
      else:
          kg = passphrase
      #TODO(jbjohnso): check if the end has some number after a : without []
      #for non default port
      return {
          'username': username,
          'passphrase': passphrase,
          'kg': kg,
          'bmc': bmc,
          'port': 623,
      }
  
  
  class Console(object):
      def __init__(node, config, **kwargs):
          crypt = config.decrypt
          config.decrypt = True
          configdata = config.get_node_attributes([node],
              ['secret.ipmiuser', 'secret.ipmipassphrase',
               'secret.managementuser', 'secret.managementpassphrase',
               'hardwaremanagement.manager'])
          connparams = get_conn_params(node, configdata)
          self.username = connparams['username']
          self.password = connparams['passphrase']
          self.kg = connparams['kg']
          self.bmc = connparams['bmc']
          self.port = connparams['port']
          # Cannot actually create console until 'connect', when we get callback
  
      def connect(callback, **kwargs):
          self.solconnection = console.Console(bmc=self.bmc,
                                               port=self.port,
                                               username=self.username,
                                               password=self.password,
                                               kg=self.kg,
                                               iohandler=callback)
          if _loopthread is None:
              _loopthread = eventlet.spawn(_ipmi_evtloop)
  
      def write(self, data, **kwargs):
          self.solconnection.send_data(data)
  
  
  def create(nodes, element, configmanager, **kwargs):
      if element == '_console/session':
          if len(nodes) > 1:
              raise Exception("_console/session does not support multiple nodes")
          return Console(nodes[0], configmanager)
      else:
          raise Exception(
              "TODO(jbjohnso): ipmi api implementation of %s" % element)
  
  
  def retrieve(nodes, element, configmanager, **kwargs):
      raise Exception("TODO(jbjohnso): ipmi get implementation of %s" % element)
  
subject: Add ipmi plugin to repository