feat: add images command
This adds a command that lists all of the images used by Talos. This is useful in the case of airgap installs, so that users will know which images to pull. Signed-off-by: Andrew Rynhard <andrew@rynhard.io>
This commit is contained in:
parent
6834ad97a5
commit
c693e556d2
55
cmd/talosctl/cmd/talos/images.go
Normal file
55
cmd/talosctl/cmd/talos/images.go
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
package talos
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"github.com/talos-systems/talos/internal/app/bootkube/images"
|
||||||
|
"github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1"
|
||||||
|
"github.com/talos-systems/talos/pkg/machinery/constants"
|
||||||
|
)
|
||||||
|
|
||||||
|
// imagesCmd represents the images command.
|
||||||
|
var imagesCmd = &cobra.Command{
|
||||||
|
Use: "images",
|
||||||
|
Short: "List the default images used by Talos",
|
||||||
|
Long: ``,
|
||||||
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
images := images.List(&v1alpha1.Config{
|
||||||
|
MachineConfig: &v1alpha1.MachineConfig{
|
||||||
|
MachineKubelet: &v1alpha1.KubeletConfig{},
|
||||||
|
},
|
||||||
|
ClusterConfig: &v1alpha1.ClusterConfig{
|
||||||
|
EtcdConfig: &v1alpha1.EtcdConfig{},
|
||||||
|
APIServerConfig: &v1alpha1.APIServerConfig{},
|
||||||
|
ControllerManagerConfig: &v1alpha1.ControllerManagerConfig{},
|
||||||
|
SchedulerConfig: &v1alpha1.SchedulerConfig{},
|
||||||
|
CoreDNSConfig: &v1alpha1.CoreDNS{},
|
||||||
|
ProxyConfig: &v1alpha1.ProxyConfig{},
|
||||||
|
PodCheckpointerConfig: &v1alpha1.PodCheckpointer{},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
fmt.Printf("%s\n", images.Flannel)
|
||||||
|
fmt.Printf("%s\n", images.FlannelCNI)
|
||||||
|
fmt.Printf("%s\n", images.CoreDNS)
|
||||||
|
fmt.Printf("%s\n", images.Etcd)
|
||||||
|
fmt.Printf("%s\n", images.KubeAPIServer)
|
||||||
|
fmt.Printf("%s\n", images.KubeControllerManager)
|
||||||
|
fmt.Printf("%s\n", images.KubeScheduler)
|
||||||
|
fmt.Printf("%s\n", images.KubeProxy)
|
||||||
|
fmt.Printf("%s\n", images.Kubelet)
|
||||||
|
fmt.Printf("%s\n", constants.DefaultInstallerImage)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
addCommand(imagesCmd)
|
||||||
|
}
|
@ -31,6 +31,7 @@ A CLI for out-of-band management of Kubernetes nodes created by Talos
|
|||||||
* [talosctl events](talosctl_events.md) - Stream runtime events
|
* [talosctl events](talosctl_events.md) - Stream runtime events
|
||||||
* [talosctl gen](talosctl_gen.md) - Generate CAs, certificates, and private keys
|
* [talosctl gen](talosctl_gen.md) - Generate CAs, certificates, and private keys
|
||||||
* [talosctl health](talosctl_health.md) - Check cluster health
|
* [talosctl health](talosctl_health.md) - Check cluster health
|
||||||
|
* [talosctl images](talosctl_images.md) - List the default images used by Talos
|
||||||
* [talosctl interfaces](talosctl_interfaces.md) - List network interfaces
|
* [talosctl interfaces](talosctl_interfaces.md) - List network interfaces
|
||||||
* [talosctl kubeconfig](talosctl_kubeconfig.md) - Download the admin kubeconfig from the node
|
* [talosctl kubeconfig](talosctl_kubeconfig.md) - Download the admin kubeconfig from the node
|
||||||
* [talosctl list](talosctl_list.md) - Retrieve a directory listing
|
* [talosctl list](talosctl_list.md) - Retrieve a directory listing
|
||||||
|
32
docs/talosctl/talosctl_images.md
Normal file
32
docs/talosctl/talosctl_images.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<!-- markdownlint-disable -->
|
||||||
|
## talosctl images
|
||||||
|
|
||||||
|
List the default images used by Talos
|
||||||
|
|
||||||
|
### Synopsis
|
||||||
|
|
||||||
|
List the default images used by Talos
|
||||||
|
|
||||||
|
```
|
||||||
|
talosctl images [flags]
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
```
|
||||||
|
-h, --help help for images
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options inherited from parent commands
|
||||||
|
|
||||||
|
```
|
||||||
|
--context string Context to be used in command
|
||||||
|
-e, --endpoints strings override default endpoints in Talos configuration
|
||||||
|
-n, --nodes strings target the specified nodes
|
||||||
|
--talosconfig string The path to the Talos configuration file (default "/home/user/.talos/config")
|
||||||
|
```
|
||||||
|
|
||||||
|
### SEE ALSO
|
||||||
|
|
||||||
|
* [talosctl](talosctl.md) - A CLI for out-of-band management of Kubernetes nodes created by Talos
|
||||||
|
|
@ -17,7 +17,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"runtime"
|
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/hashicorp/go-getter"
|
"github.com/hashicorp/go-getter"
|
||||||
@ -27,6 +26,7 @@ import (
|
|||||||
|
|
||||||
tnet "github.com/talos-systems/net"
|
tnet "github.com/talos-systems/net"
|
||||||
|
|
||||||
|
"github.com/talos-systems/talos/internal/app/bootkube/images"
|
||||||
"github.com/talos-systems/talos/pkg/machinery/config"
|
"github.com/talos-systems/talos/pkg/machinery/config"
|
||||||
"github.com/talos-systems/talos/pkg/machinery/constants"
|
"github.com/talos-systems/talos/pkg/machinery/constants"
|
||||||
)
|
)
|
||||||
@ -125,19 +125,7 @@ func generateAssets(config config.Provider) (err error) {
|
|||||||
return fmt.Errorf("failed to calculate DNS service IP: %w", err)
|
return fmt.Errorf("failed to calculate DNS service IP: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
images := asset.DefaultImages
|
images := images.List(config)
|
||||||
|
|
||||||
// Override all kube-related images with default val or specified image locations
|
|
||||||
images.Flannel = fmt.Sprintf("quay.io/coreos/flannel:v0.12.0-%s", runtime.GOARCH)
|
|
||||||
images.Kubelet = config.Machine().Kubelet().Image()
|
|
||||||
images.KubeAPIServer = config.Cluster().APIServer().Image()
|
|
||||||
images.KubeControllerManager = config.Cluster().ControllerManager().Image()
|
|
||||||
images.KubeProxy = config.Cluster().Proxy().Image()
|
|
||||||
images.KubeScheduler = config.Cluster().Scheduler().Image()
|
|
||||||
|
|
||||||
// Allow for overriding by users via config data
|
|
||||||
images.CoreDNS = config.Cluster().CoreDNS().Image()
|
|
||||||
images.PodCheckpointer = config.Cluster().PodCheckpointer().Image()
|
|
||||||
|
|
||||||
conf := asset.Config{
|
conf := asset.Config{
|
||||||
ClusterName: config.Cluster().Name(),
|
ClusterName: config.Cluster().Name(),
|
||||||
|
34
internal/app/bootkube/images/images.go
Normal file
34
internal/app/bootkube/images/images.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
package images
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"runtime"
|
||||||
|
|
||||||
|
"github.com/talos-systems/bootkube-plugin/pkg/asset"
|
||||||
|
|
||||||
|
"github.com/talos-systems/talos/pkg/machinery/config"
|
||||||
|
)
|
||||||
|
|
||||||
|
// List returns a list of images used.
|
||||||
|
func List(config config.Provider) asset.ImageVersions {
|
||||||
|
images := asset.DefaultImages
|
||||||
|
|
||||||
|
// Override all kube-related images with default val or specified image locations
|
||||||
|
images.Flannel = fmt.Sprintf("quay.io/coreos/flannel:v0.12.0-%s", runtime.GOARCH)
|
||||||
|
images.Kubelet = config.Machine().Kubelet().Image()
|
||||||
|
images.KubeAPIServer = config.Cluster().APIServer().Image()
|
||||||
|
images.KubeControllerManager = config.Cluster().ControllerManager().Image()
|
||||||
|
images.KubeProxy = config.Cluster().Proxy().Image()
|
||||||
|
images.KubeScheduler = config.Cluster().Scheduler().Image()
|
||||||
|
images.Etcd = config.Cluster().Etcd().Image()
|
||||||
|
|
||||||
|
// Allow for overriding by users via config data
|
||||||
|
images.CoreDNS = config.Cluster().CoreDNS().Image()
|
||||||
|
images.PodCheckpointer = config.Cluster().PodCheckpointer().Image()
|
||||||
|
|
||||||
|
return images
|
||||||
|
}
|
30
internal/integration/cli/images.go
Normal file
30
internal/integration/cli/images.go
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
// +build integration_cli
|
||||||
|
|
||||||
|
package cli
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/talos-systems/talos/internal/integration/base"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ImagesSuite verifies the images command.
|
||||||
|
type ImagesSuite struct {
|
||||||
|
base.CLISuite
|
||||||
|
}
|
||||||
|
|
||||||
|
// SuiteName ...
|
||||||
|
func (suite *ImagesSuite) SuiteName() string {
|
||||||
|
return "cli.ImagesSuite"
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestSuccess verifies successful execution.
|
||||||
|
func (suite *ImagesSuite) TestSuccess() {
|
||||||
|
suite.RunCLI([]string{"images"})
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
allSuites = append(allSuites, new(ImagesSuite))
|
||||||
|
}
|
@ -10,6 +10,8 @@ import (
|
|||||||
"github.com/containerd/containerd/defaults"
|
"github.com/containerd/containerd/defaults"
|
||||||
cni "github.com/containerd/go-cni"
|
cni "github.com/containerd/go-cni"
|
||||||
"github.com/talos-systems/crypto/x509"
|
"github.com/talos-systems/crypto/x509"
|
||||||
|
|
||||||
|
"github.com/talos-systems/talos/pkg/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -27,6 +29,9 @@ var (
|
|||||||
// the installer.
|
// the installer.
|
||||||
DefaultInstallerImageRepository = Registry + "/" + DefaultInstallerImageName
|
DefaultInstallerImageRepository = Registry + "/" + DefaultInstallerImageName
|
||||||
|
|
||||||
|
// DefaultInstallerImage is the default installer image.
|
||||||
|
DefaultInstallerImage = DefaultInstallerImageRepository + ":" + version.Tag
|
||||||
|
|
||||||
// DefaultTalosImageRepository is the default container repository for
|
// DefaultTalosImageRepository is the default container repository for
|
||||||
// the talos image.
|
// the talos image.
|
||||||
DefaultTalosImageRepository = Registry + "/" + Username + "/" + "talos"
|
DefaultTalosImageRepository = Registry + "/" + Username + "/" + "talos"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user