diff options
-rw-r--r-- | docker/benchmarking/testcases.yaml | 40 | ||||
-rw-r--r-- | docker/cnf/testcases.yaml | 78 | ||||
-rw-r--r-- | docker/healthcheck/testcases.yaml | 65 | ||||
-rw-r--r-- | docker/security/testcases.yaml | 80 | ||||
-rw-r--r-- | docker/smoke/testcases.yaml | 458 | ||||
-rw-r--r-- | functest_kubernetes/k8stest.py | 12 |
6 files changed, 366 insertions, 367 deletions
diff --git a/docker/benchmarking/testcases.yaml b/docker/benchmarking/testcases.yaml index f9a9b51b..1a850e22 100644 --- a/docker/benchmarking/testcases.yaml +++ b/docker/benchmarking/testcases.yaml @@ -1,24 +1,22 @@ --- tiers: - - - name: benchmarking + - name: benchmarking + description: >- + A set of benchmarking tests integrated from xRally for Kubernetes + platform. + testcases: + - case_name: xrally_kubernetes_full + project_name: functest + criteria: 100 + blocking: false description: >- - A set of benchmarking tests integrated from xRally for Kubernetes - platform. - testcases: - - - case_name: xrally_kubernetes_full - project_name: functest - criteria: 100 - blocking: false - description: >- - All in one tasks for checking basic functionality of - Kubernetes cluster. - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: xrally_kubernetes - args: - times: 10 - concurrency: 4 - namespaces_count: 3 + All in one tasks for checking basic functionality of + Kubernetes cluster. + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: xrally_kubernetes + args: + times: 10 + concurrency: 4 + namespaces_count: 3 diff --git a/docker/cnf/testcases.yaml b/docker/cnf/testcases.yaml index d88cdf29..287747dc 100644 --- a/docker/cnf/testcases.yaml +++ b/docker/cnf/testcases.yaml @@ -1,46 +1,42 @@ --- tiers: - - - name: cnf + - name: cnf + description: >- + Collection of VNF test cases. + testcases: + - case_name: k8s_vims + project_name: functest + criteria: 100 + blocking: false description: >- - Collection of VNF test cases. - testcases: - - - case_name: k8s_vims - project_name: functest - criteria: 100 - blocking: false - description: >- - Deploy and test Clearwater IMS using Kubernetes as proposed - by https://github.com/Metaswitch/clearwater-docker - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: k8s_vims + Deploy and test Clearwater IMS using Kubernetes as proposed + by https://github.com/Metaswitch/clearwater-docker + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: k8s_vims - - - case_name: helm_vims - project_name: functest - criteria: 100 - blocking: false - description: >- - Deploy and test Clearwater IMS using Kubernetes as proposed - by https://github.com/Metaswitch/clearwater-docker - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: helm_vims + - case_name: helm_vims + project_name: functest + criteria: 100 + blocking: false + description: >- + Deploy and test Clearwater IMS using Kubernetes as proposed + by https://github.com/Metaswitch/clearwater-docker + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: helm_vims - - - case_name: cnf_conformance - project_name: functest - criteria: 90 - blocking: false - description: >- - Enable interoperability of Cloud native Network - Functions (CNFs) as proposed by - https://github.com/cncf/cnf-conformance - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: cnf_conformance + - case_name: cnf_conformance + project_name: functest + criteria: 90 + blocking: false + description: >- + Enable interoperability of Cloud native Network + Functions (CNFs) as proposed by + https://github.com/cncf/cnf-conformance + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: cnf_conformance diff --git a/docker/healthcheck/testcases.yaml b/docker/healthcheck/testcases.yaml index 466b8ae8..874685cb 100644 --- a/docker/healthcheck/testcases.yaml +++ b/docker/healthcheck/testcases.yaml @@ -1,36 +1,35 @@ --- tiers: - - - name: healthcheck + - name: healthcheck + description: >- + A set of e2e tests integrated from kubernetes project. + testcases: + - case_name: k8s_quick + project_name: functest + criteria: 100 + blocking: false description: >- - A set of e2e tests integrated from kubernetes project. - testcases: - - - case_name: k8s_quick - project_name: functest - criteria: 100 - blocking: false - description: >- - It runs just a single test, helping to quickly validate the - Kubernetes configuration as proposed by Sonobuoy. - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: Pods should be submitted and removed - - - case_name: k8s_smoke - project_name: functest - criteria: 100 - blocking: false - description: >- - Smoke Tests a running Kubernetes cluster, which - validates the deployed cluster is accessible, and - at least satisfies minimal functional requirements. - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: Kubectl client Guestbook application + It runs just a single test, helping to quickly validate the + Kubernetes configuration as proposed by Sonobuoy. + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + ginkgo: + focus: Pods should be submitted and removed + - case_name: k8s_smoke + project_name: functest + criteria: 100 + blocking: false + description: >- + Smoke Tests a running Kubernetes cluster, which + validates the deployed cluster is accessible, and + at least satisfies minimal functional requirements. + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + ginkgo: + focus: Kubectl client Guestbook application diff --git a/docker/security/testcases.yaml b/docker/security/testcases.yaml index c4f7e69b..7af54a3f 100644 --- a/docker/security/testcases.yaml +++ b/docker/security/testcases.yaml @@ -1,47 +1,43 @@ --- tiers: - - - name: security + - name: security + description: >- + Set of basic security tests. + testcases: + - case_name: kube_hunter + project_name: functest + criteria: 100 + blocking: false description: >- - Set of basic security tests. - testcases: - - - case_name: kube_hunter - project_name: functest - criteria: 100 - blocking: false - description: >- - Check that the kubernetes cluster has no known - vulnerabilities - run: - name: kube_hunter - args: - severity: high + Check that the kubernetes cluster has no known + vulnerabilities + run: + name: kube_hunter + args: + severity: high - - - case_name: kube_bench_master - project_name: functest - criteria: 100 - blocking: false - description: >- - Checks whether Kubernetes is deployed securely by running - the master checks documented in the CIS Kubernetes - Benchmark. - run: - name: kube_bench - args: - target: master + - case_name: kube_bench_master + project_name: functest + criteria: 100 + blocking: false + description: >- + Checks whether Kubernetes is deployed securely by running + the master checks documented in the CIS Kubernetes + Benchmark. + run: + name: kube_bench + args: + target: master - - - case_name: kube_bench_node - project_name: functest - criteria: 100 - blocking: false - description: >- - Checks whether Kubernetes is deployed securely by running - the node checks documented in the CIS Kubernetes - Benchmark. - run: - name: kube_bench - args: - target: node + - case_name: kube_bench_node + project_name: functest + criteria: 100 + blocking: false + description: >- + Checks whether Kubernetes is deployed securely by running + the node checks documented in the CIS Kubernetes + Benchmark. + run: + name: kube_bench + args: + target: node diff --git a/docker/smoke/testcases.yaml b/docker/smoke/testcases.yaml index 4b7932af..11c16596 100644 --- a/docker/smoke/testcases.yaml +++ b/docker/smoke/testcases.yaml @@ -1,228 +1,236 @@ --- tiers: - - - name: smoke + - name: smoke + description: >- + A set of conformance tests integrated from kubernetes project. + testcases: + - case_name: xrally_kubernetes + project_name: functest + criteria: 100 + blocking: false description: >- - A set of conformance tests integrated from kubernetes project. - testcases: - - - case_name: xrally_kubernetes - project_name: functest - criteria: 100 - blocking: false - description: >- - All in one tasks for checking basic functionality of - Kubernetes cluster. - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: xrally_kubernetes - - - case_name: k8s_conformance - project_name: functest - criteria: 100 - blocking: false - description: >- - Conformance Tests are expect to pass on any Kubernetes - cluster, this tests are necessary demonstrate conformance - of the Kubernetes deployment. - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: \[Conformance\] - skip: \[Disruptive\]|NoExecuteTaintManager - - - case_name: sig_api_machinery - project_name: functest - criteria: 100 - blocking: false - description: >- - It runs the remaining sig-api-machinery testing excluding - the label Conformance (part of k8s_conformance) and - StorageVersionAPI. - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: \[sig-api-machinery\] - skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ - \\[Serial\\]|\\[Conformance\\]|\ - \\[Feature:StorageVersionAPI\\]" - - - case_name: sig_apps - project_name: functest - criteria: 100 - blocking: false - description: >- - It runs the remaining sig-apps testing excluding the - following labels: Conformance (part of k8s_conformance) and - both StatefulUpgrade and StatefulSet features. - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: \[sig-apps] - skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ - \\[Serial\\]|\\[Conformance\\]|\ - \\[Feature:StatefulUpgrade\\]|\ - \\[Feature:StatefulSet\\]" - - - case_name: sig_auth - project_name: functest - criteria: 100 - blocking: false - description: >- - It runs the remaining sig-auth testing excluding the - following labels: Conformance (part of k8s_conformance) and - both PodSecurityPolicy and BoundServiceAccountTokenVolume - features. - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: \[sig-auth\] - skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ - \\[Serial\\]|\\[Conformance\\]|\ - \\[Feature:PodSecurityPolicy\\]|\ - \\[Feature:BoundServiceAccountTokenVolume\\]" - - - case_name: sig_cli - project_name: functest - criteria: 100 - blocking: false - description: >- - It runs the remaining sig-cli testing excluding Conformance - (part of k8s_conformance). - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: \[sig-cli] - skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ - \\[Serial\\]|\\[Conformance\\]" - - - case_name: sig_cluster_lifecycle - project_name: functest - criteria: 100 - blocking: false - description: >- - It runs the remaining sig-cluster-lifecycle testing - excluding Conformance (part of k8s_conformance). - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: \[sig-cluster-lifecycle\] - skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ - \\[Serial\\]|\\[Conformance\\]" - - - case_name: sig_network - project_name: functest - criteria: 100 - blocking: false - description: >- - It runs the remaining sig-network testing excluding the - following labels: Conformance (part of k8s_conformance), - all features and load.balancer. - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: \[sig-network\] - skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ - \\[Serial\\]|\\[Conformance\\]|load.balancer|\ - LoadBalancer|\\[Feature:.+\\]" - - - case_name: sig_network_features - project_name: functest - criteria: 100 - blocking: false - description: >- - It verifies a couple of features by running a subset of e2e - tests: Ingress, Networking-IPv4, Networking-Performance, - PerformanceDNS and NoSNAT. It excludes by default - NetworkPolicy, Networking-IPv6, IPv6DualStackAlphaFeature, - SCTP and Example. A couple of features may be automatically - skipped like NEG and kubemci. - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: "\\[Feature:Ingress\\]|\ - \\[Feature:Networking-IPv4\\]|\ - \\[Feature:Networking-Performance\\]|\ - \\[Feature:PerformanceDNS\\]|\\[Feature:NoSNAT\\]" - skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ - \\[Serial\\]|\\[Conformance\\]|\ - \\[Feature:NetworkPolicy\\]|\ - \\[Feature:Networking-IPv6\\]|\ - \\[Feature:IPv6DualStackAlphaFeature\\]|\ - \\[Feature:SCTP\\]|\\[Feature:Example\\]" - - - case_name: sig_node - project_name: functest - criteria: 100 - blocking: false - description: >- - It runs the remaining sig-node testing excluding the - following labels: Conformance (part of k8s_conformance), - RuntimeClass, all RuntimeHandler, PodGarbageCollector, - RegularResourceUsageTrackingfeatures and - ExperimentalResourceUsageTracking features. - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: \[sig-node] - skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ - \\[Serial\\]|\\[Conformance\\]|\ - \\[NodeFeature:RuntimeHandler\\]|\ - \\[Feature:PodGarbageCollector\\]|\ - \\[Feature:RegularResourceUsageTracking\\]|\ - \\[Feature:ExperimentalResourceUsageTracking\\]|\ - RuntimeClass" - - - case_name: sig_instrumentation - project_name: functest - criteria: 100 - blocking: false - description: >- - It runs the remaining sig-instrumentation testing excluding - Conformance (part of k8s_conformance) - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: \[sig-instrumentation\] - skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ - \\[Serial\\]|\\[Conformance\\]" - - - case_name: sig_storage - project_name: functest - criteria: 100 - blocking: false - description: >- - It runs the remaining sig-storage testing excluding the - following labels: Conformance (part of k8s_conformance), - all features, all drivers, PersistentVolumes.NFS and Slow. - dependencies: - - DEPLOY_SCENARIO: 'k8-*' - run: - name: e2e_testing - args: - focus: \[sig-storage\] - skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ - \\[Serial\\]|\\[Conformance\\]|\ - \\[Feature:.+\\]|\\[Driver:.+\\]|\ - PersistentVolumes.NFS|\\[Slow\\]" + All in one tasks for checking basic functionality of + Kubernetes cluster. + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: xrally_kubernetes + - case_name: k8s_conformance + project_name: functest + criteria: 100 + blocking: false + description: >- + Conformance Tests are expect to pass on any Kubernetes + cluster, this tests are necessary demonstrate conformance + of the Kubernetes deployment. + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + ginkgo: + focus: \[Conformance\] + skip: \[Disruptive\]|NoExecuteTaintManager + - case_name: sig_api_machinery + project_name: functest + criteria: 100 + blocking: false + description: >- + It runs the remaining sig-api-machinery testing excluding + the label Conformance (part of k8s_conformance) and + StorageVersionAPI. + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + nodes: 25 + ginkgo: + focus: \[sig-api-machinery\] + skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ + \\[Serial\\]|\\[Conformance\\]|\ + \\[Feature:StorageVersionAPI\\]" + - case_name: sig_apps + project_name: functest + criteria: 100 + blocking: false + description: >- + It runs the remaining sig-apps testing excluding the + following labels: Conformance (part of k8s_conformance) and + both StatefulUpgrade and StatefulSet features. + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + nodes: 25 + ginkgo: + focus: \[sig-apps] + skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ + \\[Serial\\]|\\[Conformance\\]|\ + \\[Feature:StatefulUpgrade\\]|\ + \\[Feature:StatefulSet\\]" + - case_name: sig_auth + project_name: functest + criteria: 100 + blocking: false + description: >- + It runs the remaining sig-auth testing excluding the + following labels: Conformance (part of k8s_conformance) and + both PodSecurityPolicy and BoundServiceAccountTokenVolume + features. + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + nodes: 25 + ginkgo: + focus: \[sig-auth\] + skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ + \\[Serial\\]|\\[Conformance\\]|\ + \\[Feature:PodSecurityPolicy\\]|\ + \\[Feature:BoundServiceAccountTokenVolume\\]" + - case_name: sig_cli + project_name: functest + criteria: 100 + blocking: false + description: >- + It runs the remaining sig-cli testing excluding Conformance + (part of k8s_conformance). + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + nodes: 25 + ginkgo: + focus: \[sig-cli] + skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ + \\[Serial\\]|\\[Conformance\\]" + - case_name: sig_cluster_lifecycle + project_name: functest + criteria: 100 + blocking: false + description: >- + It runs the remaining sig-cluster-lifecycle testing + excluding Conformance (part of k8s_conformance). + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + nodes: 25 + ginkgo: + focus: \[sig-cluster-lifecycle\] + skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ + \\[Serial\\]|\\[Conformance\\]" + - case_name: sig_network + project_name: functest + criteria: 100 + blocking: false + description: >- + It runs the remaining sig-network testing excluding the + following labels: Conformance (part of k8s_conformance), + all features and load.balancer. + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + nodes: 25 + ginkgo: + focus: \[sig-network\] + skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ + \\[Serial\\]|\\[Conformance\\]|load.balancer|\ + LoadBalancer|\\[Feature:.+\\]" + - case_name: sig_network_features + project_name: functest + criteria: 100 + blocking: false + description: >- + It verifies a couple of features by running a subset of e2e + tests: Ingress, Networking-IPv4, Networking-Performance, + PerformanceDNS and NoSNAT. It excludes by default + NetworkPolicy, Networking-IPv6, IPv6DualStackAlphaFeature, + SCTP and Example. A couple of features may be automatically + skipped like NEG and kubemci. + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + nodes: 25 + ginkgo: + focus: "\\[Feature:Ingress\\]|\ + \\[Feature:Networking-IPv4\\]|\ + \\[Feature:Networking-Performance\\]|\ + \\[Feature:PerformanceDNS\\]|\\[Feature:NoSNAT\\]" + skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ + \\[Serial\\]|\\[Conformance\\]|\ + \\[Feature:NetworkPolicy\\]|\ + \\[Feature:Networking-IPv6\\]|\ + \\[Feature:IPv6DualStackAlphaFeature\\]|\ + \\[Feature:SCTP\\]|\\[Feature:Example\\]" + - case_name: sig_node + project_name: functest + criteria: 100 + blocking: false + description: >- + It runs the remaining sig-node testing excluding the + following labels: Conformance (part of k8s_conformance), + RuntimeClass, all RuntimeHandler, PodGarbageCollector, + RegularResourceUsageTrackingfeatures and + ExperimentalResourceUsageTracking features. + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + nodes: 25 + ginkgo: + focus: \[sig-node] + skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ + \\[Serial\\]|\\[Conformance\\]|\ + \\[NodeFeature:RuntimeHandler\\]|\ + \\[Feature:PodGarbageCollector\\]|\ + \\[Feature:RegularResourceUsageTracking\\]|\ + \\[Feature:ExperimentalResourceUsageTracking\\]|\ + RuntimeClass" + - case_name: sig_instrumentation + project_name: functest + criteria: 100 + blocking: false + description: >- + It runs the remaining sig-instrumentation testing excluding + Conformance (part of k8s_conformance) + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + nodes: 25 + ginkgo: + focus: \[sig-instrumentation\] + skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ + \\[Serial\\]|\\[Conformance\\]" + - case_name: sig_storage + project_name: functest + criteria: 100 + blocking: false + description: >- + It runs the remaining sig-storage testing excluding the + following labels: Conformance (part of k8s_conformance), + all features, all drivers, PersistentVolumes.NFS and Slow. + dependencies: + - DEPLOY_SCENARIO: "k8-*" + run: + name: e2e_testing + args: + nodes: 25 + ginkgo: + focus: \[sig-storage\] + skip: "\\[Disruptive\\]|\\[Flaky\\]|\\[alpha\\]|\ + \\[Serial\\]|\\[Conformance\\]|\ + \\[Feature:.+\\]|\\[Driver:.+\\]|\ + PersistentVolumes.NFS|\\[Slow\\]" diff --git a/functest_kubernetes/k8stest.py b/functest_kubernetes/k8stest.py index 7e629ec9..740a3b93 100644 --- a/functest_kubernetes/k8stest.py +++ b/functest_kubernetes/k8stest.py @@ -47,10 +47,13 @@ class E2ETesting(testcase.TestCase): def run_kubetest(self, **kwargs): # pylint: disable=too-many-branches """Run the test suites""" - cmd_line = ['e2e.test', '-ginkgo.noColor', '-kubeconfig', self.config, - '-provider', 'skeleton', '-report-dir', self.res_dir] - for arg in kwargs: - cmd_line.extend(['-ginkgo.{}'.format(arg), kwargs.get(arg)]) + cmd_line = [ + 'ginkgo', '--nodes={}'.format(kwargs.get("nodes", 1)), + '--noColor', '/usr/local/bin/e2e.test', '--', + '-kubeconfig', self.config, + '-provider', 'skeleton', '-report-dir', self.res_dir] + for arg in kwargs.get("ginkgo", {}): + cmd_line.extend(['-ginkgo.{}'.format(arg), kwargs["ginkgo"][arg]]) if "NON_BLOCKING_TAINTS" in os.environ: cmd_line.extend( ['-non-blocking-taints', os.environ["NON_BLOCKING_TAINTS"]]) @@ -58,7 +61,6 @@ class E2ETesting(testcase.TestCase): self._generate_repo_list_file() self.__logger.info("Starting k8s test: '%s'.", cmd_line) env = os.environ.copy() - env["GINKGO_PARALLEL"] = 'y' env["KUBE_TEST_REPO_LIST"] = "{}/repositories.yml".format(self.res_dir) process = subprocess.Popen(cmd_line, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env) |