feat: add extra headers to fetch of extraManifests

Provides capability to add extra headers in cases where files can only be fetched with token based authenction.

Signed-off-by: Niklas Wik <niklas.wik@nokia.com>

feat: extra manifest headers for fetching manifests

- Changed config to map of key value pairs.

Signed-off-by: Niklas Wik <niklas.wik@nokia.com>

fix: added docs for new extra headers fetch

Signed-off-by: Niklas Wik <niklas.wik@nokia.com>

fix: fix linter issue

Signed-off-by: Niklas Wik <niklas.wik@nokia.com>
This commit is contained in:
Niklas Wik 2020-04-09 09:34:32 +03:00 committed by talos-bot
parent 8d2f8d6127
commit dba6de506e
5 changed files with 38 additions and 3 deletions

View File

@ -597,6 +597,21 @@ extraManifests:
``` ```
#### extraManifestHeaders
A map of key value pairs that will be added while fetching the ExtraManifests.
Type: `map`
Examples:
```yaml
extraManifestHeaders:
Token: "1234567"
X-ExtraInfo: info
```
#### adminKubeconfig #### adminKubeconfig
Settings for admin kubeconfig generation. Settings for admin kubeconfig generation.

View File

@ -234,13 +234,13 @@ func generateAssets(config runtime.Configurator) (err error) {
// If "custom" is the CNI, we expect the user to supply one or more urls that point to CNI yamls // If "custom" is the CNI, we expect the user to supply one or more urls that point to CNI yamls
if config.Cluster().Network().CNI().Name() == constants.CustomCNI { if config.Cluster().Network().CNI().Name() == constants.CustomCNI {
if err = fetchManifests(config.Cluster().Network().CNI().URLs()); err != nil { if err = fetchManifests(config.Cluster().Network().CNI().URLs(), map[string]string{}); err != nil {
return err return err
} }
} }
if len(config.Cluster().ExtraManifestURLs()) > 0 { if len(config.Cluster().ExtraManifestURLs()) > 0 {
if err = fetchManifests(config.Cluster().ExtraManifestURLs()); err != nil { if err = fetchManifests(config.Cluster().ExtraManifestURLs(), config.Cluster().ExtraManifestHeaderMap()); err != nil {
return err return err
} }
} }
@ -265,7 +265,7 @@ func altNamesFromURLs(urls []string) *tlsutil.AltNames {
} }
// fetchManifests will lay down manifests in the provided urls to the bootkube assets directory // fetchManifests will lay down manifests in the provided urls to the bootkube assets directory
func fetchManifests(urls []string) error { func fetchManifests(urls []string, headers map[string]string) error {
ctx := context.Background() ctx := context.Background()
var result *multierror.Error var result *multierror.Error
@ -286,6 +286,12 @@ func fetchManifests(urls []string) error {
Client: http.DefaultClient, Client: http.DefaultClient,
} }
httpGetter.Header = make(http.Header)
for k, v := range headers {
httpGetter.Header.Add(k, v)
}
getter.Getters["http"] = httpGetter getter.Getters["http"] = httpGetter
getter.Getters["https"] = httpGetter getter.Getters["https"] = httpGetter

View File

@ -32,6 +32,7 @@ type Cluster interface {
PodCheckpointer() PodCheckpointer PodCheckpointer() PodCheckpointer
CoreDNS() CoreDNS CoreDNS() CoreDNS
ExtraManifestURLs() []string ExtraManifestURLs() []string
ExtraManifestHeaderMap() map[string]string
AdminKubeconfig() AdminKubeconfig AdminKubeconfig() AdminKubeconfig
} }

View File

@ -429,6 +429,11 @@ func (c *ClusterConfig) ExtraManifestURLs() []string {
return c.ExtraManifests return c.ExtraManifests
} }
// ExtraManifestHeaderMap implements the Configurator interface.
func (c *ClusterConfig) ExtraManifestHeaderMap() map[string]string {
return c.ExtraManifestHeaders
}
// PodCheckpointer implements the Configurator interface. // PodCheckpointer implements the Configurator interface.
func (c *ClusterConfig) PodCheckpointer() cluster.PodCheckpointer { func (c *ClusterConfig) PodCheckpointer() cluster.PodCheckpointer {
if c.PodCheckpointerConfig == nil { if c.PodCheckpointerConfig == nil {

View File

@ -343,6 +343,14 @@ type ClusterConfig struct {
// - "https://www.mysweethttpserver.com/manifest2.yaml" // - "https://www.mysweethttpserver.com/manifest2.yaml"
ExtraManifests []string `yaml:"extraManifests,omitempty"` ExtraManifests []string `yaml:"extraManifests,omitempty"`
// description: | // description: |
// A map of key value pairs that will be added while fetching the ExtraManifests.
// examples:
// - |
// extraManifestHeaders:
// Token: "1234567"
// X-ExtraInfo: info
ExtraManifestHeaders map[string]string `yaml:"extraManifestHeaders,omitempty"`
// description: |
// Settings for admin kubeconfig generation. // Settings for admin kubeconfig generation.
// Certificate lifetime can be configured. // Certificate lifetime can be configured.
// examples: // examples: