mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Merge pull request #102560 from navist2020/todo/checkManifest
kubeadm:Run preflight checks for diff to check that the manifests already exist
This commit is contained in:
commit
7696a48612
@ -19,6 +19,7 @@ package upgrade
|
|||||||
import (
|
import (
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/pmezard/go-difflib/difflib"
|
"github.com/pmezard/go-difflib/difflib"
|
||||||
@ -65,7 +66,13 @@ func newCmdDiff(out io.Writer) *cobra.Command {
|
|||||||
Use: "diff [version]",
|
Use: "diff [version]",
|
||||||
Short: "Show what differences would be applied to existing static pod manifests. See also: kubeadm upgrade apply --dry-run",
|
Short: "Show what differences would be applied to existing static pod manifests. See also: kubeadm upgrade apply --dry-run",
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
// TODO: Run preflight checks for diff to check that the manifests already exist.
|
// Run preflight checks for diff to check that the manifests already exist.
|
||||||
|
if err := validateManifestsPath(
|
||||||
|
flags.apiServerManifestPath,
|
||||||
|
flags.controllerManagerManifestPath,
|
||||||
|
flags.schedulerManifestPath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return runDiff(flags, args)
|
return runDiff(flags, args)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -80,6 +87,25 @@ func newCmdDiff(out io.Writer) *cobra.Command {
|
|||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func validateManifestsPath(manifests ...string) (err error) {
|
||||||
|
for _, manifestPath := range manifests {
|
||||||
|
if len(manifestPath) == 0 {
|
||||||
|
return errors.New("empty manifest path")
|
||||||
|
}
|
||||||
|
s, err := os.Stat(manifestPath)
|
||||||
|
if err != nil {
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return errors.Wrapf(err, "the manifest file %q does not exist", manifestPath)
|
||||||
|
}
|
||||||
|
return errors.Wrapf(err, "error obtaining stats for manifest file %q", manifestPath)
|
||||||
|
}
|
||||||
|
if s.IsDir() {
|
||||||
|
return errors.Errorf("%q is a directory", manifestPath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func runDiff(flags *diffFlags, args []string) error {
|
func runDiff(flags *diffFlags, args []string) error {
|
||||||
var err error
|
var err error
|
||||||
var cfg *kubeadmapi.InitConfiguration
|
var cfg *kubeadmapi.InitConfiguration
|
||||||
|
@ -124,3 +124,60 @@ func TestRunDiff(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestValidateManifests(t *testing.T) {
|
||||||
|
// Create valid manifest paths
|
||||||
|
apiServerManifest, err := createTestRunDiffFile([]byte{})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.Remove(apiServerManifest)
|
||||||
|
controllerManagerManifest, err := createTestRunDiffFile([]byte{})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.Remove(controllerManagerManifest)
|
||||||
|
schedulerManifest, err := createTestRunDiffFile([]byte{})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.Remove(schedulerManifest)
|
||||||
|
// Create a file path that does not exist
|
||||||
|
notExistFilePath := "./foobar123456"
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
name string
|
||||||
|
args []string
|
||||||
|
expectedError bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "valid: valid manifest path",
|
||||||
|
args: []string{apiServerManifest, controllerManagerManifest, schedulerManifest},
|
||||||
|
expectedError: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "invalid: one is empty path",
|
||||||
|
args: []string{apiServerManifest, controllerManagerManifest, ""},
|
||||||
|
expectedError: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "invalid: manifest path is directory",
|
||||||
|
args: []string{"./"},
|
||||||
|
expectedError: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "invalid: manifest path does not exist",
|
||||||
|
args: []string{notExistFilePath},
|
||||||
|
expectedError: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
if err := validateManifestsPath(tc.args...); (err != nil) != tc.expectedError {
|
||||||
|
t.Fatalf("expected error: %v, saw: %v, error: %v", tc.expectedError, (err != nil), err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user