lxd/endpoints/endpoints.go
func Up(config *Config) (*Endpoints, error) {
	if config.Dir == "" {
		return nil, fmt.Errorf("No directory configured")
	}
	if config.UnixSocket == "" {
		return nil, fmt.Errorf("No unix socket configured")
	}
	if config.RestServer == nil {
		return nil, fmt.Errorf("No REST server configured")
	}
	if config.DevLxdServer == nil {
		return nil, fmt.Errorf("No devlxd server configured")
	}
	if config.Cert == nil {
		return nil, fmt.Errorf("No TLS certificate configured")
	}

	endpoints := &Endpoints{
		systemdListenFDsStart: util.SystemdListenFDsStart,
	}

	err := endpoints.up(config)
	if err != nil {
		endpoints.Down()
		return nil, err
	}
	return endpoints, nil
}
func Up(config *Config) (*Endpoints, error) {
	if config.Dir == "" {
		return nil, fmt.Errorf("No directory configured")
	}
	if config.UnixSocket == "" {
		return nil, fmt.Errorf("No unix socket configured")
	}
	if config.RestServer == nil {
		return nil, fmt.Errorf("No REST server configured")
	}
	if config.DevLxdServer == nil {
		return nil, fmt.Errorf("No devlxd server configured")
	}
	if config.Cert == nil {
		return nil, fmt.Errorf("No TLS certificate configured")
	}

	endpoints := &Endpoints{
		systemdListenFDsStart: util.SystemdListenFDsStart,
	}

	err := endpoints.up(config)
	if err != nil {
		endpoints.Down()
		return nil, err
	}
	return endpoints, nil
}
func Up ( config * Config ) ( * Endpoints , error ) { if config . Dir == " " { return nil , fmt . Errorf ( " " ) } if config . UnixSocket == " " { return nil , fmt . Errorf ( " " ) } if config . RestServer == nil { return nil , fmt . Errorf ( " " ) } if config . DevLxdServer == nil { return nil , fmt . Errorf ( " " ) } if config . Cert == nil { return nil , fmt . Errorf ( " " ) } endpoints := & Endpoints { systemdListenFDsStart : util . SystemdListenFDsStart , } err := endpoints . up ( config ) if err != nil { endpoints . Down ( ) return nil , err } return endpoints , nil }
// Up brings up all applicable LXD endpoints and starts accepting HTTP
// requests.
//
// The endpoints will be activated in the following order and according to the
// following rules:
//
// local endpoint (unix socket)
// ----------------------------
//
// If socket-based activation is detected, look for a unix socket among the
// inherited file descriptors and use it for the local endpoint (or if no such
// file descriptor exists, don't bring up the local endpoint at all).
//
// If no socket-based activation is detected, create a unix socket using the
// default <lxd-var-dir>/unix.socket path. The file mode of this socket will be set
// to 660, the file owner will be set to the process' UID, and the file group
// will be set to the process GID, or to the GID of the system group name
// specified via config.LocalUnixSocketGroup.
//
// devlxd endpoint (unix socket)
// ----------------------------
//
// Created using <lxd-var-dir>/devlxd/sock, with file mode set to 666 (actual
// authorization will be performed by the HTTP server using the socket ucred
// struct).
//
// remote endpoint (TCP socket with TLS)
// -------------------------------------
//
// If socket-based activation is detected, look for a network socket among the
// inherited file descriptors and use it for the network endpoint.
//
// If a network address was set via config.NetworkAddress, then close any listener
// that was detected via socket-based activation and create a new network
// socket bound to the given address.
//
// The network endpoint socket will use TLS encryption, using the certificate
// keypair and CA passed via config.Cert.
//
// cluster endpoint (TCP socket with TLS)
// -------------------------------------
//
// If a network address was set via config.ClusterAddress, then attach
// config.RestServer to it.
Up brings up all applicable LXD endpoints and starts accepting HTTP requests . The endpoints will be activated in the following order and according to the following rules : local endpoint ( unix socket ) ---------------------------- If socket - based activation is detected look for a unix socket among the inherited file descriptors and use it for the local endpoint ( or if no such file descriptor exists don t bring up the local endpoint at all ) . If no socket - based activation is detected create a unix socket using the default <lxd - var - dir > / unix . socket path . The file mode of this socket will be set to 660 the file owner will be set to the process UID and the file group will be set to the process GID or to the GID of the system group name specified via config . LocalUnixSocketGroup . devlxd endpoint ( unix socket ) ---------------------------- Created using <lxd - var - dir > / devlxd / sock with file mode set to 666 ( actual authorization will be performed by the HTTP server using the socket ucred struct ) . remote endpoint ( TCP socket with TLS ) ------------------------------------- If socket - based activation is detected look for a network socket among the inherited file descriptors and use it for the network endpoint . If a network address was set via config . NetworkAddress then close any listener that was detected via socket - based activation and create a new network socket bound to the given address . The network endpoint socket will use TLS encryption using the certificate keypair and CA passed via config . Cert . cluster endpoint ( TCP socket with TLS ) ------------------------------------- If a network address was set via config . ClusterAddress then attach config . RestServer to it .