mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 10:03:42 +08:00 
			
		
		
		
	Replace rules are not inherited by consumers of buildx as a module, and as such would default to use the v0.26.2 version. Removing the replace rules also removes various (indirect) dependencies (although brings in some new packages from k8s itself). The "azure" and "gcp" authentication packages in k8s.io/go-client are now no longer functional, so removing those imports. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
		
			
				
	
	
		
			126 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2014 The Kubernetes Authors.
 | 
						|
 | 
						|
Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
you may not use this file except in compliance with the License.
 | 
						|
You may obtain a copy of the License at
 | 
						|
 | 
						|
    http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 | 
						|
Unless required by applicable law or agreed to in writing, software
 | 
						|
distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
See the License for the specific language governing permissions and
 | 
						|
limitations under the License.
 | 
						|
*/
 | 
						|
 | 
						|
/*
 | 
						|
Package auth defines a file format for holding authentication
 | 
						|
information needed by clients of Kubernetes.  Typically,
 | 
						|
a Kubernetes cluster will put auth info for the admin in a known
 | 
						|
location when it is created, and will (soon) put it in a known
 | 
						|
location within a Container's file tree for Containers that
 | 
						|
need access to the Kubernetes API.
 | 
						|
 | 
						|
Having a defined format allows:
 | 
						|
  - clients to be implemented in multiple languages
 | 
						|
  - applications which link clients to be portable across
 | 
						|
    clusters with different authentication styles (e.g.
 | 
						|
    some may use SSL Client certs, others may not, etc)
 | 
						|
  - when the format changes, applications only
 | 
						|
    need to update this code.
 | 
						|
 | 
						|
The file format is json, marshalled from a struct authcfg.Info.
 | 
						|
 | 
						|
Client libraries in other languages should use the same format.
 | 
						|
 | 
						|
It is not intended to store general preferences, such as default
 | 
						|
namespace, output options, etc.  CLIs (such as kubectl) and UIs should
 | 
						|
develop their own format and may wish to inline the authcfg.Info type.
 | 
						|
 | 
						|
The authcfg.Info is just a file format.  It is distinct from
 | 
						|
client.Config which holds options for creating a client.Client.
 | 
						|
Helper functions are provided in this package to fill in a
 | 
						|
client.Client from an authcfg.Info.
 | 
						|
 | 
						|
Example:
 | 
						|
 | 
						|
	import (
 | 
						|
	    "pkg/client"
 | 
						|
	    "pkg/client/auth"
 | 
						|
	)
 | 
						|
 | 
						|
	info, err := auth.LoadFromFile(filename)
 | 
						|
	if err != nil {
 | 
						|
	  // handle error
 | 
						|
	}
 | 
						|
	clientConfig = client.Config{}
 | 
						|
	clientConfig.Host = "example.com:4901"
 | 
						|
	clientConfig = info.MergeWithConfig()
 | 
						|
	client := client.New(clientConfig)
 | 
						|
	client.Pods(ns).List()
 | 
						|
*/
 | 
						|
package auth
 | 
						|
 | 
						|
// TODO: need a way to rotate Tokens.  Therefore, need a way for client object to be reset when the authcfg is updated.
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"os"
 | 
						|
 | 
						|
	restclient "k8s.io/client-go/rest"
 | 
						|
)
 | 
						|
 | 
						|
// Info holds Kubernetes API authorization config.  It is intended
 | 
						|
// to be read/written from a file as a JSON object.
 | 
						|
type Info struct {
 | 
						|
	User        string
 | 
						|
	Password    string `datapolicy:"password"`
 | 
						|
	CAFile      string
 | 
						|
	CertFile    string
 | 
						|
	KeyFile     string
 | 
						|
	BearerToken string `datapolicy:"token"`
 | 
						|
	Insecure    *bool
 | 
						|
}
 | 
						|
 | 
						|
// LoadFromFile parses an Info object from a file path.
 | 
						|
// If the file does not exist, then os.IsNotExist(err) == true
 | 
						|
func LoadFromFile(path string) (*Info, error) {
 | 
						|
	var info Info
 | 
						|
	if _, err := os.Stat(path); os.IsNotExist(err) {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	data, err := os.ReadFile(path)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	err = json.Unmarshal(data, &info)
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	return &info, err
 | 
						|
}
 | 
						|
 | 
						|
// MergeWithConfig returns a copy of a client.Config with values from the Info.
 | 
						|
// The fields of client.Config with a corresponding field in the Info are set
 | 
						|
// with the value from the Info.
 | 
						|
func (info Info) MergeWithConfig(c restclient.Config) (restclient.Config, error) {
 | 
						|
	var config = c
 | 
						|
	config.Username = info.User
 | 
						|
	config.Password = info.Password
 | 
						|
	config.CAFile = info.CAFile
 | 
						|
	config.CertFile = info.CertFile
 | 
						|
	config.KeyFile = info.KeyFile
 | 
						|
	config.BearerToken = info.BearerToken
 | 
						|
	if info.Insecure != nil {
 | 
						|
		config.Insecure = *info.Insecure
 | 
						|
	}
 | 
						|
	return config, nil
 | 
						|
}
 | 
						|
 | 
						|
// Complete returns true if the Kubernetes API authorization info is complete.
 | 
						|
func (info Info) Complete() bool {
 | 
						|
	return len(info.User) > 0 ||
 | 
						|
		len(info.CertFile) > 0 ||
 | 
						|
		len(info.BearerToken) > 0
 | 
						|
}
 |