mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Remove all traces of federation
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							@@ -7,4 +7,3 @@ test/test_owners.csv merge=union
 | 
			
		||||
**/generated.proto -diff
 | 
			
		||||
**/types_swagger_doc_generated.go -diff
 | 
			
		||||
docs/api-reference/** -diff
 | 
			
		||||
federation/docs/api-reference/** -diff
 | 
			
		||||
 
 | 
			
		||||
@@ -74546,11 +74546,6 @@
 | 
			
		||||
      "kind": "DeleteOptions",
 | 
			
		||||
      "version": "v1beta1"
 | 
			
		||||
     },
 | 
			
		||||
     {
 | 
			
		||||
      "group": "federation",
 | 
			
		||||
      "kind": "DeleteOptions",
 | 
			
		||||
      "version": "v1beta1"
 | 
			
		||||
     },
 | 
			
		||||
     {
 | 
			
		||||
      "group": "imagepolicy.k8s.io",
 | 
			
		||||
      "kind": "DeleteOptions",
 | 
			
		||||
@@ -75065,11 +75060,6 @@
 | 
			
		||||
      "kind": "WatchEvent",
 | 
			
		||||
      "version": "v1beta1"
 | 
			
		||||
     },
 | 
			
		||||
     {
 | 
			
		||||
      "group": "federation",
 | 
			
		||||
      "kind": "WatchEvent",
 | 
			
		||||
      "version": "v1beta1"
 | 
			
		||||
     },
 | 
			
		||||
     {
 | 
			
		||||
      "group": "imagepolicy.k8s.io",
 | 
			
		||||
      "kind": "WatchEvent",
 | 
			
		||||
 
 | 
			
		||||
@@ -103,7 +103,6 @@ release_filegroup(
 | 
			
		||||
    name = "client-targets",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "//cmd/kubectl",
 | 
			
		||||
        "//federation/cmd/kubefed",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -143,7 +142,6 @@ filegroup(
 | 
			
		||||
        "//cmd/genyaml",
 | 
			
		||||
        "//cmd/kubemark",  # TODO: server platforms only
 | 
			
		||||
        "//cmd/linkcheck",
 | 
			
		||||
        "//federation/cmd/genfeddocs",
 | 
			
		||||
        "//test/e2e:e2e.test",
 | 
			
		||||
        "//test/e2e_node:e2e_node.test",  # TODO: server platforms only
 | 
			
		||||
        "//vendor/github.com/onsi/ginkgo/ginkgo",
 | 
			
		||||
@@ -154,9 +152,7 @@ filegroup(
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "test-portable-targets",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "//federation/develop:all-srcs",
 | 
			
		||||
        "//hack:e2e.go",
 | 
			
		||||
        "//hack:federated-ginkgo-e2e.sh",
 | 
			
		||||
        "//hack:get-build.sh",
 | 
			
		||||
        "//hack:ginkgo-e2e.sh",
 | 
			
		||||
        "//hack/e2e-internal:all-srcs",
 | 
			
		||||
 
 | 
			
		||||
@@ -503,11 +503,6 @@ EOF
 | 
			
		||||
  mkdir -p "${release_stage}/third_party"
 | 
			
		||||
  cp -R "${KUBE_ROOT}/third_party/htpasswd" "${release_stage}/third_party/htpasswd"
 | 
			
		||||
 | 
			
		||||
  # Include only federation/cluster and federation/deploy
 | 
			
		||||
  mkdir "${release_stage}/federation"
 | 
			
		||||
  cp -R "${KUBE_ROOT}/federation/cluster" "${release_stage}/federation/"
 | 
			
		||||
  cp -R "${KUBE_ROOT}/federation/deploy" "${release_stage}/federation/"
 | 
			
		||||
 | 
			
		||||
  # Include hack/lib as a dependency for the cluster/ scripts
 | 
			
		||||
  mkdir -p "${release_stage}/hack"
 | 
			
		||||
  cp -R "${KUBE_ROOT}/hack/lib" "${release_stage}/hack/"
 | 
			
		||||
 
 | 
			
		||||
@@ -193,7 +193,6 @@ pkg_tar(
 | 
			
		||||
    strip_prefix = "//",
 | 
			
		||||
    deps = [
 | 
			
		||||
        ":_full_server",
 | 
			
		||||
        "//federation:release",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -63,7 +63,6 @@ filegroup(
 | 
			
		||||
        "//cmd:all-srcs",
 | 
			
		||||
        "//docs:all-srcs",
 | 
			
		||||
        "//examples:all-srcs",
 | 
			
		||||
        "//federation:all-srcs",
 | 
			
		||||
        "//hack:all-srcs",
 | 
			
		||||
        "//pkg:all-srcs",
 | 
			
		||||
        "//plugin:all-srcs",
 | 
			
		||||
 
 | 
			
		||||
@@ -291,7 +291,6 @@ else
 | 
			
		||||
test-cmd: generated_files
 | 
			
		||||
	hack/make-rules/test-kubeadm-cmd.sh
 | 
			
		||||
	hack/make-rules/test-cmd.sh
 | 
			
		||||
	hack/make-rules/test-federation-cmd.sh
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
define CLEAN_HELP_INFO
 | 
			
		||||
@@ -482,21 +481,6 @@ $(notdir $(abspath $(wildcard plugin/cmd/*/))): generated_files
 | 
			
		||||
	hack/make-rules/build.sh plugin/cmd/$@
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
define FED_CMD_HELP_INFO
 | 
			
		||||
# Add rules for all directories in federation/cmd/
 | 
			
		||||
#
 | 
			
		||||
# Example:
 | 
			
		||||
#   make federation-apiserver federation-controller-manager
 | 
			
		||||
endef
 | 
			
		||||
.PHONY: $(notdir $(abspath $(wildcard federation/cmd/*/)))
 | 
			
		||||
ifeq ($(PRINT_HELP),y)
 | 
			
		||||
$(notdir $(abspath $(wildcard federation/cmd/*/))):
 | 
			
		||||
	@echo "$$FED_CMD_HELP_INFO"
 | 
			
		||||
else
 | 
			
		||||
