mirror of
https://github.com/containers/podman.git
synced 2026-03-13 08:01:19 +08:00
Merge pull request #10208 from Luap99/play-kube-mac
add --mac-address to podman play kube
This commit is contained in:
@@ -21,11 +21,12 @@ func PlayKube(w http.ResponseWriter, r *http.Request) {
|
||||
runtime := r.Context().Value("runtime").(*libpod.Runtime)
|
||||
decoder := r.Context().Value("decoder").(*schema.Decoder)
|
||||
query := struct {
|
||||
Network string `schema:"network"`
|
||||
TLSVerify bool `schema:"tlsVerify"`
|
||||
LogDriver string `schema:"logDriver"`
|
||||
Start bool `schema:"start"`
|
||||
StaticIPs []string `schema:"staticIPs"`
|
||||
Network string `schema:"network"`
|
||||
TLSVerify bool `schema:"tlsVerify"`
|
||||
LogDriver string `schema:"logDriver"`
|
||||
Start bool `schema:"start"`
|
||||
StaticIPs []string `schema:"staticIPs"`
|
||||
StaticMACs []string `schema:"staticMACs"`
|
||||
}{
|
||||
TLSVerify: true,
|
||||
Start: true,
|
||||
@@ -48,6 +49,17 @@ func PlayKube(w http.ResponseWriter, r *http.Request) {
|
||||
staticIPs = append(staticIPs, ip)
|
||||
}
|
||||
|
||||
staticMACs := make([]net.HardwareAddr, 0, len(query.StaticMACs))
|
||||
for _, macString := range query.StaticMACs {
|
||||
mac, err := net.ParseMAC(macString)
|
||||
if err != nil {
|
||||
utils.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest,
|
||||
err)
|
||||
return
|
||||
}
|
||||
staticMACs = append(staticMACs, mac)
|
||||
}
|
||||
|
||||
// Fetch the K8s YAML file from the body, and copy it to a temp file.
|
||||
tmpfile, err := ioutil.TempFile("", "libpod-play-kube.yml")
|
||||
if err != nil {
|
||||
@@ -78,13 +90,14 @@ func PlayKube(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
containerEngine := abi.ContainerEngine{Libpod: runtime}
|
||||
options := entities.PlayKubeOptions{
|
||||
Authfile: authfile,
|
||||
Username: username,
|
||||
Password: password,
|
||||
Network: query.Network,
|
||||
Quiet: true,
|
||||
LogDriver: query.LogDriver,
|
||||
StaticIPs: staticIPs,
|
||||
Authfile: authfile,
|
||||
Username: username,
|
||||
Password: password,
|
||||
Network: query.Network,
|
||||
Quiet: true,
|
||||
LogDriver: query.LogDriver,
|
||||
StaticIPs: staticIPs,
|
||||
StaticMACs: staticMACs,
|
||||
}
|
||||
if _, found := r.URL.Query()["tlsVerify"]; found {
|
||||
options.SkipTLSVerify = types.NewOptionalBool(!query.TLSVerify)
|
||||
|
||||
@@ -40,6 +40,12 @@ func (s *APIServer) registerPlayHandlers(r *mux.Router) error {
|
||||
// description: Static IPs used for the pods.
|
||||
// items:
|
||||
// type: string
|
||||
// - in: query
|
||||
// name: staticMACs
|
||||
// type: array
|
||||
// description: Static MACs used for the pods.
|
||||
// items:
|
||||
// type: string
|
||||
// - in: body
|
||||
// name: request
|
||||
// description: Kubernetes YAML file.
|
||||
|
||||
@@ -27,6 +27,8 @@ type KubeOptions struct {
|
||||
SeccompProfileRoot *string
|
||||
// StaticIPs - Static IP address used by the pod(s).
|
||||
StaticIPs *[]net.IP
|
||||
// StaticMACs - Static MAC address used by the pod(s).
|
||||
StaticMACs *[]net.HardwareAddr
|
||||
// ConfigMaps - slice of pathnames to kubernetes configmap YAMLs.
|
||||
ConfigMaps *[]string
|
||||
// LogDriver for the container. For example: journald
|
||||
|
||||
@@ -181,6 +181,22 @@ func (o *KubeOptions) GetStaticIPs() []net.IP {
|
||||
return *o.StaticIPs
|
||||
}
|
||||
|
||||
// WithStaticMACs
|
||||
func (o *KubeOptions) WithStaticMACs(value []net.HardwareAddr) *KubeOptions {
|
||||
v := &value
|
||||
o.StaticMACs = v
|
||||
return o
|
||||
}
|
||||
|
||||
// GetStaticMACs
|
||||
func (o *KubeOptions) GetStaticMACs() []net.HardwareAddr {
|
||||
var staticMACs []net.HardwareAddr
|
||||
if o.StaticMACs == nil {
|
||||
return staticMACs
|
||||
}
|
||||
return *o.StaticMACs
|
||||
}
|
||||
|
||||
// WithConfigMaps
|
||||
func (o *KubeOptions) WithConfigMaps(value []string) *KubeOptions {
|
||||
v := &value
|
||||
|
||||
@@ -30,6 +30,8 @@ type PlayKubeOptions struct {
|
||||
SeccompProfileRoot string
|
||||
// StaticIPs - Static IP address used by the pod(s).
|
||||
StaticIPs []net.IP
|
||||
// StaticMACs - Static MAC address used by the pod(s).
|
||||
StaticMACs []net.HardwareAddr
|
||||
// ConfigMaps - slice of pathnames to kubernetes configmap YAMLs.
|
||||
ConfigMaps []string
|
||||
// LogDriver for the container. For example: journald
|
||||
|
||||
@@ -198,11 +198,17 @@ func (ic *ContainerEngine) playKubePod(ctx context.Context, podName string, podY
|
||||
}
|
||||
if len(options.StaticIPs) > *ipIndex {
|
||||
p.StaticIP = &options.StaticIPs[*ipIndex]
|
||||
*ipIndex++
|
||||
} else if len(options.StaticIPs) > 0 {
|
||||
// only warn if the user has set at least one ip ip
|
||||
// only warn if the user has set at least one ip
|
||||
logrus.Warn("No more static ips left using a random one")
|
||||
}
|
||||
if len(options.StaticMACs) > *ipIndex {
|
||||
p.StaticMAC = &options.StaticMACs[*ipIndex]
|
||||
} else if len(options.StaticIPs) > 0 {
|
||||
// only warn if the user has set at least one mac
|
||||
logrus.Warn("No more static macs left using a random one")
|
||||
}
|
||||
*ipIndex++
|
||||
|
||||
// Create the Pod
|
||||
pod, err := generate.MakePod(p, ic.Libpod)
|
||||
|
||||
@@ -11,7 +11,8 @@ import (
|
||||
func (ic *ContainerEngine) PlayKube(ctx context.Context, path string, opts entities.PlayKubeOptions) (*entities.PlayKubeReport, error) {
|
||||
options := new(play.KubeOptions).WithAuthfile(opts.Authfile).WithUsername(opts.Username).WithPassword(opts.Password)
|
||||
options.WithCertDir(opts.CertDir).WithQuiet(opts.Quiet).WithSignaturePolicy(opts.SignaturePolicy).WithConfigMaps(opts.ConfigMaps)
|
||||
options.WithLogDriver(opts.LogDriver).WithNetwork(opts.Network).WithSeccompProfileRoot(opts.SeccompProfileRoot).WithStaticIPs(opts.StaticIPs)
|
||||
options.WithLogDriver(opts.LogDriver).WithNetwork(opts.Network).WithSeccompProfileRoot(opts.SeccompProfileRoot)
|
||||
options.WithStaticIPs(opts.StaticIPs).WithStaticMACs(opts.StaticMACs)
|
||||
|
||||
if s := opts.SkipTLSVerify; s != types.OptionalBoolUndefined {
|
||||
options.WithSkipTLSVerify(s == types.OptionalBoolTrue)
|
||||
|
||||
Reference in New Issue
Block a user