code: func (c *Config) ObtainCert(name string, allowPrompts bool) error {
  	if !c.Managed || !HostQualifies(name) {
  		return nil
  	}
  
  	storage, err := c.StorageFor(c.CAUrl)
  	if err != nil {
  		return err
  	}
  	siteExists, err := storage.SiteExists(name)
  	if err != nil {
  		return err
  	}
  	if siteExists {
  		return nil
  	}
  	if c.ACMEEmail == "" {
  		c.ACMEEmail = getEmail(storage, allowPrompts)
  	}
  
  	client, err := newACMEClient(c, allowPrompts)
  	if err != nil {
  		return err
  	}
  	return client.Obtain(name)
  }
docs: // ObtainCert obtains a certificate for name using c, as long
  // as a certificate does not already exist in storage for that
  // name. The name must qualify and c must be flagged as Managed.
  // This function is a no-op if storage already has a certificate
  // for name.
  //
  // It only obtains and stores certificates (and their keys),
  // it does not load them into memory. If allowPrompts is true,
  // the user may be shown a prompt.