flag.StringVar(&TestContext.GatherKubeSystemResourceUsageData,"gather-resource-usage","false","If set to 'true' or 'all' framework will be monitoring resource usage of system all add-ons in (some) e2e tests, if set to 'master' framework will be monitoring master node only, if set to 'none' of 'false' monitoring will be turned off.")
flag.BoolVar(&TestContext.GatherLogsSizes,"gather-logs-sizes",false,"If set to true framework will be monitoring logs sizes on all machines running e2e tests.")
flag.StringVar(&TestContext.GatherMetricsAfterTest,"gather-metrics-at-teardown","false","If set to 'true' framework will gather metrics from all components after each test. If set to 'master' only master component metrics would be gathered.")
flag.BoolVar(&TestContext.GatherSuiteMetricsAfterTest,"gather-suite-metrics-at-teardown",false,"If set to true framwork will gather metrics from all components after the whole test suite completes.")
flag.BoolVar(&TestContext.AllowGatheringProfiles,"allow-gathering-profiles",true,"If set to true framework will allow to gather CPU/memory allocation pprof profiles from the master.")
flag.BoolVar(&TestContext.IncludeClusterAutoscalerMetrics,"include-cluster-autoscaler",false,"If set to true, framework will include Cluster Autoscaler when gathering metrics.")
flag.StringVar(&TestContext.OutputPrintType,"output-print-type","json","Format in which summaries should be printed: 'hr' for human readable, 'json' for JSON ones.")
flag.BoolVar(&TestContext.DumpLogsOnFailure,"dump-logs-on-failure",true,"If set to true test will dump data about the namespace in which test was running.")
flag.StringVar(&TestContext.LogexporterGCSPath,"logexporter-gcs-path","","Path to the GCS artifacts directory to dump logs from nodes. Logexporter gets enabled if this is non-empty.")
flag.BoolVar(&TestContext.DeleteNamespace,"delete-namespace",true,"If true tests will delete namespace after completion. It is only designed to make debugging easier, DO NOT turn it off by default.")
flag.BoolVar(&TestContext.DeleteNamespaceOnFailure,"delete-namespace-on-failure",true,"If true, framework will delete test namespace on failure. Used only during test debugging.")
flag.IntVar(&TestContext.AllowedNotReadyNodes,"allowed-not-ready-nodes",0,"If non-zero, framework will allow for that many non-ready nodes when checking for all ready nodes.")
flag.StringVar(&TestContext.Host,"host","",fmt.Sprintf("The host, or apiserver, to connect to. Will default to %s if this argument and --kubeconfig are not set",defaultHost))
flag.StringVar(&TestContext.ReportPrefix,"report-prefix","","Optional prefix for JUnit XML reports. Default is empty, which doesn't prepend anything to the default name.")
flag.StringVar(&TestContext.ReportDir,"report-dir","","Path to the directory where the JUnit XML reports should be saved. Default is empty, which doesn't generate these reports.")
flag.Var(utilflag.NewMapStringBool(&TestContext.FeatureGates),"feature-gates","A set of key=value pairs that describe feature gates for alpha/experimental features.")
flag.StringVar(&TestContext.Viper,"viper-config","e2e","The name of the viper config i.e. 'e2e' will read values from 'e2e.json' locally. All e2e parameters are meant to be configurable by viper.")
flag.StringVar(&TestContext.ContainerRuntimeEndpoint,"container-runtime-endpoint","unix:///var/run/dockershim.sock","The container runtime endpoint of cluster VM instances.")
flag.StringVar(&TestContext.ContainerRuntimeProcessName,"container-runtime-process-name","dockerd","The name of the container runtime process.")
flag.StringVar(&TestContext.ContainerRuntimePidFile,"container-runtime-pid-file","/var/run/docker.pid","The pid file of the container runtime.")
flag.StringVar(&TestContext.SystemdServices,"systemd-services","docker","The comma separated list of systemd services the framework will dump logs for.")
flag.StringVar(&TestContext.DockershimCheckpointDir,"dockershim-checkpoint-dir","/var/lib/dockershim/sandbox","The directory for dockershim to store sandbox checkpoints.")
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.KubectlPath,"kubectl-path","kubectl","The kubectl binary to use. For development, you might use 'cluster/kubectl.sh' here.")
flag.StringVar(&TestContext.OutputDir,"e2e-output-dir","/tmp","Output directory for interesting/useful test data, like performance data, benchmarks, and other metrics.")
flag.StringVar(&TestContext.Prefix,"prefix","e2e","A prefix to be added to cloud resources created during testing.")
flag.StringVar(&cloudConfig.NodeInstanceGroup,"node-instance-group","","Name of the managed instance group for nodes. Valid only for gce, gke or aws. If there is more than one group: comma separated list of groups.")
flag.IntVar(&TestContext.MinStartupPods,"minStartupPods",0,"The number of pods which we need to see in 'Running' state with a 'Ready' condition of true, before we try running tests. This is useful in any cluster which needs some base pod-based services running before it can be used.")
flag.DurationVar(&TestContext.SystemPodsStartupTimeout,"system-pods-startup-timeout",10*time.Minute,"Timeout for waiting for all system pods to be running before starting tests.")
flag.StringVar(&TestContext.UpgradeTarget,"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 upgrade test.")
flag.StringVar(&TestContext.EtcdUpgradeStorage,"etcd-upgrade-storage","","The storage version to upgrade to (either 'etcdv2' or 'etcdv3') if doing an etcd upgrade test.")
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.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.")
// TODO(random-liu): Move kubelet start logic out of the test.
// TODO(random-liu): Move log fetch logic out of the test.
// There are different ways to start kubelet (systemd, initd, docker, rkt, manually started etc.)
// and manage logs (journald, upstart etc.).
// For different situation we need to mount different things into the container, run different commands.
// It is hard and unnecessary to deal with the complexity inside the test suite.
flag.BoolVar(&TestContext.NodeConformance,"conformance",false,"If true, the test suite will not start kubelet, and fetch system log (kernel, docker, kubelet log etc.) to the report directory.")
flag.StringVar(&TestContext.SystemSpecName,"system-spec-name","","The name of the system spec (e.g., gke) that's used in the node e2e test. The system specs are in test/e2e_node/system/specs/. This is used by the test framework to determine which tests to run for validating the system requirements.")