$(notdir $(abspath $(wildcard federation/cmd/*/))): generated_files
 | 
			
		||||
	hack/make-rules/build.sh federation/cmd/$@
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
define GENERATED_FILES_HELP_INFO
 | 
			
		||||
# Produce auto-generated files needed for the build.
 | 
			
		||||
#
 | 
			
		||||
 
 | 
			
		||||
@@ -50,18 +50,6 @@ package_group(
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
package_group(
 | 
			
		||||
    name = "FEDERATION_BAD",
 | 
			
		||||
    packages = [
 | 
			
		||||
        "//federation/cmd/genfeddocs",
 | 
			
		||||
        "//federation/cmd/kubefed/app",
 | 
			
		||||
        "//federation/pkg/kubefed",
 | 
			
		||||
        "//federation/pkg/kubefed/init",
 | 
			
		||||
        "//federation/pkg/kubefed/testing",
 | 
			
		||||
        "//federation/pkg/kubefed/util",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
package_group(
 | 
			
		||||
    name = "cluster",
 | 
			
		||||
    packages = [
 | 
			
		||||
@@ -93,7 +81,6 @@ package_group(
 | 
			
		||||
package_group(
 | 
			
		||||
    name = "pkg_kubectl_CONSUMERS_BAD",
 | 
			
		||||
    includes = [
 | 
			
		||||
        ":FEDERATION_BAD",
 | 
			
		||||
        ":KUBEADM_BAD",
 | 
			
		||||
    ],
 | 
			
		||||
    packages = [
 | 
			
		||||
@@ -125,9 +112,6 @@ package_group(
 | 
			
		||||
 | 
			
		||||
package_group(
 | 
			
		||||
    name = "pkg_kubectl_cmd_CONSUMERS_BAD",
 | 
			
		||||
    includes = [
 | 
			
		||||
        ":FEDERATION_BAD",
 | 
			
		||||
    ],
 | 
			
		||||
    packages = [
 | 
			
		||||
        "//cmd/clicheck",
 | 
			
		||||
        "//cmd/hyperkube",
 | 
			
		||||
@@ -178,19 +162,11 @@ package_group(
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
package_group(
 | 
			
		||||
    name = "pkg_kubectl_cmd_templates_CONSUMERS_BAD",
 | 
			
		||||
    packages = [
 | 
			
		||||
        "//federation/pkg/kubefed/init",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
package_group(
 | 
			
		||||
    name = "pkg_kubectl_cmd_templates_CONSUMERS",
 | 
			
		||||
    includes = [
 | 
			
		||||
        ":COMMON_generators",
 | 
			
		||||
        ":COMMON_testing",
 | 
			
		||||
        ":FEDERATION_BAD",
 | 
			
		||||
    ],
 | 
			
		||||
    packages = [
 | 
			
		||||
        "//cmd/kubectl",
 | 
			
		||||
@@ -213,19 +189,8 @@ package_group(
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
package_group(
 | 
			
		||||
    name = "pkg_kubectl_cmd_testing_CONSUMERS_BAD",
 | 
			
		||||
    packages = [
 | 
			
		||||
        "//federation/pkg/kubefed",
 | 
			
		||||
        "//federation/pkg/kubefed/init",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
package_group(
 | 
			
		||||
    name = "pkg_kubectl_cmd_testing_CONSUMERS",
 | 
			
		||||
    includes = [
 | 
			
		||||
        ":pkg_kubectl_cmd_testing_CONSUMERS_BAD",
 | 
			
		||||
    ],
 | 
			
		||||
    packages = [
 | 
			
		||||
        "//pkg/kubectl/cmd",
 | 
			
		||||
        "//pkg/kubectl/cmd/auth",
 | 
			
		||||
@@ -236,7 +201,6 @@ package_group(
 | 
			
		||||
package_group(
 | 
			
		||||
    name = "pkg_kubectl_cmd_util_CONSUMERS_BAD",
 | 
			
		||||
    includes = [
 | 
			
		||||
        ":FEDERATION_BAD",
 | 
			
		||||
        ":KUBEADM_BAD",
 | 
			
		||||
    ],
 | 
			
		||||
    packages = [
 | 
			
		||||
@@ -293,9 +257,6 @@ package_group(
 | 
			
		||||
 | 
			
		||||
package_group(
 | 
			
		||||
    name = "pkg_kubectl_metricsutil_CONSUMERS_BAD",
 | 
			
		||||
    includes = [
 | 
			
		||||
        ":FEDERATION_BAD",
 | 
			
		||||
    ],
 | 
			
		||||
    packages = [
 | 
			
		||||
        "//cmd/clicheck",
 | 
			
		||||
        "//cmd/hyperkube",
 | 
			
		||||
@@ -316,19 +277,11 @@ package_group(
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
package_group(
 | 
			
		||||
    name = "pkg_kubectl_resource_CONSUMERS_BAD",
 | 
			
		||||
    packages = [
 | 
			
		||||
        "//federation/pkg/kubefed",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
package_group(
 | 
			
		||||
    name = "pkg_kubectl_resource_CONSUMERS",
 | 
			
		||||
    includes = [
 | 
			
		||||
        ":COMMON_generators",
 | 
			
		||||
        ":COMMON_testing",
 | 
			
		||||
        ":pkg_kubectl_resource_CONSUMERS_BAD",
 | 
			
		||||
    ],
 | 
			
		||||
    packages = [
 | 
			
		||||
        "//cmd/kubectl",
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ generally inhibit progress.
 | 
			
		||||
  one can specify the following visibility rule in any `BUILD` rule:
 | 
			
		||||
  ```
 | 
			
		||||
  visibility = [ "//build/visible_to:database_CONSUMERS" ],
 | 
			
		||||
  ``` 
 | 
			
		||||
  ```
 | 
			
		||||
 | 
			
		||||
* A visibility rule takes a list of package groups as its
 | 
			
		||||
  argument - or one of the pre-defined groups
 | 
			
		||||
@@ -59,7 +59,7 @@ generally inhibit progress.
 | 
			
		||||
 * One set of `OWNERS` to manage visibility.
 | 
			
		||||
 | 
			
		||||
The alternative is to use special [package literals] directly
 | 
			
		||||
in visibility rules, e.g. 
 | 
			
		||||
in visibility rules, e.g.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
  visibility = [
 | 
			
		||||
@@ -114,7 +114,7 @@ visibility = ["//visible_to:client_foo,//visible_to:server_foo"],
 | 
			
		||||
#### Quickly check for visibility violations
 | 
			
		||||
```
 | 
			
		||||
bazel build --check_visibility --nobuild \
 | 
			
		||||
    //cmd/... //pkg/... //federation/... //plugin/... \
 | 
			
		||||
    //cmd/... //pkg/... //plugin/... \
 | 
			
		||||
    //third_party/... //examples/... //test/... //vendor/k8s.io/...
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
@@ -179,6 +179,6 @@ bazel query --nohost_deps --noimplicit_deps \
 | 
			
		||||
bazel query "somepath(cmd/kubectl:kubectl, pkg/util/parsers:go_default_library)"
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[package literals]: https://bazel.build/versions/master/docs/be/common-definitions.html#common.visibility
 | 
			
		||||
 
 | 
			
		||||
@@ -160,20 +160,6 @@ function clear-kubeconfig() {
 | 
			
		||||
  echo "Cleared config for ${CONTEXT} from ${KUBECONFIG}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Creates a kubeconfig file with the credentials for only the current-context
 | 
			
		||||
# cluster. This is used by federation to create secrets in test setup.
 | 
			
		||||
function create-kubeconfig-for-federation() {
 | 
			
		||||
  if [[ "${FEDERATION:-}" == "true" ]]; then
 | 
			
		||||
    echo "creating kubeconfig for federation secret"
 | 
			
		||||
    local kubectl="${KUBE_ROOT}/cluster/kubectl.sh"
 | 
			
		||||
    local cc=$("${kubectl}" config view -o jsonpath='{.current-context}')
 | 
			
		||||
    KUBECONFIG_DIR=$(dirname ${KUBECONFIG:-$DEFAULT_KUBECONFIG})
 | 
			
		||||
    KUBECONFIG_PATH="${KUBECONFIG_DIR}/federation/kubernetes-apiserver/${cc}"
 | 
			
		||||
    mkdir -p "${KUBECONFIG_PATH}"
 | 
			
		||||
    "${kubectl}" config view --minify --flatten > "${KUBECONFIG_PATH}/kubeconfig"
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function tear_down_alive_resources() {
 | 
			
		||||
  local kubectl="${KUBE_ROOT}/cluster/kubectl.sh"
 | 
			
		||||
  "${kubectl}" delete deployments --all || true
 | 
			
		||||
@@ -946,17 +932,6 @@ AUTOSCALER_EXPANDER_CONFIG: $(yaml-quote ${AUTOSCALER_EXPANDER_CONFIG})
 | 
			
		||||
EOF
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Federation specific environment variables.
 | 
			
		||||
  if [[ -n "${FEDERATION:-}" ]]; then
 | 
			
		||||
    cat >>$file <<EOF
 | 
			
		||||
FEDERATION: $(yaml-quote ${FEDERATION})
 | 
			
		||||
EOF
 | 
			
		||||
  fi
 | 
			
		||||
  if [ -n "${FEDERATION_NAME:-}" ]; then
 | 
			
		||||
    cat >>$file <<EOF
 | 
			
		||||
FEDERATION_NAME: $(yaml-quote ${FEDERATION_NAME})
 | 
			
		||||
EOF
 | 
			
		||||
  fi
 | 
			
		||||
  if [ -n "${DNS_ZONE_NAME:-}" ]; then
 | 
			
		||||
    cat >>$file <<EOF
 | 
			
		||||
DNS_ZONE_NAME: $(yaml-quote ${DNS_ZONE_NAME})
 | 
			
		||||
 
 | 
			
		||||
@@ -95,11 +95,7 @@ function get-cluster-ip-range {
 | 
			
		||||
  if [[ "${NUM_NODES}" -gt 4000 ]]; then
 | 
			
		||||
    suggested_range="10.64.0.0/11"
 | 
			
		||||
  fi
 | 
			
		||||
  echo "${suggested_range}" 
 | 
			
		||||
  echo "${suggested_range}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if [[ "${FEDERATION:-}" == true ]]; then
 | 
			
		||||
    NODE_SCOPES="${NODE_SCOPES:-monitoring,logging-write,storage-ro,https://www.googleapis.com/auth/ndev.clouddns.readwrite}"
 | 
			
		||||
else
 | 
			
		||||
    NODE_SCOPES="${NODE_SCOPES:-monitoring,logging-write,storage-ro}"
 | 
			
		||||
fi
 | 
			
		||||
NODE_SCOPES="${NODE_SCOPES:-monitoring,logging-write,storage-ro}"
 | 
			
		||||
 
 | 
			
		||||
@@ -103,11 +103,7 @@ MASTER_IP_RANGE="${MASTER_IP_RANGE:-10.246.0.0/24}"
 | 
			
		||||
# It is the primary range in the subnet and is the range used for node instance IPs.
 | 
			
		||||
NODE_IP_RANGE="$(get-node-ip-range)"
 | 
			
		||||
 | 
			
		||||
if [[ "${FEDERATION:-}" == true ]]; then
 | 
			
		||||
    NODE_SCOPES="${NODE_SCOPES:-monitoring,logging-write,storage-ro,https://www.googleapis.com/auth/ndev.clouddns.readwrite}"
 | 
			
		||||
else
 | 
			
		||||
    NODE_SCOPES="${NODE_SCOPES:-monitoring,logging-write,storage-ro}"
 | 
			
		||||
fi
 | 
			
		||||
NODE_SCOPES="${NODE_SCOPES:-monitoring,logging-write,storage-ro}"
 | 
			
		||||
 | 
			
		||||
# Extra docker options for nodes.
 | 
			
		||||
EXTRA_DOCKER_OPTS="${EXTRA_DOCKER_OPTS:-}"
 | 
			
		||||
 
 | 
			
		||||
@@ -1506,8 +1506,6 @@ function check-cluster() {
 | 
			
		||||
 | 
			
		||||
   # Update the user's kubeconfig to include credentials for this apiserver.
 | 
			
		||||
   create-kubeconfig
 | 
			
		||||
 | 
			
		||||
   create-kubeconfig-for-federation
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  # ensures KUBECONFIG is set
 | 
			
		||||
 
 | 
			
		||||
@@ -11,16 +11,12 @@ docker_build(
 | 
			
		||||
        for path in [
 | 
			
		||||
            "/apiserver",
 | 
			
		||||
            "/controller-manager",
 | 
			
		||||
            "/federation-apiserver",
 | 
			
		||||
            "/federation-controller-manager",
 | 
			
		||||
            "/kubectl",
 | 
			
		||||
            "/kubelet",
 | 
			
		||||
            "/proxy",
 | 
			
		||||
            "/scheduler",
 | 
			
		||||
            "/usr/local/bin/kube-apiserver",
 | 
			
		||||
            "/usr/local/bin/kube-controller-manager",
 | 
			
		||||
            "/usr/local/bin/federation-apiserver",
 | 
			
		||||
            "/usr/local/bin/federation-controller-manager",
 | 
			
		||||
            "/usr/local/bin/kubectl",
 | 
			
		||||
            "/usr/local/bin/kubelet",
 | 
			
		||||
            "/usr/local/bin/kube-proxy",
 | 
			
		||||
 
 | 
			
		||||
@@ -22,8 +22,6 @@ FROM BASEIMAGE
 | 
			
		||||
# RUN /hyperkube --make-symlinks
 | 
			
		||||
RUN ln -s /hyperkube /apiserver \
 | 
			
		||||
 && ln -s /hyperkube /controller-manager \
 | 
			
		||||
 && ln -s /hyperkube /federation-apiserver \
 | 
			
		||||
 && ln -s /hyperkube /federation-controller-manager \
 | 
			
		||||
 && ln -s /hyperkube /kubectl \
 | 
			
		||||
 && ln -s /hyperkube /kubelet \
 | 
			
		||||
 && ln -s /hyperkube /proxy \
 | 
			
		||||
@@ -31,8 +29,6 @@ RUN ln -s /hyperkube /apiserver \
 | 
			
		||||
  && ln -s /hyperkube /aggerator \
 | 
			
		||||
 && ln -s /hyperkube /usr/local/bin/kube-apiserver \
 | 
			
		||||
 && ln -s /hyperkube /usr/local/bin/kube-controller-manager \
 | 
			
		||||
 && ln -s /hyperkube /usr/local/bin/federation-apiserver \
 | 
			
		||||
 && ln -s /hyperkube /usr/local/bin/federation-controller-manager \
 | 
			
		||||
 && ln -s /hyperkube /usr/local/bin/kubectl \
 | 
			
		||||
 && ln -s /hyperkube /usr/local/bin/kubelet \
 | 
			
		||||
 && ln -s /hyperkube /usr/local/bin/kube-proxy \
 | 
			
		||||
 
 | 
			
		||||
@@ -38,59 +38,3 @@ PROVIDER_UTILS="${KUBE_ROOT}/cluster/${KUBERNETES_PROVIDER}/util.sh"
 | 
			
		||||
if [ -f ${PROVIDER_UTILS} ]; then
 | 
			
		||||
    source "${PROVIDER_UTILS}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Federation utils
 | 
			
		||||
 | 
			
		||||
# Sets the kubeconfig context value for the current cluster.
 | 
			
		||||
# Args:
 | 
			
		||||
#   $1: zone (required)
 | 
			
		||||
#
 | 
			
		||||
# Vars set:
 | 
			
		||||
#   CLUSTER_CONTEXT
 | 
			
		||||
function kubeconfig-federation-context() {
 | 
			
		||||
  if [[ -z "${1:-}" ]]; then
 | 
			
		||||
    echo "zone parameter is required"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
  CLUSTER_CONTEXT="federation-e2e-${KUBERNETES_PROVIDER}-${1}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Should NOT be called within the global scope, unless setting the desired global zone vars
 | 
			
		||||
# This function is currently NOT USED in the global scope
 | 
			
		||||
function set-federation-zone-vars {
 | 
			
		||||
  zone="$1"
 | 
			
		||||
  kubeconfig-federation-context "${zone}"
 | 
			
		||||
  export OVERRIDE_CONTEXT="${CLUSTER_CONTEXT}"
 | 
			
		||||
  echo "Setting zone vars to: $OVERRIDE_CONTEXT"
 | 
			
		||||
  if [[ "$KUBERNETES_PROVIDER" == "gce"  ]];then
 | 
			
		||||
    # This needs a revamp, but for now e2e zone name is used as the unique
 | 
			
		||||
    # cluster identifier in our e2e tests and we will continue to use that
 | 
			
		||||
    # pattern.
 | 
			
		||||
    export CLUSTER_NAME="${zone}"
 | 
			
		||||
 | 
			
		||||
    export KUBE_GCE_ZONE="${zone}"
 | 
			
		||||
    # gcloud has a 61 character limit, and for firewall rules this
 | 
			
		||||
    # prefix gets appended to itself, with some extra information
 | 
			
		||||
    # need tot keep it short
 | 
			
		||||
    export KUBE_GCE_INSTANCE_PREFIX="${USER}-${zone}"
 | 
			
		||||
 | 
			
		||||
  elif [[ "$KUBERNETES_PROVIDER" == "gke"  ]];then
 | 
			
		||||
 | 
			
		||||
    export CLUSTER_NAME="${USER}-${zone}"
 | 
			
		||||
 | 
			
		||||
  elif [[ "$KUBERNETES_PROVIDER" == "aws"  ]];then
 | 
			
		||||
 | 
			
		||||
    export KUBE_AWS_ZONE="$zone"
 | 
			
		||||
    export KUBE_AWS_INSTANCE_PREFIX="${USER}-${zone}"
 | 
			
		||||
 | 
			
		||||
    # WARNING: This is hack
 | 
			
		||||
    # After KUBE_AWS_INSTANCE_PREFIX is changed,
 | 
			
		||||
    # we need to make sure the config-xxx.sh file is
 | 
			
		||||
    # re-sourced so the change propogates to dependent computed values
 | 
			
		||||
    # (eg: MASTER_SG_NAME, NODE_SG_NAME, etc)
 | 
			
		||||
    source "${KUBE_ROOT}/cluster/aws/util.sh"
 | 
			
		||||
  else
 | 
			
		||||
    echo "Provider \"${KUBERNETES_PROVIDER}\" is not supported"
 | 
			
		||||
    exit 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -296,8 +296,6 @@ function kube-up {
 | 
			
		||||
 | 
			
		||||
   # Update the user's kubeconfig to include credentials for this apiserver.
 | 
			
		||||
   create-kubeconfig
 | 
			
		||||
 | 
			
		||||
   create-kubeconfig-for-federation
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  verify-cluster
 | 
			
		||||
 
 | 
			
		||||
@@ -30,8 +30,6 @@ go_test(
 | 
			
		||||
go_library(
 | 
			
		||||
    name = "go_default_library",
 | 
			
		||||
    srcs = [
 | 
			
		||||
        "federation-apiserver.go",
 | 
			
		||||
        "federation-controller-manager.go",
 | 
			
		||||
        "hyperkube.go",
 | 
			
		||||
        "kube-aggregator.go",
 | 
			
		||||
        "kube-apiserver.go",
 | 
			
		||||
@@ -52,10 +50,6 @@ go_library(
 | 
			
		||||
        "//cmd/kube-proxy/app:go_default_library",
 | 
			
		||||
        "//cmd/kubelet/app:go_default_library",
 | 
			
		||||
        "//cmd/kubelet/app/options:go_default_library",
 | 
			
		||||
        "//federation/cmd/federation-apiserver/app:go_default_library",
 | 
			
		||||
        "//federation/cmd/federation-apiserver/app/options:go_default_library",
 | 
			
		||||
        "//federation/cmd/federation-controller-manager/app:go_default_library",
 | 
			
		||||
        "//federation/cmd/federation-controller-manager/app/options:go_default_library",
 | 
			
		||||
        "//pkg/client/metrics/prometheus:go_default_library",
 | 
			
		||||
        "//pkg/kubectl/cmd:go_default_library",
 | 
			
		||||
        "//pkg/kubectl/cmd/util:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,39 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2016 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 main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-apiserver/app"
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-apiserver/app/options"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// NewFederationAPIServer creates a new hyperkube Server object that includes the
 | 
			
		||||
// description and flags.
 | 
			
		||||
func NewFederationAPIServer() *Server {
 | 
			
		||||
	s := options.NewServerRunOptions()
 | 
			
		||||
 | 
			
		||||
	hks := Server{
 | 
			
		||||
		SimpleUsage: "federation-apiserver",
 | 
			
		||||
		Long:        "The API entrypoint for the federation control plane",
 | 
			
		||||
		Run: func(_ *Server, args []string, stopCh <-chan struct{}) error {
 | 
			
		||||
			return app.Run(s, stopCh)
 | 
			
		||||
		},
 | 
			
		||||
		RespectsStopCh: true,
 | 
			
		||||
	}
 | 
			
		||||
	s.AddFlags(hks.Flags())
 | 
			
		||||
	return &hks
 | 
			
		||||
}
 | 
			
		||||
@@ -1,38 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2016 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 main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-controller-manager/app"
 | 
			
		||||
	"k8s.io/kubernetes/federation/cmd/federation-controller-manager/app/options"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// NewFederationCMServer creates a new hyperkube Server object that includes the
 | 
			
		||||
// description and flags.
 | 
			
		||||
func NewFederationCMServer() *Server {
 | 
			
		||||
	s := options.NewCMServer()
 | 
			
		||||
 | 
			
		||||
	hks := Server{
 | 
			
		||||
		SimpleUsage: "federation-controller-manager",
 | 
			
		||||
		Long:        "Controller manager for federation control plane. Manages federation service endpoints and controllers",
 | 
			
		||||
		Run: func(_ *Server, args []string, stopCh <-chan struct{}) error {
 | 
			
		||||
			return app.Run(s)
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	s.AddFlags(hks.Flags())
 | 
			
		||||
	return &hks
 | 
			
		||||
}
 | 
			
		||||
@@ -46,9 +46,5 @@ func main() {
 | 
			
		||||
	hk.AddServer(NewKubeProxy())
 | 
			
		||||
	hk.AddServer(NewKubeAggregator())
 | 
			
		||||
 | 
			
		||||
	//Federation servers
 | 
			
		||||
	hk.AddServer(NewFederationAPIServer())
 | 
			
		||||
	hk.AddServer(NewFederationCMServer())
 | 
			
		||||
 | 
			
		||||
	hk.RunToExit(os.Args)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,9 @@
 | 
			
		||||
docs/.generated_docs
 | 
			
		||||
docs/admin/cloud-controller-manager.md
 | 
			
		||||
docs/admin/federation-apiserver.md
 | 
			
		||||
docs/admin/federation-controller-manager.md
 | 
			
		||||
docs/admin/kube-apiserver.md
 | 
			
		||||
docs/admin/kube-controller-manager.md
 | 
			
		||||
docs/admin/kube-proxy.md
 | 
			
		||||
docs/admin/kube-scheduler.md
 | 
			
		||||
docs/admin/kubefed.md
 | 
			
		||||
docs/admin/kubefed_init.md
 | 
			
		||||
docs/admin/kubefed_join.md
 | 
			
		||||
docs/admin/kubefed_options.md
 | 
			
		||||
docs/admin/kubefed_unjoin.md
 | 
			
		||||
docs/admin/kubefed_version.md
 | 
			
		||||
docs/admin/kubelet.md
 | 
			
		||||
docs/man/man1/cloud-controller-manager.1
 | 
			
		||||
docs/man/man1/kube-apiserver.1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +0,0 @@
 | 
			
		||||
This file is autogenerated, but we've stopped checking such files into the
 | 
			
		||||
repository to reduce the need for rebases. Please run hack/generate-docs.sh to
 | 
			
		||||
populate this file.
 | 
			
		||||
@@ -11,55 +11,6 @@ cmd/kubelet/app
 | 
			
		||||
cmd/kubelet/app/options
 | 
			
		||||
cmd/kubemark
 | 
			
		||||
examples/guestbook-go
 | 
			
		||||
federation/apis/core
 | 
			
		||||
federation/apis/core/v1
 | 
			
		||||
federation/apis/federation
 | 
			
		||||
federation/apis/federation/v1beta1
 | 
			
		||||
federation/apis/federation/validation
 | 
			
		||||
federation/client/cache
 | 
			
		||||
federation/cmd/federation-apiserver/app
 | 
			
		||||
federation/cmd/federation-apiserver/app/options
 | 
			
		||||
federation/cmd/federation-controller-manager/app
 | 
			
		||||
federation/cmd/federation-controller-manager/app/options
 | 
			
		||||
federation/cmd/kubefed/app
 | 
			
		||||
federation/pkg/dnsprovider
 | 
			
		||||
federation/pkg/dnsprovider/providers/aws/route53
 | 
			
		||||
federation/pkg/dnsprovider/providers/aws/route53/stubs
 | 
			
		||||
federation/pkg/dnsprovider/providers/coredns
 | 
			
		||||
federation/pkg/dnsprovider/providers/coredns/stubs
 | 
			
		||||
federation/pkg/dnsprovider/providers/google/clouddns
 | 
			
		||||
federation/pkg/dnsprovider/providers/google/clouddns/internal
 | 
			
		||||
federation/pkg/dnsprovider/providers/google/clouddns/internal/interfaces
 | 
			
		||||
federation/pkg/dnsprovider/providers/google/clouddns/internal/stubs
 | 
			
		||||
federation/pkg/dnsprovider/rrstype
 | 
			
		||||
federation/pkg/dnsprovider/tests
 | 
			
		||||
federation/pkg/federatedtypes
 | 
			
		||||
federation/pkg/federatedtypes/crudtester
 | 
			
		||||
federation/pkg/federation-controller
 | 
			
		||||
federation/pkg/federation-controller/cluster
 | 
			
		||||
federation/pkg/federation-controller/ingress
 | 
			
		||||
federation/pkg/federation-controller/service
 | 
			
		||||
federation/pkg/federation-controller/service/dns
 | 
			
		||||
federation/pkg/federation-controller/service/ingress
 | 
			
		||||
federation/pkg/federation-controller/sync
 | 
			
		||||
federation/pkg/federation-controller/util
 | 
			
		||||
federation/pkg/federation-controller/util/clusterselector
 | 
			
		||||
federation/pkg/federation-controller/util/deletionhelper
 | 
			
		||||
federation/pkg/federation-controller/util/eventsink
 | 
			
		||||
federation/pkg/federation-controller/util/finalizers
 | 
			
		||||
federation/pkg/federation-controller/util/planner
 | 
			
		||||
federation/pkg/federation-controller/util/podanalyzer
 | 
			
		||||
federation/pkg/federation-controller/util/test
 | 
			
		||||
federation/pkg/kubefed
 | 
			
		||||
federation/pkg/kubefed/init
 | 
			
		||||
federation/pkg/kubefed/testing
 | 
			
		||||
federation/pkg/kubefed/util
 | 
			
		||||
federation/registry/cluster
 | 
			
		||||
federation/registry/cluster/etcd
 | 
			
		||||
federation/test/e2e
 | 
			
		||||
federation/test/e2e/framework
 | 
			
		||||
federation/test/e2e/upgrades
 | 
			
		||||
federation/test/integration/framework
 | 
			
		||||
pkg/api
 | 
			
		||||
pkg/api/endpoints
 | 
			
		||||
pkg/api/helper
 | 
			
		||||
 
 | 
			
		||||
@@ -29,16 +29,4 @@ source "${KUBE_ROOT}/cluster/kube-util.sh"
 | 
			
		||||
 | 
			
		||||
prepare-e2e
 | 
			
		||||
 | 
			
		||||
if [[ "${FEDERATION:-}" == "true" ]]; then
 | 
			
		||||
  source "${KUBE_ROOT}/federation/cluster/common.sh"
 | 
			
		||||
 | 
			
		||||
  for zone in ${E2E_ZONES};do
 | 
			
		||||
    # bring down an e2e cluster
 | 
			
		||||
    (
 | 
			
		||||
      set-federation-zone-vars "$zone"
 | 
			
		||||
      test-teardown
 | 
			
		||||
    )
 | 
			
		||||
  done
 | 
			
		||||
else
 | 
			
		||||
  test-teardown
 | 
			
		||||
fi
 | 
			
		||||
test-teardown
 | 
			
		||||
 
 | 
			
		||||
@@ -29,19 +29,4 @@ source "${KUBE_ROOT}/cluster/kube-util.sh"
 | 
			
		||||
 | 
			
		||||
prepare-e2e
 | 
			
		||||
 | 
			
		||||
if [[ "${FEDERATION:-}" == "true" ]];then
 | 
			
		||||
    FEDERATION_NAMESPACE=${FEDERATION_NAMESPACE:-federation-system}
 | 
			
		||||
    #TODO(colhom): the last cluster that was created in the loop above is the current context.
 | 
			
		||||
    # Hence, it will be the cluster that hosts the federated components.
 | 
			
		||||
    # In the future, we will want to loop through the all the federated contexts,
 | 
			
		||||
    # select each one and call federated-up
 | 
			
		||||
    for zone in ${E2E_ZONES};do
 | 
			
		||||
	(
 | 
			
		||||
	    set-federation-zone-vars "$zone"
 | 
			
		||||
	    printf "\n\tChecking version for $OVERRIDE_CONTEXT\n"
 | 
			
		||||
	    ${KUBECTL} --context="$OVERRIDE_CONTEXT" version
 | 
			
		||||
	)
 | 
			
		||||
    done
 | 
			
		||||
else
 | 
			
		||||
    ${KUBECTL} version
 | 
			
		||||
fi
 | 
			
		||||
${KUBECTL} version
 | 
			
		||||
 
 | 
			
		||||
@@ -29,16 +29,4 @@ source "${KUBE_ROOT}/cluster/kube-util.sh"
 | 
			
		||||
 | 
			
		||||
prepare-e2e
 | 
			
		||||
 | 
			
		||||
if [[ "${FEDERATION:-}" == "true" ]]; then
 | 
			
		||||
  cur_ip_octet2=180
 | 
			
		||||
  for zone in ${E2E_ZONES};do
 | 
			
		||||
    (
 | 
			
		||||
      export CLUSTER_IP_RANGE="10.${cur_ip_octet2}.0.0/16"
 | 
			
		||||
      set-federation-zone-vars "$zone"
 | 
			
		||||
      test-setup
 | 
			
		||||
    )
 | 
			
		||||
    cur_ip_octet2="$((cur_ip_octet2 + 1))"
 | 
			
		||||
  done
 | 
			
		||||
else
 | 
			
		||||
  test-setup
 | 
			
		||||
fi
 | 
			
		||||
test-setup
 | 
			
		||||
 
 | 
			
		||||
@@ -1,34 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# 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.
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 | 
			
		||||
 | 
			
		||||
source "${KUBE_ROOT}/cluster/kube-util.sh"
 | 
			
		||||
source "${KUBE_ROOT}/federation/cluster/common.sh"
 | 
			
		||||
 | 
			
		||||
: "${FEDERATION_HOST_CLUSTER_ZONE?Must set FEDERATION_HOST_CLUSTER_ZONE env var}"
 | 
			
		||||
 | 
			
		||||
(
 | 
			
		||||
    set-federation-zone-vars "${FEDERATION_HOST_CLUSTER_ZONE}"
 | 
			
		||||
    # Export FEDERATION_KUBE_CONTEXT to ensure that it is available to
 | 
			
		||||
    # ginkgo-e2e.sh and is thus passed on to the federation tests.
 | 
			
		||||
    export FEDERATION_KUBE_CONTEXT
 | 
			
		||||
    "${KUBE_ROOT}/hack/ginkgo-e2e.sh" $@
 | 
			
		||||
)
 | 
			
		||||
@@ -32,7 +32,6 @@ BINS=(
 | 
			
		||||
	cmd/genkubedocs
 | 
			
		||||
	cmd/genman
 | 
			
		||||
	cmd/genyaml
 | 
			
		||||
	federation/cmd/genfeddocs
 | 
			
		||||
)
 | 
			
		||||
make -C "${KUBE_ROOT}" WHAT="${BINS[*]}"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -148,7 +148,6 @@ export PATH=$(dirname "${e2e_test}"):"${PATH}"
 | 
			
		||||
  --network="${KUBE_GCE_NETWORK:-${KUBE_GKE_NETWORK:-e2e}}" \
 | 
			
		||||
  --node-tag="${NODE_TAG:-}" \
 | 
			
		||||
  --master-tag="${MASTER_TAG:-}" \
 | 
			
		||||
  --federated-kube-context="${FEDERATION_KUBE_CONTEXT:-e2e-federation}" \
 | 
			
		||||
  ${KUBE_CONTAINER_RUNTIME:+"--container-runtime=${KUBE_CONTAINER_RUNTIME}"} \
 | 
			
		||||
  ${MASTER_OS_DISTRIBUTION:+"--master-os-distro=${MASTER_OS_DISTRIBUTION}"} \
 | 
			
		||||
  ${NODE_OS_DISTRIBUTION:+"--node-os-distro=${NODE_OS_DISTRIBUTION}"} \
 | 
			
		||||
 
 | 
			
		||||
@@ -1,25 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# 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.
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
set -o xtrace
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../..
 | 
			
		||||
 | 
			
		||||
make -C "${KUBE_ROOT}/federation/" build
 | 
			
		||||
make -C "${KUBE_ROOT}/federation/" push
 | 
			
		||||
@@ -35,8 +35,6 @@ export PATH=$PATH:/usr/local/go/bin
 | 
			
		||||
# Skip gcloud update checking
 | 
			
		||||
export CLOUDSDK_COMPONENT_MANAGER_DISABLE_UPDATE_CHECK=true
 | 
			
		||||
 | 
			
		||||
# FEDERATION?
 | 
			
		||||
: ${FEDERATION:="false"}
 | 
			
		||||
: ${KUBE_RELEASE_RUN_TESTS:="n"}
 | 
			
		||||
export KUBE_RELEASE_RUN_TESTS
 | 
			
		||||
 | 
			
		||||
@@ -67,10 +65,9 @@ else
 | 
			
		||||
 | 
			
		||||
  [[ -n "${KUBE_GCS_RELEASE_BUCKET-}" ]] \
 | 
			
		||||
    && bucket_flag="--bucket=${KUBE_GCS_RELEASE_BUCKET-}"
 | 
			
		||||
  ${FEDERATION} && federation_flag="--federation"
 | 
			
		||||
  [[ -n "${KUBE_GCS_RELEASE_SUFFIX-}" ]] \
 | 
			
		||||
    && gcs_suffix_flag="--gcs-suffix=${KUBE_GCS_RELEASE_SUFFIX-}"
 | 
			
		||||
  ${push_build} ${bucket_flag-} ${federation_flag-} ${gcs_suffix_flag-} \
 | 
			
		||||
  ${push_build} ${bucket_flag-} ${gcs_suffix_flag-} \
 | 
			
		||||
    --nomock --verbose --ci
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -125,7 +125,6 @@ fi
 | 
			
		||||
# If you update this list, please also update build/BUILD.
 | 
			
		||||
readonly KUBE_CLIENT_TARGETS=(
 | 
			
		||||
  cmd/kubectl
 | 
			
		||||
  federation/cmd/kubefed
 | 
			
		||||
)
 | 
			
		||||
readonly KUBE_CLIENT_BINARIES=("${KUBE_CLIENT_TARGETS[@]##*/}")
 | 
			
		||||
readonly KUBE_CLIENT_BINARIES_WIN=("${KUBE_CLIENT_BINARIES[@]/%/.exe}")
 | 
			
		||||
@@ -140,7 +139,6 @@ kube::golang::test_targets() {
 | 
			
		||||
    cmd/genyaml
 | 
			
		||||
    cmd/genswaggertypedocs
 | 
			
		||||
    cmd/linkcheck
 | 
			
		||||
    federation/cmd/genfeddocs
 | 
			
		||||
    vendor/github.com/onsi/ginkgo/ginkgo
 | 
			
		||||
    test/e2e/e2e.test
 | 
			
		||||
  )
 | 
			
		||||
@@ -153,12 +151,10 @@ readonly KUBE_TEST_BINARIES_WIN=("${KUBE_TEST_BINARIES[@]/%/.exe}")
 | 
			
		||||
readonly KUBE_TEST_PORTABLE=(
 | 
			
		||||
  test/e2e/testing-manifests
 | 
			
		||||
  test/kubemark
 | 
			
		||||
  federation/develop
 | 
			
		||||
  hack/e2e.go
 | 
			
		||||
  hack/e2e-internal
 | 
			
		||||
  hack/get-build.sh
 | 
			
		||||
  hack/ginkgo-e2e.sh
 | 
			
		||||
  hack/federated-ginkgo-e2e.sh
 | 
			
		||||
  hack/lib
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -184,13 +184,6 @@ kube::util::gen-docs() {
 | 
			
		||||
  "${genkubedocs}" "${dest}/docs/admin/" "kube-scheduler"
 | 
			
		||||
  "${genkubedocs}" "${dest}/docs/admin/" "kubelet"
 | 
			
		||||
 | 
			
		||||
  # We don't really need federation-apiserver and federation-controller-manager
 | 
			
		||||
  # binaries to generate the docs. We just pass their names to decide which docs
 | 
			
		||||
  # to generate. The actual binary for running federation is hyperkube.
 | 
			
		||||
  "${genfeddocs}" "${dest}/docs/admin/" "federation-apiserver"
 | 
			
		||||
  "${genfeddocs}" "${dest}/docs/admin/" "federation-controller-manager"
 | 
			
		||||
  "${genfeddocs}" "${dest}/docs/admin/" "kubefed"
 | 
			
		||||
 | 
			
		||||
  mkdir -p "${dest}/docs/man/man1/"
 | 
			
		||||
  "${genman}" "${dest}/docs/man/man1/" "kube-apiserver"
 | 
			
		||||
  "${genman}" "${dest}/docs/man/man1/" "kube-controller-manager"
 | 
			
		||||
@@ -275,9 +268,6 @@ kube::util::group-version-to-pkg-path() {
 | 
			
		||||
    __internal)
 | 
			
		||||
      echo "pkg/api"
 | 
			
		||||
      ;;
 | 
			
		||||
    federation/v1beta1)
 | 
			
		||||
      echo "federation/apis/federation/v1beta1"
 | 
			
		||||
      ;;
 | 
			
		||||
    meta/v1)
 | 
			
		||||
      echo "vendor/k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
      ;;
 | 
			
		||||
 
 | 
			
		||||
@@ -33,15 +33,6 @@ sh_binary(
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
sh_binary(
 | 
			
		||||
    name = "test-federation-cmd",
 | 
			
		||||
    srcs = ["test-federation-cmd.sh"],
 | 
			
		||||
    deps = [
 | 
			
		||||
        ":test-cmd-util",
 | 
			
		||||
        "//hack/lib",
 | 
			
		||||
    ],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
sh_binary(
 | 
			
		||||
    name = "test-integration",
 | 
			
		||||
    srcs = ["test-cmd.sh"],
 | 
			
		||||
 
 | 
			
		||||
@@ -25,10 +25,8 @@ KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../..
 | 
			
		||||
ALL_TARGETS=$(make -C "${KUBE_ROOT}" PRINT_HELP=y -rpn | sed -n -e '/^$/ { n ; /^[^ .#][^ ]*:/ { s/:.*$// ; p ; } ; }' | sort)
 | 
			
		||||
CMD_TARGETS=$(ls -l "${KUBE_ROOT}/cmd" |awk '/^d/ {print $NF}')
 | 
			
		||||
PLUGIN_CMD_TARGETS=$(ls -l "${KUBE_ROOT}/plugin/cmd" |awk '/^d/ {print $NF}')
 | 
			
		||||
FED_CMD_TARGETS=$(ls -l "${KUBE_ROOT}/federation/cmd" |awk '/^d/ {print $NF}')
 | 
			
		||||
CMD_FLAG=false
 | 
			
		||||
PLUGIN_CMD_FLAG=false
 | 
			
		||||
FED_CMD_FLAG=false
 | 
			
		||||
 | 
			
		||||
echo "--------------------------------------------------------------------------------"
 | 
			
		||||
for tar in $ALL_TARGETS; do
 | 
			
		||||
@@ -62,21 +60,6 @@ for tar in $ALL_TARGETS; do
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	for fedcmdtar in $FED_CMD_TARGETS; do
 | 
			
		||||
		if [ $tar = $fedcmdtar ]; then
 | 
			
		||||
			if [ $FED_CMD_FLAG = true ]; then
 | 
			
		||||
				continue 2;
 | 
			
		||||
			fi
 | 
			
		||||
 | 
			
		||||
			echo -e "${red}${FED_CMD_TARGETS}${reset}"
 | 
			
		||||
			make -C "${KUBE_ROOT}" $tar PRINT_HELP=y
 | 
			
		||||
			echo "---------------------------------------------------------------------------------"
 | 
			
		||||
 | 
			
		||||
			FED_CMD_FLAG=true
 | 
			
		||||
			continue 2
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	echo -e "${red}${tar}${reset}"
 | 
			
		||||
	make -C "${KUBE_ROOT}" $tar PRINT_HELP=y
 | 
			
		||||
	echo "---------------------------------------------------------------------------------"
 | 
			
		||||
 
 | 
			
		||||
@@ -4587,8 +4587,6 @@ runTests() {
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  if kube::test::if_supports_resource "${pods}" ; then
 | 
			
		||||
    # TODO: Move apply tests to run on rs instead of pods so that they can be
 | 
			
		||||
    # run for federation apiserver as well.
 | 
			
		||||
    record_command run_kubectl_apply_tests
 | 
			
		||||
    record_command run_kubectl_run_tests
 | 
			
		||||
    record_command run_kubectl_create_filter_tests
 | 
			
		||||
@@ -4603,8 +4601,6 @@ runTests() {
 | 
			
		||||
  ###############
 | 
			
		||||
 | 
			
		||||
  if kube::test::if_supports_resource "${pods}" ; then
 | 
			
		||||
    # TODO: Move get tests to run on rs instead of pods so that they can be
 | 
			
		||||
    # run for federation apiserver as well.
 | 
			
		||||
    record_command run_kubectl_get_tests
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
@@ -4621,8 +4617,6 @@ runTests() {
 | 
			
		||||
  ##################
 | 
			
		||||
 | 
			
		||||
  if kube::test::if_supports_resource "${pods}" ; then
 | 
			
		||||
    # TODO: Move request timeout tests to run on rs instead of pods so that they
 | 
			
		||||
    # can be run for federation apiserver as well.
 | 
			
		||||
    record_command run_kubectl_request_timeout_tests
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,91 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2016 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.
 | 
			
		||||
 | 
			
		||||
# This command checks that the built commands can function together for
 | 
			
		||||
# simple scenarios.  It does not require Docker.
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/../..
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/init.sh"
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/test.sh"
 | 
			
		||||
source "${KUBE_ROOT}/hack/make-rules/test-cmd-util.sh"
 | 
			
		||||
 | 
			
		||||
function run_federation_apiserver() {
 | 
			
		||||
  kube::log::status "Building federation-apiserver"
 | 
			
		||||
  make -C "${KUBE_ROOT}" WHAT="federation/cmd/federation-apiserver"
 | 
			
		||||
 | 
			
		||||
  # Start federation-apiserver
 | 
			
		||||
  kube::log::status "Starting federation-apiserver"
 | 
			
		||||
 | 
			
		||||
  # Admission Controllers to invoke prior to persisting objects in cluster
 | 
			
		||||
  ADMISSION_CONTROL="NamespaceLifecycle"
 | 
			
		||||
 | 
			
		||||
  "${KUBE_OUTPUT_HOSTBIN}/federation-apiserver" \
 | 
			
		||||
    --insecure-port="${API_PORT}" \
 | 
			
		||||
    --secure-port="${SECURE_API_PORT}" \
 | 
			
		||||
    --admission-control="${ADMISSION_CONTROL}" \
 | 
			
		||||
    --etcd-servers="http://${ETCD_HOST}:${ETCD_PORT}" \
 | 
			
		||||
    --storage-media-type="${KUBE_TEST_API_STORAGE_TYPE-}" \
 | 
			
		||||
    --cert-dir="${TMPDIR:-/tmp/}" \
 | 
			
		||||
    --token-auth-file=hack/testdata/auth-tokens.csv 1>&2 &
 | 
			
		||||
  APISERVER_PID=$!
 | 
			
		||||
 | 
			
		||||
  kube::util::wait_for_url "http://127.0.0.1:${API_PORT}/healthz" "apiserver"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function run_federation_controller_manager() {
 | 
			
		||||
  kube::log::status "Building federation-controller-manager"
 | 
			
		||||
  make -C "${KUBE_ROOT}" WHAT="federation/cmd/federation-controller-manager"
 | 
			
		||||
 | 
			
		||||
  # Create a kubeconfig for federation apiserver.
 | 
			
		||||
  local kubeconfig="${KUBE_TEMP}/kubeconfig"
 | 
			
		||||
  touch "${kubeconfig}"
 | 
			
		||||
  kubectl config set-cluster "apiserver" --server="http://127.0.0.1:${API_PORT}" --insecure-skip-tls-verify=true --kubeconfig="${kubeconfig}"
 | 
			
		||||
  kubectl config set-context "context" --cluster="apiserver" --kubeconfig="${kubeconfig}"
 | 
			
		||||
  kubectl config use-context "context" --kubeconfig="${kubeconfig}"
 | 
			
		||||
 | 
			
		||||
  # Start controller manager
 | 
			
		||||
  kube::log::status "Starting federation-controller-manager"
 | 
			
		||||
  "${KUBE_OUTPUT_HOSTBIN}/federation-controller-manager" \
 | 
			
		||||
    --port="${CTLRMGR_PORT}" \
 | 
			
		||||
    --kubeconfig="${kubeconfig}" \
 | 
			
		||||
    --kube-api-content-type="${KUBE_TEST_API_TYPE-}" \
 | 
			
		||||
    --controllers="service-dns=false" \
 | 
			
		||||
    --master="127.0.0.1:${API_PORT}" 1>&2 &
 | 
			
		||||
  CTLRMGR_PID=$!
 | 
			
		||||
 | 
			
		||||
  kube::util::wait_for_url "http://127.0.0.1:${CTLRMGR_PORT}/healthz" "controller-manager"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
kube::log::status "Running kubectl tests for federation-apiserver"
 | 
			
		||||
 | 
			
		||||
setup
 | 
			
		||||
run_federation_apiserver
 | 
			
		||||
run_federation_controller_manager
 | 
			
		||||
# TODO: Fix for replicasets and deployments.
 | 
			
		||||
SUPPORTED_RESOURCES=("configmaps" "daemonsets" "events" "ingress" "namespaces" "services" "secrets")
 | 
			
		||||
# Set wait for deletion to true for federation apiserver since resources are
 | 
			
		||||
# deleted asynchronously.
 | 
			
		||||
# This is a temporary workaround until https://github.com/kubernetes/kubernetes/issues/42594 is fixed.
 | 
			
		||||
WAIT_FOR_DELETION="true"
 | 
			
		||||
# WARNING: Do not wrap this call in a subshell to capture output, e.g. output=$(runTests)
 | 
			
		||||
# Doing so will suppress errexit behavior inside runTests
 | 
			
		||||
runTests
 | 
			
		||||
 | 
			
		||||
kube::log::status "TESTS PASSED"
 | 
			
		||||
@@ -49,9 +49,6 @@ kube::test::find_integration_test_dirs() {
 | 
			
		||||
    find vendor/k8s.io/apiextensions-apiserver/test/integration/ -name '*_test.go' -print0 \
 | 
			
		||||
      | xargs -0n1 dirname | sed "s|^|${KUBE_GO_PACKAGE}/|" \
 | 
			
		||||
      | LC_ALL=C sort -u
 | 
			
		||||
    find federation/test/integration/ -name '*_test.go' -print0 \
 | 
			
		||||
      | xargs -0n1 dirname | sed "s|^|${KUBE_GO_PACKAGE}/|" \
 | 
			
		||||
      | LC_ALL=C sort -u
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,6 @@ kube::test::find_dirs() {
 | 
			
		||||
          -o -path './third_party/*' \
 | 
			
		||||
          -o -path './staging/*' \
 | 
			
		||||
          -o -path './vendor/*' \
 | 
			
		||||
          -o -path './federation/test/*' \
 | 
			
		||||
        \) -prune \
 | 
			
		||||
      \) -name '*_test.go' -print0 | xargs -0n1 dirname | sed "s|^\./|${KUBE_GO_PACKAGE}/|" | LC_ALL=C sort -u
 | 
			
		||||
 | 
			
		||||
@@ -113,7 +112,7 @@ KUBE_GOVERALLS_BIN=${KUBE_GOVERALLS_BIN:-}
 | 
			
		||||
# "v1,compute/v1alpha1,experimental/v1alpha2;v1,compute/v2,experimental/v1alpha3"
 | 
			
		||||
# FIXME: due to current implementation of a test client (see: pkg/api/testapi/testapi.go)
 | 
			
		||||
# ONLY the last version is tested in each group.
 | 
			
		||||
ALL_VERSIONS_CSV=$(IFS=',';echo "${KUBE_AVAILABLE_GROUP_VERSIONS[*]// /,}";IFS=$),federation/v1beta1
 | 
			
		||||
ALL_VERSIONS_CSV=$(IFS=',';echo "${KUBE_AVAILABLE_GROUP_VERSIONS[*]// /,}";IFS=$)
 | 
			
		||||
KUBE_TEST_API_VERSIONS="${KUBE_TEST_API_VERSIONS:-${ALL_VERSIONS_CSV}}"
 | 
			
		||||
# once we have multiple group supports
 | 
			
		||||
# Create a junit-style XML test report in this directory if set.
 | 
			
		||||
 
 | 
			
		||||
@@ -63,10 +63,6 @@ BASH_TARGETS="
 | 
			
		||||
	update-swagger-spec
 | 
			
		||||
	update-openapi-spec
 | 
			
		||||
	update-api-reference-docs
 | 
			
		||||
	update-federation-openapi-spec
 | 
			
		||||
	update-federation-swagger-spec
 | 
			
		||||
	update-federation-generated-swagger-docs
 | 
			
		||||
	update-federation-api-reference-docs
 | 
			
		||||
	update-staging-godeps
 | 
			
		||||
	update-bazel"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -61,14 +61,12 @@ GV_DIRS_CSV=$(IFS=',';echo "${GV_DIRS[*]// /,}";IFS=$)
 | 
			
		||||
# update- and verify- scripts.
 | 
			
		||||
${clientgen} "$@"
 | 
			
		||||
${clientgen} --output-base "${KUBE_ROOT}/vendor" --clientset-path="k8s.io/client-go" --clientset-name="kubernetes" --input-base="k8s.io/kubernetes/vendor/k8s.io/api" --input="${GV_DIRS_CSV}" "$@"
 | 
			
		||||
# Clientgen for federation clientset.
 | 
			
		||||
${clientgen} --clientset-name=federation_clientset --clientset-path=k8s.io/kubernetes/federation/client/clientset_generated --input-base="k8s.io/kubernetes/vendor/k8s.io/api" --input="../../../federation/apis/federation/v1beta1","core/v1","extensions/v1beta1","batch/v1","autoscaling/v1" --included-types-overrides="core/v1/Service,core/v1/Namespace,extensions/v1beta1/ReplicaSet,core/v1/Secret,extensions/v1beta1/Ingress,extensions/v1beta1/Deployment,extensions/v1beta1/DaemonSet,core/v1/ConfigMap,core/v1/Event,batch/v1/Job,autoscaling/v1/HorizontalPodAutoscaler"   "$@"
 | 
			
		||||
 | 
			
		||||
listergen_internal_apis=(
 | 
			
		||||
pkg/api
 | 
			
		||||
$(
 | 
			
		||||
  cd ${KUBE_ROOT}
 | 
			
		||||
  find pkg/apis -maxdepth 2 -name types.go | xargs -n1 dirname | sort 
 | 
			
		||||
  find pkg/apis -maxdepth 2 -name types.go | xargs -n1 dirname | sort
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
listergen_internal_apis=(${listergen_internal_apis[@]/#/k8s.io/kubernetes/})
 | 
			
		||||
@@ -89,7 +87,7 @@ informergen_internal_apis=(
 | 
			
		||||
pkg/api
 | 
			
		||||
$(
 | 
			
		||||
  cd ${KUBE_ROOT}
 | 
			
		||||
  find pkg/apis -maxdepth 2 -name types.go | xargs -n1 dirname | sort 
 | 
			
		||||
  find pkg/apis -maxdepth 2 -name types.go | xargs -n1 dirname | sort
 | 
			
		||||
)
 | 
			
		||||
)
 | 
			
		||||
informergen_internal_apis=(${informergen_internal_apis[@]/#/k8s.io/kubernetes/})
 | 
			
		||||
 
 | 
			
		||||
@@ -1,50 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2016 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.
 | 
			
		||||
 | 
			
		||||
# Generates updated api-reference docs from the latest swagger spec for
 | 
			
		||||
# federation apiserver. The docs are generated at federation/docs/api-reference
 | 
			
		||||
# Usage: ./update-federation-api-reference-docs.sh <absolute output path>
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
echo "Note: This assumes that swagger spec has been updated. Please run hack/update-federation-swagger-spec.sh to ensure that."
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/init.sh"
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/swagger.sh"
 | 
			
		||||
kube::golang::setup_env
 | 
			
		||||
 | 
			
		||||
REPO_DIR=${REPO_DIR:-"${KUBE_ROOT}"}
 | 
			
		||||
DEFAULT_OUTPUT="${REPO_DIR}/federation/docs/api-reference"
 | 
			
		||||
OUTPUT=${1:-${DEFAULT_OUTPUT}}
 | 
			
		||||
 | 
			
		||||
SWAGGER_SPEC_PATH="${REPO_DIR}/federation/apis/swagger-spec"
 | 
			
		||||
 | 
			
		||||
GROUP_VERSIONS=("federation/v1beta1" "v1" "extensions/v1beta1")
 | 
			
		||||
GV_DIRS=()
 | 
			
		||||
for gv in "${GROUP_VERSIONS[@]}"; do
 | 
			
		||||
  if [[ ${gv} == "federation/v1beta1" ]]; then
 | 
			
		||||
    GV_DIRS+=("${REPO_DIR}/$(kube::util::group-version-to-pkg-path "${gv}")")
 | 
			
		||||
  else
 | 
			
		||||
    GV_DIRS+=("${REPO_DIR}/$(kube::util::group-version-to-pkg-path "${gv}")")
 | 
			
		||||
  fi
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
GROUP_VERSIONS="${GROUP_VERSIONS[@]}" GV_DIRS="${GV_DIRS[@]}" kube::swagger::gen_api_ref_docs "${SWAGGER_SPEC_PATH}" "${OUTPUT}"
 | 
			
		||||
 | 
			
		||||
# ex: ts=2 sw=2 et filetype=sh
 | 
			
		||||
@@ -1,43 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2016 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.
 | 
			
		||||
 | 
			
		||||
# Generates `types_swagger_doc_generated.go` files for federation API group
 | 
			
		||||
# versions. That file contains functions on API structs that return the comments
 | 
			
		||||
# that should be surfaced for the corresponding API type in our API docs.
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/init.sh"
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/swagger.sh"
 | 
			
		||||
 | 
			
		||||
kube::golang::setup_env
 | 
			
		||||
 | 
			
		||||
GROUP_VERSIONS=(federation/v1beta1)
 | 
			
		||||
GV_DIRS=()
 | 
			
		||||
for gv in "${GROUP_VERSIONS[@]}"; do
 | 
			
		||||
  GV_DIRS+=("$(kube::util::group-version-to-pkg-path "${gv}")")
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
# To avoid compile errors, remove the currently existing files.
 | 
			
		||||
for gv_dir in "${GV_DIRS[@]}"; do
 | 
			
		||||
  rm -f "${gv_dir}/types_swagger_doc_generated.go"
 | 
			
		||||
done
 | 
			
		||||
for i in "${!GROUP_VERSIONS[@]}"; do
 | 
			
		||||
  kube::swagger::gen_types_swagger_doc "${GROUP_VERSIONS[i]}" "${GV_DIRS[i]}"
 | 
			
		||||
done
 | 
			
		||||
@@ -1,74 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2015 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.
 | 
			
		||||
 | 
			
		||||
# Script to fetch latest openapi spec from federation-apiserver
 | 
			
		||||
# Puts the updated spec at federation/apis/openapi-spec/
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 | 
			
		||||
OPENAPI_ROOT_DIR="${KUBE_ROOT}/federation/apis/openapi-spec"
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/init.sh"
 | 
			
		||||
 | 
			
		||||
kube::golang::setup_env
 | 
			
		||||
 | 
			
		||||
make -C "${KUBE_ROOT}" WHAT="cmd/hyperkube"
 | 
			
		||||
 | 
			
		||||
function cleanup()
 | 
			
		||||
{
 | 
			
		||||
    [[ -n "${APISERVER_PID-}" ]] && kill ${APISERVER_PID} 1>&2 2>/dev/null
 | 
			
		||||
 | 
			
		||||
    kube::etcd::cleanup
 | 
			
		||||
 | 
			
		||||
    kube::log::status "Clean up complete"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
trap cleanup EXIT SIGINT
 | 
			
		||||
 | 
			
		||||
kube::golang::setup_env
 | 
			
		||||
 | 
			
		||||
TMP_DIR=$(mktemp -d /tmp/update-federation-openapi-spec.XXXX)
 | 
			
		||||
ETCD_HOST=${ETCD_HOST:-127.0.0.1}
 | 
			
		||||
ETCD_PORT=${ETCD_PORT:-2379}
 | 
			
		||||
API_PORT=${API_PORT:-8050}
 | 
			
		||||
API_HOST=${API_HOST:-127.0.0.1}
 | 
			
		||||
 | 
			
		||||
kube::etcd::start
 | 
			
		||||
 | 
			
		||||
echo "dummy_token,admin,admin" > $TMP_DIR/tokenauth.csv
 | 
			
		||||
 | 
			
		||||
# Start federation-apiserver
 | 
			
		||||
kube::log::status "Starting federation-apiserver"
 | 
			
		||||
"${KUBE_OUTPUT_HOSTBIN}/hyperkube" federation-apiserver \
 | 
			
		||||
  --insecure-bind-address="${API_HOST}" \
 | 
			
		||||
  --bind-address="${API_HOST}" \
 | 
			
		||||
  --insecure-port="${API_PORT}" \
 | 
			
		||||
  --etcd-servers="http://${ETCD_HOST}:${ETCD_PORT}" \
 | 
			
		||||
  --advertise-address="10.10.10.10" \
 | 
			
		||||
  --cert-dir="${TMP_DIR}/certs" \
 | 
			
		||||
  --token-auth-file=$TMP_DIR/tokenauth.csv >/tmp/openapi-federation-api-server.log 2>&1 &
 | 
			
		||||
APISERVER_PID=$!
 | 
			
		||||
kube::util::wait_for_url "${API_HOST}:${API_PORT}/healthz" "apiserver: "
 | 
			
		||||
 | 
			
		||||
kube::log::status "Updating " ${OPENAPI_ROOT_DIR}
 | 
			
		||||
 | 
			
		||||
curl -w "\n" -fs "${API_HOST}:${API_PORT}/swagger.json" > "${OPENAPI_ROOT_DIR}/swagger.json"
 | 
			
		||||
 | 
			
		||||
kube::log::status "SUCCESS"
 | 
			
		||||
 | 
			
		||||
# ex: ts=2 sw=2 et filetype=sh
 | 
			
		||||
@@ -1,83 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2015 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.
 | 
			
		||||
 | 
			
		||||
# Script to fetch latest swagger spec from federation-apiserver
 | 
			
		||||
# Puts the updated spec at federation/apis/swagger-spec/
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
cat << __EOF__
 | 
			
		||||
Note: This assumes that the 'types_swagger_doc_generated.go' file has been
 | 
			
		||||
updated for all API group versions. If you are unsure, please run
 | 
			
		||||
hack/update-generated-swagger-docs.sh and
 | 
			
		||||
hack/update-federation-generated-swagger-docs.sh first.
 | 
			
		||||
__EOF__
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 | 
			
		||||
SWAGGER_ROOT_DIR="${KUBE_ROOT}/federation/apis/swagger-spec"
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/init.sh"
 | 
			
		||||
 | 
			
		||||
kube::golang::setup_env
 | 
			
		||||
 | 
			
		||||
make -C "${KUBE_ROOT}" WHAT="cmd/hyperkube"
 | 
			
		||||
 | 
			
		||||
function cleanup()
 | 
			
		||||
{
 | 
			
		||||
    [[ -n ${APISERVER_PID-} ]] && kill ${APISERVER_PID} 1>&2 2>/dev/null
 | 
			
		||||
 | 
			
		||||
    kube::etcd::cleanup
 | 
			
		||||
 | 
			
		||||
    kube::log::status "Clean up complete"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
trap cleanup EXIT SIGINT
 | 
			
		||||
 | 
			
		||||
kube::golang::setup_env
 | 
			
		||||
 | 
			
		||||
TMP_DIR=$(mktemp -d /tmp/update-federation-swagger-spec.XXXX)
 | 
			
		||||
ETCD_HOST=${ETCD_HOST:-127.0.0.1}
 | 
			
		||||
ETCD_PORT=${ETCD_PORT:-2379}
 | 
			
		||||
API_PORT=${API_PORT:-8050}
 | 
			
		||||
API_HOST=${API_HOST:-127.0.0.1}
 | 
			
		||||
 | 
			
		||||
kube::etcd::start
 | 
			
		||||
 | 
			
		||||
# Start federation-apiserver
 | 
			
		||||
kube::log::status "Starting federation-apiserver"
 | 
			
		||||
"${KUBE_OUTPUT_HOSTBIN}/hyperkube" federation-apiserver \
 | 
			
		||||
  --insecure-bind-address="${API_HOST}" \
 | 
			
		||||
  --bind-address="${API_HOST}" \
 | 
			
		||||
  --insecure-port="${API_PORT}" \
 | 
			
		||||
  --etcd-servers="http://${ETCD_HOST}:${ETCD_PORT}" \
 | 
			
		||||
  --advertise-address="10.10.10.10" \
 | 
			
		||||
  --cert-dir="${TMP_DIR}/certs"  >/tmp/swagger-federation-api-server.log 2>&1 &
 | 
			
		||||
APISERVER_PID=$!
 | 
			
		||||
 | 
			
		||||
kube::util::wait_for_url "${API_HOST}:${API_PORT}/" "apiserver: "
 | 
			
		||||
 | 
			
		||||
SWAGGER_API_PATH="${API_HOST}:${API_PORT}/swaggerapi/"
 | 
			
		||||
DEFAULT_GROUP_VERSIONS="v1 extensions/v1beta1 federation/v1beta1"
 | 
			
		||||
VERSIONS=${VERSIONS:-$DEFAULT_GROUP_VERSIONS}
 | 
			
		||||
 | 
			
		||||
kube::log::status "Updating " ${SWAGGER_ROOT_DIR}
 | 
			
		||||
 | 
			
		||||
SWAGGER_API_PATH="${SWAGGER_API_PATH}" SWAGGER_ROOT_DIR="${SWAGGER_ROOT_DIR}" VERSIONS="${VERSIONS}" kube::util::fetch-swagger-spec
 | 
			
		||||
 | 
			
		||||
kube::log::status "SUCCESS"
 | 
			
		||||
 | 
			
		||||
# ex: ts=2 sw=2 et filetype=sh
 | 
			
		||||
@@ -32,7 +32,6 @@ BINS=(
 | 
			
		||||
	cmd/genkubedocs
 | 
			
		||||
	cmd/genman
 | 
			
		||||
	cmd/genyaml
 | 
			
		||||
	federation/cmd/genfeddocs
 | 
			
		||||
)
 | 
			
		||||
make -C "${KUBE_ROOT}" WHAT="${BINS[*]}"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -72,7 +72,6 @@ PACKAGES=(
 | 
			
		||||
  k8s.io/api/admissionregistration/v1alpha1
 | 
			
		||||
  k8s.io/api/admission/v1alpha1
 | 
			
		||||
  k8s.io/api/networking/v1
 | 
			
		||||
  k8s.io/kubernetes/federation/apis/federation/v1beta1
 | 
			
		||||
  k8s.io/metrics/pkg/apis/metrics/v1alpha1
 | 
			
		||||
  k8s.io/metrics/pkg/apis/metrics/v1beta1
 | 
			
		||||
  k8s.io/metrics/pkg/apis/custom_metrics/v1beta1
 | 
			
		||||
 
 | 
			
		||||
@@ -14,9 +14,10 @@
 | 
			
		||||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
 | 
			
		||||
# Generates `types_swagger_doc_generated.go` files for federation API group
 | 
			
		||||
# versions. That file contains functions on API structs that return the comments
 | 
			
		||||
# that should be surfaced for the corresponding API type in our API docs.
 | 
			
		||||
# Generates `types_swagger_doc_generated.go` files for API group
 | 
			
		||||
# versions. That file contains functions on API structs that return
 | 
			
		||||
# the comments that should be surfaced for the corresponding API type
 | 
			
		||||
# in our API docs.
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
 
 | 
			
		||||
@@ -1,48 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# 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.
 | 
			
		||||
 | 
			
		||||
# Verifies that api reference docs are up to date.
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/init.sh"
 | 
			
		||||
 | 
			
		||||
kube::golang::setup_env
 | 
			
		||||
 | 
			
		||||
API_REFERENCE_DOCS_ROOT="${KUBE_ROOT}/federation/docs/api-reference"
 | 
			
		||||
OUTPUT_DIR="${KUBE_ROOT}/_tmp_federation/api-reference"
 | 
			
		||||
mkdir -p ${OUTPUT_DIR}
 | 
			
		||||
TMP_ROOT="${KUBE_ROOT}/_tmp_federation"
 | 
			
		||||
trap "rm -rf ${TMP_ROOT}" EXIT SIGINT
 | 
			
		||||
 | 
			
		||||
# Generate API reference docs in tmp.
 | 
			
		||||
"./hack/update-federation-api-reference-docs.sh" "${OUTPUT_DIR}"
 | 
			
		||||
 | 
			
		||||
echo "diffing ${API_REFERENCE_DOCS_ROOT} against freshly generated docs"
 | 
			
		||||
ret=0
 | 
			
		||||
diff -NauprB -I 'Last update' --exclude=*.md "${API_REFERENCE_DOCS_ROOT}" "${OUTPUT_DIR}" || ret=$?
 | 
			
		||||
if [[ $ret -eq 0 ]]
 | 
			
		||||
then
 | 
			
		||||
  echo "${API_REFERENCE_DOCS_ROOT} up to date."
 | 
			
		||||
else
 | 
			
		||||
  echo "${API_REFERENCE_DOCS_ROOT} is out of date. Please run hack/update-federation-api-reference-docs.sh"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# ex: ts=2 sw=2 et filetype=sh
 | 
			
		||||
@@ -1,66 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# 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.
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/init.sh"
 | 
			
		||||
 | 
			
		||||
kube::golang::setup_env
 | 
			
		||||
 | 
			
		||||
make -C "${KUBE_ROOT}" WHAT=cmd/genswaggertypedocs
 | 
			
		||||
 | 
			
		||||
# Find binary
 | 
			
		||||
genswaggertypedocs=$(kube::util::find-binary "genswaggertypedocs")
 | 
			
		||||
 | 
			
		||||
if [[ ! -x "$genswaggertypedocs" ]]; then
 | 
			
		||||
  {
 | 
			
		||||
    echo "It looks as if you don't have a compiled genswaggertypedocs binary"
 | 
			
		||||
    echo
 | 
			
		||||
    echo "If you are running from a clone of the git repo, please run"
 | 
			
		||||
    echo "'make WHAT=cmd/genswaggertypedocs'."
 | 
			
		||||
  } >&2
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
DIFFROOT="${KUBE_ROOT}/federation"
 | 
			
		||||
TMP_DIFFROOT="${KUBE_ROOT}/_tmp/federation"
 | 
			
		||||
_tmp="${KUBE_ROOT}/_tmp_federation"
 | 
			
		||||
 | 
			
		||||
cleanup() {
 | 
			
		||||
  rm -rf "${_tmp}"
 | 
			
		||||
}
 | 
			
		||||
trap "cleanup" EXIT SIGINT
 | 
			
		||||
 | 
			
		||||
cleanup
 | 
			
		||||
 | 
			
		||||
mkdir -p "${TMP_DIFFROOT}"
 | 
			
		||||
cp -a "${DIFFROOT}"/* "${TMP_DIFFROOT}/"
 | 
			
		||||
 | 
			
		||||
"${KUBE_ROOT}/hack/update-federation-generated-swagger-docs.sh"
 | 
			
		||||
echo "diffing ${DIFFROOT} against freshly generated swagger type documentation"
 | 
			
		||||
ret=0
 | 
			
		||||
diff -Naupr -I 'Auto generated by' "${DIFFROOT}" "${TMP_DIFFROOT}" || ret=$?
 | 
			
		||||
cp -a "${TMP_DIFFROOT}"/* "${DIFFROOT}/"
 | 
			
		||||
if [[ $ret -eq 0 ]]
 | 
			
		||||
then
 | 
			
		||||
  echo "${DIFFROOT} up to date."
 | 
			
		||||
else
 | 
			
		||||
  echo "${DIFFROOT} is out of date. Please run hack/update-federation-generated-swagger-docs.sh"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
@@ -1,47 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Copyright 2016 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.
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/init.sh"
 | 
			
		||||
 | 
			
		||||
kube::golang::setup_env
 | 
			
		||||
 | 
			
		||||
SPECROOT="${KUBE_ROOT}/federation/apis/openapi-spec"
 | 
			
		||||
TMP_SPECROOT="${KUBE_ROOT}/_tmp_federation/openapi-spec"
 | 
			
		||||
_tmp="${KUBE_ROOT}/_tmp_federation"
 | 
			
		||||
 | 
			
		||||
mkdir -p "${_tmp}"
 | 
			
		||||
cp -a "${SPECROOT}" "${TMP_SPECROOT}"
 | 
			
		||||
trap "cp -a ${TMP_SPECROOT} ${SPECROOT}/..; rm -rf ${_tmp}" EXIT SIGINT
 | 
			
		||||
rm ${SPECROOT}/*
 | 
			
		||||
 | 
			
		||||
"${KUBE_ROOT}/hack/update-federation-openapi-spec.sh"
 | 
			
		||||
echo "diffing ${SPECROOT} against freshly generated federation openapi spec"
 | 
			
		||||
ret=0
 | 
			
		||||
diff -Naupr -I 'Auto generated by' "${SPECROOT}" "${TMP_SPECROOT}" || ret=$?
 | 
			
		||||
if [[ $ret -eq 0 ]]
 | 
			
		||||
then
 | 
			
		||||
  echo "${SPECROOT} up to date."
 | 
			
		||||
else
 | 
			
		||||
  echo "${SPECROOT} is out of date. Please run hack/update-federation-openapi-spec.sh"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# ex: ts=2 sw=2 et filetype=sh
 | 
			
		||||
@@ -1,51 +0,0 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# 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.
 | 
			
		||||
 | 
			
		||||
set -o errexit
 | 
			
		||||
set -o nounset
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
 | 
			
		||||
source "${KUBE_ROOT}/hack/lib/init.sh"
 | 
			
		||||
 | 
			
		||||
kube::golang::setup_env
 | 
			
		||||
 | 
			
		||||
make -C "${KUBE_ROOT}" WHAT=federation/cmd/federation-apiserver
 | 
			
		||||
 | 
			
		||||
apiserver=$(kube::util::find-binary "federation-apiserver")
 | 
			
		||||
 | 
			
		||||
SPECROOT="${KUBE_ROOT}/federation/apis/swagger-spec"
 | 
			
		||||
TMP_SPECROOT="${KUBE_ROOT}/_tmp_federation/swagger-spec"
 | 
			
		||||
_tmp="${KUBE_ROOT}/_tmp_federation"
 | 
			
		||||
 | 
			
		||||
mkdir -p "${_tmp}"
 | 
			
		||||
trap "rm -rf ${_tmp}" EXIT SIGINT
 | 
			
		||||
cp -a "${SPECROOT}" "${TMP_SPECROOT}"
 | 
			
		||||
 | 
			
		||||
"${KUBE_ROOT}/hack/update-federation-swagger-spec.sh"
 | 
			
		||||
echo "diffing ${SPECROOT} against freshly generated federation swagger spec"
 | 
			
		||||
ret=0
 | 
			
		||||
diff -Naupr -I 'Auto generated by' "${SPECROOT}" "${TMP_SPECROOT}" || ret=$?
 | 
			
		||||
cp -a ${TMP_SPECROOT} "${KUBE_ROOT}/federation/apis"
 | 
			
		||||
if [[ $ret -eq 0 ]]
 | 
			
		||||
then
 | 
			
		||||
  echo "${SPECROOT} up to date."
 | 
			
		||||
else
 | 
			
		||||
  echo "${SPECROOT} is out of date. Please run hack/update-federation-swagger-spec.sh"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# ex: ts=2 sw=2 et filetype=sh
 | 
			
		||||
@@ -28,7 +28,6 @@ BINS=(
 | 
			
		||||
	cmd/genkubedocs
 | 
			
		||||
	cmd/genman
 | 
			
		||||
	cmd/genyaml
 | 
			
		||||
	federation/cmd/genfeddocs
 | 
			
		||||
)
 | 
			
		||||
make -C "${KUBE_ROOT}" WHAT="${BINS[*]}"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -11,8 +11,6 @@ go_library(
 | 
			
		||||
    srcs = ["testapi.go"],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/api/testapi",
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//federation/apis/federation:go_default_library",
 | 
			
		||||
        "//federation/apis/federation/install:go_default_library",
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/api/install:go_default_library",
 | 
			
		||||
        "//pkg/api/legacyscheme:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,6 @@ import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime/serializer/recognizer"
 | 
			
		||||
	"k8s.io/kubernetes/federation/apis/federation"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/legacyscheme"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/admission"
 | 
			
		||||
@@ -53,7 +52,6 @@ import (
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/settings"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/storage"
 | 
			
		||||
 | 
			
		||||
	_ "k8s.io/kubernetes/federation/apis/federation/install"
 | 
			
		||||
	_ "k8s.io/kubernetes/pkg/api/install"
 | 
			
		||||
	_ "k8s.io/kubernetes/pkg/apis/admission/install"
 | 
			
		||||
	_ "k8s.io/kubernetes/pkg/apis/admissionregistration/install"
 | 
			
		||||
@@ -83,7 +81,6 @@ var (
 | 
			
		||||
	Extensions    TestGroup
 | 
			
		||||
	Apps          TestGroup
 | 
			
		||||
	Policy        TestGroup
 | 
			
		||||
	Federation    TestGroup
 | 
			
		||||
	Rbac          TestGroup
 | 
			
		||||
	Certificates  TestGroup
 | 
			
		||||
	Scheduling    TestGroup
 | 
			
		||||
@@ -227,15 +224,6 @@ func init() {
 | 
			
		||||
			externalTypes:        legacyscheme.Scheme.KnownTypes(externalGroupVersion),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if _, ok := Groups[federation.GroupName]; !ok {
 | 
			
		||||
		externalGroupVersion := schema.GroupVersion{Group: federation.GroupName, Version: legacyscheme.Registry.GroupOrDie(federation.GroupName).GroupVersion.Version}
 | 
			
		||||
		Groups[federation.GroupName] = TestGroup{
 | 
			
		||||
			externalGroupVersion: externalGroupVersion,
 | 
			
		||||
			internalGroupVersion: federation.SchemeGroupVersion,
 | 
			
		||||
			internalTypes:        legacyscheme.Scheme.KnownTypes(federation.SchemeGroupVersion),
 | 
			
		||||
			externalTypes:        legacyscheme.Scheme.KnownTypes(externalGroupVersion),
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if _, ok := Groups[rbac.GroupName]; !ok {
 | 
			
		||||
		externalGroupVersion := schema.GroupVersion{Group: rbac.GroupName, Version: legacyscheme.Registry.GroupOrDie(rbac.GroupName).GroupVersion.Version}
 | 
			
		||||
		Groups[rbac.GroupName] = TestGroup{
 | 
			
		||||
@@ -334,7 +322,6 @@ func init() {
 | 
			
		||||
	Policy = Groups[policy.GroupName]
 | 
			
		||||
	Certificates = Groups[certificates.GroupName]
 | 
			
		||||
	Extensions = Groups[extensions.GroupName]
 | 
			
		||||
	Federation = Groups[federation.GroupName]
 | 
			
		||||
	Rbac = Groups[rbac.GroupName]
 | 
			
		||||
	Scheduling = Groups[scheduling.GroupName]
 | 
			
		||||
	Settings = Groups[settings.GroupName]
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,6 @@ openapi_library(
 | 
			
		||||
    srcs = ["doc.go"],
 | 
			
		||||
    go_prefix = openapi_go_prefix,
 | 
			
		||||
    openapi_targets = [
 | 
			
		||||
        "federation/apis/federation/v1beta1",
 | 
			
		||||
        "pkg/apis/abac/v0",
 | 
			
		||||
        "pkg/apis/abac/v1beta1",
 | 
			
		||||
        "pkg/apis/componentconfig/v1alpha1",
 | 
			
		||||
 
 | 
			
		||||
@@ -210,7 +210,6 @@ __custom_func() {
 | 
			
		||||
    * certificatesigningrequests (aka 'csr')
 | 
			
		||||
    * clusterrolebindings
 | 
			
		||||
    * clusterroles
 | 
			
		||||
    * clusters (valid only for federation apiservers)
 | 
			
		||||
    * componentstatuses (aka 'cs')
 | 
			
		||||
    * configmaps (aka 'cm')
 | 
			
		||||
    * controllerrevisions
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,6 @@ go_library(
 | 
			
		||||
        "//build/visible_to:pkg_kubectl_cmd_testing_CONSUMERS",
 | 
			
		||||
    ],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//federation/client/clientset_generated/federation_clientset:go_default_library",
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/api/legacyscheme:go_default_library",
 | 
			
		||||
        "//pkg/api/testapi:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,6 @@ import (
 | 
			
		||||
	"k8s.io/client-go/kubernetes"
 | 
			
		||||
	restclient "k8s.io/client-go/rest"
 | 
			
		||||
	"k8s.io/client-go/rest/fake"
 | 
			
		||||
	fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/legacyscheme"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/testapi"
 | 
			
		||||
@@ -331,12 +330,6 @@ func (f *FakeFactory) ClientForMapping(mapping *meta.RESTMapping) (resource.REST
 | 
			
		||||
	return f.tf.Client, f.tf.Err
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *FakeFactory) FederationClientSetForVersion(version *schema.GroupVersion) (fedclientset.Interface, error) {
 | 
			
		||||
	return nil, nil
 | 
			
		||||
}
 | 
			
		||||
func (f *FakeFactory) FederationClientForVersion(version *schema.GroupVersion) (*restclient.RESTClient, error) {
 | 
			
		||||
	return nil, nil
 | 
			
		||||
}
 | 
			
		||||
func (f *FakeFactory) ClientSetForVersion(requiredVersion *schema.GroupVersion) (internalclientset.Interface, error) {
 | 
			
		||||
	return nil, nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,8 +22,6 @@ go_library(
 | 
			
		||||
        "//build/visible_to:pkg_kubectl_cmd_util_CONSUMERS",
 | 
			
		||||
    ],
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//federation/apis/federation:go_default_library",
 | 
			
		||||
        "//federation/client/clientset_generated/federation_clientset:go_default_library",
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/api/legacyscheme:go_default_library",
 | 
			
		||||
        "//pkg/api/v1:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -24,7 +24,6 @@ import (
 | 
			
		||||
	"k8s.io/client-go/kubernetes"
 | 
			
		||||
	restclient "k8s.io/client-go/rest"
 | 
			
		||||
	"k8s.io/client-go/tools/clientcmd"
 | 
			
		||||
	fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
 | 
			
		||||
	oldclient "k8s.io/kubernetes/pkg/client/unversioned"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/version"
 | 
			
		||||
@@ -34,7 +33,6 @@ func NewClientCache(loader clientcmd.ClientConfig, discoveryClientFactory Discov
 | 
			
		||||
	return &ClientCache{
 | 
			
		||||
		clientsets:             make(map[schema.GroupVersion]internalclientset.Interface),
 | 
			
		||||
		configs:                make(map[schema.GroupVersion]*restclient.Config),
 | 
			
		||||
		fedClientSets:          make(map[schema.GroupVersion]fedclientset.Interface),
 | 
			
		||||
		loader:                 loader,
 | 
			
		||||
		discoveryClientFactory: discoveryClientFactory,
 | 
			
		||||
	}
 | 
			
		||||
@@ -43,10 +41,9 @@ func NewClientCache(loader clientcmd.ClientConfig, discoveryClientFactory Discov
 | 
			
		||||
// ClientCache caches previously loaded clients for reuse, and ensures MatchServerVersion
 | 
			
		||||
// is invoked only once
 | 
			
		||||
type ClientCache struct {
 | 
			
		||||
	loader        clientcmd.ClientConfig
 | 
			
		||||
	clientsets    map[schema.GroupVersion]internalclientset.Interface
 | 
			
		||||
	fedClientSets map[schema.GroupVersion]fedclientset.Interface
 | 
			
		||||
	configs       map[schema.GroupVersion]*restclient.Config
 | 
			
		||||
	loader     clientcmd.ClientConfig
 | 
			
		||||
	clientsets map[schema.GroupVersion]internalclientset.Interface
 | 
			
		||||
	configs    map[schema.GroupVersion]*restclient.Config
 | 
			
		||||
 | 
			
		||||
	// noVersionConfig provides a cached config for the case of no required version specified
 | 
			
		||||
	noVersionConfig *restclient.Config
 | 
			
		||||
@@ -211,51 +208,3 @@ func (c *ClientCache) ClientSetForVersion(requiredVersion *schema.GroupVersion)
 | 
			
		||||
 | 
			
		||||
	return clientset, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *ClientCache) FederationClientSetForVersion(version *schema.GroupVersion) (fedclientset.Interface, error) {
 | 
			
		||||
	c.lock.Lock()
 | 
			
		||||
	defer c.lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	return c.federationClientSetForVersion(version)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *ClientCache) federationClientSetForVersion(version *schema.GroupVersion) (fedclientset.Interface, error) {
 | 
			
		||||
	if version != nil {
 | 
			
		||||
		if clientSet, found := c.fedClientSets[*version]; found {
 | 
			
		||||
			return clientSet, nil
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	config, err := c.clientConfigForVersion(version)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// TODO: support multi versions of client with clientset
 | 
			
		||||
	clientSet, err := fedclientset.NewForConfig(config)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	c.fedClientSets[*config.GroupVersion] = clientSet
 | 
			
		||||
 | 
			
		||||
	if version != nil {
 | 
			
		||||
		configCopy := *config
 | 
			
		||||
		clientSet, err := fedclientset.NewForConfig(&configCopy)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		c.fedClientSets[*version] = clientSet
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return clientSet, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *ClientCache) FederationClientForVersion(version *schema.GroupVersion) (*restclient.RESTClient, error) {
 | 
			
		||||
	c.lock.Lock()
 | 
			
		||||
	defer c.lock.Unlock()
 | 
			
		||||
 | 
			
		||||
	fedClientSet, err := c.federationClientSetForVersion(version)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return fedClientSet.Federation().RESTClient().(*restclient.RESTClient), nil
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,6 @@ import (
 | 
			
		||||
	"k8s.io/client-go/kubernetes"
 | 
			
		||||
	restclient "k8s.io/client-go/rest"
 | 
			
		||||
	"k8s.io/client-go/tools/clientcmd"
 | 
			
		||||
	fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	apiv1 "k8s.io/kubernetes/pkg/api/v1"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
 | 
			
		||||
@@ -103,11 +102,6 @@ type ClientAccessFactory interface {
 | 
			
		||||
	// just directions to the server. People use this to build RESTMappers on top of
 | 
			
		||||
	BareClientConfig() (*restclient.Config, error)
 | 
			
		||||
 | 
			
		||||
	// TODO this should probably be removed and collapsed into whatever we want to use long term
 | 
			
		||||
	// probably returning a restclient for a version and leaving contruction up to someone else
 | 
			
		||||
	FederationClientSetForVersion(version *schema.GroupVersion) (fedclientset.Interface, error)
 | 
			
		||||
	// TODO remove this should be rolled into restclient with the right version
 | 
			
		||||
	FederationClientForVersion(version *schema.GroupVersion) (*restclient.RESTClient, error)
 | 
			
		||||
	// TODO remove.  This should be rolled into `ClientSet`
 | 
			
		||||
	ClientSetForVersion(requiredVersion *schema.GroupVersion) (internalclientset.Interface, error)
 | 
			
		||||
	// TODO remove.  This should be rolled into `ClientConfig`
 | 
			
		||||
 
 | 
			
		||||
@@ -45,7 +45,6 @@ import (
 | 
			
		||||
	restclient "k8s.io/client-go/rest"
 | 
			
		||||
	"k8s.io/client-go/tools/clientcmd"
 | 
			
		||||
	"k8s.io/client-go/util/homedir"
 | 
			
		||||
	fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/legacyscheme"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/apps"
 | 
			
		||||
@@ -213,14 +212,6 @@ func (f *ring0Factory) RESTClient() (*restclient.RESTClient, error) {
 | 
			
		||||
	return restclient.RESTClientFor(clientConfig)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *ring0Factory) FederationClientSetForVersion(version *schema.GroupVersion) (fedclientset.Interface, error) {
 | 
			
		||||
	return f.clientCache.FederationClientSetForVersion(version)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *ring0Factory) FederationClientForVersion(version *schema.GroupVersion) (*restclient.RESTClient, error) {
 | 
			
		||||
	return f.clientCache.FederationClientForVersion(version)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (f *ring0Factory) Decoder(toInternal bool) runtime.Decoder {
 | 
			
		||||
	var decoder runtime.Decoder
 | 
			
		||||
	if toInternal {
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,6 @@ import (
 | 
			
		||||
	"k8s.io/client-go/discovery"
 | 
			
		||||
	"k8s.io/client-go/dynamic"
 | 
			
		||||
	restclient "k8s.io/client-go/rest"
 | 
			
		||||
	"k8s.io/kubernetes/federation/apis/federation"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/legacyscheme"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/apps"
 | 
			
		||||
@@ -143,9 +142,6 @@ func (f *ring1Factory) ClientForMapping(mapping *meta.RESTMapping) (resource.RES
 | 
			
		||||
	}
 | 
			
		||||
	gvk := mapping.GroupVersionKind
 | 
			
		||||
	switch gvk.Group {
 | 
			
		||||
	case federation.GroupName:
 | 
			
		||||
		mappingVersion := mapping.GroupVersionKind.GroupVersion()
 | 
			
		||||
		return f.clientAccessFactory.FederationClientForVersion(&mappingVersion)
 | 
			
		||||
	case api.GroupName:
 | 
			
		||||
		cfg.APIPath = "/api"
 | 
			
		||||
	default:
 | 
			
		||||
@@ -176,15 +172,6 @@ func (f *ring1Factory) UnstructuredClientForMapping(mapping *meta.RESTMapping) (
 | 
			
		||||
 | 
			
		||||
func (f *ring1Factory) Describer(mapping *meta.RESTMapping) (printers.Describer, error) {
 | 
			
		||||
	mappingVersion := mapping.GroupVersionKind.GroupVersion()
 | 
			
		||||
	if mapping.GroupVersionKind.Group == federation.GroupName {
 | 
			
		||||
		fedClientSet, err := f.clientAccessFactory.FederationClientSetForVersion(&mappingVersion)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		if mapping.GroupVersionKind.Kind == "Cluster" {
 | 
			
		||||
			return &printersinternal.ClusterDescriber{Interface: fedClientSet}, nil
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	clientset, err := f.clientAccessFactory.ClientSetForVersion(&mappingVersion)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -179,10 +179,3 @@ var LegacyCategoryExpander CategoryExpander = SimpleCategoryExpander{
 | 
			
		||||
		"all": legacyUserResources,
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LegacyFederationCategoryExpander is the old hardcoded expansion for federation
 | 
			
		||||
var LegacyFederationCategoryExpander CategoryExpander = SimpleCategoryExpander{
 | 
			
		||||
	Expansions: map[string][]schema.GroupResource{
 | 
			
		||||
		"all": {{Group: "", Resource: "services"}},
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -41,12 +41,11 @@ func TestGroupVersions(t *testing.T) {
 | 
			
		||||
		"batch",
 | 
			
		||||
		"componentconfig",
 | 
			
		||||
		"extensions",
 | 
			
		||||
		"federation",
 | 
			
		||||
		"policy",
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// No new groups should be added to the legacyUnsuffixedGroups exclusion list
 | 
			
		||||
	if len(legacyUnsuffixedGroups) != 8 {
 | 
			
		||||
	if len(legacyUnsuffixedGroups) != 7 {
 | 
			
		||||
		t.Errorf("No additional unnamespaced groups should be created")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,9 +16,6 @@ go_test(
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/printers/internalversion",
 | 
			
		||||
    library = ":go_default_library",
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//federation/apis/federation:go_default_library",
 | 
			
		||||
        "//federation/apis/federation/v1beta1:go_default_library",
 | 
			
		||||
        "//federation/client/clientset_generated/federation_clientset/fake:go_default_library",
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/api/legacyscheme:go_default_library",
 | 
			
		||||
        "//pkg/api/testapi:go_default_library",
 | 
			
		||||
@@ -59,9 +56,6 @@ go_library(
 | 
			
		||||
    ],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/pkg/printers/internalversion",
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//federation/apis/federation:go_default_library",
 | 
			
		||||
        "//federation/apis/federation/v1beta1:go_default_library",
 | 
			
		||||
        "//federation/client/clientset_generated/federation_clientset:go_default_library",
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/api/events:go_default_library",
 | 
			
		||||
        "//pkg/api/helper:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -47,8 +47,6 @@ import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	"k8s.io/client-go/dynamic"
 | 
			
		||||
	clientextensionsv1beta1 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1"
 | 
			
		||||
	federation "k8s.io/kubernetes/federation/apis/federation/v1beta1"
 | 
			
		||||
	fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/events"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/helper"
 | 
			
		||||
@@ -3073,47 +3071,6 @@ func (d *ConfigMapDescriber) Describe(namespace, name string, describerSettings
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ClusterDescriber struct {
 | 
			
		||||
	fedclientset.Interface
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *ClusterDescriber) Describe(namespace, name string, describerSettings printers.DescriberSettings) (string, error) {
 | 
			
		||||
	cluster, err := d.Federation().Clusters().Get(name, metav1.GetOptions{})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	return describeCluster(cluster)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func describeCluster(cluster *federation.Cluster) (string, error) {
 | 
			
		||||
	return tabbedString(func(out io.Writer) error {
 | 
			
		||||
		w := NewPrefixWriter(out)
 | 
			
		||||
		w.Write(LEVEL_0, "Name:\t%s\n", cluster.Name)
 | 
			
		||||
		w.Write(LEVEL_0, "Labels:\t%s\n", labels.FormatLabels(cluster.Labels))
 | 
			
		||||
 | 
			
		||||
		w.Write(LEVEL_0, "ServerAddressByClientCIDRs:\n  ClientCIDR\tServerAddress\n")
 | 
			
		||||
		w.Write(LEVEL_1, "----\t----\n")
 | 
			
		||||
		for _, cidrAddr := range cluster.Spec.ServerAddressByClientCIDRs {
 | 
			
		||||
			w.Write(LEVEL_1, "%v \t%v\n\n", cidrAddr.ClientCIDR, cidrAddr.ServerAddress)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if len(cluster.Status.Conditions) > 0 {
 | 
			
		||||
			w.Write(LEVEL_0, "Conditions:\n  Type\tStatus\tLastUpdateTime\tLastTransitionTime\tReason\tMessage\n")
 | 
			
		||||
			w.Write(LEVEL_1, "----\t------\t-----------------\t------------------\t------\t-------\n")
 | 
			
		||||
			for _, c := range cluster.Status.Conditions {
 | 
			
		||||
				w.Write(LEVEL_1, "%v \t%v \t%s \t%s \t%v \t%v\n",
 | 
			
		||||
					c.Type,
 | 
			
		||||
					c.Status,
 | 
			
		||||
					c.LastProbeTime.Time.Format(time.RFC1123Z),
 | 
			
		||||
					c.LastTransitionTime.Time.Format(time.RFC1123Z),
 | 
			
		||||
					c.Reason,
 | 
			
		||||
					c.Message)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// NetworkPolicyDescriber generates information about a networking.NetworkPolicy
 | 
			
		||||
type NetworkPolicyDescriber struct {
 | 
			
		||||
	clientset.Interface
 | 
			
		||||
 
 | 
			
		||||
@@ -33,8 +33,6 @@ import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/intstr"
 | 
			
		||||
	versionedfake "k8s.io/client-go/kubernetes/fake"
 | 
			
		||||
	federation "k8s.io/kubernetes/federation/apis/federation/v1beta1"
 | 
			
		||||
	fedfake "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset/fake"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/autoscaling"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/apis/extensions"
 | 
			
		||||
@@ -848,40 +846,6 @@ func TestDescribeDeployment(t *testing.T) {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestDescribeCluster(t *testing.T) {
 | 
			
		||||
	cluster := federation.Cluster{
 | 
			
		||||
		ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
			Name:            "foo",
 | 
			
		||||
			ResourceVersion: "4",
 | 
			
		||||
			Labels: map[string]string{
 | 
			
		||||
				"name": "foo",
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		Spec: federation.ClusterSpec{
 | 
			
		||||
			ServerAddressByClientCIDRs: []federation.ServerAddressByClientCIDR{
 | 
			
		||||
				{
 | 
			
		||||
					ClientCIDR:    "0.0.0.0/0",
 | 
			
		||||
					ServerAddress: "localhost:8888",
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		Status: federation.ClusterStatus{
 | 
			
		||||
			Conditions: []federation.ClusterCondition{
 | 
			
		||||
				{Type: federation.ClusterReady, Status: v1.ConditionTrue},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
	fake := fedfake.NewSimpleClientset(&cluster)
 | 
			
		||||
	d := ClusterDescriber{Interface: fake}
 | 
			
		||||
	out, err := d.Describe("any", "foo", printers.DescriberSettings{ShowEvents: true})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Errorf("unexpected error: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
	if !strings.Contains(out, "foo") {
 | 
			
		||||
		t.Errorf("unexpected out: %s", out)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestDescribeStorageClass(t *testing.T) {
 | 
			
		||||
	reclaimPolicy := api.PersistentVolumeReclaimRetain
 | 
			
		||||
	f := fake.NewSimpleClientset(&storage.StorageClass{
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,6 @@ import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/labels"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	"k8s.io/kubernetes/federation/apis/federation"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/events"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/helper"
 | 
			
		||||
@@ -361,15 +360,6 @@ func AddHandlers(h printers.PrintHandler) {
 | 
			
		||||
	h.TableHandler(podSecurityPolicyColumnDefinitions, printPodSecurityPolicy)
 | 
			
		||||
	h.TableHandler(podSecurityPolicyColumnDefinitions, printPodSecurityPolicyList)
 | 
			
		||||
 | 
			
		||||
	clusterColumnDefinitions := []metav1alpha1.TableColumnDefinition{
 | 
			
		||||
		{Name: "Name", Type: "string", Format: "name", Description: metav1.ObjectMeta{}.SwaggerDoc()["name"]},
 | 
			
		||||
		{Name: "Status", Type: "string", Description: "Status of the cluster"},
 | 
			
		||||
		{Name: "Age", Type: "string", Description: metav1.ObjectMeta{}.SwaggerDoc()["creationTimestamp"]},
 | 
			
		||||
		{Name: "Labels", Type: "string", Description: "The labels of the cluster"},
 | 
			
		||||
	}
 | 
			
		||||
	h.TableHandler(clusterColumnDefinitions, printCluster)
 | 
			
		||||
	h.TableHandler(clusterColumnDefinitions, printClusterList)
 | 
			
		||||
 | 
			
		||||
	networkPolicyColumnDefinitioins := []metav1alpha1.TableColumnDefinition{
 | 
			
		||||
		{Name: "Name", Type: "string", Format: "name", Description: metav1.ObjectMeta{}.SwaggerDoc()["name"]},
 | 
			
		||||
		{Name: "Pod-Selector", Type: "string", Description: extensionsv1beta1.NetworkPolicySpec{}.SwaggerDoc()["podSelector"]},
 | 
			
		||||
@@ -748,41 +738,6 @@ func printReplicaSetList(list *extensions.ReplicaSetList, options printers.Print
 | 
			
		||||
	return rows, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func printCluster(obj *federation.Cluster, options printers.PrintOptions) ([]metav1alpha1.TableRow, error) {
 | 
			
		||||
	row := metav1alpha1.TableRow{
 | 
			
		||||
		Object: runtime.RawExtension{Object: obj},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var statuses []string
 | 
			
		||||
	for _, condition := range obj.Status.Conditions {
 | 
			
		||||
		if condition.Status == api.ConditionTrue {
 | 
			
		||||
			statuses = append(statuses, string(condition.Type))
 | 
			
		||||
		} else {
 | 
			
		||||
			statuses = append(statuses, "Not"+string(condition.Type))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if len(statuses) == 0 {
 | 
			
		||||
		statuses = append(statuses, "Unknown")
 | 
			
		||||
	}
 | 
			
		||||
	row.Cells = append(row.Cells, obj.Name, strings.Join(statuses, ","), translateTimestamp(obj.CreationTimestamp))
 | 
			
		||||
	if options.ShowLabels {
 | 
			
		||||
		row.Cells = append(row.Cells, labels.FormatLabels(obj.Labels))
 | 
			
		||||
	}
 | 
			
		||||
	return []metav1alpha1.TableRow{row}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func printClusterList(list *federation.ClusterList, options printers.PrintOptions) ([]metav1alpha1.TableRow, error) {
 | 
			
		||||
	rows := make([]metav1alpha1.TableRow, 0, len(list.Items))
 | 
			
		||||
	for i := range list.Items {
 | 
			
		||||
		r, err := printCluster(&list.Items[i], options)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		rows = append(rows, r...)
 | 
			
		||||
	}
 | 
			
		||||
	return rows, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func printJob(obj *batch.Job, options printers.PrintOptions) ([]metav1alpha1.TableRow, error) {
 | 
			
		||||
	row := metav1alpha1.TableRow{
 | 
			
		||||
		Object: runtime.RawExtension{Object: obj},
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,6 @@ import (
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/diff"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/intstr"
 | 
			
		||||
	"k8s.io/apimachinery/pkg/util/sets"
 | 
			
		||||
	"k8s.io/kubernetes/federation/apis/federation"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/legacyscheme"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/api/testapi"
 | 
			
		||||
@@ -3134,124 +3133,3 @@ func TestPrintStorageClass(t *testing.T) {
 | 
			
		||||
		buf.Reset()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestPrintCluster(t *testing.T) {
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		cluster    federation.Cluster
 | 
			
		||||
		expect     []metav1alpha1.TableRow
 | 
			
		||||
		showLabels bool
 | 
			
		||||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			federation.Cluster{
 | 
			
		||||
				ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
					Name:              "cluster1",
 | 
			
		||||
					CreationTimestamp: metav1.Time{Time: time.Now().Add(1.9e9)},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			[]metav1alpha1.TableRow{{Cells: []interface{}{"cluster1", "Unknown", "0s"}}},
 | 
			
		||||
			false,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			federation.Cluster{
 | 
			
		||||
				ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
					Name:              "cluster2",
 | 
			
		||||
					CreationTimestamp: metav1.Time{Time: time.Now().Add(1.9e9)},
 | 
			
		||||
					Labels:            map[string]string{"label1": "", "label2": "cluster"},
 | 
			
		||||
				},
 | 
			
		||||
				Status: federation.ClusterStatus{
 | 
			
		||||
					Conditions: []federation.ClusterCondition{
 | 
			
		||||
						{
 | 
			
		||||
							Status: api.ConditionTrue,
 | 
			
		||||
							Type:   federation.ClusterReady,
 | 
			
		||||
						},
 | 
			
		||||
						{
 | 
			
		||||
							Status: api.ConditionFalse,
 | 
			
		||||
							Type:   federation.ClusterOffline,
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			[]metav1alpha1.TableRow{{Cells: []interface{}{"cluster2", "Ready,NotOffline", "0s", "label1=,label2=cluster"}}},
 | 
			
		||||
			true,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for i, test := range tests {
 | 
			
		||||
		rows, err := printCluster(&test.cluster, printers.PrintOptions{ShowLabels: test.showLabels})
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Fatal(err)
 | 
			
		||||
		}
 | 
			
		||||
		for i := range rows {
 | 
			
		||||
			rows[i].Object.Object = nil
 | 
			
		||||
		}
 | 
			
		||||
		if !reflect.DeepEqual(test.expect, rows) {
 | 
			
		||||
			t.Errorf("%d mismatch: %s", i, diff.ObjectReflectDiff(test.expect, rows))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestPrintClusterList(t *testing.T) {
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		clusters   federation.ClusterList
 | 
			
		||||
		expect     []metav1alpha1.TableRow
 | 
			
		||||
		showLabels bool
 | 
			
		||||
	}{
 | 
			
		||||
		// Test podList's pod: name, num of containers, restarts, container ready status
 | 
			
		||||
		{
 | 
			
		||||
			federation.ClusterList{
 | 
			
		||||
				Items: []federation.Cluster{
 | 
			
		||||
					{
 | 
			
		||||
						ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
							Name:              "cluster1",
 | 
			
		||||
							CreationTimestamp: metav1.Time{Time: time.Now().Add(1.9e9)},
 | 
			
		||||
						},
 | 
			
		||||
						Status: federation.ClusterStatus{
 | 
			
		||||
							Conditions: []federation.ClusterCondition{
 | 
			
		||||
								{
 | 
			
		||||
									Status: api.ConditionTrue,
 | 
			
		||||
									Type:   federation.ClusterReady,
 | 
			
		||||
								},
 | 
			
		||||
							},
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
							Name:              "cluster2",
 | 
			
		||||
							CreationTimestamp: metav1.Time{Time: time.Now().Add(1.9e9)},
 | 
			
		||||
							Labels:            map[string]string{"label1": "", "label2": "cluster2"},
 | 
			
		||||
						},
 | 
			
		||||
						Status: federation.ClusterStatus{
 | 
			
		||||
							Conditions: []federation.ClusterCondition{
 | 
			
		||||
								{
 | 
			
		||||
									Status: api.ConditionTrue,
 | 
			
		||||
									Type:   federation.ClusterReady,
 | 
			
		||||
								},
 | 
			
		||||
								{
 | 
			
		||||
									Status: api.ConditionFalse,
 | 
			
		||||
									Type:   federation.ClusterOffline,
 | 
			
		||||
								},
 | 
			
		||||
							},
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			[]metav1alpha1.TableRow{{Cells: []interface{}{"cluster1", "Ready", "0s", "<none>"}},
 | 
			
		||||
				{Cells: []interface{}{"cluster2", "Ready,NotOffline", "0s", "label1=,label2=cluster2"}}},
 | 
			
		||||
			true,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, test := range tests {
 | 
			
		||||
		rows, err := printClusterList(&test.clusters, printers.PrintOptions{ShowLabels: test.showLabels})
 | 
			
		||||
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Fatal(err)
 | 
			
		||||
		}
 | 
			
		||||
		for i := range rows {
 | 
			
		||||
			rows[i].Object.Object = nil
 | 
			
		||||
		}
 | 
			
		||||
		if !reflect.DeepEqual(test.expect, rows) {
 | 
			
		||||
			t.Errorf("mismatch: %s", diff.ObjectReflectDiff(test.expect, rows))
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -51,7 +51,6 @@ go_library(
 | 
			
		||||
    ],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/test/e2e",
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//federation/test/e2e:go_default_library",
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/api/testapi:go_default_library",
 | 
			
		||||
        "//pkg/api/v1/pod:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -35,9 +35,8 @@ import (
 | 
			
		||||
type Suite string
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	E2E           Suite = "e2e"
 | 
			
		||||
	NodeE2E       Suite = "node e2e"
 | 
			
		||||
	FederationE2E Suite = "federation e2e"
 | 
			
		||||
	E2E     Suite = "e2e"
 | 
			
		||||
	NodeE2E Suite = "node e2e"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,6 @@ import (
 | 
			
		||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
			
		||||
	runtimeutils "k8s.io/apimachinery/pkg/util/runtime"
 | 
			
		||||
	clientset "k8s.io/client-go/kubernetes"
 | 
			
		||||
	federationtest "k8s.io/kubernetes/federation/test/e2e"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/cloudprovider/providers/azure"
 | 
			
		||||
	gcecloud "k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
 | 
			
		||||
	"k8s.io/kubernetes/pkg/kubectl/util/logs"
 | 
			
		||||
@@ -161,7 +160,6 @@ var _ = ginkgo.SynchronizedBeforeSuite(func() []byte {
 | 
			
		||||
				metav1.NamespaceSystem,
 | 
			
		||||
				metav1.NamespaceDefault,
 | 
			
		||||
				metav1.NamespacePublic,
 | 
			
		||||
				framework.FederationSystemNamespace(),
 | 
			
		||||
			})
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			framework.Failf("Error deleting orphaned namespaces: %v", err)
 | 
			
		||||
@@ -239,9 +237,6 @@ var _ = ginkgo.SynchronizedBeforeSuite(func() []byte {
 | 
			
		||||
	// Reference common test to make the import valid.
 | 
			
		||||
	commontest.CurrentSuite = commontest.E2E
 | 
			
		||||
 | 
			
		||||
	// Reference federation test to make the import valid.
 | 
			
		||||
	federationtest.FederationSuite = commontest.FederationE2E
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
 | 
			
		||||
}, func(data []byte) {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,6 @@ go_library(
 | 
			
		||||
        "cleanup.go",
 | 
			
		||||
        "deployment_util.go",
 | 
			
		||||
        "exec_util.go",
 | 
			
		||||
        "federation_util.go",
 | 
			
		||||
        "firewall_util.go",
 | 
			
		||||
        "framework.go",
 | 
			
		||||
        "get-kubemark-resource-usage.go",
 | 
			
		||||
@@ -41,7 +40,6 @@ go_library(
 | 
			
		||||
    ],
 | 
			
		||||
    importpath = "k8s.io/kubernetes/test/e2e/framework",
 | 
			
		||||
    deps = [
 | 
			
		||||
        "//federation/apis/federation/v1beta1:go_default_library",
 | 
			
		||||
        "//pkg/api:go_default_library",
 | 
			
		||||
        "//pkg/api/legacyscheme:go_default_library",
 | 
			
		||||
        "//pkg/api/testapi:go_default_library",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,33 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2016 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 framework
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"os"
 | 
			
		||||
 | 
			
		||||
	federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// FederationSystemNamespace returns the namespace in which
 | 
			
		||||
// the federation system components are hosted.
 | 
			
		||||
func FederationSystemNamespace() string {
 | 
			
		||||
	federationNS := os.Getenv("FEDERATION_NAMESPACE")
 | 
			
		||||
	if federationNS != "" {
 | 
			
		||||
		return federationNS
 | 
			
		||||
	}
 | 
			
		||||
	return federationapi.FederationNamespaceSystem
 | 
			
		||||
}
 | 
			
		||||
@@ -102,12 +102,6 @@ type TestContextType struct {
 | 
			
		||||
	FeatureGates string
 | 
			
		||||
	// Node e2e specific test context
 | 
			
		||||
	NodeTestContextType
 | 
			
		||||
	// Federation e2e context
 | 
			
		||||
	FederatedKubeContext string
 | 
			
		||||
	// Federation control plane version to upgrade to while doing upgrade tests
 | 
			
		||||
	FederationUpgradeTarget string
 | 
			
		||||
	// Whether configuration for accessing federation member clusters should be sourced from the host cluster
 | 
			
		||||
	FederationConfigFromCluster bool
 | 
			
		||||
 | 
			
		||||
	// Indicates what path the kubernetes-anywhere is installed on
 | 
			
		||||
	KubernetesAnywherePath string
 | 
			
		||||
@@ -217,8 +211,6 @@ func RegisterClusterFlags() {
 | 
			
		||||
	flag.StringVar(&TestContext.KubemarkExternalKubeConfig, fmt.Sprintf("%s-%s", "kubemark-external", clientcmd.RecommendedConfigPathFlag), "", "Path to kubeconfig containing embedded authinfo for external cluster.")
 | 
			
		||||
	flag.StringVar(&TestContext.KubeContext, clientcmd.FlagContext, "", "kubeconfig context to use/override. If unset, will use value from 'current-context'")
 | 
			
		||||
	flag.StringVar(&TestContext.KubeAPIContentType, "kube-api-content-type", "application/vnd.kubernetes.protobuf", "ContentType used to communicate with apiserver")
 | 
			
		||||
	flag.StringVar(&TestContext.FederatedKubeContext, "federated-kube-context", "e2e-federation", "kubeconfig context for federation.")
 | 
			
		||||
	flag.BoolVar(&TestContext.FederationConfigFromCluster, "federation-config-from-cluster", false, "whether to source configuration for member clusters from the hosting cluster.")
 | 
			
		||||
 | 
			
		||||
	flag.StringVar(&TestContext.KubeVolumeDir, "volume-dir", "/var/lib/kubelet", "Path to the directory containing the kubelet volumes.")
 | 
			
		||||
	flag.StringVar(&TestContext.CertDir, "cert-dir", "", "Path to the directory containing the certs. Default is empty, which doesn't use certs.")
 | 
			
		||||
@@ -256,7 +248,6 @@ func RegisterClusterFlags() {
 | 
			
		||||
	flag.StringVar(&TestContext.EtcdUpgradeVersion, "etcd-upgrade-version", "", "The etcd binary version to upgrade to (e.g., '3.0.14', '2.3.7') if doing an etcd upgrade test.")
 | 
			
		||||
	flag.StringVar(&TestContext.UpgradeImage, "upgrade-image", "", "Image to upgrade to (e.g. 'container_vm' or 'gci') if doing an upgrade test.")
 | 
			
		||||
	flag.StringVar(&TestContext.GCEUpgradeScript, "gce-upgrade-script", "", "Script to use to upgrade a GCE cluster.")
 | 
			
		||||
	flag.StringVar(&TestContext.FederationUpgradeTarget, "federation-upgrade-target", "ci/latest", "Version to upgrade to (e.g. 'release/stable', 'release/latest', 'ci/latest', '0.19.1', '0.19.1-669-gabac8c8') if doing an federation upgrade test.")
 | 
			
		||||
	flag.BoolVar(&TestContext.CleanStart, "clean-start", false, "If true, purge all namespaces except default and system before running tests. This serves to Cleanup test namespaces from failed/interrupted e2e runs in a long-lived cluster.")
 | 
			
		||||
	flag.BoolVar(&TestContext.GarbageCollectorEnabled, "garbage-collector-enabled", true, "Set to true if the garbage collector is enabled in the kube-apiserver and kube-controller-manager, then some tests will rely on the garbage collector to delete dependent resources.")
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -378,9 +378,6 @@ var etcdStorageData = map[schema.GroupVersionResource]struct {
 | 
			
		||||
// Be very careful when whitelisting an object as ephemeral.
 | 
			
		||||
// Doing so removes the safety we gain from this test by skipping that object.
 | 
			
		||||
var ephemeralWhiteList = createEphemeralWhiteList(
 | 
			
		||||
	// k8s.io/kubernetes/federation/apis/federation/v1beta1
 | 
			
		||||
	gvr("federation", "v1beta1", "clusters"), // we cannot create this
 | 
			
		||||
	// --
 | 
			
		||||
 | 
			
		||||
	// k8s.io/kubernetes/pkg/api/v1
 | 
			
		||||
	gvr("", "v1", "bindings"),             // annotation on pod, not stored in etcd
 | 
			
		||||
 
 | 
			
		||||
@@ -145,48 +145,6 @@ EmptyDir wrapper volumes should not conflict,deads2k,1,node
 | 
			
		||||
Etcd failure should recover from SIGKILL,pmorie,1,api-machinery
 | 
			
		||||
Etcd failure should recover from network partition with master,justinsb,1,api-machinery
 | 
			
		||||
Events should be sent by kubelets and the scheduler about pods scheduling and running,zmerlynn,1,node
 | 
			
		||||
Federated ReplicaSet Features CRUD should be deleted from underlying clusters when OrphanDependents is false,perotinus,0,federation
 | 
			
		||||
Federated ReplicaSet Features CRUD should create and update matching replicasets in underlying clusters,perotinus,0,federation
 | 
			
		||||
Federated ReplicaSet Features CRUD should not be deleted from underlying clusters when OrphanDependents is nil,perotinus,0,federation
 | 
			
		||||
Federated ReplicaSet Features CRUD should not be deleted from underlying clusters when OrphanDependents is true,perotinus,0,federation
 | 
			
		||||
Federated ReplicaSet Features Preferences should create replicasets with max replicas preference,perotinus,0,federation
 | 
			
		||||
Federated ReplicaSet Features Preferences should create replicasets with min replicas preference,perotinus,0,federation
 | 
			
		||||
Federated ReplicaSet Features Preferences should create replicasets with weight preference,perotinus,0,federation
 | 
			
		||||
Federated ReplicaSet ReplicaSet objects should be created and deleted successfully,perotinus,0,federation
 | 
			
		||||
Federated Services Without Clusters should succeed when a service is created,shashidharatd,0,federation
 | 
			
		||||
Federated Services with clusters DNS non-local federated service missing local service should never find DNS entries for a missing local service,shashidharatd,0,federation
 | 
			
		||||
Federated Services with clusters DNS should be able to discover a federated service,shashidharatd,0,federation
 | 
			
		||||
Federated Services with clusters Federated Service should be deleted from underlying clusters when OrphanDependents is false,shashidharatd,0,federation
 | 
			
		||||
Federated Services with clusters Federated Service should create and update matching services in underlying clusters,shashidharatd,0,federation
 | 
			
		||||
Federated Services with clusters Federated Service should not be deleted from underlying clusters when OrphanDependents is nil,shashidharatd,0,federation
 | 
			
		||||
Federated Services with clusters Federated Service should not be deleted from underlying clusters when OrphanDependents is true,shashidharatd,0,federation
 | 
			
		||||
Federated Services with clusters Federated Service should recreate service shard in underlying clusters when service shard is deleted,shashidharatd,0,federation
 | 
			
		||||
Federated ingresses Federated Ingresses should be created and deleted successfully,madhusudancs,0,federation
 | 
			
		||||
Federated ingresses Federated Ingresses should be deleted from underlying clusters when OrphanDependents is false,madhusudancs,0,federation
 | 
			
		||||
Federated ingresses Federated Ingresses should create and update matching ingresses in underlying clusters,madhusudancs,0,federation
 | 
			
		||||
Federated ingresses Federated Ingresses should not be deleted from underlying clusters when OrphanDependents is nil,madhusudancs,0,federation
 | 
			
		||||
Federated ingresses Federated Ingresses should not be deleted from underlying clusters when OrphanDependents is true,madhusudancs,0,federation
 | 
			
		||||
"Federated types Federated %q resources should be created, read, updated and deleted successfully",marun,0,federation
 | 
			
		||||
Federation API server authentication should accept cluster resources when the client has HTTP Basic authentication credentials,nikhiljindal,0,federation
 | 
			
		||||
Federation API server authentication should accept cluster resources when the client has certificate authentication credentials,nikhiljindal,0,federation
 | 
			
		||||
Federation API server authentication should accept cluster resources when the client has token authentication credentials,nikhiljindal,0,federation
 | 
			
		||||
Federation API server authentication should not accept cluster resources when the client has invalid HTTP Basic authentication credentials,nikhiljindal,0,federation
 | 
			
		||||
Federation API server authentication should not accept cluster resources when the client has invalid token authentication credentials,nikhiljindal,0,federation
 | 
			
		||||
Federation API server authentication should not accept cluster resources when the client has no authentication credentials,nikhiljindal,0,federation
 | 
			
		||||
Federation apiserver Admission control should not be able to create resources if namespace does not exist,nikhiljindal,0,federation
 | 
			
		||||
Federation apiserver Cluster objects should be created and deleted successfully,nikhiljindal,0,federation
 | 
			
		||||
Federation deployments Deployment objects should be created and deleted successfully,nikhiljindal,0,federation
 | 
			
		||||
Federation deployments Federated Deployment should be deleted from underlying clusters when OrphanDependents is false,nikhiljindal,0,federation
 | 
			
		||||
Federation deployments Federated Deployment should create and update matching deployments in underlying clusters,nikhiljindal,0,federation
 | 
			
		||||
Federation deployments Federated Deployment should not be deleted from underlying clusters when OrphanDependents is nil,nikhiljindal,0,federation
 | 
			
		||||
Federation deployments Federated Deployment should not be deleted from underlying clusters when OrphanDependents is true,nikhiljindal,0,federation
 | 
			
		||||
Federation events Event objects should be created and deleted successfully,shashidharatd,0,federation
 | 
			
		||||
Federation namespace Namespace objects all resources in the namespace should be deleted when namespace is deleted,nikhiljindal,0,federation
 | 
			
		||||
Federation namespace Namespace objects deletes replicasets in the namespace when the namespace is deleted,nikhiljindal,0,federation
 | 
			
		||||
Federation namespace Namespace objects should be created and deleted successfully,nikhiljindal,0,federation
 | 
			
		||||
Federation namespace Namespace objects should be deleted from underlying clusters when OrphanDependents is false,nikhiljindal,0,federation
 | 
			
		||||
Federation namespace Namespace objects should not be deleted from underlying clusters when OrphanDependents is nil,nikhiljindal,0,federation
 | 
			
		||||
Federation namespace Namespace objects should not be deleted from underlying clusters when OrphanDependents is true,nikhiljindal,0,federation
 | 
			
		||||
Firewall rule should create valid firewall rules for LoadBalancer type service,MrHohn,0,network
 | 
			
		||||
Firewall rule should have correct firewall rules for e2e cluster,MrHohn,0,network
 | 
			
		||||
GCP Volumes GlusterFS should be mountable,nikhiljindal,0,storage
 | 
			
		||||
@@ -587,27 +545,6 @@ k8s.io/kubernetes/cmd/libs/go2idl/client-gen/types,caesarxuchao,0,
 | 
			
		||||
k8s.io/kubernetes/cmd/libs/go2idl/go-to-protobuf/protobuf,smarterclayton,0,
 | 
			
		||||
k8s.io/kubernetes/cmd/libs/go2idl/openapi-gen/generators,davidopp,1,
 | 
			
		||||
k8s.io/kubernetes/examples,Random-Liu,0,
 | 
			
		||||
k8s.io/kubernetes/federation/apis/federation/install,nikhiljindal,0,
 | 
			
		||||
k8s.io/kubernetes/federation/apis/federation/validation,nikhiljindal,0,
 | 
			
		||||
k8s.io/kubernetes/federation/cmd/federation-controller-manager/app,kzwang,0,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/dnsprovider,sttts,1,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/dnsprovider/providers/aws/route53,cjcullen,1,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/dnsprovider/providers/coredns,brendandburns,0,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/dnsprovider/providers/google/clouddns,madhusudancs,1,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/federation-controller/cluster,nikhiljindal,0,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/federation-controller/deployment,zmerlynn,1,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/federation-controller/ingress,vishh,1,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/federation-controller/replicaset,roberthbailey,1,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/federation-controller/secret,apelisse,1,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/federation-controller/service,pmorie,1,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/federation-controller/util,bgrant0607,1,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/federation-controller/util/eventsink,luxas,1,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/federation-controller/util/planner,Q-Lee,1,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/federation-controller/util/podanalyzer,caesarxuchao,1,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/kubefed,madhusudancs,0,
 | 
			
		||||
k8s.io/kubernetes/federation/pkg/kubefed/init,madhusudancs,0,
 | 
			
		||||
k8s.io/kubernetes/federation/registry/cluster,nikhiljindal,0,
 | 
			
		||||
k8s.io/kubernetes/federation/registry/cluster/etcd,nikhiljindal,0,
 | 
			
		||||
k8s.io/kubernetes/hack,thockin,1,
 | 
			
		||||
k8s.io/kubernetes/hack/cmd/teststale,thockin,1,
 | 
			
		||||
k8s.io/kubernetes/pkg/api,Q-Lee,1,
 | 
			
		||||
@@ -944,7 +881,6 @@ k8s.io/kubernetes/test/integration/client,Q-Lee,1,
 | 
			
		||||
k8s.io/kubernetes/test/integration/configmap,Q-Lee,1,
 | 
			
		||||
k8s.io/kubernetes/test/integration/evictions,brendandburns,0,
 | 
			
		||||
k8s.io/kubernetes/test/integration/examples,maisem,1,
 | 
			
		||||
k8s.io/kubernetes/test/integration/federation,rrati,0,
 | 
			
		||||
k8s.io/kubernetes/test/integration/garbagecollector,jlowdermilk,1,
 | 
			
		||||
k8s.io/kubernetes/test/integration/kubeaggregator,deads2k,1,
 | 
			
		||||
k8s.io/kubernetes/test/integration/kubectl,rrati,0,
 | 
			
		||||
 
 | 
			
		||||
		
		
			
  | 
@@ -1,122 +1,118 @@
 | 
			
		||||
{
 | 
			
		||||
 "api-machinery": [
 | 
			
		||||
  "Etcd", 
 | 
			
		||||
  "Generated", 
 | 
			
		||||
  "HA-master", 
 | 
			
		||||
  "Multi-AZ", 
 | 
			
		||||
  "Namespaces", 
 | 
			
		||||
  "ResourceQuota", 
 | 
			
		||||
  "Staging", 
 | 
			
		||||
  "Summary", 
 | 
			
		||||
  "Etcd",
 | 
			
		||||
  "Generated",
 | 
			
		||||
  "HA-master",
 | 
			
		||||
  "Multi-AZ",
 | 
			
		||||
  "Namespaces",
 | 
			
		||||
  "ResourceQuota",
 | 
			
		||||
  "Staging",
 | 
			
		||||
  "Summary",
 | 
			
		||||
  "ThirdParty"
 | 
			
		||||
 ], 
 | 
			
		||||
 ],
 | 
			
		||||
 "apps": [
 | 
			
		||||
  "Cassandra", 
 | 
			
		||||
  "ConfigMap", 
 | 
			
		||||
  "CronJob", 
 | 
			
		||||
  "Daemon", 
 | 
			
		||||
  "Deployment", 
 | 
			
		||||
  "Job", 
 | 
			
		||||
  "Mesos", 
 | 
			
		||||
  "Pet", 
 | 
			
		||||
  "Redis", 
 | 
			
		||||
  "ReplicaSet", 
 | 
			
		||||
  "ReplicationController", 
 | 
			
		||||
  "Rescheduler", 
 | 
			
		||||
  "RethinkDB", 
 | 
			
		||||
  "Secret", 
 | 
			
		||||
  "Security", 
 | 
			
		||||
  "Spark", 
 | 
			
		||||
  "StatefulSet", 
 | 
			
		||||
  "Cassandra",
 | 
			
		||||
  "ConfigMap",
 | 
			
		||||
  "CronJob",
 | 
			
		||||
  "Daemon",
 | 
			
		||||
  "Deployment",
 | 
			
		||||
  "Job",
 | 
			
		||||
  "Mesos",
 | 
			
		||||
  "Pet",
 | 
			
		||||
  "Redis",
 | 
			
		||||
  "ReplicaSet",
 | 
			
		||||
  "ReplicationController",
 | 
			
		||||
  "Rescheduler",
 | 
			
		||||
  "RethinkDB",
 | 
			
		||||
  "Secret",
 | 
			
		||||
  "Security",
 | 
			
		||||
  "Spark",
 | 
			
		||||
  "StatefulSet",
 | 
			
		||||
  "Storm"
 | 
			
		||||
 ], 
 | 
			
		||||
 ],
 | 
			
		||||
 "autoscaling": [
 | 
			
		||||
  "Cluster size", 
 | 
			
		||||
  "Cluster size",
 | 
			
		||||
  "Horizontal"
 | 
			
		||||
 ], 
 | 
			
		||||
 ],
 | 
			
		||||
 "big-data": [
 | 
			
		||||
  "Hazelcast"
 | 
			
		||||
 ], 
 | 
			
		||||
 ],
 | 
			
		||||
 "cli": [
 | 
			
		||||
  "Kubectl"
 | 
			
		||||
 ], 
 | 
			
		||||
 ],
 | 
			
		||||
 "cluster-lifecycle": [
 | 
			
		||||
  "GKE node", 
 | 
			
		||||
  "Garbage", 
 | 
			
		||||
  "Nodes", 
 | 
			
		||||
  "GKE node",
 | 
			
		||||
  "Garbage",
 | 
			
		||||
  "Nodes",
 | 
			
		||||
  "Upgrade"
 | 
			
		||||
 ], 
 | 
			
		||||
 "federation": [
 | 
			
		||||
  "Federated", 
 | 
			
		||||
  "Federation"
 | 
			
		||||
 ], 
 | 
			
		||||
 ],
 | 
			
		||||
 "instrumentation": [
 | 
			
		||||
  "Cluster level", 
 | 
			
		||||
  "Kibana", 
 | 
			
		||||
  "MetricsGrabber", 
 | 
			
		||||
  "Cluster level",
 | 
			
		||||
  "Kibana",
 | 
			
		||||
  "MetricsGrabber",
 | 
			
		||||
  "Monitoring"
 | 
			
		||||
 ], 
 | 
			
		||||
 ],
 | 
			
		||||
 "network": [
 | 
			
		||||
  "ClusterDns", 
 | 
			
		||||
  "DNS", 
 | 
			
		||||
  "ESIPP", 
 | 
			
		||||
  "Firewall", 
 | 
			
		||||
  "Load", 
 | 
			
		||||
  "Network", 
 | 
			
		||||
  "ClusterDns",
 | 
			
		||||
  "DNS",
 | 
			
		||||
  "ESIPP",
 | 
			
		||||
  "Firewall",
 | 
			
		||||
  "Load",
 | 
			
		||||
  "Network",
 | 
			
		||||
  "Service"
 | 
			
		||||
 ], 
 | 
			
		||||
 ],
 | 
			
		||||
 "node": [
 | 
			
		||||
  "AppArmor", 
 | 
			
		||||
  "Cadvisor", 
 | 
			
		||||
  "Container", 
 | 
			
		||||
  "Docker", 
 | 
			
		||||
  "Downward", 
 | 
			
		||||
  "EmptyDir", 
 | 
			
		||||
  "Events", 
 | 
			
		||||
  "HostPath", 
 | 
			
		||||
  "ImageID", 
 | 
			
		||||
  "InitContainer", 
 | 
			
		||||
  "Initial", 
 | 
			
		||||
  "Kubelet", 
 | 
			
		||||
  "LimitRange", 
 | 
			
		||||
  "Liveness", 
 | 
			
		||||
  "Logging", 
 | 
			
		||||
  "MemoryEviction", 
 | 
			
		||||
  "MirrorPod", 
 | 
			
		||||
  "NodeProblemDetector", 
 | 
			
		||||
  "Opaque", 
 | 
			
		||||
  "Pod garbage", 
 | 
			
		||||
  "Pods", 
 | 
			
		||||
  "Port", 
 | 
			
		||||
  "PreStop", 
 | 
			
		||||
  "PrivilegedPod", 
 | 
			
		||||
  "Probing", 
 | 
			
		||||
  "Proxy", 
 | 
			
		||||
  "Reboot", 
 | 
			
		||||
  "Restart", 
 | 
			
		||||
  "SimpleMount", 
 | 
			
		||||
  "Sysctls", 
 | 
			
		||||
  "Variable", 
 | 
			
		||||
  "kubelet", 
 | 
			
		||||
  "AppArmor",
 | 
			
		||||
  "Cadvisor",
 | 
			
		||||
  "Container",
 | 
			
		||||
  "Docker",
 | 
			
		||||
  "Downward",
 | 
			
		||||
  "EmptyDir",
 | 
			
		||||
  "Events",
 | 
			
		||||
  "HostPath",
 | 
			
		||||
  "ImageID",
 | 
			
		||||
  "InitContainer",
 | 
			
		||||
  "Initial",
 | 
			
		||||
  "Kubelet",
 | 
			
		||||
  "LimitRange",
 | 
			
		||||
  "Liveness",
 | 
			
		||||
  "Logging",
 | 
			
		||||
  "MemoryEviction",
 | 
			
		||||
  "MirrorPod",
 | 
			
		||||
  "NodeProblemDetector",
 | 
			
		||||
  "Opaque",
 | 
			
		||||
  "Pod garbage",
 | 
			
		||||
  "Pods",
 | 
			
		||||
  "Port",
 | 
			
		||||
  "PreStop",
 | 
			
		||||
  "PrivilegedPod",
 | 
			
		||||
  "Probing",
 | 
			
		||||
  "Proxy",
 | 
			
		||||
  "Reboot",
 | 
			
		||||
  "Restart",
 | 
			
		||||
  "SimpleMount",
 | 
			
		||||
  "Sysctls",
 | 
			
		||||
  "Variable",
 | 
			
		||||
  "kubelet",
 | 
			
		||||
  "when"
 | 
			
		||||
 ], 
 | 
			
		||||
 ],
 | 
			
		||||
 "scalability": [
 | 
			
		||||
  "Density"
 | 
			
		||||
 ], 
 | 
			
		||||
 ],
 | 
			
		||||
 "scheduling": [
 | 
			
		||||
  "DisruptionController", 
 | 
			
		||||
  "NoExecuteTaintManager", 
 | 
			
		||||
  "DisruptionController",
 | 
			
		||||
  "NoExecuteTaintManager",
 | 
			
		||||
  "SchedulerPredicates"
 | 
			
		||||
 ], 
 | 
			
		||||
 ],
 | 
			
		||||
 "storage": [
 | 
			
		||||
  "Dynamic", 
 | 
			
		||||
  "GCP", 
 | 
			
		||||
  "GKE local", 
 | 
			
		||||
  "PersistentVolumes", 
 | 
			
		||||
  "Pod Disks", 
 | 
			
		||||
  "Projected", 
 | 
			
		||||
  "Dynamic",
 | 
			
		||||
  "GCP",
 | 
			
		||||
  "GKE local",
 | 
			
		||||
  "PersistentVolumes",
 | 
			
		||||
  "Pod Disks",
 | 
			
		||||
  "Projected",
 | 
			
		||||
  "Volume"
 | 
			
		||||
 ], 
 | 
			
		||||
 ],
 | 
			
		||||
 "ui": [
 | 
			
		||||
  "Kubernetes"
 | 
			
		||||
 ]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user