diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 87feb87a..66fc9488 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -464,711 +464,715 @@ }, { "ImportPath": "k8s.io/client-go/discovery", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/discovery/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/admissionregistration", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/admissionregistration/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/apps", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/apps/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/apps/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/apps/v1beta2", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/auditregistration", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/auditregistration/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/autoscaling", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/autoscaling/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/autoscaling/v2beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/autoscaling/v2beta2", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/batch", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/batch/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/batch/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/batch/v2alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/certificates", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/certificates/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/coordination", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/coordination/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/coordination/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/core", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/core/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/events", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/events/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/extensions", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/extensions/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/internalinterfaces", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/networking", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/networking/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/networking/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/policy", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/policy/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/rbac", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/rbac/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/rbac/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/rbac/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/scheduling", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/scheduling/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/scheduling/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/scheduling/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/settings", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/settings/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/storage", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/storage/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/storage/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/informers/storage/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/scheme", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/admissionregistration/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/apps/v1beta2/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/auditregistration/v1alpha1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authentication/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/authorization/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/autoscaling/v2beta2/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/batch/v2alpha1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/certificates/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/coordination/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/coordination/v1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/coordination/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/coordination/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/core/v1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/events/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/events/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/extensions/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/networking/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/policy/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/rbac/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/scheduling/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/settings/v1alpha1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1alpha1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/kubernetes/typed/storage/v1beta1/fake", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/admissionregistration/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/apps/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/apps/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/apps/v1beta2", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/auditregistration/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/autoscaling/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/autoscaling/v2beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/autoscaling/v2beta2", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/batch/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/batch/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/batch/v2alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/certificates/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/coordination/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/coordination/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/core/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/events/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/extensions/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/networking/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/networking/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/policy/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/rbac/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/rbac/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/rbac/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/scheduling/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/scheduling/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/scheduling/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/settings/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/storage/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/storage/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/listers/storage/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/pkg/apis/clientauthentication", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/pkg/apis/clientauthentication/v1alpha1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/pkg/apis/clientauthentication/v1beta1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/pkg/version", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/plugin/pkg/client/auth/exec", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/rest", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/rest/watch", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/testing", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/tools/auth", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/tools/cache", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/tools/clientcmd", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/tools/clientcmd/api", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/tools/clientcmd/api/latest", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/tools/clientcmd/api/v1", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/tools/metrics", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/tools/pager", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/tools/record", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/tools/record/util", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/tools/reference", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/transport", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/util/cert", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/util/connrotation", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/util/flowcontrol", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/util/homedir", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" + }, + { + "ImportPath": "k8s.io/client-go/util/keyutil", + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/util/retry", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/client-go/util/workqueue", - "Rev": "12a0647ebb467f3bbc9ed7ce978bc6b1be26b9d1" + "Rev": "10c60a26bb372108798b6f3b92f4ecc24a55c1f0" }, { "ImportPath": "k8s.io/klog", diff --git a/vendor/k8s.io/client-go/util/cert/cert.go b/vendor/k8s.io/client-go/util/cert/cert.go index 7652fcc3..9fd097af 100644 --- a/vendor/k8s.io/client-go/util/cert/cert.go +++ b/vendor/k8s.io/client-go/util/cert/cert.go @@ -19,8 +19,6 @@ package cert import ( "bytes" "crypto" - "crypto/ecdsa" - "crypto/elliptic" cryptorand "crypto/rand" "crypto/rsa" "crypto/x509" @@ -33,11 +31,11 @@ import ( "path" "strings" "time" + + "k8s.io/client-go/util/keyutil" ) -const ( - duration365d = time.Hour * 24 * 365 -) +const duration365d = time.Hour * 24 * 365 // Config contains the basic fields required for creating a certificate type Config struct { @@ -78,25 +76,6 @@ func NewSelfSignedCACert(cfg Config, key crypto.Signer) (*x509.Certificate, erro return x509.ParseCertificate(certDERBytes) } -// MakeEllipticPrivateKeyPEM creates an ECDSA private key -func MakeEllipticPrivateKeyPEM() ([]byte, error) { - privateKey, err := ecdsa.GenerateKey(elliptic.P256(), cryptorand.Reader) - if err != nil { - return nil, err - } - - derBytes, err := x509.MarshalECPrivateKey(privateKey) - if err != nil { - return nil, err - } - - privateKeyPemBlock := &pem.Block{ - Type: ECPrivateKeyBlockType, - Bytes: derBytes, - } - return pem.EncodeToMemory(privateKeyPemBlock), nil -} - // GenerateSelfSignedCertKey creates a self-signed certificate and key for the given host. // Host may be an IP or a DNS name // You may also specify additional subject alt names (either ip or dns names) for the certificate. @@ -202,7 +181,7 @@ func GenerateSelfSignedCertKeyWithFixtures(host string, alternateIPs []net.IP, a // Generate key keyBuffer := bytes.Buffer{} - if err := pem.Encode(&keyBuffer, &pem.Block{Type: RSAPrivateKeyBlockType, Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { + if err := pem.Encode(&keyBuffer, &pem.Block{Type: keyutil.RSAPrivateKeyBlockType, Bytes: x509.MarshalPKCS1PrivateKey(priv)}); err != nil { return nil, nil, err } diff --git a/vendor/k8s.io/client-go/util/cert/io.go b/vendor/k8s.io/client-go/util/cert/io.go index a57bf09d..5efb2489 100644 --- a/vendor/k8s.io/client-go/util/cert/io.go +++ b/vendor/k8s.io/client-go/util/cert/io.go @@ -17,11 +17,7 @@ limitations under the License. package cert import ( - "crypto" - "crypto/ecdsa" - "crypto/rsa" "crypto/x509" - "encoding/pem" "fmt" "io/ioutil" "os" @@ -73,60 +69,6 @@ func WriteCert(certPath string, data []byte) error { return ioutil.WriteFile(certPath, data, os.FileMode(0644)) } -// WriteKey writes the pem-encoded key data to keyPath. -// The key file will be created with file mode 0600. -// If the key file already exists, it will be overwritten. -// The parent directory of the keyPath will be created as needed with file mode 0755. -func WriteKey(keyPath string, data []byte) error { - if err := os.MkdirAll(filepath.Dir(keyPath), os.FileMode(0755)); err != nil { - return err - } - return ioutil.WriteFile(keyPath, data, os.FileMode(0600)) -} - -// LoadOrGenerateKeyFile looks for a key in the file at the given path. If it -// can't find one, it will generate a new key and store it there. -func LoadOrGenerateKeyFile(keyPath string) (data []byte, wasGenerated bool, err error) { - loadedData, err := ioutil.ReadFile(keyPath) - // Call verifyKeyData to ensure the file wasn't empty/corrupt. - if err == nil && verifyKeyData(loadedData) { - return loadedData, false, err - } - if !os.IsNotExist(err) { - return nil, false, fmt.Errorf("error loading key from %s: %v", keyPath, err) - } - - generatedData, err := MakeEllipticPrivateKeyPEM() - if err != nil { - return nil, false, fmt.Errorf("error generating key: %v", err) - } - if err := WriteKey(keyPath, generatedData); err != nil { - return nil, false, fmt.Errorf("error writing key to %s: %v", keyPath, err) - } - return generatedData, true, nil -} - -// MarshalPrivateKeyToPEM converts a known private key type of RSA or ECDSA to -// a PEM encoded block or returns an error. -func MarshalPrivateKeyToPEM(privateKey crypto.PrivateKey) ([]byte, error) { - switch t := privateKey.(type) { - case *ecdsa.PrivateKey: - derBytes, err := x509.MarshalECPrivateKey(t) - if err != nil { - return nil, err - } - privateKeyPemBlock := &pem.Block{ - Type: ECPrivateKeyBlockType, - Bytes: derBytes, - } - return pem.EncodeToMemory(privateKeyPemBlock), nil - case *rsa.PrivateKey: - return EncodePrivateKeyPEM(t), nil - default: - return nil, fmt.Errorf("private key is not a recognized type: %T", privateKey) - } -} - // NewPool returns an x509.CertPool containing the certificates in the given PEM-encoded file. // Returns an error if the file could not be read, a certificate could not be parsed, or if the file does not contain any certificates func NewPool(filename string) (*x509.CertPool, error) { @@ -154,40 +96,3 @@ func CertsFromFile(file string) ([]*x509.Certificate, error) { } return certs, nil } - -// PrivateKeyFromFile returns the private key in rsa.PrivateKey or ecdsa.PrivateKey format from a given PEM-encoded file. -// Returns an error if the file could not be read or if the private key could not be parsed. -func PrivateKeyFromFile(file string) (interface{}, error) { - data, err := ioutil.ReadFile(file) - if err != nil { - return nil, err - } - key, err := ParsePrivateKeyPEM(data) - if err != nil { - return nil, fmt.Errorf("error reading private key file %s: %v", file, err) - } - return key, nil -} - -// PublicKeysFromFile returns the public keys in rsa.PublicKey or ecdsa.PublicKey format from a given PEM-encoded file. -// Reads public keys from both public and private key files. -func PublicKeysFromFile(file string) ([]interface{}, error) { - data, err := ioutil.ReadFile(file) - if err != nil { - return nil, err - } - keys, err := ParsePublicKeysPEM(data) - if err != nil { - return nil, fmt.Errorf("error reading public key file %s: %v", file, err) - } - return keys, nil -} - -// verifyKeyData returns true if the provided data appears to be a valid private key. -func verifyKeyData(data []byte) bool { - if len(data) == 0 { - return false - } - _, err := ParsePrivateKeyPEM(data) - return err == nil -} diff --git a/vendor/k8s.io/client-go/util/cert/pem.go b/vendor/k8s.io/client-go/util/cert/pem.go index 4c5b7c18..9185e2e2 100644 --- a/vendor/k8s.io/client-go/util/cert/pem.go +++ b/vendor/k8s.io/client-go/util/cert/pem.go @@ -17,113 +17,18 @@ limitations under the License. package cert import ( - "crypto/ecdsa" - "crypto/rsa" "crypto/x509" "encoding/pem" "errors" - "fmt" ) const ( - - // ECPrivateKeyBlockType is a possible value for pem.Block.Type. - ECPrivateKeyBlockType = "EC PRIVATE KEY" - // RSAPrivateKeyBlockType is a possible value for pem.Block.Type. - RSAPrivateKeyBlockType = "RSA PRIVATE KEY" - // CertificateRequestBlockType is a possible value for pem.Block.Type. - CertificateRequestBlockType = "CERTIFICATE REQUEST" // CertificateBlockType is a possible value for pem.Block.Type. CertificateBlockType = "CERTIFICATE" - // PrivateKeyBlockType is a possible value for pem.Block.Type. - PrivateKeyBlockType = "PRIVATE KEY" + // CertificateRequestBlockType is a possible value for pem.Block.Type. + CertificateRequestBlockType = "CERTIFICATE REQUEST" ) -// ParsePrivateKeyPEM returns a private key parsed from a PEM block in the supplied data. -// Recognizes PEM blocks for "EC PRIVATE KEY", "RSA PRIVATE KEY", or "PRIVATE KEY" -func ParsePrivateKeyPEM(keyData []byte) (interface{}, error) { - var privateKeyPemBlock *pem.Block - for { - privateKeyPemBlock, keyData = pem.Decode(keyData) - if privateKeyPemBlock == nil { - break - } - - switch privateKeyPemBlock.Type { - case ECPrivateKeyBlockType: - // ECDSA Private Key in ASN.1 format - if key, err := x509.ParseECPrivateKey(privateKeyPemBlock.Bytes); err == nil { - return key, nil - } - case RSAPrivateKeyBlockType: - // RSA Private Key in PKCS#1 format - if key, err := x509.ParsePKCS1PrivateKey(privateKeyPemBlock.Bytes); err == nil { - return key, nil - } - case PrivateKeyBlockType: - // RSA or ECDSA Private Key in unencrypted PKCS#8 format - if key, err := x509.ParsePKCS8PrivateKey(privateKeyPemBlock.Bytes); err == nil { - return key, nil - } - } - - // tolerate non-key PEM blocks for compatibility with things like "EC PARAMETERS" blocks - // originally, only the first PEM block was parsed and expected to be a key block - } - - // we read all the PEM blocks and didn't recognize one - return nil, fmt.Errorf("data does not contain a valid RSA or ECDSA private key") -} - -// ParsePublicKeysPEM is a helper function for reading an array of rsa.PublicKey or ecdsa.PublicKey from a PEM-encoded byte array. -// Reads public keys from both public and private key files. -func ParsePublicKeysPEM(keyData []byte) ([]interface{}, error) { - var block *pem.Block - keys := []interface{}{} - for { - // read the next block - block, keyData = pem.Decode(keyData) - if block == nil { - break - } - - // test block against parsing functions - if privateKey, err := parseRSAPrivateKey(block.Bytes); err == nil { - keys = append(keys, &privateKey.PublicKey) - continue - } - if publicKey, err := parseRSAPublicKey(block.Bytes); err == nil { - keys = append(keys, publicKey) - continue - } - if privateKey, err := parseECPrivateKey(block.Bytes); err == nil { - keys = append(keys, &privateKey.PublicKey) - continue - } - if publicKey, err := parseECPublicKey(block.Bytes); err == nil { - keys = append(keys, publicKey) - continue - } - - // tolerate non-key PEM blocks for backwards compatibility - // originally, only the first PEM block was parsed and expected to be a key block - } - - if len(keys) == 0 { - return nil, fmt.Errorf("data does not contain any valid RSA or ECDSA public keys") - } - return keys, nil -} - -// EncodePrivateKeyPEM returns PEM-encoded private key data -func EncodePrivateKeyPEM(key *rsa.PrivateKey) []byte { - block := pem.Block{ - Type: RSAPrivateKeyBlockType, - Bytes: x509.MarshalPKCS1PrivateKey(key), - } - return pem.EncodeToMemory(&block) -} - // ParseCertsPEM returns the x509.Certificates contained in the given PEM-encoded byte array // Returns an error if a certificate could not be parsed, or if the data does not contain any certificates func ParseCertsPEM(pemCerts []byte) ([]*x509.Certificate, error) { @@ -154,93 +59,3 @@ func ParseCertsPEM(pemCerts []byte) ([]*x509.Certificate, error) { } return certs, nil } - -// parseRSAPublicKey parses a single RSA public key from the provided data -func parseRSAPublicKey(data []byte) (*rsa.PublicKey, error) { - var err error - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { - if cert, err := x509.ParseCertificate(data); err == nil { - parsedKey = cert.PublicKey - } else { - return nil, err - } - } - - // Test if parsed key is an RSA Public Key - var pubKey *rsa.PublicKey - var ok bool - if pubKey, ok = parsedKey.(*rsa.PublicKey); !ok { - return nil, fmt.Errorf("data doesn't contain valid RSA Public Key") - } - - return pubKey, nil -} - -// parseRSAPrivateKey parses a single RSA private key from the provided data -func parseRSAPrivateKey(data []byte) (*rsa.PrivateKey, error) { - var err error - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKCS1PrivateKey(data); err != nil { - if parsedKey, err = x509.ParsePKCS8PrivateKey(data); err != nil { - return nil, err - } - } - - // Test if parsed key is an RSA Private Key - var privKey *rsa.PrivateKey - var ok bool - if privKey, ok = parsedKey.(*rsa.PrivateKey); !ok { - return nil, fmt.Errorf("data doesn't contain valid RSA Private Key") - } - - return privKey, nil -} - -// parseECPublicKey parses a single ECDSA public key from the provided data -func parseECPublicKey(data []byte) (*ecdsa.PublicKey, error) { - var err error - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { - if cert, err := x509.ParseCertificate(data); err == nil { - parsedKey = cert.PublicKey - } else { - return nil, err - } - } - - // Test if parsed key is an ECDSA Public Key - var pubKey *ecdsa.PublicKey - var ok bool - if pubKey, ok = parsedKey.(*ecdsa.PublicKey); !ok { - return nil, fmt.Errorf("data doesn't contain valid ECDSA Public Key") - } - - return pubKey, nil -} - -// parseECPrivateKey parses a single ECDSA private key from the provided data -func parseECPrivateKey(data []byte) (*ecdsa.PrivateKey, error) { - var err error - - // Parse the key - var parsedKey interface{} - if parsedKey, err = x509.ParseECPrivateKey(data); err != nil { - return nil, err - } - - // Test if parsed key is an ECDSA Private Key - var privKey *ecdsa.PrivateKey - var ok bool - if privKey, ok = parsedKey.(*ecdsa.PrivateKey); !ok { - return nil, fmt.Errorf("data doesn't contain valid ECDSA Private Key") - } - - return privKey, nil -} diff --git a/vendor/k8s.io/client-go/util/keyutil/OWNERS b/vendor/k8s.io/client-go/util/keyutil/OWNERS new file mode 100644 index 00000000..470b7a1c --- /dev/null +++ b/vendor/k8s.io/client-go/util/keyutil/OWNERS @@ -0,0 +1,7 @@ +approvers: +- sig-auth-certificates-approvers +reviewers: +- sig-auth-certificates-reviewers +labels: +- sig/auth + diff --git a/vendor/k8s.io/client-go/util/keyutil/key.go b/vendor/k8s.io/client-go/util/keyutil/key.go new file mode 100644 index 00000000..83c2c625 --- /dev/null +++ b/vendor/k8s.io/client-go/util/keyutil/key.go @@ -0,0 +1,323 @@ +/* +Copyright 2018 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 keyutil contains utilities for managing public/private key pairs. +package keyutil + +import ( + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + cryptorand "crypto/rand" + "crypto/rsa" + "crypto/x509" + "encoding/pem" + "fmt" + "io/ioutil" + "os" + "path/filepath" +) + +const ( + // ECPrivateKeyBlockType is a possible value for pem.Block.Type. + ECPrivateKeyBlockType = "EC PRIVATE KEY" + // RSAPrivateKeyBlockType is a possible value for pem.Block.Type. + RSAPrivateKeyBlockType = "RSA PRIVATE KEY" + // PrivateKeyBlockType is a possible value for pem.Block.Type. + PrivateKeyBlockType = "PRIVATE KEY" + // PublicKeyBlockType is a possible value for pem.Block.Type. + PublicKeyBlockType = "PUBLIC KEY" +) + +// MakeEllipticPrivateKeyPEM creates an ECDSA private key +func MakeEllipticPrivateKeyPEM() ([]byte, error) { + privateKey, err := ecdsa.GenerateKey(elliptic.P256(), cryptorand.Reader) + if err != nil { + return nil, err + } + + derBytes, err := x509.MarshalECPrivateKey(privateKey) + if err != nil { + return nil, err + } + + privateKeyPemBlock := &pem.Block{ + Type: ECPrivateKeyBlockType, + Bytes: derBytes, + } + return pem.EncodeToMemory(privateKeyPemBlock), nil +} + +// WriteKey writes the pem-encoded key data to keyPath. +// The key file will be created with file mode 0600. +// If the key file already exists, it will be overwritten. +// The parent directory of the keyPath will be created as needed with file mode 0755. +func WriteKey(keyPath string, data []byte) error { + if err := os.MkdirAll(filepath.Dir(keyPath), os.FileMode(0755)); err != nil { + return err + } + return ioutil.WriteFile(keyPath, data, os.FileMode(0600)) +} + +// LoadOrGenerateKeyFile looks for a key in the file at the given path. If it +// can't find one, it will generate a new key and store it there. +func LoadOrGenerateKeyFile(keyPath string) (data []byte, wasGenerated bool, err error) { + loadedData, err := ioutil.ReadFile(keyPath) + // Call verifyKeyData to ensure the file wasn't empty/corrupt. + if err == nil && verifyKeyData(loadedData) { + return loadedData, false, err + } + if !os.IsNotExist(err) { + return nil, false, fmt.Errorf("error loading key from %s: %v", keyPath, err) + } + + generatedData, err := MakeEllipticPrivateKeyPEM() + if err != nil { + return nil, false, fmt.Errorf("error generating key: %v", err) + } + if err := WriteKey(keyPath, generatedData); err != nil { + return nil, false, fmt.Errorf("error writing key to %s: %v", keyPath, err) + } + return generatedData, true, nil +} + +// MarshalPrivateKeyToPEM converts a known private key type of RSA or ECDSA to +// a PEM encoded block or returns an error. +func MarshalPrivateKeyToPEM(privateKey crypto.PrivateKey) ([]byte, error) { + switch t := privateKey.(type) { + case *ecdsa.PrivateKey: + derBytes, err := x509.MarshalECPrivateKey(t) + if err != nil { + return nil, err + } + block := &pem.Block{ + Type: ECPrivateKeyBlockType, + Bytes: derBytes, + } + return pem.EncodeToMemory(block), nil + case *rsa.PrivateKey: + block := &pem.Block{ + Type: RSAPrivateKeyBlockType, + Bytes: x509.MarshalPKCS1PrivateKey(t), + } + return pem.EncodeToMemory(block), nil + default: + return nil, fmt.Errorf("private key is not a recognized type: %T", privateKey) + } +} + +// PrivateKeyFromFile returns the private key in rsa.PrivateKey or ecdsa.PrivateKey format from a given PEM-encoded file. +// Returns an error if the file could not be read or if the private key could not be parsed. +func PrivateKeyFromFile(file string) (interface{}, error) { + data, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + key, err := ParsePrivateKeyPEM(data) + if err != nil { + return nil, fmt.Errorf("error reading private key file %s: %v", file, err) + } + return key, nil +} + +// PublicKeysFromFile returns the public keys in rsa.PublicKey or ecdsa.PublicKey format from a given PEM-encoded file. +// Reads public keys from both public and private key files. +func PublicKeysFromFile(file string) ([]interface{}, error) { + data, err := ioutil.ReadFile(file) + if err != nil { + return nil, err + } + keys, err := ParsePublicKeysPEM(data) + if err != nil { + return nil, fmt.Errorf("error reading public key file %s: %v", file, err) + } + return keys, nil +} + +// verifyKeyData returns true if the provided data appears to be a valid private key. +func verifyKeyData(data []byte) bool { + if len(data) == 0 { + return false + } + _, err := ParsePrivateKeyPEM(data) + return err == nil +} + +// ParsePrivateKeyPEM returns a private key parsed from a PEM block in the supplied data. +// Recognizes PEM blocks for "EC PRIVATE KEY", "RSA PRIVATE KEY", or "PRIVATE KEY" +func ParsePrivateKeyPEM(keyData []byte) (interface{}, error) { + var privateKeyPemBlock *pem.Block + for { + privateKeyPemBlock, keyData = pem.Decode(keyData) + if privateKeyPemBlock == nil { + break + } + + switch privateKeyPemBlock.Type { + case ECPrivateKeyBlockType: + // ECDSA Private Key in ASN.1 format + if key, err := x509.ParseECPrivateKey(privateKeyPemBlock.Bytes); err == nil { + return key, nil + } + case RSAPrivateKeyBlockType: + // RSA Private Key in PKCS#1 format + if key, err := x509.ParsePKCS1PrivateKey(privateKeyPemBlock.Bytes); err == nil { + return key, nil + } + case PrivateKeyBlockType: + // RSA or ECDSA Private Key in unencrypted PKCS#8 format + if key, err := x509.ParsePKCS8PrivateKey(privateKeyPemBlock.Bytes); err == nil { + return key, nil + } + } + + // tolerate non-key PEM blocks for compatibility with things like "EC PARAMETERS" blocks + // originally, only the first PEM block was parsed and expected to be a key block + } + + // we read all the PEM blocks and didn't recognize one + return nil, fmt.Errorf("data does not contain a valid RSA or ECDSA private key") +} + +// ParsePublicKeysPEM is a helper function for reading an array of rsa.PublicKey or ecdsa.PublicKey from a PEM-encoded byte array. +// Reads public keys from both public and private key files. +func ParsePublicKeysPEM(keyData []byte) ([]interface{}, error) { + var block *pem.Block + keys := []interface{}{} + for { + // read the next block + block, keyData = pem.Decode(keyData) + if block == nil { + break + } + + // test block against parsing functions + if privateKey, err := parseRSAPrivateKey(block.Bytes); err == nil { + keys = append(keys, &privateKey.PublicKey) + continue + } + if publicKey, err := parseRSAPublicKey(block.Bytes); err == nil { + keys = append(keys, publicKey) + continue + } + if privateKey, err := parseECPrivateKey(block.Bytes); err == nil { + keys = append(keys, &privateKey.PublicKey) + continue + } + if publicKey, err := parseECPublicKey(block.Bytes); err == nil { + keys = append(keys, publicKey) + continue + } + + // tolerate non-key PEM blocks for backwards compatibility + // originally, only the first PEM block was parsed and expected to be a key block + } + + if len(keys) == 0 { + return nil, fmt.Errorf("data does not contain any valid RSA or ECDSA public keys") + } + return keys, nil +} + +// parseRSAPublicKey parses a single RSA public key from the provided data +func parseRSAPublicKey(data []byte) (*rsa.PublicKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { + if cert, err := x509.ParseCertificate(data); err == nil { + parsedKey = cert.PublicKey + } else { + return nil, err + } + } + + // Test if parsed key is an RSA Public Key + var pubKey *rsa.PublicKey + var ok bool + if pubKey, ok = parsedKey.(*rsa.PublicKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid RSA Public Key") + } + + return pubKey, nil +} + +// parseRSAPrivateKey parses a single RSA private key from the provided data +func parseRSAPrivateKey(data []byte) (*rsa.PrivateKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKCS1PrivateKey(data); err != nil { + if parsedKey, err = x509.ParsePKCS8PrivateKey(data); err != nil { + return nil, err + } + } + + // Test if parsed key is an RSA Private Key + var privKey *rsa.PrivateKey + var ok bool + if privKey, ok = parsedKey.(*rsa.PrivateKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid RSA Private Key") + } + + return privKey, nil +} + +// parseECPublicKey parses a single ECDSA public key from the provided data +func parseECPublicKey(data []byte) (*ecdsa.PublicKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParsePKIXPublicKey(data); err != nil { + if cert, err := x509.ParseCertificate(data); err == nil { + parsedKey = cert.PublicKey + } else { + return nil, err + } + } + + // Test if parsed key is an ECDSA Public Key + var pubKey *ecdsa.PublicKey + var ok bool + if pubKey, ok = parsedKey.(*ecdsa.PublicKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid ECDSA Public Key") + } + + return pubKey, nil +} + +// parseECPrivateKey parses a single ECDSA private key from the provided data +func parseECPrivateKey(data []byte) (*ecdsa.PrivateKey, error) { + var err error + + // Parse the key + var parsedKey interface{} + if parsedKey, err = x509.ParseECPrivateKey(data); err != nil { + return nil, err + } + + // Test if parsed key is an ECDSA Private Key + var privKey *ecdsa.PrivateKey + var ok bool + if privKey, ok = parsedKey.(*ecdsa.PrivateKey); !ok { + return nil, fmt.Errorf("data doesn't contain valid ECDSA Private Key") + } + + return privKey, nil +}