93 lines
2.3 KiB
Go
93 lines
2.3 KiB
Go
![]() |
package nginx
|
||
|
|
||
|
// NGINXController Updates NGINX configuration, starts and reloads NGINX
|
||
|
type NGINXController struct {
|
||
|
resolver string
|
||
|
nginxConfdPath string
|
||
|
nginxCertsPath string
|
||
|
local bool
|
||
|
}
|
||
|
|
||
|
// IngressNGINXConfig describes an NGINX configuration
|
||
|
type IngressNGINXConfig struct {
|
||
|
Upstreams []Upstream
|
||
|
Servers []Server
|
||
|
}
|
||
|
|
||
|
// Upstream describes an NGINX upstream
|
||
|
type Upstream struct {
|
||
|
Name string
|
||
|
Backends []UpstreamServer
|
||
|
}
|
||
|
|
||
|
type UpstreamByNameServers []Upstream
|
||
|
|
||
|
func (c UpstreamByNameServers) Len() int { return len(c) }
|
||
|
func (c UpstreamByNameServers) Swap(i, j int) { c[i], c[j] = c[j], c[i] }
|
||
|
func (c UpstreamByNameServers) Less(i, j int) bool {
|
||
|
return c[i].Name < c[j].Name
|
||
|
}
|
||
|
|
||
|
// UpstreamServer describes a server in an NGINX upstream
|
||
|
type UpstreamServer struct {
|
||
|
Address string
|
||
|
Port string
|
||
|
}
|
||
|
|
||
|
type UpstreamServerByAddrPort []UpstreamServer
|
||
|
|
||
|
func (c UpstreamServerByAddrPort) Len() int { return len(c) }
|
||
|
func (c UpstreamServerByAddrPort) Swap(i, j int) { c[i], c[j] = c[j], c[i] }
|
||
|
func (c UpstreamServerByAddrPort) Less(i, j int) bool {
|
||
|
iName := c[i].Address
|
||
|
jName := c[j].Address
|
||
|
if iName != jName {
|
||
|
return iName < jName
|
||
|
}
|
||
|
|
||
|
iU := c[i].Port
|
||
|
jU := c[j].Port
|
||
|
return iU < jU
|
||
|
}
|
||
|
|
||
|
// Server describes an NGINX server
|
||
|
type Server struct {
|
||
|
Name string
|
||
|
Locations []Location
|
||
|
SSL bool
|
||
|
SSLCertificate string
|
||
|
SSLCertificateKey string
|
||
|
}
|
||
|
|
||
|
type ServerByNamePort []Server
|
||
|
|
||
|
func (c ServerByNamePort) Len() int { return len(c) }
|
||
|
func (c ServerByNamePort) Swap(i, j int) { c[i], c[j] = c[j], c[i] }
|
||
|
func (c ServerByNamePort) Less(i, j int) bool {
|
||
|
return c[i].Name < c[j].Name
|
||
|
}
|
||
|
|
||
|
// Location describes an NGINX location
|
||
|
type Location struct {
|
||
|
Path string
|
||
|
Upstream Upstream
|
||
|
}
|
||
|
|
||
|
type locByPathUpstream []Location
|
||
|
|
||
|
func (c locByPathUpstream) Len() int { return len(c) }
|
||
|
func (c locByPathUpstream) Swap(i, j int) { c[i], c[j] = c[j], c[i] }
|
||
|
func (c locByPathUpstream) Less(i, j int) bool {
|
||
|
return c[i].Path < c[j].Path
|
||
|
}
|
||
|
|
||
|
// NewUpstreamWithDefaultServer creates an upstream with the default server.
|
||
|
// proxy_pass to an upstream with the default server returns 502.
|
||
|
// We use it for services that have no endpoints
|
||
|
func NewUpstreamWithDefaultServer(name string) Upstream {
|
||
|
return Upstream{
|
||
|
Name: name,
|
||
|
Backends: []UpstreamServer{UpstreamServer{Address: "127.0.0.1", Port: "8181"}},
|
||
|
}
|
||
|
}
|