Merge pull request #50162 from luxas/kubeadm_clientset_iface

Automatic merge from submit-queue (batch tested with PRs 47416, 47408, 49697, 49860, 50162)

kubeadm: Replace *clientset.Clientset with clientset.Interface

**What this PR does / why we need it**:

Needed for https://github.com/kubernetes/kubernetes/pull/48899
We should always use `clientset.Interface` instead of `*clientset.Clientset`, for better testability and all the other benefits of using an interface.

**Which issue this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close that issue when PR gets merged)*: fixes #

**Special notes for your reviewer**:
Should be straightforward to merge

**Release note**:

```release-note
NONE
```
@timothysc @dmmcquay @pipejakob
This commit is contained in:
Kubernetes Submit Queue 2017-08-05 03:23:01 -07:00 committed by GitHub
commit bb99ccc178
8 changed files with 26 additions and 26 deletions

View File

@ -193,7 +193,7 @@ func NewCmdTokenGenerate(out io.Writer) *cobra.Command {
} }
// RunCreateToken generates a new bootstrap token and stores it as a secret on the server. // RunCreateToken generates a new bootstrap token and stores it as a secret on the server.
func RunCreateToken(out io.Writer, client *clientset.Clientset, token string, tokenDuration time.Duration, usages []string, description string) error { func RunCreateToken(out io.Writer, client clientset.Interface, token string, tokenDuration time.Duration, usages []string, description string) error {
if len(token) == 0 { if len(token) == 0 {
var err error var err error
@ -230,7 +230,7 @@ func RunGenerateToken(out io.Writer) error {
} }
// RunListTokens lists details on all existing bootstrap tokens on the server. // RunListTokens lists details on all existing bootstrap tokens on the server.
func RunListTokens(out io.Writer, errW io.Writer, client *clientset.Clientset) error { func RunListTokens(out io.Writer, errW io.Writer, client clientset.Interface) error {
// First, build our selector for bootstrap tokens only // First, build our selector for bootstrap tokens only
tokenSelector := fields.SelectorFromSet( tokenSelector := fields.SelectorFromSet(
map[string]string{ map[string]string{
@ -312,7 +312,7 @@ func RunListTokens(out io.Writer, errW io.Writer, client *clientset.Clientset) e
} }
// RunDeleteToken removes a bootstrap token from the server. // RunDeleteToken removes a bootstrap token from the server.
func RunDeleteToken(out io.Writer, client *clientset.Clientset, tokenIdOrToken string) error { func RunDeleteToken(out io.Writer, client clientset.Interface, tokenIdOrToken string) error {
// Assume the given first argument is a token id and try to parse it // Assume the given first argument is a token id and try to parse it
tokenId := tokenIdOrToken tokenId := tokenIdOrToken
if err := tokenutil.ParseTokenID(tokenIdOrToken); err != nil { if err := tokenutil.ParseTokenID(tokenIdOrToken); err != nil {

View File

@ -24,15 +24,15 @@ import (
) )
// ValidateAPIServer makes sure the server we're connecting to supports the Beta Certificates API // ValidateAPIServer makes sure the server we're connecting to supports the Beta Certificates API
func ValidateAPIServer(client *clientset.Clientset) error { func ValidateAPIServer(client clientset.Interface) error {
version, err := client.DiscoveryClient.ServerVersion() version, err := client.Discovery().ServerVersion()
if err != nil { if err != nil {
return fmt.Errorf("failed to check server version: %v", err) return fmt.Errorf("failed to check server version: %v", err)
} }
fmt.Printf("[bootstrap] Detected server version: %s\n", version.String()) fmt.Printf("[bootstrap] Detected server version: %s\n", version.String())
// Check certificates API. If the server supports the version of the Certificates API we're using, we're good to go // Check certificates API. If the server supports the version of the Certificates API we're using, we're good to go
serverGroups, err := client.DiscoveryClient.ServerGroups() serverGroups, err := client.Discovery().ServerGroups()
if err != nil { if err != nil {
return fmt.Errorf("certificate API check failed: failed to retrieve a list of supported API objects [%v]", err) return fmt.Errorf("certificate API check failed: failed to retrieve a list of supported API objects [%v]", err)
} }

View File

@ -35,7 +35,7 @@ import (
) )
// CreateEssentialAddons creates the kube-proxy and kube-dns addons // CreateEssentialAddons creates the kube-proxy and kube-dns addons
func CreateEssentialAddons(cfg *kubeadmapi.MasterConfiguration, client *clientset.Clientset) error { func CreateEssentialAddons(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error {
proxyConfigMapBytes, err := kubeadmutil.ParseTemplate(KubeProxyConfigMap, struct{ MasterEndpoint string }{ proxyConfigMapBytes, err := kubeadmutil.ParseTemplate(KubeProxyConfigMap, struct{ MasterEndpoint string }{
// Fetch this value from the kubeconfig file // Fetch this value from the kubeconfig file
MasterEndpoint: fmt.Sprintf("https://%s:%d", cfg.API.AdvertiseAddress, cfg.API.BindPort), MasterEndpoint: fmt.Sprintf("https://%s:%d", cfg.API.AdvertiseAddress, cfg.API.BindPort),
@ -94,7 +94,7 @@ func CreateEssentialAddons(cfg *kubeadmapi.MasterConfiguration, client *clientse
return nil return nil
} }
func CreateKubeProxyAddon(configMapBytes, daemonSetbytes []byte, client *clientset.Clientset) error { func CreateKubeProxyAddon(configMapBytes, daemonSetbytes []byte, client clientset.Interface) error {
kubeproxyConfigMap := &v1.ConfigMap{} kubeproxyConfigMap := &v1.ConfigMap{}
if err := kuberuntime.DecodeInto(api.Codecs.UniversalDecoder(), configMapBytes, kubeproxyConfigMap); err != nil { if err := kuberuntime.DecodeInto(api.Codecs.UniversalDecoder(), configMapBytes, kubeproxyConfigMap); err != nil {
return fmt.Errorf("unable to decode kube-proxy configmap %v", err) return fmt.Errorf("unable to decode kube-proxy configmap %v", err)
@ -127,7 +127,7 @@ func CreateKubeProxyAddon(configMapBytes, daemonSetbytes []byte, client *clients
return nil return nil
} }
func CreateKubeDNSAddon(deploymentBytes, serviceBytes []byte, client *clientset.Clientset) error { func CreateKubeDNSAddon(deploymentBytes, serviceBytes []byte, client clientset.Interface) error {
kubednsDeployment := &extensions.Deployment{} kubednsDeployment := &extensions.Deployment{}
if err := kuberuntime.DecodeInto(api.Codecs.UniversalDecoder(), deploymentBytes, kubednsDeployment); err != nil { if err := kuberuntime.DecodeInto(api.Codecs.UniversalDecoder(), deploymentBytes, kubednsDeployment); err != nil {
return fmt.Errorf("unable to decode kube-dns deployment %v", err) return fmt.Errorf("unable to decode kube-dns deployment %v", err)
@ -164,7 +164,7 @@ func CreateKubeDNSAddon(deploymentBytes, serviceBytes []byte, client *clientset.
} }
// getDNSIP fetches the kubernetes service's ClusterIP and appends a "0" to it in order to get the DNS IP // getDNSIP fetches the kubernetes service's ClusterIP and appends a "0" to it in order to get the DNS IP
func getDNSIP(client *clientset.Clientset) (net.IP, error) { func getDNSIP(client clientset.Interface) (net.IP, error) {
k8ssvc, err := client.CoreV1().Services(metav1.NamespaceDefault).Get("kubernetes", metav1.GetOptions{}) k8ssvc, err := client.CoreV1().Services(metav1.NamespaceDefault).Get("kubernetes", metav1.GetOptions{})
if err != nil { if err != nil {
return nil, fmt.Errorf("couldn't fetch information about the kubernetes service: %v", err) return nil, fmt.Errorf("couldn't fetch information about the kubernetes service: %v", err)

View File

@ -74,7 +74,7 @@ func CreateServiceAccounts(clientset clientset.Interface) error {
} }
// CreateRBACRules creates the essential RBAC rules for a minimally set-up cluster // CreateRBACRules creates the essential RBAC rules for a minimally set-up cluster
func CreateRBACRules(clientset *clientset.Clientset, k8sVersion *version.Version) error { func CreateRBACRules(clientset clientset.Interface, k8sVersion *version.Version) error {
if err := createRoles(clientset); err != nil { if err := createRoles(clientset); err != nil {
return err return err
} }
@ -95,7 +95,7 @@ func CreateRBACRules(clientset *clientset.Clientset, k8sVersion *version.Version
return nil return nil
} }
func createRoles(clientset *clientset.Clientset) error { func createRoles(clientset clientset.Interface) error {
roles := []rbac.Role{ roles := []rbac.Role{
{ {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
@ -121,7 +121,7 @@ func createRoles(clientset *clientset.Clientset) error {
return nil return nil
} }
func createRoleBindings(clientset *clientset.Clientset) error { func createRoleBindings(clientset clientset.Interface) error {
roleBindings := []rbac.RoleBinding{ roleBindings := []rbac.RoleBinding{
{ {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
@ -156,7 +156,7 @@ func createRoleBindings(clientset *clientset.Clientset) error {
return nil return nil
} }
func createClusterRoles(clientset *clientset.Clientset) error { func createClusterRoles(clientset clientset.Interface) error {
clusterRoles := []rbac.ClusterRole{ clusterRoles := []rbac.ClusterRole{
{ {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
@ -182,7 +182,7 @@ func createClusterRoles(clientset *clientset.Clientset) error {
return nil return nil
} }
func createClusterRoleBindings(clientset *clientset.Clientset) error { func createClusterRoleBindings(clientset clientset.Interface) error {
clusterRoleBindings := []rbac.ClusterRoleBinding{ clusterRoleBindings := []rbac.ClusterRoleBinding{
{ {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
@ -249,7 +249,7 @@ func createClusterRoleBindings(clientset *clientset.Clientset) error {
return nil return nil
} }
func deletePermissiveNodesBindingWhenUsingNodeAuthorization(clientset *clientset.Clientset, k8sVersion *version.Version) error { func deletePermissiveNodesBindingWhenUsingNodeAuthorization(clientset clientset.Interface, k8sVersion *version.Version) error {
nodesRoleBinding, err := clientset.RbacV1beta1().ClusterRoleBindings().Get(kubeadmconstants.NodesClusterRoleBinding, metav1.GetOptions{}) nodesRoleBinding, err := clientset.RbacV1beta1().ClusterRoleBindings().Get(kubeadmconstants.NodesClusterRoleBinding, metav1.GetOptions{})
if err != nil { if err != nil {

View File

@ -54,7 +54,7 @@ const (
// 7. The self-hosted containers should now step up and take over. // 7. The self-hosted containers should now step up and take over.
// 8. In order to avoid race conditions, we're still making sure the API /healthz endpoint is healthy // 8. In order to avoid race conditions, we're still making sure the API /healthz endpoint is healthy
// 9. Do that for the kube-apiserver, kube-controller-manager and kube-scheduler in a loop // 9. Do that for the kube-apiserver, kube-controller-manager and kube-scheduler in a loop
func CreateSelfHostedControlPlane(cfg *kubeadmapi.MasterConfiguration, client *clientset.Clientset) error { func CreateSelfHostedControlPlane(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error {
if err := createTLSSecrets(cfg, client); err != nil { if err := createTLSSecrets(cfg, client); err != nil {
return err return err

View File

@ -220,7 +220,7 @@ func controllerManagerProjectedVolume(cfg *kubeadmapi.MasterConfiguration) v1.Vo
} }
} }
func createTLSSecrets(cfg *kubeadmapi.MasterConfiguration, client *clientset.Clientset) error { func createTLSSecrets(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error {
for _, tlsKeyPair := range getTLSKeyPairs() { for _, tlsKeyPair := range getTLSKeyPairs() {
secret, err := createTLSSecretFromFiles( secret, err := createTLSSecretFromFiles(
tlsKeyPair.name, tlsKeyPair.name,
@ -240,7 +240,7 @@ func createTLSSecrets(cfg *kubeadmapi.MasterConfiguration, client *clientset.Cli
return nil return nil
} }
func createOpaqueSecrets(cfg *kubeadmapi.MasterConfiguration, client *clientset.Clientset) error { func createOpaqueSecrets(cfg *kubeadmapi.MasterConfiguration, client clientset.Interface) error {
files := []string{ files := []string{
kubeadmconstants.SchedulerKubeConfigFileName, kubeadmconstants.SchedulerKubeConfigFileName,
kubeadmconstants.ControllerManagerKubeConfigFileName, kubeadmconstants.ControllerManagerKubeConfigFileName,

View File

@ -33,12 +33,12 @@ import (
const tokenCreateRetries = 5 const tokenCreateRetries = 5
// CreateNewToken tries to create a token and fails if one with the same ID already exists // CreateNewToken tries to create a token and fails if one with the same ID already exists
func CreateNewToken(client *clientset.Clientset, token string, tokenDuration time.Duration, usages []string, description string) error { func CreateNewToken(client clientset.Interface, token string, tokenDuration time.Duration, usages []string, description string) error {
return UpdateOrCreateToken(client, token, true, tokenDuration, usages, description) return UpdateOrCreateToken(client, token, true, tokenDuration, usages, description)
} }
// UpdateOrCreateToken attempts to update a token with the given ID, or create if it does not already exist. // UpdateOrCreateToken attempts to update a token with the given ID, or create if it does not already exist.
func UpdateOrCreateToken(client *clientset.Clientset, token string, failIfExists bool, tokenDuration time.Duration, usages []string, description string) error { func UpdateOrCreateToken(client clientset.Interface, token string, failIfExists bool, tokenDuration time.Duration, usages []string, description string) error {
tokenID, tokenSecret, err := tokenutil.ParseToken(token) tokenID, tokenSecret, err := tokenutil.ParseToken(token)
if err != nil { if err != nil {
return err return err
@ -46,14 +46,14 @@ func UpdateOrCreateToken(client *clientset.Clientset, token string, failIfExists
secretName := fmt.Sprintf("%s%s", bootstrapapi.BootstrapTokenSecretPrefix, tokenID) secretName := fmt.Sprintf("%s%s", bootstrapapi.BootstrapTokenSecretPrefix, tokenID)
var lastErr error var lastErr error
for i := 0; i < tokenCreateRetries; i++ { for i := 0; i < tokenCreateRetries; i++ {
secret, err := client.Secrets(metav1.NamespaceSystem).Get(secretName, metav1.GetOptions{}) secret, err := client.CoreV1().Secrets(metav1.NamespaceSystem).Get(secretName, metav1.GetOptions{})
if err == nil { if err == nil {
if failIfExists { if failIfExists {
return fmt.Errorf("a token with id %q already exists", tokenID) return fmt.Errorf("a token with id %q already exists", tokenID)
} }
// Secret with this ID already exists, update it: // Secret with this ID already exists, update it:
secret.Data = encodeTokenSecretData(tokenID, tokenSecret, tokenDuration, usages, description) secret.Data = encodeTokenSecretData(tokenID, tokenSecret, tokenDuration, usages, description)
if _, err := client.Secrets(metav1.NamespaceSystem).Update(secret); err == nil { if _, err := client.CoreV1().Secrets(metav1.NamespaceSystem).Update(secret); err == nil {
return nil return nil
} else { } else {
lastErr = err lastErr = err
@ -70,7 +70,7 @@ func UpdateOrCreateToken(client *clientset.Clientset, token string, failIfExists
Type: v1.SecretType(bootstrapapi.SecretTypeBootstrapToken), Type: v1.SecretType(bootstrapapi.SecretTypeBootstrapToken),
Data: encodeTokenSecretData(tokenID, tokenSecret, tokenDuration, usages, description), Data: encodeTokenSecretData(tokenID, tokenSecret, tokenDuration, usages, description),
} }
if _, err := client.Secrets(metav1.NamespaceSystem).Create(secret); err == nil { if _, err := client.CoreV1().Secrets(metav1.NamespaceSystem).Create(secret); err == nil {
return nil return nil
} else { } else {
lastErr = err lastErr = err

View File

@ -43,7 +43,7 @@ func CreateClientAndWaitForAPI(file string) (*clientset.Clientset, error) {
} }
// WaitForAPI waits for the API Server's /healthz endpoint to report "ok" // WaitForAPI waits for the API Server's /healthz endpoint to report "ok"
func WaitForAPI(client *clientset.Clientset) { func WaitForAPI(client clientset.Interface) {
start := time.Now() start := time.Now()
wait.PollInfinite(kubeadmconstants.APICallRetryInterval, func() (bool, error) { wait.PollInfinite(kubeadmconstants.APICallRetryInterval, func() (bool, error) {
healthStatus := 0 healthStatus := 0
@ -59,7 +59,7 @@ func WaitForAPI(client *clientset.Clientset) {
// WaitForPodsWithLabel will lookup pods with the given label and wait until they are all // WaitForPodsWithLabel will lookup pods with the given label and wait until they are all
// reporting status as running. // reporting status as running.
func WaitForPodsWithLabel(client *clientset.Clientset, labelKeyValPair string) { func WaitForPodsWithLabel(client clientset.Interface, labelKeyValPair string) {
// TODO: Implement a timeout // TODO: Implement a timeout
// TODO: Implement a verbosity switch // TODO: Implement a verbosity switch
wait.PollInfinite(kubeadmconstants.APICallRetryInterval, func() (bool, error) { wait.PollInfinite(kubeadmconstants.APICallRetryInterval, func() (bool, error) {