123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package orchestration
- import (
- "encoding/json"
- "time"
- "github.com/cloudflare/cloudflared/config"
- "github.com/cloudflare/cloudflared/ingress"
- )
- type newRemoteConfig struct {
- ingress.RemoteConfig
- // Add more fields when we support other settings in tunnel orchestration
- }
- type newLocalConfig struct {
- RemoteConfig ingress.RemoteConfig
- ConfigurationFlags map[string]string `json:"__configuration_flags,omitempty"`
- }
- // Config is the original config as read and parsed by cloudflared.
- type Config struct {
- Ingress *ingress.Ingress
- WarpRouting ingress.WarpRoutingConfig
- WriteTimeout time.Duration
- // Extra settings used to configure this instance but that are not eligible for remotely management
- // ie. (--protocol, --loglevel, ...)
- ConfigurationFlags map[string]string
- }
- func (rc *newLocalConfig) MarshalJSON() ([]byte, error) {
- var r = struct {
- ConfigurationFlags map[string]string `json:"__configuration_flags,omitempty"`
- ingress.RemoteConfigJSON
- }{
- ConfigurationFlags: rc.ConfigurationFlags,
- RemoteConfigJSON: ingress.RemoteConfigJSON{
- // UI doesn't support top level configs, so we reconcile to individual ingress configs.
- GlobalOriginRequest: nil,
- IngressRules: convertToUnvalidatedIngressRules(rc.RemoteConfig.Ingress),
- WarpRouting: rc.RemoteConfig.WarpRouting.RawConfig(),
- },
- }
- return json.Marshal(r)
- }
- func convertToUnvalidatedIngressRules(i ingress.Ingress) []config.UnvalidatedIngressRule {
- result := make([]config.UnvalidatedIngressRule, 0)
- for _, rule := range i.Rules {
- var path string
- if rule.Path != nil {
- path = rule.Path.String()
- }
- newRule := config.UnvalidatedIngressRule{
- Hostname: rule.Hostname,
- Path: path,
- Service: rule.Service.String(),
- OriginRequest: ingress.ConvertToRawOriginConfig(rule.Config),
- }
- result = append(result, newRule)
- }
- return result
- }
|