code: func (p *Plugin) Init() (err error) {
  	// Read ETCD configuration file. Returns error if does not exists.
  	p.config, err = p.getEtcdConfig()
  	if err != nil || p.disabled {
  		return err
  	}
  
  	// Transforms .yaml config to ETCD client configuration
  	etcdClientCfg, err := ConfigToClient(p.config)
  	if err != nil {
  		return err
  	}
  
  	// Uses config file to establish connection with the database
  	p.connection, err = NewEtcdConnectionWithBytes(*etcdClientCfg, p.Log)
  
  	if err != nil && p.config.AllowDelayedStart {
  		// If the connection cannot be established during init, keep trying in another goroutine (if allowed) and
  		// end the init
  		go p.etcdReconnectionLoop(etcdClientCfg)
  		return nil
  	} else if err != nil {
  		// If delayed start is not allowed, return error
  		return fmt.Errorf("error connecting to ETCD: %v", err)
  	}
  
  	// If successful, configure and return
  	p.configureConnection()
  
  	// Mark p as connected at this point
  	p.connected = true
  
  	return nil
  }
docs: // Init retrieves ETCD configuration and establishes a new connection
  // with the etcd data store.
  // If the configuration file doesn't exist or cannot be read, the returned error
  // will be of os.PathError type. An untyped error is returned in case the file
  // doesn't contain a valid YAML configuration.
  // The function may also return error if TLS connection is selected and the
  // CA or client certificate is not accessible(os.PathError)/valid(untyped).
  // Check clientv3.New from coreos/etcd for possible errors returned in case
  // the connection cannot be established.