diff --git a/cmd/hyperkube/BUILD b/cmd/hyperkube/BUILD index 17849ebea7..9d05d7045a 100644 --- a/cmd/hyperkube/BUILD +++ b/cmd/hyperkube/BUILD @@ -60,7 +60,7 @@ go_library( "//pkg/client/metrics/prometheus:go_default_library", "//pkg/kubectl/cmd:go_default_library", "//pkg/kubectl/cmd/util:go_default_library", - "//pkg/util:go_default_library", + "//pkg/util/template:go_default_library", "//pkg/version/prometheus:go_default_library", "//pkg/version/verflag:go_default_library", "//plugin/cmd/kube-scheduler/app:go_default_library", diff --git a/cmd/hyperkube/hyperkube.go b/cmd/hyperkube/hyperkube.go index 0241205ee6..4c3118240b 100644 --- a/cmd/hyperkube/hyperkube.go +++ b/cmd/hyperkube/hyperkube.go @@ -27,7 +27,7 @@ import ( utilflag "k8s.io/apiserver/pkg/util/flag" "k8s.io/apiserver/pkg/util/logs" - "k8s.io/kubernetes/pkg/util" + utiltemplate "k8s.io/kubernetes/pkg/util/template" "k8s.io/kubernetes/pkg/version/verflag" "github.com/spf13/pflag" @@ -205,7 +205,7 @@ Servers Call '{{.Name}} --make-symlinks' to create symlinks for each server in the local directory. Call '{{.Name}} --help' for help on a specific server. ` - util.ExecuteTemplate(hk.Out(), tt, hk) + utiltemplate.ExecuteTemplate(hk.Out(), tt, hk) } // MakeSymlinks will create a symlink for each registered hyperkube server in the local directory. diff --git a/cmd/hyperkube/server.go b/cmd/hyperkube/server.go index 434f24ee7f..02e912014d 100644 --- a/cmd/hyperkube/server.go +++ b/cmd/hyperkube/server.go @@ -21,7 +21,7 @@ import ( "strings" "k8s.io/apiserver/pkg/util/flag" - "k8s.io/kubernetes/pkg/util" + utiltemplate "k8s.io/kubernetes/pkg/util/template" "github.com/spf13/pflag" ) @@ -49,7 +49,7 @@ func (s *Server) Usage() error { Available Flags: {{.Flags.FlagUsages}}` - return util.ExecuteTemplate(s.hk.Out(), tt, s) + return utiltemplate.ExecuteTemplate(s.hk.Out(), tt, s) } // Name returns the name of the command as derived from the usage line. diff --git a/cmd/kube-proxy/app/BUILD b/cmd/kube-proxy/app/BUILD index 93683c5ecd..51fb1cb62e 100644 --- a/cmd/kube-proxy/app/BUILD +++ b/cmd/kube-proxy/app/BUILD @@ -30,7 +30,6 @@ go_library( "//pkg/proxy/iptables:go_default_library", "//pkg/proxy/userspace:go_default_library", "//pkg/proxy/winuserspace:go_default_library", - "//pkg/util:go_default_library", "//pkg/util/configz:go_default_library", "//pkg/util/dbus:go_default_library", "//pkg/util/exec:go_default_library", @@ -39,6 +38,7 @@ go_library( "//pkg/util/netsh:go_default_library", "//pkg/util/node:go_default_library", "//pkg/util/oom:go_default_library", + "//pkg/util/pointer:go_default_library", "//pkg/util/resourcecontainer:go_default_library", "//pkg/util/sysctl:go_default_library", "//pkg/version/verflag:go_default_library", @@ -74,9 +74,9 @@ go_test( "//pkg/api:go_default_library", "//pkg/apis/componentconfig:go_default_library", "//pkg/apis/componentconfig/v1alpha1:go_default_library", - "//pkg/util:go_default_library", "//pkg/util/configz:go_default_library", "//pkg/util/iptables:go_default_library", + "//pkg/util/pointer:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/cmd/kube-proxy/app/server.go b/cmd/kube-proxy/app/server.go index 9ad009c245..451c575fc5 100644 --- a/cmd/kube-proxy/app/server.go +++ b/cmd/kube-proxy/app/server.go @@ -60,14 +60,14 @@ import ( "k8s.io/kubernetes/pkg/proxy/iptables" "k8s.io/kubernetes/pkg/proxy/userspace" "k8s.io/kubernetes/pkg/proxy/winuserspace" - "k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util/configz" utildbus "k8s.io/kubernetes/pkg/util/dbus" "k8s.io/kubernetes/pkg/util/exec" utiliptables "k8s.io/kubernetes/pkg/util/iptables" utilnetsh "k8s.io/kubernetes/pkg/util/netsh" - nodeutil "k8s.io/kubernetes/pkg/util/node" + utilnode "k8s.io/kubernetes/pkg/util/node" "k8s.io/kubernetes/pkg/util/oom" + utilpointer "k8s.io/kubernetes/pkg/util/pointer" "k8s.io/kubernetes/pkg/util/resourcecontainer" utilsysctl "k8s.io/kubernetes/pkg/util/sysctl" "k8s.io/kubernetes/pkg/version/verflag" @@ -131,14 +131,14 @@ func AddFlags(options *Options, fs *pflag.FlagSet) { fs.Int32Var(&options.healthzPort, "healthz-port", options.healthzPort, "The port to bind the health check server. Use 0 to disable.") fs.Var(componentconfig.IPVar{Val: &options.config.HealthzBindAddress}, "healthz-bind-address", "The IP address and port for the health check server to serve on (set to 0.0.0.0 for all interfaces)") fs.Var(componentconfig.IPVar{Val: &options.config.MetricsBindAddress}, "metrics-bind-address", "The IP address and port for the metrics server to serve on (set to 0.0.0.0 for all interfaces)") - fs.Int32Var(options.config.OOMScoreAdj, "oom-score-adj", util.Int32PtrDerefOr(options.config.OOMScoreAdj, int32(qos.KubeProxyOOMScoreAdj)), "The oom-score-adj value for kube-proxy process. Values must be within the range [-1000, 1000]") + fs.Int32Var(options.config.OOMScoreAdj, "oom-score-adj", utilpointer.Int32PtrDerefOr(options.config.OOMScoreAdj, int32(qos.KubeProxyOOMScoreAdj)), "The oom-score-adj value for kube-proxy process. Values must be within the range [-1000, 1000]") fs.StringVar(&options.config.ResourceContainer, "resource-container", options.config.ResourceContainer, "Absolute name of the resource-only container to create and run the Kube-proxy in (Default: /kube-proxy).") fs.MarkDeprecated("resource-container", "This feature will be removed in a later release.") fs.StringVar(&options.config.ClientConnection.KubeConfigFile, "kubeconfig", options.config.ClientConnection.KubeConfigFile, "Path to kubeconfig file with authorization information (the master location is set by the master flag).") fs.Var(componentconfig.PortRangeVar{Val: &options.config.PortRange}, "proxy-port-range", "Range of host ports (beginPort-endPort, inclusive) that may be consumed in order to proxy service traffic. If unspecified (0-0) then ports will be randomly chosen.") fs.StringVar(&options.config.HostnameOverride, "hostname-override", options.config.HostnameOverride, "If non-empty, will use this string as identification instead of the actual hostname.") fs.Var(&options.config.Mode, "proxy-mode", "Which proxy mode to use: 'userspace' (older) or 'iptables' (faster). If blank, use the best-available proxy (currently iptables). If the iptables proxy is selected, regardless of how, but the system's kernel or iptables versions are insufficient, this always falls back to the userspace proxy.") - fs.Int32Var(options.config.IPTables.MasqueradeBit, "iptables-masquerade-bit", util.Int32PtrDerefOr(options.config.IPTables.MasqueradeBit, 14), "If using the pure iptables proxy, the bit of the fwmark space to mark packets requiring SNAT with. Must be within the range [0, 31].") + fs.Int32Var(options.config.IPTables.MasqueradeBit, "iptables-masquerade-bit", utilpointer.Int32PtrDerefOr(options.config.IPTables.MasqueradeBit, 14), "If using the pure iptables proxy, the bit of the fwmark space to mark packets requiring SNAT with. Must be within the range [0, 31].") fs.DurationVar(&options.config.IPTables.SyncPeriod.Duration, "iptables-sync-period", options.config.IPTables.SyncPeriod.Duration, "The maximum interval of how often iptables rules are refreshed (e.g. '5s', '1m', '2h22m'). Must be greater than 0.") fs.DurationVar(&options.config.IPTables.MinSyncPeriod.Duration, "iptables-min-sync-period", options.config.IPTables.MinSyncPeriod.Duration, "The minimum interval of how often the iptables rules can be refreshed as endpoints and services change (e.g. '5s', '1m', '2h22m').") fs.DurationVar(&options.config.ConfigSyncPeriod.Duration, "config-sync-period", options.config.ConfigSyncPeriod.Duration, "How often configuration from the apiserver is refreshed. Must be greater than 0.") @@ -458,7 +458,7 @@ func NewProxyServer(config *componentconfig.KubeProxyConfiguration, cleanupAndEx } // Create event recorder - hostname := nodeutil.GetHostname(config.HostnameOverride) + hostname := utilnode.GetHostname(config.HostnameOverride) eventBroadcaster := record.NewBroadcaster() recorder := eventBroadcaster.NewRecorder(scheme, clientv1.EventSource{Component: "kube-proxy", Host: hostname}) @@ -785,7 +785,7 @@ func getNodeIP(client clientset.Interface, hostname string) net.IP { glog.Warningf("Failed to retrieve node info: %v", err) return nil } - nodeIP, err = nodeutil.InternalGetNodeHostIP(node) + nodeIP, err = utilnode.InternalGetNodeHostIP(node) if err != nil { glog.Warningf("Failed to retrieve node IP: %v", err) return nil diff --git a/cmd/kube-proxy/app/server_test.go b/cmd/kube-proxy/app/server_test.go index 673ae0ae79..193f294d74 100644 --- a/cmd/kube-proxy/app/server_test.go +++ b/cmd/kube-proxy/app/server_test.go @@ -33,9 +33,9 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/componentconfig" "k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1" - "k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util/configz" "k8s.io/kubernetes/pkg/util/iptables" + utilpointer "k8s.io/kubernetes/pkg/util/pointer" ) type fakeNodeInterface struct { @@ -342,13 +342,13 @@ udpTimeoutMilliseconds: 123ms HostnameOverride: "foo", IPTables: componentconfig.KubeProxyIPTablesConfiguration{ MasqueradeAll: true, - MasqueradeBit: util.Int32Ptr(17), + MasqueradeBit: utilpointer.Int32Ptr(17), MinSyncPeriod: metav1.Duration{Duration: 10 * time.Second}, SyncPeriod: metav1.Duration{Duration: 60 * time.Second}, }, MetricsBindAddress: tc.metricsBindAddress, Mode: "iptables", - OOMScoreAdj: util.Int32Ptr(17), + OOMScoreAdj: utilpointer.Int32Ptr(17), PortRange: "2-7", ResourceContainer: "/foo", UDPIdleTimeout: metav1.Duration{Duration: 123 * time.Millisecond}, diff --git a/hack/.golint_failures b/hack/.golint_failures index fc6cad78dd..47de86c354 100644 --- a/hack/.golint_failures +++ b/hack/.golint_failures @@ -431,7 +431,6 @@ pkg/security/podsecuritypolicy/user pkg/security/podsecuritypolicy/util pkg/securitycontext pkg/ssh -pkg/util pkg/util/bandwidth pkg/util/config pkg/util/configz @@ -439,6 +438,7 @@ pkg/util/dbus pkg/util/ebtables pkg/util/env pkg/util/exec +pkg/util/file pkg/util/goroutinemap/exponentialbackoff pkg/util/initsystem pkg/util/ipconfig diff --git a/pkg/api/v1/BUILD b/pkg/api/v1/BUILD index 7a6b64c97e..e6eaffe847 100644 --- a/pkg/api/v1/BUILD +++ b/pkg/api/v1/BUILD @@ -23,8 +23,8 @@ go_library( deps = [ "//pkg/api:go_default_library", "//pkg/apis/extensions:go_default_library", - "//pkg/util:go_default_library", "//pkg/util/parsers:go_default_library", + "//pkg/util/pointer:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library", diff --git a/pkg/api/v1/defaults.go b/pkg/api/v1/defaults.go index 81a02ec01e..e4a1600dbf 100644 --- a/pkg/api/v1/defaults.go +++ b/pkg/api/v1/defaults.go @@ -20,8 +20,8 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" - "k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util/parsers" + utilpointer "k8s.io/kubernetes/pkg/util/pointer" ) func addDefaultingFuncs(scheme *runtime.Scheme) error { @@ -67,7 +67,7 @@ func SetDefaults_ReplicationController(obj *v1.ReplicationController) { } } func SetDefaults_Volume(obj *v1.Volume) { - if util.AllPtrFieldsNil(&obj.VolumeSource) { + if utilpointer.AllPtrFieldsNil(&obj.VolumeSource) { obj.VolumeSource = v1.VolumeSource{ EmptyDir: &v1.EmptyDirVolumeSource{}, } diff --git a/pkg/apis/componentconfig/v1alpha1/BUILD b/pkg/apis/componentconfig/v1alpha1/BUILD index 6e5c584e9a..966ea0eb7c 100644 --- a/pkg/apis/componentconfig/v1alpha1/BUILD +++ b/pkg/apis/componentconfig/v1alpha1/BUILD @@ -27,7 +27,7 @@ go_library( "//pkg/kubelet/qos:go_default_library", "//pkg/kubelet/types:go_default_library", "//pkg/master/ports:go_default_library", - "//pkg/util:go_default_library", + "//pkg/util/pointer:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library", diff --git a/pkg/apis/componentconfig/v1alpha1/defaults.go b/pkg/apis/componentconfig/v1alpha1/defaults.go index 4c7d6175cc..7ffe21d6b0 100644 --- a/pkg/apis/componentconfig/v1alpha1/defaults.go +++ b/pkg/apis/componentconfig/v1alpha1/defaults.go @@ -30,7 +30,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/qos" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/master/ports" - "k8s.io/kubernetes/pkg/util" + utilpointer "k8s.io/kubernetes/pkg/util/pointer" ) const ( @@ -218,7 +218,7 @@ func SetDefaults_KubeletConfiguration(obj *KubeletConfiguration) { obj.CloudProvider = AutoDetectCloudProvider } if obj.CAdvisorPort == nil { - obj.CAdvisorPort = util.Int32Ptr(4194) + obj.CAdvisorPort = utilpointer.Int32Ptr(4194) } if obj.VolumeStatsAggPeriod == zeroDuration { obj.VolumeStatsAggPeriod = metav1.Duration{Duration: time.Minute} diff --git a/pkg/kubelet/BUILD b/pkg/kubelet/BUILD index 3466f18325..0bd89931e8 100644 --- a/pkg/kubelet/BUILD +++ b/pkg/kubelet/BUILD @@ -92,9 +92,9 @@ go_library( "//pkg/kubelet/volumemanager:go_default_library", "//pkg/security/apparmor:go_default_library", "//pkg/securitycontext:go_default_library", - "//pkg/util:go_default_library", "//pkg/util/dbus:go_default_library", "//pkg/util/exec:go_default_library", + "//pkg/util/file:go_default_library", "//pkg/util/io:go_default_library", "//pkg/util/iptables:go_default_library", "//pkg/util/mount:go_default_library", diff --git a/pkg/kubelet/certificate/BUILD b/pkg/kubelet/certificate/BUILD index ddb39046b0..9cf175f3c4 100644 --- a/pkg/kubelet/certificate/BUILD +++ b/pkg/kubelet/certificate/BUILD @@ -18,7 +18,7 @@ go_library( tags = ["automanaged"], deps = [ "//pkg/apis/componentconfig:go_default_library", - "//pkg/util:go_default_library", + "//pkg/util/file:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/api/certificates/v1beta1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/kubelet/certificate/certificate_store.go b/pkg/kubelet/certificate/certificate_store.go index 53f4d98a4a..5230f1ab9b 100644 --- a/pkg/kubelet/certificate/certificate_store.go +++ b/pkg/kubelet/certificate/certificate_store.go @@ -29,7 +29,7 @@ import ( "github.com/golang/glog" - "k8s.io/kubernetes/pkg/util" + utilfile "k8s.io/kubernetes/pkg/util/file" ) const ( @@ -86,7 +86,7 @@ func NewFileStore( func (s *fileStore) recover() error { // If the 'current' file doesn't exist, continue on with the recovery process. currentPath := filepath.Join(s.certDirectory, s.filename(currentPair)) - if exists, err := util.FileExists(currentPath); err != nil { + if exists, err := utilfile.FileExists(currentPath); err != nil { return err } else if exists { return nil @@ -113,18 +113,18 @@ func (s *fileStore) recover() error { func (s *fileStore) Current() (*tls.Certificate, error) { pairFile := filepath.Join(s.certDirectory, s.filename(currentPair)) - if pairFileExists, err := util.FileExists(pairFile); err != nil { + if pairFileExists, err := utilfile.FileExists(pairFile); err != nil { return nil, err } else if pairFileExists { glog.Infof("Loading cert/key pair from %q.", pairFile) return loadFile(pairFile) } - certFileExists, err := util.FileExists(s.certFile) + certFileExists, err := utilfile.FileExists(s.certFile) if err != nil { return nil, err } - keyFileExists, err := util.FileExists(s.keyFile) + keyFileExists, err := utilfile.FileExists(s.keyFile) if err != nil { return nil, err } @@ -135,11 +135,11 @@ func (s *fileStore) Current() (*tls.Certificate, error) { c := filepath.Join(s.certDirectory, s.pairNamePrefix+certExtension) k := filepath.Join(s.keyDirectory, s.pairNamePrefix+keyExtension) - certFileExists, err = util.FileExists(c) + certFileExists, err = utilfile.FileExists(c) if err != nil { return nil, err } - keyFileExists, err = util.FileExists(k) + keyFileExists, err = utilfile.FileExists(k) if err != nil { return nil, err } @@ -262,7 +262,7 @@ func (s *fileStore) updateSymlink(filename string) error { // Check that the new cert/key pair file exists to avoid rotating to an // invalid cert/key. - if filenameExists, err := util.FileExists(filename); err != nil { + if filenameExists, err := utilfile.FileExists(filename); err != nil { return err } else if !filenameExists { return fmt.Errorf("file %q does not exist so it can not be used as the currently selected cert/key", filename) diff --git a/pkg/kubelet/cm/BUILD b/pkg/kubelet/cm/BUILD index b78b05d5d3..98455c5adf 100644 --- a/pkg/kubelet/cm/BUILD +++ b/pkg/kubelet/cm/BUILD @@ -33,7 +33,7 @@ go_library( "//pkg/kubelet/eviction/api:go_default_library", "//pkg/kubelet/metrics:go_default_library", "//pkg/kubelet/qos:go_default_library", - "//pkg/util:go_default_library", + "//pkg/util/file:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/oom:go_default_library", "//pkg/util/procfs:go_default_library", diff --git a/pkg/kubelet/cm/container_manager_linux.go b/pkg/kubelet/cm/container_manager_linux.go index 0e3187757f..5042badfc1 100644 --- a/pkg/kubelet/cm/container_manager_linux.go +++ b/pkg/kubelet/cm/container_manager_linux.go @@ -43,7 +43,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/cadvisor" cmutil "k8s.io/kubernetes/pkg/kubelet/cm/util" "k8s.io/kubernetes/pkg/kubelet/qos" - "k8s.io/kubernetes/pkg/util" + utilfile "k8s.io/kubernetes/pkg/util/file" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/oom" "k8s.io/kubernetes/pkg/util/procfs" @@ -163,11 +163,11 @@ func validateSystemRequirements(mountUtil mount.Interface) (features, error) { // Check if cpu quota is available. // CPU cgroup is required and so it expected to be mounted at this point. - periodExists, err := util.FileExists(path.Join(cpuMountPoint, "cpu.cfs_period_us")) + periodExists, err := utilfile.FileExists(path.Join(cpuMountPoint, "cpu.cfs_period_us")) if err != nil { glog.Errorf("failed to detect if CPU cgroup cpu.cfs_period_us is available - %v", err) } - quotaExists, err := util.FileExists(path.Join(cpuMountPoint, "cpu.cfs_quota_us")) + quotaExists, err := utilfile.FileExists(path.Join(cpuMountPoint, "cpu.cfs_quota_us")) if err != nil { glog.Errorf("failed to detect if CPU cgroup cpu.cfs_quota_us is available - %v", err) } diff --git a/pkg/kubelet/kubelet_getters.go b/pkg/kubelet/kubelet_getters.go index 3c44a21e9a..bc07264851 100644 --- a/pkg/kubelet/kubelet_getters.go +++ b/pkg/kubelet/kubelet_getters.go @@ -28,8 +28,8 @@ import ( "k8s.io/kubernetes/cmd/kubelet/app/options" "k8s.io/kubernetes/pkg/kubelet/cm" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" - "k8s.io/kubernetes/pkg/util" - nodeutil "k8s.io/kubernetes/pkg/util/node" + utilfile "k8s.io/kubernetes/pkg/util/file" + utilnode "k8s.io/kubernetes/pkg/util/node" volumeutil "k8s.io/kubernetes/pkg/volume/util" ) @@ -220,7 +220,7 @@ func (kl *Kubelet) GetHostIP() (net.IP, error) { if err != nil { return nil, fmt.Errorf("cannot get node: %v", err) } - return nodeutil.GetNodeHostIP(node) + return utilnode.GetNodeHostIP(node) } // getHostIPAnyway attempts to return the host IP from kubelet's nodeInfo, or @@ -230,7 +230,7 @@ func (kl *Kubelet) getHostIPAnyWay() (net.IP, error) { if err != nil { return nil, err } - return nodeutil.GetNodeHostIP(node) + return utilnode.GetNodeHostIP(node) } // GetExtraSupplementalGroupsForPod returns a list of the extra @@ -261,7 +261,7 @@ func (kl *Kubelet) getPodVolumePathListFromDisk(podUID types.UID) ([]string, err for _, volumePluginDir := range volumePluginDirs { volumePluginName := volumePluginDir.Name() volumePluginPath := filepath.Join(podVolDir, volumePluginName) - volumeDirs, err := util.ReadDirNoStat(volumePluginPath) + volumeDirs, err := utilfile.ReadDirNoStat(volumePluginPath) if err != nil { return volumes, fmt.Errorf("Could not read directory %s: %v", volumePluginPath, err) } diff --git a/pkg/kubelet/kubelet_pods.go b/pkg/kubelet/kubelet_pods.go index a84bddbe57..d4d2403043 100644 --- a/pkg/kubelet/kubelet_pods.go +++ b/pkg/kubelet/kubelet_pods.go @@ -58,7 +58,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/status" kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/kubelet/util/format" - "k8s.io/kubernetes/pkg/util" + utilfile "k8s.io/kubernetes/pkg/util/file" "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/util/volumehelper" volumevalidation "k8s.io/kubernetes/pkg/volume/validation" @@ -156,7 +156,7 @@ func makeMounts(pod *v1.Pod, podDir string, container *v1.Container, hostName, h hostPath = filepath.Join(hostPath, mount.SubPath) - if subPathExists, err := util.FileOrSymlinkExists(hostPath); err != nil { + if subPathExists, err := utilfile.FileOrSymlinkExists(hostPath); err != nil { glog.Errorf("Could not determine if subPath %s exists; will not attempt to change its permissions", hostPath) } else if !subPathExists { // Create the sub path now because if it's auto-created later when referenced, it may have an diff --git a/pkg/kubelet/volumemanager/reconciler/BUILD b/pkg/kubelet/volumemanager/reconciler/BUILD index 5e0cc58519..de414ef985 100644 --- a/pkg/kubelet/volumemanager/reconciler/BUILD +++ b/pkg/kubelet/volumemanager/reconciler/BUILD @@ -15,7 +15,7 @@ go_library( deps = [ "//cmd/kubelet/app/options:go_default_library", "//pkg/kubelet/volumemanager/cache:go_default_library", - "//pkg/util:go_default_library", + "//pkg/util/file:go_default_library", "//pkg/util/goroutinemap/exponentialbackoff:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/strings:go_default_library", diff --git a/pkg/kubelet/volumemanager/reconciler/reconciler.go b/pkg/kubelet/volumemanager/reconciler/reconciler.go index a2dcdafbcf..e9b6f3de4d 100644 --- a/pkg/kubelet/volumemanager/reconciler/reconciler.go +++ b/pkg/kubelet/volumemanager/reconciler/reconciler.go @@ -33,7 +33,7 @@ import ( clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/cmd/kubelet/app/options" "k8s.io/kubernetes/pkg/kubelet/volumemanager/cache" - "k8s.io/kubernetes/pkg/util" + utilfile "k8s.io/kubernetes/pkg/util/file" "k8s.io/kubernetes/pkg/util/goroutinemap/exponentialbackoff" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/strings" @@ -569,7 +569,7 @@ func getVolumesFromPodDir(podDir string) ([]podVolume, error) { pluginName := volumeDir.Name() volumePluginPath := path.Join(volumesDir, pluginName) - volumePluginDirs, err := util.ReadDirNoStat(volumePluginPath) + volumePluginDirs, err := utilfile.ReadDirNoStat(volumePluginPath) if err != nil { glog.Errorf("Could not read volume plugin directory %q: %v", volumePluginPath, err) continue diff --git a/pkg/kubemark/BUILD b/pkg/kubemark/BUILD index 686542d1a9..6a6e4a8a27 100644 --- a/pkg/kubemark/BUILD +++ b/pkg/kubemark/BUILD @@ -31,13 +31,13 @@ go_library( "//pkg/proxy:go_default_library", "//pkg/proxy/config:go_default_library", "//pkg/proxy/iptables:go_default_library", - "//pkg/util:go_default_library", "//pkg/util/exec:go_default_library", "//pkg/util/io:go_default_library", "//pkg/util/iptables:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/util/node:go_default_library", "//pkg/util/oom:go_default_library", + "//pkg/util/pointer:go_default_library", "//pkg/util/sysctl:go_default_library", "//pkg/volume/empty_dir:go_default_library", "//pkg/volume/secret:go_default_library", diff --git a/pkg/kubemark/hollow_proxy.go b/pkg/kubemark/hollow_proxy.go index ece2f1e207..11db20e7d0 100644 --- a/pkg/kubemark/hollow_proxy.go +++ b/pkg/kubemark/hollow_proxy.go @@ -32,10 +32,10 @@ import ( "k8s.io/kubernetes/pkg/proxy" proxyconfig "k8s.io/kubernetes/pkg/proxy/config" "k8s.io/kubernetes/pkg/proxy/iptables" - "k8s.io/kubernetes/pkg/util" utilexec "k8s.io/kubernetes/pkg/util/exec" utiliptables "k8s.io/kubernetes/pkg/util/iptables" - nodeutil "k8s.io/kubernetes/pkg/util/node" + utilnode "k8s.io/kubernetes/pkg/util/node" + utilpointer "k8s.io/kubernetes/pkg/util/pointer" utilsysctl "k8s.io/kubernetes/pkg/util/sysctl" "github.com/golang/glog" @@ -122,7 +122,7 @@ func NewHollowProxyOrDie( Recorder: recorder, ProxyMode: "fake", NodeRef: nodeRef, - OOMScoreAdj: util.Int32Ptr(0), + OOMScoreAdj: utilpointer.Int32Ptr(0), ResourceContainer: "", ConfigSyncPeriod: 30 * time.Second, ServiceEventHandler: serviceHandler, @@ -144,7 +144,7 @@ func getNodeIP(client clientset.Interface, hostname string) net.IP { glog.Warningf("Failed to retrieve node info: %v", err) return nil } - nodeIP, err = nodeutil.InternalGetNodeHostIP(node) + nodeIP, err = utilnode.InternalGetNodeHostIP(node) if err != nil { glog.Warningf("Failed to retrieve node IP: %v", err) return nil diff --git a/pkg/master/tunneler/BUILD b/pkg/master/tunneler/BUILD index bf22597089..f31cd36f18 100644 --- a/pkg/master/tunneler/BUILD +++ b/pkg/master/tunneler/BUILD @@ -25,7 +25,7 @@ go_library( tags = ["automanaged"], deps = [ "//pkg/ssh:go_default_library", - "//pkg/util:go_default_library", + "//pkg/util/file:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/clock:go_default_library", diff --git a/pkg/master/tunneler/ssh.go b/pkg/master/tunneler/ssh.go index 84e91c370c..748e5ef63f 100644 --- a/pkg/master/tunneler/ssh.go +++ b/pkg/master/tunneler/ssh.go @@ -29,7 +29,7 @@ import ( "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/kubernetes/pkg/ssh" - "k8s.io/kubernetes/pkg/util" + utilfile "k8s.io/kubernetes/pkg/util/file" "github.com/golang/glog" "github.com/prometheus/client_golang/prometheus" @@ -116,7 +116,7 @@ func (c *SSHTunneler) Run(getAddresses AddressFunc) { // public keyfile is written last, so check for that. publicKeyFile := c.SSHKeyfile + ".pub" - exists, err := util.FileExists(publicKeyFile) + exists, err := utilfile.FileExists(publicKeyFile) if err != nil { glog.Errorf("Error detecting if key exists: %v", err) } else if !exists { @@ -205,7 +205,7 @@ func generateSSHKey(privateKeyfile, publicKeyfile string) error { } // If private keyfile already exists, we must have only made it halfway // through last time, so delete it. - exists, err := util.FileExists(privateKeyfile) + exists, err := utilfile.FileExists(privateKeyfile) if err != nil { glog.Errorf("Error detecting if private key exists: %v", err) } else if exists { diff --git a/pkg/printers/internalversion/BUILD b/pkg/printers/internalversion/BUILD index 87e9c74f1c..a1e6051ee1 100644 --- a/pkg/printers/internalversion/BUILD +++ b/pkg/printers/internalversion/BUILD @@ -32,7 +32,7 @@ go_test( "//pkg/client/clientset_generated/internalclientset/fake:go_default_library", "//pkg/kubectl/testing:go_default_library", "//pkg/printers:go_default_library", - "//pkg/util:go_default_library", + "//pkg/util/pointer:go_default_library", "//vendor/github.com/ghodss/yaml:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/api/extensions/v1beta1:go_default_library", diff --git a/pkg/printers/internalversion/describe_test.go b/pkg/printers/internalversion/describe_test.go index 172df42fd3..849f68f2af 100644 --- a/pkg/printers/internalversion/describe_test.go +++ b/pkg/printers/internalversion/describe_test.go @@ -42,7 +42,7 @@ import ( "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake" "k8s.io/kubernetes/pkg/printers" - "k8s.io/kubernetes/pkg/util" + utilpointer "k8s.io/kubernetes/pkg/util/pointer" ) type describeClient struct { @@ -723,7 +723,7 @@ func TestDescribeDeployment(t *testing.T) { Namespace: "foo", }, Spec: v1beta1.DeploymentSpec{ - Replicas: util.Int32Ptr(1), + Replicas: utilpointer.Int32Ptr(1), Selector: &metav1.LabelSelector{}, Template: v1.PodTemplateSpec{ Spec: v1.PodSpec{ @@ -1221,7 +1221,7 @@ func TestDescribeEvents(t *testing.T) { Namespace: "foo", }, Spec: v1beta1.DeploymentSpec{ - Replicas: util.Int32Ptr(1), + Replicas: utilpointer.Int32Ptr(1), Selector: &metav1.LabelSelector{}, }, }), diff --git a/pkg/security/apparmor/BUILD b/pkg/security/apparmor/BUILD index 164a3f21dc..4dbadae70a 100644 --- a/pkg/security/apparmor/BUILD +++ b/pkg/security/apparmor/BUILD @@ -17,7 +17,7 @@ go_library( tags = ["automanaged"], deps = [ "//pkg/features:go_default_library", - "//pkg/util:go_default_library", + "//pkg/util/file:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", ], diff --git a/pkg/security/apparmor/validate.go b/pkg/security/apparmor/validate.go index 08eccac10d..1036a43b3d 100644 --- a/pkg/security/apparmor/validate.go +++ b/pkg/security/apparmor/validate.go @@ -28,7 +28,7 @@ import ( "k8s.io/api/core/v1" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/features" - "k8s.io/kubernetes/pkg/util" + utilfile "k8s.io/kubernetes/pkg/util/file" ) // Whether AppArmor should be disabled by default. @@ -194,7 +194,7 @@ func getAppArmorFS() (string, error) { } if fields[2] == "securityfs" { appArmorFS := path.Join(fields[1], "apparmor") - if ok, err := util.FileExists(appArmorFS); !ok { + if ok, err := utilfile.FileExists(appArmorFS); !ok { msg := fmt.Sprintf("path %s does not exist", appArmorFS) if err != nil { return "", fmt.Errorf("%s: %v", msg, err) diff --git a/pkg/util/BUILD b/pkg/util/BUILD index a9f039df22..d98f2641dc 100644 --- a/pkg/util/BUILD +++ b/pkg/util/BUILD @@ -2,36 +2,6 @@ package(default_visibility = ["//visibility:public"]) licenses(["notice"]) -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", - "go_test", -) - -go_library( - name = "go_default_library", - srcs = [ - "doc.go", - "template.go", - "util.go", - ], - tags = ["automanaged"], -) - -go_test( - name = "go_default_test", - srcs = [ - "template_test.go", - "util_test.go", - ], - library = ":go_default_library", - tags = ["automanaged"], - deps = [ - "//vendor/github.com/stretchr/testify/assert:go_default_library", - "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library", - ], -) - filegroup( name = "package-srcs", srcs = glob(["**"]), @@ -51,6 +21,7 @@ filegroup( "//pkg/util/ebtables:all-srcs", "//pkg/util/env:all-srcs", "//pkg/util/exec:all-srcs", + "//pkg/util/file:all-srcs", "//pkg/util/flock:all-srcs", "//pkg/util/goroutinemap:all-srcs", "//pkg/util/hash:all-srcs", @@ -72,6 +43,7 @@ filegroup( "//pkg/util/node:all-srcs", "//pkg/util/oom:all-srcs", "//pkg/util/parsers:all-srcs", + "//pkg/util/pointer:all-srcs", "//pkg/util/procfs:all-srcs", "//pkg/util/removeall:all-srcs", "//pkg/util/resourcecontainer:all-srcs", @@ -83,6 +55,7 @@ filegroup( "//pkg/util/system:all-srcs", "//pkg/util/tail:all-srcs", "//pkg/util/taints:all-srcs", + "//pkg/util/template:all-srcs", "//pkg/util/term:all-srcs", "//pkg/util/threading:all-srcs", "//pkg/util/tolerations:all-srcs", diff --git a/pkg/util/doc.go b/pkg/util/doc.go deleted file mode 100644 index f7e214f316..0000000000 --- a/pkg/util/doc.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -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 util implements various utility functions used in both testing and implementation -// of Kubernetes. Package util may not depend on any other package in the Kubernetes -// package tree. -package util // import "k8s.io/kubernetes/pkg/util" diff --git a/pkg/util/file/BUILD b/pkg/util/file/BUILD new file mode 100644 index 0000000000..1e8e96cee5 --- /dev/null +++ b/pkg/util/file/BUILD @@ -0,0 +1,27 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", +) + +go_library( + name = "go_default_library", + srcs = ["file.go"], + tags = ["automanaged"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/pkg/util/file/file.go b/pkg/util/file/file.go new file mode 100644 index 0000000000..70d26c4ef7 --- /dev/null +++ b/pkg/util/file/file.go @@ -0,0 +1,57 @@ +/* +Copyright 2017 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 file + +import ( + "os" +) + +// FileExists checks if specified file exists. +func FileExists(filename string) (bool, error) { + if _, err := os.Stat(filename); os.IsNotExist(err) { + return false, nil + } else if err != nil { + return false, err + } + return true, nil +} + +// FileOrSymlinkExists checks if specified file or symlink exists. +func FileOrSymlinkExists(filename string) (bool, error) { + if _, err := os.Lstat(filename); os.IsNotExist(err) { + return false, nil + } else if err != nil { + return false, err + } + return true, nil +} + +// ReadDirNoStat returns a string of files/directories contained +// in dirname without calling lstat on them. +func ReadDirNoStat(dirname string) ([]string, error) { + if dirname == "" { + dirname = "." + } + + f, err := os.Open(dirname) + if err != nil { + return nil, err + } + defer f.Close() + + return f.Readdirnames(-1) +} diff --git a/pkg/util/pointer/BUILD b/pkg/util/pointer/BUILD new file mode 100644 index 0000000000..ae1e6f269a --- /dev/null +++ b/pkg/util/pointer/BUILD @@ -0,0 +1,35 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", + "go_test", +) + +go_test( + name = "go_default_test", + srcs = ["pointer_test.go"], + library = ":go_default_library", + tags = ["automanaged"], +) + +go_library( + name = "go_default_library", + srcs = ["pointer.go"], + tags = ["automanaged"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/pkg/util/pointer/pointer.go b/pkg/util/pointer/pointer.go new file mode 100644 index 0000000000..1a10939bae --- /dev/null +++ b/pkg/util/pointer/pointer.go @@ -0,0 +1,62 @@ +/* +Copyright 2017 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 pointer + +import ( + "fmt" + "reflect" +) + +// AllPtrFieldsNil tests whether all pointer fields in a struct are nil. This is useful when, +// for example, an API struct is handled by plugins which need to distinguish +// "no plugin accepted this spec" from "this spec is empty". +// +// This function is only valid for structs and pointers to structs. Any other +// type will cause a panic. Passing a typed nil pointer will return true. +func AllPtrFieldsNil(obj interface{}) bool { + v := reflect.ValueOf(obj) + if !v.IsValid() { + panic(fmt.Sprintf("reflect.ValueOf() produced a non-valid Value for %#v", obj)) + } + if v.Kind() == reflect.Ptr { + if v.IsNil() { + return true + } + v = v.Elem() + } + for i := 0; i < v.NumField(); i++ { + if v.Field(i).Kind() == reflect.Ptr && !v.Field(i).IsNil() { + return false + } + } + return true +} + +// Int32Ptr returns a pointer to an int32 +func Int32Ptr(i int32) *int32 { + o := i + return &o +} + +// Int32PtrDerefOr dereference the int32 ptr and returns it i not nil, +// else returns def. +func Int32PtrDerefOr(ptr *int32, def int32) int32 { + if ptr != nil { + return *ptr + } + return def +} diff --git a/pkg/util/util_test.go b/pkg/util/pointer/pointer_test.go similarity index 84% rename from pkg/util/util_test.go rename to pkg/util/pointer/pointer_test.go index 5caddbd378..59a6bd5d14 100644 --- a/pkg/util/util_test.go +++ b/pkg/util/pointer/pointer_test.go @@ -1,5 +1,5 @@ /* -Copyright 2014 The Kubernetes Authors. +Copyright 2017 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. @@ -14,22 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. */ -package util +package pointer import ( "testing" - - "k8s.io/apimachinery/pkg/util/diff" ) -func TestStringDiff(t *testing.T) { - diff := diff.StringDiff("aaabb", "aaacc") - expect := "aaa\n\nA: bb\n\nB: cc\n\n" - if diff != expect { - t.Errorf("diff returned %v", diff) - } -} - func TestAllPtrFieldsNil(t *testing.T) { testCases := []struct { obj interface{} diff --git a/pkg/util/template/BUILD b/pkg/util/template/BUILD new file mode 100644 index 0000000000..139097947d --- /dev/null +++ b/pkg/util/template/BUILD @@ -0,0 +1,36 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", + "go_test", +) + +go_test( + name = "go_default_test", + srcs = ["template_test.go"], + library = ":go_default_library", + tags = ["automanaged"], + deps = ["//vendor/github.com/stretchr/testify/assert:go_default_library"], +) + +go_library( + name = "go_default_library", + srcs = ["template.go"], + tags = ["automanaged"], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/pkg/util/template.go b/pkg/util/template/template.go similarity index 89% rename from pkg/util/template.go rename to pkg/util/template/template.go index d09d7dc867..2c03911dc2 100644 --- a/pkg/util/template.go +++ b/pkg/util/template/template.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors. +Copyright 2017 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. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package util +package template import ( "bytes" @@ -41,6 +41,7 @@ func ExecuteTemplate(w io.Writer, templateText string, data interface{}) error { return t.Execute(w, data) } +// ExecuteTemplateToString executes templateText with data and output written to string. func ExecuteTemplateToString(templateText string, data interface{}) (string, error) { b := bytes.Buffer{} err := ExecuteTemplate(&b, templateText, data) diff --git a/pkg/util/template_test.go b/pkg/util/template/template_test.go similarity index 97% rename from pkg/util/template_test.go rename to pkg/util/template/template_test.go index 8f075d1adb..f6ce4d08c7 100644 --- a/pkg/util/template_test.go +++ b/pkg/util/template/template_test.go @@ -1,5 +1,5 @@ /* -Copyright 2015 The Kubernetes Authors. +Copyright 2017 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. @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package util +package template import ( "testing" diff --git a/pkg/util/util.go b/pkg/util/util.go deleted file mode 100644 index 389e145e84..0000000000 --- a/pkg/util/util.go +++ /dev/null @@ -1,140 +0,0 @@ -/* -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 util - -import ( - "fmt" - "os" - "reflect" - "regexp" -) - -// Takes a list of strings and compiles them into a list of regular expressions -func CompileRegexps(regexpStrings []string) ([]*regexp.Regexp, error) { - regexps := []*regexp.Regexp{} - for _, regexpStr := range regexpStrings { - r, err := regexp.Compile(regexpStr) - if err != nil { - return []*regexp.Regexp{}, err - } - regexps = append(regexps, r) - } - return regexps, nil -} - -// Detects if using systemd as the init system -// Please note that simply reading /proc/1/cmdline can be misleading because -// some installation of various init programs can automatically make /sbin/init -// a symlink or even a renamed version of their main program. -// TODO(dchen1107): realiably detects the init system using on the system: -// systemd, upstart, initd, etc. -func UsingSystemdInitSystem() bool { - if _, err := os.Stat("/run/systemd/system"); err == nil { - return true - } - - return false -} - -// Tests whether all pointer fields in a struct are nil. This is useful when, -// for example, an API struct is handled by plugins which need to distinguish -// "no plugin accepted this spec" from "this spec is empty". -// -// This function is only valid for structs and pointers to structs. Any other -// type will cause a panic. Passing a typed nil pointer will return true. -func AllPtrFieldsNil(obj interface{}) bool { - v := reflect.ValueOf(obj) - if !v.IsValid() { - panic(fmt.Sprintf("reflect.ValueOf() produced a non-valid Value for %#v", obj)) - } - if v.Kind() == reflect.Ptr { - if v.IsNil() { - return true - } - v = v.Elem() - } - for i := 0; i < v.NumField(); i++ { - if v.Field(i).Kind() == reflect.Ptr && !v.Field(i).IsNil() { - return false - } - } - return true -} - -func FileExists(filename string) (bool, error) { - if _, err := os.Stat(filename); os.IsNotExist(err) { - return false, nil - } else if err != nil { - return false, err - } - return true, nil -} - -func FileOrSymlinkExists(filename string) (bool, error) { - if _, err := os.Lstat(filename); os.IsNotExist(err) { - return false, nil - } else if err != nil { - return false, err - } - return true, nil -} - -// ReadDirNoStat returns a string of files/directories contained -// in dirname without calling lstat on them. -func ReadDirNoStat(dirname string) ([]string, error) { - if dirname == "" { - dirname = "." - } - - f, err := os.Open(dirname) - if err != nil { - return nil, err - } - defer f.Close() - - return f.Readdirnames(-1) -} - -// IntPtr returns a pointer to an int -func IntPtr(i int) *int { - o := i - return &o -} - -// Int32Ptr returns a pointer to an int32 -func Int32Ptr(i int32) *int32 { - o := i - return &o -} - -// IntPtrDerefOr dereference the int ptr and returns it i not nil, -// else returns def. -func IntPtrDerefOr(ptr *int, def int) int { - if ptr != nil { - return *ptr - } - return def -} - -// Int32PtrDerefOr dereference the int32 ptr and returns it i not nil, -// else returns def. -func Int32PtrDerefOr(ptr *int32, def int32) int32 { - if ptr != nil { - return *ptr - } - return def -} diff --git a/pkg/volume/host_path/BUILD b/pkg/volume/host_path/BUILD index 63fb4d6871..ecc3b5e96b 100644 --- a/pkg/volume/host_path/BUILD +++ b/pkg/volume/host_path/BUILD @@ -32,7 +32,7 @@ go_test( library = ":go_default_library", tags = ["automanaged"], deps = [ - "//pkg/util:go_default_library", + "//pkg/util/file:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/testing:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", diff --git a/pkg/volume/host_path/host_path_test.go b/pkg/volume/host_path/host_path_test.go index 98b3f4401a..a16b2ee89a 100644 --- a/pkg/volume/host_path/host_path_test.go +++ b/pkg/volume/host_path/host_path_test.go @@ -29,7 +29,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/client-go/kubernetes/fake" - "k8s.io/kubernetes/pkg/util" + utilfile "k8s.io/kubernetes/pkg/util/file" "k8s.io/kubernetes/pkg/volume" volumetest "k8s.io/kubernetes/pkg/volume/testing" ) @@ -108,7 +108,7 @@ func TestDeleter(t *testing.T) { if err := deleter.Delete(); err != nil { t.Errorf("Mock Recycler expected to return nil but got %s", err) } - if exists, _ := util.FileExists("foo"); exists { + if exists, _ := utilfile.FileExists("foo"); exists { t.Errorf("Temp path expected to be deleted, but was found at %s", tempPath) } } diff --git a/staging/src/k8s.io/apimachinery/pkg/util/diff/diff_test.go b/staging/src/k8s.io/apimachinery/pkg/util/diff/diff_test.go index 1f3fcb34b7..2b72c2f531 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/diff/diff_test.go +++ b/staging/src/k8s.io/apimachinery/pkg/util/diff/diff_test.go @@ -86,3 +86,11 @@ object.A: } } } + +func TestStringDiff(t *testing.T) { + diff := StringDiff("aaabb", "aaacc") + expect := "aaa\n\nA: bb\n\nB: cc\n\n" + if diff != expect { + t.Errorf("diff returned %v", diff) + } +} diff --git a/staging/src/k8s.io/apimachinery/pkg/util/json/BUILD b/staging/src/k8s.io/apimachinery/pkg/util/json/BUILD index 68ca233394..ac959be2d3 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/json/BUILD +++ b/staging/src/k8s.io/apimachinery/pkg/util/json/BUILD @@ -8,15 +8,15 @@ load( "go_test", ) +go_library( + name = "go_default_library", + srcs = ["json.go"], + tags = ["automanaged"], +) + go_test( name = "go_default_test", srcs = ["json_test.go"], library = ":go_default_library", tags = ["automanaged"], ) - -go_library( - name = "go_default_library", - srcs = ["json.go"], - tags = ["automanaged"], -) diff --git a/test/e2e/framework/BUILD b/test/e2e/framework/BUILD index e74bd85fa1..d330c725e9 100644 --- a/test/e2e/framework/BUILD +++ b/test/e2e/framework/BUILD @@ -70,8 +70,8 @@ go_library( "//pkg/kubelet/util/format:go_default_library", "//pkg/master/ports:go_default_library", "//pkg/ssh:go_default_library", - "//pkg/util:go_default_library", "//pkg/util/exec:go_default_library", + "//pkg/util/file:go_default_library", "//pkg/util/labels:go_default_library", "//pkg/util/system:go_default_library", "//pkg/util/version:go_default_library", diff --git a/test/e2e/framework/ingress_utils.go b/test/e2e/framework/ingress_utils.go index 61ec64647e..bf289b8cb4 100644 --- a/test/e2e/framework/ingress_utils.go +++ b/test/e2e/framework/ingress_utils.go @@ -48,8 +48,8 @@ import ( "k8s.io/apimachinery/pkg/util/wait" clientset "k8s.io/client-go/kubernetes" gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce" - "k8s.io/kubernetes/pkg/util" utilexec "k8s.io/kubernetes/pkg/util/exec" + utilfile "k8s.io/kubernetes/pkg/util/file" "k8s.io/kubernetes/test/e2e/manifest" testutils "k8s.io/kubernetes/test/utils" @@ -823,7 +823,7 @@ func (j *IngressTestJig) CreateIngress(manifestPath, ns string, ingAnnotations m Logf("creating service") RunKubectlOrDie("create", "-f", mkpath("svc.yaml"), fmt.Sprintf("--namespace=%v", ns)) - if exists, _ := util.FileExists(mkpath("secret.yaml")); exists { + if exists, _ := utilfile.FileExists(mkpath("secret.yaml")); exists { Logf("creating secret") RunKubectlOrDie("create", "-f", mkpath("secret.yaml"), fmt.Sprintf("--namespace=%v", ns)) } diff --git a/test/e2e/workload/BUILD b/test/e2e/workload/BUILD index a7fe3e61f1..8cef02c5d8 100644 --- a/test/e2e/workload/BUILD +++ b/test/e2e/workload/BUILD @@ -38,7 +38,7 @@ go_library( "//pkg/controller/replication:go_default_library", "//pkg/kubectl:go_default_library", "//pkg/master/ports:go_default_library", - "//pkg/util:go_default_library", + "//pkg/util/pointer:go_default_library", "//plugin/pkg/scheduler/schedulercache:go_default_library", "//test/e2e/framework:go_default_library", "//test/utils:go_default_library", diff --git a/test/e2e/workload/deployment.go b/test/e2e/workload/deployment.go index f4b6526a16..84eceeac3f 100644 --- a/test/e2e/workload/deployment.go +++ b/test/e2e/workload/deployment.go @@ -41,7 +41,7 @@ import ( "k8s.io/kubernetes/pkg/controller" deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util" "k8s.io/kubernetes/pkg/kubectl" - "k8s.io/kubernetes/pkg/util" + utilpointer "k8s.io/kubernetes/pkg/util/pointer" "k8s.io/kubernetes/test/e2e/framework" testutil "k8s.io/kubernetes/test/utils" ) @@ -370,7 +370,7 @@ func testDeploymentCleanUpPolicy(f *framework.Framework) { } rsName := "test-cleanup-controller" replicas := int32(1) - revisionHistoryLimit := util.Int32Ptr(0) + revisionHistoryLimit := utilpointer.Int32Ptr(0) _, err := c.Extensions().ReplicaSets(ns).Create(newRS(rsName, replicas, rsPodLabels, NginxImageName, NginxImage)) Expect(err).NotTo(HaveOccurred())