From 0cd172ffc9fbbf95f06def58bdba079df529e20e Mon Sep 17 00:00:00 2001 From: Kevin Fairise <132568982+KevinFairise2@users.noreply.github.com> Date: Fri, 6 Dec 2024 10:03:23 +0100 Subject: [PATCH] Delete test/kitchen folder (#31525) --- .github/CODEOWNERS | 17 +- .gitlab-ci.yml | 46 +- .gitlab/.ci-linters.yml | 10 - .gitlab/JOBOWNERS | 7 - .gitlab/e2e_install_packages/common.yml | 2 +- .../e2e_deploy.yml} | 16 +- .gitlab/functional_test/include.yml | 2 +- .../functional_test_cleanup.yml | 17 - .gitlab/kernel_matrix_testing/common.yml | 10 +- .gitlab/kitchen_cleanup/cleanup.yml | 28 - .gitlab/kitchen_cleanup/include.yml | 6 - .gitlab/kitchen_cleanup/kitchen_cleanup.yml | 16 - .gitlab/kitchen_testing/common.yml | 161 -- .gitlab/kitchen_testing/include.yml | 7 - .gitlab/kitchen_testing/windows.yml | 25 - .gitlab/maintenance_jobs/include.yml | 2 - .gitlab/maintenance_jobs/kitchen.yml | 47 - .gitlab/source_test/tooling_unit_tests.yml | 15 - .gitlab/source_test/windows.yml | 2 +- .gitlab/trigger_release/trigger_release.yml | 2 +- omnibus/.gitignore | 3 - tasks/kernel_matrix_testing/ci.py | 2 +- tasks/kmt.py | 4 +- tasks/libs/pipeline/data.py | 14 +- tasks/libs/pipeline/tools.py | 4 +- tasks/libs/types/types.py | 2 - tasks/linter.py | 4 +- tasks/system_probe.py | 94 +- tasks/unit_tests/junit_tests.py | 10 - tasks/unit_tests/libs/data_tests.py | 8 - .../bedroom-rspec-win2016-azure-x86_64.xml | 42 +- tasks/unit_tests/testdata/variables.yml | 9 +- tasks/winbuildscripts/secagent.ps1 | 2 +- tasks/winbuildscripts/sysprobe.bat | 4 +- tasks/winbuildscripts/sysprobe.ps1 | 4 +- test/files/default/.gitkeep | 1 + test/kitchen/.gitignore | 26 - test/kitchen/Berksfile | 27 - test/kitchen/Gemfile.local | 11 - test/kitchen/README.md | 283 ---- test/kitchen/azure-creds.erb | 4 - test/kitchen/docs/README.md | 236 --- test/kitchen/docs/win-all-subservices.md | 27 - test/kitchen/docs/win-installopts.md | 15 - test/kitchen/docs/win-no-subservices.md | 27 - test/kitchen/drivers/azure-driver.yml | 200 --- test/kitchen/drivers/ec2-driver.yml | 215 --- test/kitchen/drivers/hyperv-driver.yml | 89 -- test/kitchen/drivers/vagrant-driver.yml | 54 - test/kitchen/platforms.json | 175 --- .../site-cookbooks/dd-agent-5/README.md | 6 - .../dd-agent-5/attributes/default.rb | 26 - .../site-cookbooks/dd-agent-5/metadata.rb | 9 - .../dd-agent-5/recipes/_install_linux.rb | 68 - .../recipes/_install_windows_base.rb | 73 - .../dd-agent-5/recipes/default.rb | 15 - .../dd-agent-5/templates/datadog.conf.erb | 3 - .../dd-agent-disable-system-repos/.gitignore | 15 - .../dd-agent-disable-system-repos/Berksfile | 3 - .../dd-agent-disable-system-repos/Gemfile | 4 - .../dd-agent-disable-system-repos/README.md | 3 - .../dd-agent-disable-system-repos/chefignore | 96 -- .../dd-agent-disable-system-repos/metadata.rb | 5 - .../recipes/default.rb | 20 - .../dd-agent-import-conf/.gitignore | 15 - .../dd-agent-import-conf/Berksfile | 3 - .../dd-agent-import-conf/Gemfile | 4 - .../dd-agent-import-conf/README.md | 4 - .../attributes/default.rb | 13 - .../dd-agent-import-conf/chefignore | 96 -- .../dd-agent-import-conf/metadata.rb | 9 - .../recipes/_datadog-agent-6.rb | 75 - .../dd-agent-import-conf/recipes/default.rb | 26 - .../dd-agent-install/.gitignore | 15 - .../site-cookbooks/dd-agent-install/Berksfile | 3 - .../site-cookbooks/dd-agent-install/Gemfile | 4 - .../site-cookbooks/dd-agent-install/README.md | 6 - .../dd-agent-install/attributes/default.rb | 83 - .../dd-agent-install/chefignore | 96 -- .../dd-agent-install/metadata.rb | 9 - .../recipes/_agent6_windows_config.rb | 120 -- .../recipes/_damage_windows_install.rb | 11 - .../recipes/_install_windows.rb | 47 - .../recipes/_install_windows_base.rb | 101 -- .../recipes/_repair_windows_install.rb | 12 - .../recipes/_stop_windows_agent.rb | 23 - .../dd-agent-install/recipes/default.rb | 15 - .../templates/default/activemq.yaml.erb | 60 - .../templates/default/apache.yaml.erb | 19 - .../templates/default/cacti.yaml.erb | 22 - .../templates/default/cassandra.yaml.erb | 152 -- .../templates/default/consul.yaml.erb | 24 - .../templates/default/couch.yaml.erb | 12 - .../templates/default/couchbase.yaml.erb | 9 - .../templates/default/datadog.conf.erb | 240 --- .../templates/default/datadog.yaml.erb | 116 -- .../templates/default/directory.yaml.erb | 15 - .../templates/default/disk.yaml.erb | 3 - .../templates/default/dns_check.yaml.erb | 13 - .../templates/default/docker.yaml.erb | 13 - .../templates/default/docker_daemon.yaml.erb | 3 - .../templates/default/elastic.yaml.erb | 48 - .../templates/default/etcd.yaml.erb | 20 - .../templates/default/fluentd.yaml.erb | 4 - .../templates/default/go-metro.yaml.erb | 4 - .../templates/default/go_expvar.yaml.erb | 3 - .../templates/default/gunicorn.yaml.erb | 15 - .../templates/default/haproxy.yaml.erb | 17 - .../templates/default/hdfs.yaml.erb | 18 - .../templates/default/http_check.yaml.erb | 5 - .../templates/default/iis.yaml.erb | 41 - .../templates/default/integration.yaml.erb | 3 - .../templates/default/jenkins.yaml.erb | 9 - .../templates/default/jmx.yaml.erb | 5 - .../templates/default/kafka.yaml.erb | 553 ------- .../templates/default/kafka_consumer.yaml.erb | 23 - .../templates/default/kubernetes.yaml.erb | 4 - .../templates/default/kyototycoon.yaml.erb | 19 - .../templates/default/lighttpd.yaml.erb | 15 - .../templates/default/mcache.yaml.erb | 18 - .../templates/default/mesos.yaml.erb | 8 - .../templates/default/mongo.yaml.erb | 35 - .../templates/default/mysql.yaml.erb | 38 - .../templates/default/network.yaml.erb | 13 - .../templates/default/nginx.yaml.erb | 23 - .../templates/default/ntp.yaml.erb | 5 - .../templates/default/pgbouncer.yaml.erb | 6 - .../templates/default/php_fpm.yaml.erb | 4 - .../templates/default/postfix.yaml.erb | 21 - .../templates/default/postgres.yaml.erb | 21 - .../templates/default/process.yaml.erb | 3 - .../templates/default/rabbitmq.yaml.erb | 54 - .../templates/default/redisdb.yaml.erb | 38 - .../templates/default/riak.yaml.erb | 9 - .../templates/default/snmp.yaml.erb | 3 - .../templates/default/solr.yaml.erb | 71 - .../templates/default/sqlserver.yaml.erb | 3 - .../templates/default/ssh_check.yaml.erb | 26 - .../templates/default/supervisord.yaml.erb | 6 - .../templates/default/system_core.yaml.erb | 9 - .../templates/default/system_swap.yaml.erb | 9 - .../templates/default/tcp_check.yaml.erb | 5 - .../templates/default/tokumx.yaml.erb | 34 - .../templates/default/tomcat.yaml.erb | 78 - .../templates/default/varnish.yaml.erb | 24 - .../default/win32_event_log.yaml.erb | 3 - .../default/windows_service.yaml.erb | 6 - .../templates/default/wmi_check.yaml.erb | 75 - .../templates/default/zk.yaml.erb | 22 - .../dd-agent-reinstall/.gitignore | 15 - .../dd-agent-reinstall/Berksfile | 3 - .../site-cookbooks/dd-agent-reinstall/Gemfile | 4 - .../dd-agent-reinstall/README.md | 3 - .../dd-agent-reinstall/attributes/default.rb | 8 - .../dd-agent-reinstall/chefignore | 96 -- .../dd-agent-reinstall/metadata.rb | 5 - .../dd-agent-reinstall/recipes/default.rb | 57 - .../dd-agent-rhel-workaround/.gitignore | 15 - .../dd-agent-rhel-workaround/Berksfile | 3 - .../dd-agent-rhel-workaround/Gemfile | 4 - .../dd-agent-rhel-workaround/README.md | 3 - .../dd-agent-rhel-workaround/chefignore | 96 -- .../dd-agent-rhel-workaround/metadata.rb | 5 - .../recipes/default.rb | 22 - .../dd-agent-sles-workaround/.gitignore | 15 - .../dd-agent-sles-workaround/Berksfile | 3 - .../dd-agent-sles-workaround/Gemfile | 4 - .../dd-agent-sles-workaround/README.md | 4 - .../dd-agent-sles-workaround/chefignore | 96 -- .../dd-agent-sles-workaround/metadata.rb | 5 - .../recipes/default.rb | 29 - .../dd-agent-system-files-check/.gitignore | 15 - .../dd-agent-system-files-check/Berksfile | 3 - .../dd-agent-system-files-check/Gemfile | 4 - .../dd-agent-system-files-check/README.md | 3 - .../dd-agent-system-files-check/chefignore | 96 -- .../dd-agent-system-files-check/metadata.rb | 5 - .../recipes/list-files-before-install.rb | 27 - .../dd-agent-upgrade/.gitignore | 15 - .../site-cookbooks/dd-agent-upgrade/Berksfile | 3 - .../site-cookbooks/dd-agent-upgrade/Gemfile | 4 - .../site-cookbooks/dd-agent-upgrade/README.md | 8 - .../dd-agent-upgrade/Vagrantfile | 25 - .../dd-agent-upgrade/attributes/default.rb | 70 - .../dd-agent-upgrade/chefignore | 96 -- .../dd-agent-upgrade/metadata.rb | 9 - .../dd-agent-upgrade/recipes/default.rb | 188 --- .../dd-system-probe-check/.gitignore | 7 - .../dd-system-probe-check/Berksfile | 3 - .../dd-system-probe-check/Gemfile | 4 - .../dd-system-probe-check/README.md | 3 - .../attributes/default.rb | 0 .../dd-system-probe-check/chefignore | 84 - .../files/default/.gitkeep | 0 .../files/windows/decompress_merge_module.ps1 | 61 - .../files/windows/iisstart.htm | 32 - .../files/windows/iisstart.png | Bin 98757 -> 0 bytes .../dd-system-probe-check/metadata.rb | 5 - .../dd-system-probe-check/recipes/default.rb | 27 - .../dd-system-probe-check/recipes/windows.rb | 96 -- test/kitchen/tasks/README.md | 6 - test/kitchen/tasks/__init__.py | 11 - test/kitchen/tasks/clean.sh | 72 - test/kitchen/tasks/kitchen.py | 253 --- .../kitchen/tasks/kitchen_rspec_xml_update.sh | 7 - test/kitchen/tasks/kitchen_setup.sh | 6 - test/kitchen/tasks/run-test-kitchen.ps1 | 35 - test/kitchen/tasks/run-test-kitchen.sh | 200 --- test/kitchen/tasks/show-strays.sh | 67 - test/kitchen/tasks/unit-tests/__init__.py | 0 .../tasks/unit-tests/gotest-failed-runlog | 10 - .../unit-tests/gotest-infra-failed-runlog | 10 - .../tasks/unit-tests/infra-failed-runlog | 10 - .../tasks/unit-tests/kitchen_unit_tests.py | 35 - .../tasks/unit-tests/test-failed-runlog | 10 - test/kitchen/test-definitions/chef-test.yml | 28 - .../test-definitions/platforms-common.yml | 30 - .../security-agent-stress.yml | 13 - .../test-definitions/security-agent-test.yml | 13 - .../test-definitions/upgrade5-test.yml | 40 - .../test-definitions/upgrade6-test.yml | 41 - .../test-definitions/upgrade7-test.yml | 47 - .../test-definitions/windows-cwsinstall.yml | 30 - .../test-definitions/windows-install-test.yml | 24 - .../test-definitions/windows-npm-test.md | 54 - .../test-definitions/windows-npm-test.yml | 322 ---- .../test-definitions/windows-npmdriver.yml | 29 - .../windows-secagent-test.yml | 10 - .../windows-sysprobe-test.yml | 10 - .../integration/chef/rspec_datadog/Gemfile | 4 - .../chef/rspec_datadog/chef_spec.rb | 7 - .../chef/rspec_datadog/spec_helper.rb | 1 - .../integration/common/rspec_datadog/Gemfile | 4 - .../rspec_datadog/kernel_out_spec_helper.rb | 83 - .../common/rspec_datadog/spec_helper.rb | 1383 ----------------- .../rspec_datadog/windows_npm_spec_helper.rb | 103 -- .../upgrade-agent5/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/upgrade-agent5_spec.rb | 1 - .../upgrade-agent6/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/upgrade-agent6_spec.rb | 1 - .../upgrade-agent7/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/upgrade-agent7_spec.rb | 1 - .../integration/upgrade/rspec_datadog/Gemfile | 4 - .../upgrade/rspec_datadog/spec_helper.rb | 1 - .../upgrade/rspec_datadog/upgrade_spec.rb | 7 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-agent-with-cws-option_spec.rb | 81 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../win-all-subservices/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-all-subservices_spec.rb | 12 - .../win-alt-dir/rspec_datadog/Gemfile | 4 - .../win-alt-dir/rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-alt-dir_spec.rb | 126 -- .../win-install-fail/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-install-fail_spec.rb | 42 - .../win-installopts/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-installopts_spec.rb | 64 - .../win-no-subservices/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-no-subservices_spec.rb | 48 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-beta-upgrade_spec.rb | 10 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-no-npm-option_spec.rb | 10 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-reinstall-option_spec.rb | 9 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-upgrade-no-npm_spec.rb | 9 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-upgrade-to-npm-no-csflag_spec.rb | 10 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-upgrade-to-npm_spec.rb | 10 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-with-addlocal-all_spec.rb | 9 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-with-addlocal-npm_spec.rb | 9 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-with-cs-option_spec.rb | 9 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-npm-with-npm-option_spec.rb | 9 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../win-repair/rspec_datadog/Gemfile | 4 - .../win-repair/rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-repair_spec.rb | 6 - .../win-secagent-test/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/win-secagent-test_spec.rb | 43 - .../win-sysprobe-test/rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../rspec_datadog/sysprobe_spec_helper.rb | 52 - .../rspec_datadog/win-sysprobe-test_spec.rb | 39 - .../rspec_datadog/windows_npm_spec_helper.rb | 1 - .../rspec_datadog/Gemfile | 4 - .../rspec_datadog/spec_helper.rb | 1 - .../win-upgrade-rollback_spec.rb | 8 - .../win-user/rspec_datadog/Gemfile | 4 - .../win-user/rspec_datadog/spec_helper.rb | 1 - .../win-user/rspec_datadog/win-user_spec.rb | 142 -- test/kitchen/uservars-example.json | 29 - test/new-e2e/tests/npm/ec2_1host_test.go | 4 +- .../tests/sysprobe-functional/.gitignore | 7 + .../tests/sysprobe-functional/apmtags_test.go | 9 +- .../sysprobe-functional/sysprobe_test.go | 4 +- 329 files changed, 95 insertions(+), 10605 deletions(-) rename .gitlab/{kitchen_deploy/kitchen_deploy.yml => e2e_testing_deploy/e2e_deploy.yml} (97%) delete mode 100644 .gitlab/functional_test_cleanup/functional_test_cleanup.yml delete mode 100644 .gitlab/kitchen_cleanup/cleanup.yml delete mode 100644 .gitlab/kitchen_cleanup/include.yml delete mode 100644 .gitlab/kitchen_cleanup/kitchen_cleanup.yml delete mode 100644 .gitlab/kitchen_testing/common.yml delete mode 100644 .gitlab/kitchen_testing/include.yml delete mode 100644 .gitlab/kitchen_testing/windows.yml delete mode 100644 .gitlab/maintenance_jobs/kitchen.yml create mode 100644 test/files/default/.gitkeep delete mode 100644 test/kitchen/.gitignore delete mode 100644 test/kitchen/Berksfile delete mode 100644 test/kitchen/Gemfile.local delete mode 100644 test/kitchen/README.md delete mode 100644 test/kitchen/azure-creds.erb delete mode 100644 test/kitchen/docs/README.md delete mode 100644 test/kitchen/docs/win-all-subservices.md delete mode 100644 test/kitchen/docs/win-installopts.md delete mode 100644 test/kitchen/docs/win-no-subservices.md delete mode 100644 test/kitchen/drivers/azure-driver.yml delete mode 100644 test/kitchen/drivers/ec2-driver.yml delete mode 100644 test/kitchen/drivers/hyperv-driver.yml delete mode 100644 test/kitchen/drivers/vagrant-driver.yml delete mode 100644 test/kitchen/platforms.json delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/attributes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_linux.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_windows_base.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-5/templates/datadog.conf.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-disable-system-repos/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/attributes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/_datadog-agent-6.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/attributes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/_agent6_windows_config.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/_damage_windows_install.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows_base.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/_repair_windows_install.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/activemq.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/apache.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/cacti.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/cassandra.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/consul.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/couch.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/couchbase.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.conf.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/directory.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/disk.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/dns_check.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker_daemon.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/elastic.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/etcd.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/fluentd.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/go-metro.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/go_expvar.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/gunicorn.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/haproxy.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/hdfs.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/http_check.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/iis.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/integration.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/jenkins.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/jmx.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka_consumer.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/kubernetes.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/kyototycoon.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/lighttpd.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/mcache.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/mesos.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/mongo.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/mysql.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/network.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/nginx.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/ntp.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/pgbouncer.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/php_fpm.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/postfix.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/postgres.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/process.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/rabbitmq.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/redisdb.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/riak.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/snmp.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/solr.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/sqlserver.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/ssh_check.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/supervisord.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_core.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_swap.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/tcp_check.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/tokumx.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/tomcat.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/varnish.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/win32_event_log.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/windows_service.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/wmi_check.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-install/templates/default/zk.yaml.erb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/attributes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-reinstall/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-rhel-workaround/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-sles-workaround/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-system-files-check/recipes/list-files-before-install.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/Vagrantfile delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/attributes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-agent-upgrade/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/Berksfile delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/Gemfile delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/README.md delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/attributes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/chefignore delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/files/default/.gitkeep delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/decompress_merge_module.ps1 delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.htm delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.png delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/metadata.rb delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/recipes/default.rb delete mode 100644 test/kitchen/site-cookbooks/dd-system-probe-check/recipes/windows.rb delete mode 100644 test/kitchen/tasks/README.md delete mode 100644 test/kitchen/tasks/__init__.py delete mode 100755 test/kitchen/tasks/clean.sh delete mode 100644 test/kitchen/tasks/kitchen.py delete mode 100755 test/kitchen/tasks/kitchen_rspec_xml_update.sh delete mode 100755 test/kitchen/tasks/kitchen_setup.sh delete mode 100644 test/kitchen/tasks/run-test-kitchen.ps1 delete mode 100755 test/kitchen/tasks/run-test-kitchen.sh delete mode 100755 test/kitchen/tasks/show-strays.sh delete mode 100644 test/kitchen/tasks/unit-tests/__init__.py delete mode 100644 test/kitchen/tasks/unit-tests/gotest-failed-runlog delete mode 100644 test/kitchen/tasks/unit-tests/gotest-infra-failed-runlog delete mode 100644 test/kitchen/tasks/unit-tests/infra-failed-runlog delete mode 100644 test/kitchen/tasks/unit-tests/kitchen_unit_tests.py delete mode 100644 test/kitchen/tasks/unit-tests/test-failed-runlog delete mode 100644 test/kitchen/test-definitions/chef-test.yml delete mode 100644 test/kitchen/test-definitions/platforms-common.yml delete mode 100644 test/kitchen/test-definitions/security-agent-stress.yml delete mode 100644 test/kitchen/test-definitions/security-agent-test.yml delete mode 100644 test/kitchen/test-definitions/upgrade5-test.yml delete mode 100644 test/kitchen/test-definitions/upgrade6-test.yml delete mode 100644 test/kitchen/test-definitions/upgrade7-test.yml delete mode 100644 test/kitchen/test-definitions/windows-cwsinstall.yml delete mode 100644 test/kitchen/test-definitions/windows-install-test.yml delete mode 100644 test/kitchen/test-definitions/windows-npm-test.md delete mode 100644 test/kitchen/test-definitions/windows-npm-test.yml delete mode 100644 test/kitchen/test-definitions/windows-npmdriver.yml delete mode 100644 test/kitchen/test-definitions/windows-secagent-test.yml delete mode 100644 test/kitchen/test-definitions/windows-sysprobe-test.yml delete mode 100644 test/kitchen/test/integration/chef/rspec_datadog/Gemfile delete mode 100644 test/kitchen/test/integration/chef/rspec_datadog/chef_spec.rb delete mode 120000 test/kitchen/test/integration/chef/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/common/rspec_datadog/Gemfile delete mode 100644 test/kitchen/test/integration/common/rspec_datadog/kernel_out_spec_helper.rb delete mode 100644 test/kitchen/test/integration/common/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/common/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/upgrade-agent5/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/upgrade-agent5/rspec_datadog/spec_helper.rb delete mode 120000 test/kitchen/test/integration/upgrade-agent5/rspec_datadog/upgrade-agent5_spec.rb delete mode 100644 test/kitchen/test/integration/upgrade-agent6/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/upgrade-agent6/rspec_datadog/spec_helper.rb delete mode 120000 test/kitchen/test/integration/upgrade-agent6/rspec_datadog/upgrade-agent6_spec.rb delete mode 100644 test/kitchen/test/integration/upgrade-agent7/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/upgrade-agent7/rspec_datadog/spec_helper.rb delete mode 120000 test/kitchen/test/integration/upgrade-agent7/rspec_datadog/upgrade-agent7_spec.rb delete mode 100644 test/kitchen/test/integration/upgrade/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/upgrade/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/upgrade/rspec_datadog/upgrade_spec.rb delete mode 100644 test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/win-agent-with-cws-option_spec.rb delete mode 120000 test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-all-subservices/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-all-subservices/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-all-subservices/rspec_datadog/win-all-subservices_spec.rb delete mode 100644 test/kitchen/test/integration/win-alt-dir/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-alt-dir/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-alt-dir/rspec_datadog/win-alt-dir_spec.rb delete mode 100644 test/kitchen/test/integration/win-install-fail/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-install-fail/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-install-fail/rspec_datadog/win-install-fail_spec.rb delete mode 100644 test/kitchen/test/integration/win-installopts/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-installopts/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-installopts/rspec_datadog/win-installopts_spec.rb delete mode 100644 test/kitchen/test/integration/win-no-subservices/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-no-subservices/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-no-subservices/rspec_datadog/win-no-subservices_spec.rb delete mode 100644 test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/win-npm-beta-upgrade_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/win-npm-no-npm-option_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/win-npm-reinstall-option_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/win-npm-upgrade-no-npm_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/win-npm-upgrade-to-npm-no-csflag_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/win-npm-upgrade-to-npm_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/win-npm-with-addlocal-all_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/win-npm-with-addlocal-npm_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/win-npm-with-cs-option_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/win-npm-with-npm-option_spec.rb delete mode 120000 test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-repair/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-repair/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-repair/rspec_datadog/win-repair_spec.rb delete mode 100644 test/kitchen/test/integration/win-secagent-test/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-secagent-test/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-secagent-test/rspec_datadog/win-secagent-test_spec.rb delete mode 100644 test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/sysprobe_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/win-sysprobe-test_spec.rb delete mode 120000 test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/windows_npm_spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/win-upgrade-rollback_spec.rb delete mode 100644 test/kitchen/test/integration/win-user/rspec_datadog/Gemfile delete mode 120000 test/kitchen/test/integration/win-user/rspec_datadog/spec_helper.rb delete mode 100644 test/kitchen/test/integration/win-user/rspec_datadog/win-user_spec.rb delete mode 100644 test/kitchen/uservars-example.json create mode 100644 test/new-e2e/tests/sysprobe-functional/.gitignore diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c3d8aed610550..6c22b2c34e4b8 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -75,6 +75,7 @@ /.gitlab/deploy*/* @DataDog/agent-delivery /.gitlab/deps_fetch/* @DataDog/agent-devx-infra /.gitlab/e2e/* @DataDog/agent-devx-infra @DataDog/agent-devx-loops +/.gitlab/e2e_testing_deploy/* @DataDog/agent-devx-loops @DataDog/agent-devx-infra /.gitlab/e2e_install_packages/* @DataDog/agent-delivery /.gitlab/e2e_pre_test/* @DataDog/agent-devx-infra @DataDog/agent-devx-loops /.gitlab/kernel_matrix_testing/* @DataDog/agent-devx-infra @DataDog/ebpf-platform @@ -90,7 +91,6 @@ /.gitlab/binary_build/include.yml @DataDog/agent-devx-infra /.gitlab/binary_build/linux.yml @DataDog/agent-devx-infra @DataDog/agent-delivery /.gitlab/functional_test/include.yml @DataDog/agent-devx-infra -/.gitlab/functional_test_cleanup/functional_test_cleanup.yml @DataDog/agent-devx-infra @DataDog/agent-security /.gitlab/install_script_testing/install_script_testing.yml @DataDog/agent-delivery /.gitlab/integration_test/dogstatsd.yml @DataDog/agent-devx-infra @DataDog/agent-metrics-logs /.gitlab/integration_test/include.yml @DataDog/agent-devx-infra @@ -131,8 +131,6 @@ /.gitlab/deps_build/ @DataDog/ebpf-platform @DataDog/agent-delivery @DataDog/windows-agent -/.gitlab/kitchen_* @DataDog/container-ecosystems @DataDog/agent-delivery -/.gitlab/kitchen_testing/windows.yml @DataDog/container-ecosystems @DataDog/agent-delivery @DataDog/windows-agent /.gitlab/e2e_install_packages/windows.yml @DataDog/container-ecosystems @DataDog/agent-delivery @DataDog/windows-agent /.gitlab/common/ @DataDog/agent-devx-infra @@ -144,7 +142,6 @@ /.gitlab/binary_build/fakeintake.yml @DataDog/agent-e2e-testing @DataDog/agent-devx-loops /.gitlab/functional_test/serverless.yml @DataDog/serverless @Datadog/serverless-aws @DataDog/agent-devx-infra -/.gitlab/functional_test_cleanup @DataDog/agent-security @DataDog/windows-kernel-integrations @DataDog/agent-devx-infra /.gitlab/functional_test/oracle.yml @DataDog/agent-devx-infra @DataDog/database-monitoring /.gitlab/powershell_script_deploy @DataDog/agent-delivery @DataDog/windows-agent @@ -590,18 +587,6 @@ /test/integration/docker/otel_agent_build_tests.py @DataDog/opentelemetry /test/integration/serverless @DataDog/serverless @Datadog/serverless-aws /test/integration/serverless_perf @DataDog/serverless @Datadog/serverless-aws -/test/kitchen/ @DataDog/agent-devx-loops -/test/kitchen/test-definitions/ @DataDog/container-ecosystems @DataDog/agent-delivery -/test/kitchen/test/integration/ @DataDog/container-ecosystems @DataDog/agent-delivery -/test/kitchen/site-cookbooks/dd-system-probe-check/ @DataDog/windows-kernel-integrations -/test/kitchen/test/integration/win-all-subservices/ @DataDog/windows-agent -/test/kitchen/test/integration/win-alt-dir/ @DataDog/windows-agent -/test/kitchen/test/integration/win-install-fail/ @DataDog/windows-agent -/test/kitchen/test/integration/win-installopts/ @DataDog/windows-agent -/test/kitchen/test/integration/win-no-subservices/ @DataDog/windows-agent -/test/kitchen/test/integration/win-sysprobe-test/ @DataDog/windows-kernel-integrations -/test/kitchen/test/integration/win-repair/ @DataDog/windows-agent -/test/kitchen/test/integration/win-user/ @DataDog/windows-agent /test/fakeintake/ @DataDog/agent-e2e-testing @DataDog/agent-devx-loops /test/fakeintake/aggregator/ndmflowAggregator.go @DataDog/ndm-integrations /test/fakeintake/aggregator/ndmflowAggregator_test.go @DataDog/ndm-integrations diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index eff912e0c25e9..ef09047f42cce 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,15 +24,12 @@ include: - .gitlab/e2e/e2e.yml - .gitlab/e2e_install_packages/include.yml - .gitlab/e2e_pre_test/e2e_pre_test.yml + - .gitlab/e2e_testing_deploy/e2e_deploy.yml - .gitlab/functional_test/include.yml - - .gitlab/functional_test_cleanup/functional_test_cleanup.yml - .gitlab/install_script_testing/install_script_testing.yml - .gitlab/integration_test/include.yml - .gitlab/internal_image_deploy/internal_image_deploy.yml - .gitlab/internal_kubernetes_deploy/include.yml - - .gitlab/kitchen_cleanup/include.yml - - .gitlab/kitchen_deploy/kitchen_deploy.yml - - .gitlab/kitchen_testing/include.yml - .gitlab/lint/include.yml - .gitlab/maintenance_jobs/include.yml - .gitlab/notify/notify.yml @@ -79,8 +76,6 @@ stages: - package_build - packaging - pkg_metrics - - kitchen_deploy - - kitchen_testing - container_build - container_scan - check_deploy @@ -93,6 +88,7 @@ stages: - trigger_release - choco_and_install_script_deploy - internal_image_deploy + - e2e_deploy - install_script_testing - e2e_pre_test - e2e_init @@ -100,9 +96,7 @@ stages: - e2e_cleanup - e2e_k8s - e2e_install_packages - - kitchen_cleanup - functional_test - - functional_test_cleanup - junit_upload - internal_kubernetes_deploy - post_rc_build @@ -124,7 +118,7 @@ variables: # avoids accidentally overwriting files when downloading artifacts from # both RPM and SUSE rpm jobs. OMNIBUS_PACKAGE_DIR_SUSE: $CI_PROJECT_DIR/omnibus/suse/pkg - DD_AGENT_TESTING_DIR: $CI_PROJECT_DIR/test/kitchen + DD_AGENT_TESTING_DIR: $CI_PROJECT_DIR/test/new-e2e/tests STATIC_BINARIES_DIR: bin/static DOGSTATSD_BINARIES_DIR: bin/dogstatsd AGENT_BINARIES_DIR: bin/agent @@ -263,8 +257,6 @@ variables: E2E_AZURE: e2e-azure # agent-devx-loops E2E_GCP: e2e-gcp # agent-devx-loops GITLAB_TOKEN: gitlab-token # agent-devx-infra - KITCHEN_AWS: kitchen-aws # agent-devx-loops - KITCHEN_AZURE: kitchen-azure # agent-devx-loops INSTALL_SCRIPT_API_KEY_ORG2: install-script-api-key-org-2 # agent-devx-infra MACOS_GITHUB_APP_1: macos-github-app-one # agent-devx-infra MACOS_GITHUB_APP_2: macos-github-app-two # agent-devx-infra @@ -658,26 +650,12 @@ workflow: when: manual allow_failure: true -.on_kitchen_tests: +.on_e2e_tests: - <<: *if_installer_tests -.on_kitchen_tests_always: - - <<: *if_installer_tests - when: always - .on_all_install_script_tests: - <<: *if_installer_tests -# Default kitchen tests are also run on dev branches -# In that case, the target OS versions is a subset of the -# available versions, stored in DEFAULT_KITCHEN_OSVERS -.on_default_kitchen_tests: - - !reference [.except_mergequeue] - - <<: *if_installer_tests - - <<: *if_auto_e2e_tests - variables: - KITCHEN_OSVERS: $DEFAULT_KITCHEN_OSVERS - .on_default_new_e2e_tests: - !reference [.except_mergequeue] - <<: *if_disable_e2e_tests @@ -687,15 +665,6 @@ workflow: variables: E2E_OSVERS: $E2E_BRANCH_OSVERS -.on_default_kitchen_tests_always: - - !reference [.except_mergequeue] - - <<: *if_installer_tests - when: always - - <<: *if_auto_e2e_tests - when: always - variables: - KITCHEN_OSVERS: $DEFAULT_KITCHEN_OSVERS - .on_main_or_testing_cleanup: - <<: *if_main_branch - <<: *if_testing_cleanup @@ -1186,13 +1155,6 @@ workflow: - tasks/**/* compare_to: main # TODO: use a variable, when this is supported https://gitlab.com/gitlab-org/gitlab/-/issues/369916 -.on_kitchen_invoke_tasks_changes: - - <<: *if_main_branch - - changes: - paths: - - test/kitchen/tasks/**/* - compare_to: main # TODO: use a variable, when this is supported https://gitlab.com/gitlab-org/gitlab/-/issues/369916 - .on_powershell_module_or_e2e_changes_or_manual: - !reference [.on_e2e_main_release_or_rc] - changes: diff --git a/.gitlab/.ci-linters.yml b/.gitlab/.ci-linters.yml index a87c049cfb341..af5acfa72b74a 100644 --- a/.gitlab/.ci-linters.yml +++ b/.gitlab/.ci-linters.yml @@ -15,7 +15,6 @@ needs-rules: - build_dogstatsd_static-binary_x64 - build_processed_btfhub_archive - check_already_deployed_version_7 - - cleanup_kitchen_functional_test - compute_gitlab_ci_config - deploy_containers-cws-instrumentation-final-versioned - deploy_containers-cws-instrumentation-latest @@ -23,7 +22,6 @@ needs-rules: - deploy_containers-cws-instrumentation-rc-versioned - dogstatsd_x64_size_test - go_mod_tidy_check - - kitchen_cleanup_azure-a7 - lint_flavor_dogstatsd_linux-x64 - lint_flavor_heroku_linux-x64 - lint_flavor_iot_linux-x64 @@ -33,9 +31,6 @@ needs-rules: - lint_linux-x64 - lint_macos_gitlab_amd64 - new-e2e-eks-cleanup-on-failure - - periodic_kitchen_cleanup_azure - - periodic_kitchen_cleanup_ec2 - - periodic_kitchen_cleanup_s3 - publish_winget_7_x64 - revert_latest_7 - security_go_generate_check @@ -81,8 +76,6 @@ job-owners: - installer-install-scripts - integration_tests_otel - invoke_unit_tests - - kitchen_cleanup_azure-a7 - - kitchen_invoke_unit_tests - new-e2e-cspm - new-e2e-otel - new-e2e-package-signing-debian-a7-x86_64 @@ -90,9 +83,6 @@ job-owners: - new-e2e-unit-tests - ot_agent_deb-arm64-a7 - ot_agent_deb-x64-a7 - - periodic_kitchen_cleanup_azure - - periodic_kitchen_cleanup_ec2 - - periodic_kitchen_cleanup_s3 - publish_choco_7_x64 - publish_fakeintake - publish_fakeintake_latest diff --git a/.gitlab/JOBOWNERS b/.gitlab/JOBOWNERS index bbb7d693c5ea3..9cf4e21fc84de 100644 --- a/.gitlab/JOBOWNERS +++ b/.gitlab/JOBOWNERS @@ -74,9 +74,6 @@ deploy_rpm_testing* @DataDog/agent-delivery deploy_suse_rpm_testing* @DataDog/agent-delivery deploy_windows_testing* @DataDog/agent-delivery -# Kitchen tests -kitchen_windows* @DataDog/windows-agent - # Image build docker_build* @DataDog/agent-delivery @@ -138,10 +135,6 @@ agent_integration_tests @DataDog/container-integrations docker_integration_tests @DataDog/container-integrations # Functional test -kitchen_*_system_probe_windows* @DataDog/windows-kernel-integrations -kitchen_*_security_agent* @DataDog/agent-security -kitchen_*_process_agent* @DataDog/processes -cleanup_kitchen_functional_test @DataDog/windows-kernel-integrations @DataDog/agent-security serverless_cold_start_performance-deb_x64 @DataDog/serverless oracle* @DataDog/database-monitoring diff --git a/.gitlab/e2e_install_packages/common.yml b/.gitlab/e2e_install_packages/common.yml index 35b2b0b1f4619..8985150b3ff14 100644 --- a/.gitlab/e2e_install_packages/common.yml +++ b/.gitlab/e2e_install_packages/common.yml @@ -1,5 +1,5 @@ .new-e2e_agent_a7: - rules: !reference [.on_kitchen_tests] #TODO: Change when migration is complete to another name without 'kitchen' + rules: !reference [.on_e2e_tests] variables: AGENT_MAJOR_VERSION: 7 diff --git a/.gitlab/kitchen_deploy/kitchen_deploy.yml b/.gitlab/e2e_testing_deploy/e2e_deploy.yml similarity index 97% rename from .gitlab/kitchen_deploy/kitchen_deploy.yml rename to .gitlab/e2e_testing_deploy/e2e_deploy.yml index d9518f946af29..45be38a825a5d 100644 --- a/.gitlab/kitchen_deploy/kitchen_deploy.yml +++ b/.gitlab/e2e_testing_deploy/e2e_deploy.yml @@ -1,6 +1,6 @@ --- -# kitchen_deploy stage -# Contains jobs which deploy Agent package to testing repsoitories that are used in kitchen tests. +# e2e_deploy stage +# Contains jobs which deploy Agent package to testing repsoitories that are used in e2e tests. .setup_rpm_signing_key: &setup_rpm_signing_key - printf -- "$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $RPM_GPG_KEY)" | gpg --import --batch @@ -33,7 +33,7 @@ - popd .deploy_deb_testing-a7: - stage: kitchen_deploy + stage: e2e_deploy image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] variables: @@ -86,7 +86,7 @@ deploy_deb_testing-a7_arm64: - echo "$APT_SIGNING_KEY_PASSPHRASE" | deb-s3 upload -c "pipeline-$DD_PIPELINE_ID-arm64" -m 7 -b $DEB_TESTING_S3_BUCKET -a arm64 --sign=$DEB_GPG_KEY_ID --gpg_options="--passphrase-fd 0 --batch --digest-algo SHA512" --preserve_versions --visibility public $OMNIBUS_PACKAGE_DIR/datadog-signing-keys_${DD_PIPELINE_ID}.deb .deploy_rpm_testing-a7: - stage: kitchen_deploy + stage: e2e_deploy image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] variables: @@ -132,7 +132,7 @@ deploy_suse_rpm_testing_x64-a7: - !reference [.except_no_tests_no_deploy] - !reference [.except_mergequeue] - when: on_success - stage: kitchen_deploy + stage: e2e_deploy image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] needs: @@ -154,10 +154,10 @@ deploy_suse_rpm_testing_x64-a7: deploy_suse_rpm_testing_arm64-a7: rules: - - !reference [.on_kitchen_tests] + - !reference [.on_e2e_tests] - !reference [.on_installer_or_e2e_changes] - !reference [.manual] - stage: kitchen_deploy + stage: e2e_deploy image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] needs: ["installer_suse_rpm-arm64", "agent_suse-arm64-a7", "lint_linux-arm64"] @@ -175,7 +175,7 @@ deploy_windows_testing-a7: - !reference [.except_no_tests_no_deploy] - !reference [.except_mergequeue] - when: on_success - stage: kitchen_deploy + stage: e2e_deploy image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] needs: diff --git a/.gitlab/functional_test/include.yml b/.gitlab/functional_test/include.yml index aab2d1c1ace48..501b2d3132db1 100644 --- a/.gitlab/functional_test/include.yml +++ b/.gitlab/functional_test/include.yml @@ -1,6 +1,6 @@ --- # functional_test stage -# Contains jobs which run kitchen tests on the security-agent and on system-probe +# Contains jobs which run e2e tests on the security-agent and on system-probe include: - .gitlab/functional_test/serverless.yml diff --git a/.gitlab/functional_test_cleanup/functional_test_cleanup.yml b/.gitlab/functional_test_cleanup/functional_test_cleanup.yml deleted file mode 100644 index 51d6ab7ec22ea..0000000000000 --- a/.gitlab/functional_test_cleanup/functional_test_cleanup.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -# functional_test_cleanup stage -# Contains a job which cleans up kitchen resources created for functional tests. - -# FIXME: our current Gitlab version doesn't support importing a file more than once -# For now, the workaround is to include "common" files once in the top-level .gitlab-ci.yml file -# See: https://gitlab.com/gitlab-org/gitlab/-/issues/28987 -# include: -# - .gitlab/kitchen_common/cleanup.yml - -cleanup_kitchen_functional_test: - extends: .kitchen_cleanup_azure_common - rules: - !reference [ .on_system_probe_or_e2e_changes_or_manual ] - stage: functional_test_cleanup - variables: - DD_PIPELINE_ID: $CI_PIPELINE_ID-fnct diff --git a/.gitlab/kernel_matrix_testing/common.yml b/.gitlab/kernel_matrix_testing/common.yml index f2c12afee1db4..032950ad4b929 100644 --- a/.gitlab/kernel_matrix_testing/common.yml +++ b/.gitlab/kernel_matrix_testing/common.yml @@ -1,3 +1,11 @@ +# KMT: EC2 Locations +.kmt_ec2_location_us_east_1: + variables: + KITCHEN_EC2_REGION: us-east-1 + KITCHEN_EC2_SUBNET: subnet-05d7c6b1b5cfea811 + KITCHEN_EC2_SG_IDS: sg-019917348cb0eb7e7 + + # --- Common scripts .shared_filters_and_queries: - FILTER_TEAM="Name=tag:team,Values=ebpf-platform" @@ -122,7 +130,7 @@ # -- Environment setup .kmt_setup_env: extends: - - .kitchen_ec2_location_us_east_1 + - .kmt_ec2_location_us_east_1 stage: kernel_matrix_testing_prepare image: registry.ddbuild.io/ci/test-infra-definitions/runner$TEST_INFRA_DEFINITIONS_BUILDIMAGES_SUFFIX:$TEST_INFRA_DEFINITIONS_BUILDIMAGES needs: ["go_deps", "go_tools_deps"] diff --git a/.gitlab/kitchen_cleanup/cleanup.yml b/.gitlab/kitchen_cleanup/cleanup.yml deleted file mode 100644 index 6f562223e183d..0000000000000 --- a/.gitlab/kitchen_cleanup/cleanup.yml +++ /dev/null @@ -1,28 +0,0 @@ ---- -.kitchen_cleanup_s3_common: - allow_failure: true - stage: kitchen_cleanup - image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - script: - - aws s3 rm s3://$DEB_TESTING_S3_BUCKET/dists/pipeline-$DD_PIPELINE_ID --recursive - - aws s3 rm s3://$RPM_TESTING_S3_BUCKET/testing/pipeline-$DD_PIPELINE_ID --recursive - - aws s3 rm s3://$RPM_TESTING_S3_BUCKET/testing/suse/pipeline-$DD_PIPELINE_ID --recursive - - export WINDOWS_TESTING_S3_BUCKET=$WINDOWS_TESTING_S3_BUCKET_A7 - - aws s3 rm s3://$WIN_S3_BUCKET/$WINDOWS_TESTING_S3_BUCKET --recursive - - cd $OMNIBUS_PACKAGE_DIR - # Remove all deb packages for the pipeline in the pool - - for deb in $(ls *amd64.deb); do aws s3 rm s3://$DEB_TESTING_S3_BUCKET/pool/d/da/$deb --recursive; done - # Remove the datadog-signing-keys package for the pipeline in the pool - - aws s3 rm s3://$DEB_TESTING_S3_BUCKET/pool/d/da/datadog-signing-keys_${DD_PIPELINE_ID}.deb - -.kitchen_cleanup_azure_common: - allow_failure: true - stage: kitchen_cleanup - image: registry.ddbuild.io/ci/datadog-agent-buildimages/dd-agent-testing$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - dependencies: [] - before_script: - script: - - cd $DD_AGENT_TESTING_DIR - - tasks/clean.sh diff --git a/.gitlab/kitchen_cleanup/include.yml b/.gitlab/kitchen_cleanup/include.yml deleted file mode 100644 index f0a86b5fcf296..0000000000000 --- a/.gitlab/kitchen_cleanup/include.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -# kitchen_cleanup stage -# Include file for jobs which clean up kitchen resources created for Agent kitchen tests. -include: - - .gitlab/kitchen_cleanup/cleanup.yml - - .gitlab/kitchen_cleanup/kitchen_cleanup.yml \ No newline at end of file diff --git a/.gitlab/kitchen_cleanup/kitchen_cleanup.yml b/.gitlab/kitchen_cleanup/kitchen_cleanup.yml deleted file mode 100644 index ff3634ad24d94..0000000000000 --- a/.gitlab/kitchen_cleanup/kitchen_cleanup.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- -# kitchen_cleanup stage -# Contains jobs which clean up kitchen resources created for Agent kitchen tests. - -# FIXME: our current Gitlab version doesn't support importing a file more than once -# For now, the workaround is to include "common" files once in the top-level .gitlab-ci.yml file -# See: https://gitlab.com/gitlab-org/gitlab/-/issues/28987 -# include: -# - .gitlab/kitchen_common/cleanup.yml - -kitchen_cleanup_azure-a7: - extends: .kitchen_cleanup_azure_common - rules: - !reference [.on_default_kitchen_tests_always] - variables: - DD_PIPELINE_ID: $CI_PIPELINE_ID-a7 diff --git a/.gitlab/kitchen_testing/common.yml b/.gitlab/kitchen_testing/common.yml deleted file mode 100644 index e99f4b9d42f00..0000000000000 --- a/.gitlab/kitchen_testing/common.yml +++ /dev/null @@ -1,161 +0,0 @@ ---- -.kitchen_common: - stage: kitchen_testing - image: registry.ddbuild.io/ci/datadog-agent-buildimages/dd-agent-testing$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - artifacts: - expire_in: 2 weeks - when: always - paths: - - $CI_PROJECT_DIR/kitchen_logs - retry: 1 - variables: - KUBERNETES_MEMORY_REQUEST: "6Gi" - KUBERNETES_MEMORY_LIMIT: "12Gi" - -.kitchen_common_with_junit: - extends: - - .kitchen_common - after_script: - - echo "--tags arch:${KITCHEN_ARCH} --tags os:${KITCHEN_PLATFORM} upload_option.os_version_from_name" > $CI_PROJECT_DIR/test/kitchen/tags.txt - - echo "CI_JOB_URL=${CI_JOB_URL}" > $CI_PROJECT_DIR/test/kitchen/job_env.txt - - echo "CI_JOB_NAME=${CI_JOB_NAME}" >> $CI_PROJECT_DIR/test/kitchen/job_env.txt - - kitchen_files=$(find $CI_PROJECT_DIR -name "kitchen-rspec-*.xml" -exec basename {} \;) - - find $CI_PROJECT_DIR -name "kitchen-rspec-*.xml" -exec $CI_PROJECT_DIR/test/kitchen/tasks/kitchen_rspec_xml_update.sh {} "${CI_JOB_NAME}" \; - - tar -czvf junit-${CI_JOB_NAME}.tgz -C $CI_PROJECT_DIR/test/kitchen/ ./job_env.txt ./tags.txt $kitchen_files - - $CI_PROJECT_DIR/tools/ci/junit_upload.sh - - artifacts: - expire_in: 2 weeks - when: always - paths: - - $CI_PROJECT_DIR/kitchen_logs - - "**/junit-${CI_JOB_NAME}.tgz" - -# Kitchen: providers -# --------------- - -# Azure -# --------------- -.kitchen_azure: - variables: - KITCHEN_PROVIDER: azure - -.kitchen_azure_x64: - variables: - KITCHEN_ARCH: x86_64 - extends: - - .kitchen_azure - -# EC2 -# --------------- -.kitchen_ec2: - variables: - KITCHEN_PROVIDER: ec2 - KITCHEN_EC2_IAM_PROFILE_NAME: ci-datadog-agent-e2e-runner - -.kitchen_ec2_x64: - variables: - KITCHEN_ARCH: x86_64 - extends: - - .kitchen_ec2 - -.kitchen_ec2_spot_instances: - extends: .kitchen_ec2 - variables: - KITCHEN_EC2_SPOT_PRICE: on-demand - -.kitchen_ec2_arm64: - variables: - KITCHEN_ARCH: arm64 - KITCHEN_EC2_INSTANCE_TYPE: "t4g.xlarge" - CHEF_VERSION: 14.15.6 - extends: - - .kitchen_ec2 - -# Kitchen: agents -# --------------- - -.kitchen_agent_a7: - extends: .kitchen_common_with_junit - rules: - !reference [.on_kitchen_tests] - variables: - DD_PIPELINE_ID: $CI_PIPELINE_ID-a7 - - -# Kitchen: tests -# -------------- - -.kitchen_test_chef: - script: - - tasks/run-test-kitchen.sh chef-test 7 - -.kitchen_test_upgrade5: - script: - - tasks/run-test-kitchen.sh upgrade5-test 7 - -.kitchen_test_upgrade7: - script: - - export LAST_STABLE_VERSION=$(cd ../.. && invoke release.get-release-json-value "last_stable::7") - - tasks/run-test-kitchen.sh upgrade7-test 7 - -# Kitchen: Agent flavor -# ------------------------------- - -.kitchen_datadog_agent_flavor: - variables: - AGENT_FLAVOR: "datadog-agent" - -# Kitchen: Azure locations -# ------------------------------- - -.kitchen_azure_location_north_central_us: - variables: - AZURE_LOCATION: "North Central US" - -.kitchen_azure_location_west_central_us: - variables: - AZURE_LOCATION: "West Central US" - -.kitchen_azure_location_central_us: - variables: - AZURE_LOCATION: "Central US" - -.kitchen_azure_location_south_central_us: - variables: - AZURE_LOCATION: "South Central US" - - -# Kitchen: EC2 locations -# ------------------------------- - -.kitchen_ec2_location_us_east_1: - variables: - KITCHEN_EC2_REGION: us-east-1 - KITCHEN_EC2_SUBNET: subnet-05d7c6b1b5cfea811 - KITCHEN_EC2_SG_IDS: sg-019917348cb0eb7e7 - -# Kitchen: Test types (test suite * agent flavor + location in each cloud provider) -# ------------------------------- - -.kitchen_test_chef_agent: - extends: - - .kitchen_test_chef - - .kitchen_datadog_agent_flavor - - .kitchen_azure_location_north_central_us - - .kitchen_ec2_location_us_east_1 - -.kitchen_test_upgrade5_agent: - extends: - - .kitchen_test_upgrade5 - - .kitchen_datadog_agent_flavor - - .kitchen_azure_location_central_us - - .kitchen_ec2_location_us_east_1 - -.kitchen_test_upgrade7_agent: - extends: - - .kitchen_test_upgrade7 - - .kitchen_datadog_agent_flavor - - .kitchen_azure_location_south_central_us - - .kitchen_ec2_location_us_east_1 diff --git a/.gitlab/kitchen_testing/include.yml b/.gitlab/kitchen_testing/include.yml deleted file mode 100644 index 06eb7ed1f40e0..0000000000000 --- a/.gitlab/kitchen_testing/include.yml +++ /dev/null @@ -1,7 +0,0 @@ ---- -# kitchen_testing stage -# Contains jobs which run kitchen tests on the Agent packages. - -include: - - .gitlab/kitchen_testing/common.yml - - .gitlab/kitchen_testing/windows.yml diff --git a/.gitlab/kitchen_testing/windows.yml b/.gitlab/kitchen_testing/windows.yml deleted file mode 100644 index 54a31a5e77b95..0000000000000 --- a/.gitlab/kitchen_testing/windows.yml +++ /dev/null @@ -1,25 +0,0 @@ ---- -# FIXME: our current Gitlab version doesn't support importing a file more than once -# For now, the workaround is to include "common" files once in the top-level .gitlab-ci.yml file -# See: https://gitlab.com/gitlab-org/gitlab/-/issues/28987 -# include: -# - .gitlab/kitchen_testing/testing.yml - -# Kitchen: OSes -# ------------- - -.kitchen_os_windows: - extends: - - .kitchen_azure_x64 - variables: - KITCHEN_PLATFORM: "windows" - KITCHEN_OSVERS: "win2016,win2019,win2019cn,win2022" - DEFAULT_KITCHEN_OSVERS: "win2022" - before_script: - - export WINDOWS_TESTING_S3_BUCKET=$WINDOWS_TESTING_S3_BUCKET_A7 - - cd $DD_AGENT_TESTING_DIR - - tasks/kitchen_setup.sh - # Windows kitchen tests are slower and more fragile (lots of WinRM::WinRMAuthorizationError and/or execution expired errors) - # Give them one more chance before failing. - # TODO: understand why they fail more often than Linux jobs on network errors. - retry: 2 diff --git a/.gitlab/maintenance_jobs/include.yml b/.gitlab/maintenance_jobs/include.yml index c8c7ddf8d2634..860d91ab830aa 100644 --- a/.gitlab/maintenance_jobs/include.yml +++ b/.gitlab/maintenance_jobs/include.yml @@ -1,8 +1,6 @@ --- # maintenance_jobs stage # Contains utility jobs to manipulate Docker repositories (Dockerhub & GCR) -# as well as jobs which periodically clean up kitchen resources. include: - .gitlab/maintenance_jobs/docker.yml - - .gitlab/maintenance_jobs/kitchen.yml diff --git a/.gitlab/maintenance_jobs/kitchen.yml b/.gitlab/maintenance_jobs/kitchen.yml deleted file mode 100644 index 3eea73295c63c..0000000000000 --- a/.gitlab/maintenance_jobs/kitchen.yml +++ /dev/null @@ -1,47 +0,0 @@ ---- -# Once a day, before the nightly build, cleans up the artifacts used during kitchen tests which might have been left over -# This can happen when a kitchen test fails and is never retried, since that pipeline's cleanup job won't run -periodic_kitchen_cleanup_s3: - stage: maintenance_jobs - image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - rules: !reference [.on_testing_cleanup] - script: - - MAX_AGE_HOURS=72 BUCKET_NAME=$DEB_TESTING_S3_BUCKET BUCKET_PREFIX=pool python3 /deploy_scripts/cleanup_s3.py - - MAX_AGE_HOURS=72 BUCKET_NAME=$DEB_TESTING_S3_BUCKET BUCKET_PREFIX=dists python3 /deploy_scripts/cleanup_s3.py - - MAX_AGE_HOURS=72 BUCKET_NAME=$RPM_TESTING_S3_BUCKET BUCKET_PREFIX=testing/ python3 /deploy_scripts/cleanup_s3.py - - MAX_AGE_HOURS=72 BUCKET_NAME=$RPM_TESTING_S3_BUCKET BUCKET_PREFIX=suse/testing/ python3 /deploy_scripts/cleanup_s3.py - - MAX_AGE_HOURS=72 BUCKET_NAME=$WIN_S3_BUCKET BUCKET_PREFIX=pipelines/A6/ python3 /deploy_scripts/cleanup_s3.py - - MAX_AGE_HOURS=72 BUCKET_NAME=$WIN_S3_BUCKET BUCKET_PREFIX=pipelines/A7/ python3 /deploy_scripts/cleanup_s3.py - -# Kills any VMs that might have been left over by kitchen -# The script only deletes VMs that have been there for >= 4 hours, which is more than the time limit -# for Gitlab jobs (2 hours), so this should never remove a live kitchen test. -periodic_kitchen_cleanup_azure: - stage: maintenance_jobs - image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - rules: !reference [.on_main_or_testing_cleanup] - # Note: We're not sure if the cleanup script is safe if run multiple times concurrently, so we limit - # the job to be run one at a time. - resource_group: azure_cleanup - script: - - ARM_SUBSCRIPTION_ID=`$CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE subscription_id` || exit $?; export ARM_SUBSCRIPTION_ID - - ARM_CLIENT_ID=`$CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE client_id` || exit $?; export ARM_CLIENT_ID - - ARM_CLIENT_SECRET=`$CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE token` || exit $?; export ARM_CLIENT_SECRET - - ARM_TENANT_ID=`$CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE tenant_id` || exit $?; export ARM_TENANT_ID - # Remove kitchen resources for all existing test suite prefixes - - RESOURCE_GROUP_PREFIX=kitchen-chef python3 /deploy_scripts/cleanup_azure.py - - RESOURCE_GROUP_PREFIX=kitchen-win python3 /deploy_scripts/cleanup_azure.py - - RESOURCE_GROUP_PREFIX=kitchen-security-agent python3 /deploy_scripts/cleanup_azure.py - -periodic_kitchen_cleanup_ec2: - stage: maintenance_jobs - image: registry.ddbuild.io/ci/datadog-agent-buildimages/gitlab_agent_deploy$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - rules: !reference [.on_main_or_testing_cleanup] - script: - # Only run aws ec2 terminate-instances if $ZOMBIES is not empty, otherwise the command fails - # https://docs.aws.amazon.com/cli/latest/reference/ec2/terminate-instances.html#options - - export AWS_DEFAULT_REGION=us-east-1 - - python3 /deploy_scripts/cleanup_ec2.py diff --git a/.gitlab/source_test/tooling_unit_tests.yml b/.gitlab/source_test/tooling_unit_tests.yml index 41f20d3aeb884..547f742b8353e 100644 --- a/.gitlab/source_test/tooling_unit_tests.yml +++ b/.gitlab/source_test/tooling_unit_tests.yml @@ -11,18 +11,3 @@ invoke_unit_tests: - python3 -m pip install -r tasks/libs/requirements-github.txt --break-system-packages - inv -e invoke-unit-tests.run -kitchen_invoke_unit_tests: - stage: source_test - image: registry.ddbuild.io/ci/datadog-agent-buildimages/deb_x64$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES - tags: ["arch:amd64"] - needs: [] - rules: - - !reference [.on_kitchen_invoke_tasks_changes] - script: - # Python 3.12 changes default behavior how packages are installed. - # In particular, --break-system-packages command line option is - # required to use the old behavior or use a virtual env. https://github.com/actions/runner-images/issues/8615 - - python3 -m pip install -r tasks/libs/requirements-github.txt --break-system-packages - - pushd test/kitchen - - inv -e kitchen.invoke-unit-tests - - popd diff --git a/.gitlab/source_test/windows.yml b/.gitlab/source_test/windows.yml index db57842d68538..b0565ce028273 100644 --- a/.gitlab/source_test/windows.yml +++ b/.gitlab/source_test/windows.yml @@ -85,7 +85,7 @@ tests_windows-x64: artifacts: when: always paths: - - $DD_AGENT_TESTING_DIR/site-cookbooks/dd-system-probe-check/files + - $CI_PROJECT_DIR/test/new-e2e/tests/sysprobe-functional/artifacts .tests_windows_secagent: stage: source_test diff --git a/.gitlab/trigger_release/trigger_release.yml b/.gitlab/trigger_release/trigger_release.yml index 69f8a53b1df99..0ecd5e0b02606 100644 --- a/.gitlab/trigger_release/trigger_release.yml +++ b/.gitlab/trigger_release/trigger_release.yml @@ -7,7 +7,7 @@ image: registry.ddbuild.io/ci/datadog-agent-buildimages/deb_x64$DATADOG_AGENT_BUILDIMAGES_SUFFIX:$DATADOG_AGENT_BUILDIMAGES tags: ["arch:amd64"] # We don't directly depend/need the package deploy jobs, because - # that would make us deploy even when there are kitchen failures etc + # that would make us deploy even when there are e2e tests failures etc # We only want to allow automatically triggering agent-release-manangement # pipelines when everything goes well variables: diff --git a/omnibus/.gitignore b/omnibus/.gitignore index 94b7d38ccea76..c231c1a867015 100644 --- a/omnibus/.gitignore +++ b/omnibus/.gitignore @@ -1,8 +1,5 @@ *.gem .bundle -.kitchen/ -.kitchen.local.yml -kitchen.local.yml vendor/bundle pkg/* .vagrant diff --git a/tasks/kernel_matrix_testing/ci.py b/tasks/kernel_matrix_testing/ci.py index f6e83fcb6e571..d07f079f6eab3 100644 --- a/tasks/kernel_matrix_testing/ci.py +++ b/tasks/kernel_matrix_testing/ci.py @@ -217,7 +217,7 @@ def get_test_results(self) -> dict[str, bool | None]: The values are True if test passed, False if failed, None if skipped. """ junit_archive_name = f"junit-{self.arch}-{self.distro}-{self.vmset}.tar.gz" - junit_archive = self.artifact_file_binary(f"test/kitchen/{junit_archive_name}", ignore_not_found=True) + junit_archive = self.artifact_file_binary(f"test/new-e2e/tests/{junit_archive_name}", ignore_not_found=True) if junit_archive is None: return {} diff --git a/tasks/kmt.py b/tasks/kmt.py index 40437b8eff3f3..b1c30e0246c50 100644 --- a/tasks/kmt.py +++ b/tasks/kmt.py @@ -1372,7 +1372,7 @@ def clean(ctx: Context, stack: str | None = None, container=False, image=False): stack ), f"Stack {stack} does not exist. Please create with 'inv kmt.create-stack --stack='" - ctx.run("rm -rf ./test/kitchen/site-cookbooks/dd-system-probe-check/files/default/tests/pkg") + ctx.run("rm -rf ./test/new-e2e/tests/sysprobe-functional/artifacts/pkg") ctx.run(f"rm -rf kmt-deps/{stack}", warn=True) ctx.run(f"rm {get_kmt_os().shared_dir}/*.tar.gz", warn=True) @@ -2290,7 +2290,7 @@ def download_complexity_data(ctx: Context, commit: str, dest_path: str | Path, k _, test_jobs = get_all_jobs_for_pipeline(pipeline_id) for job in test_jobs: complexity_name = f"verifier-complexity-{job.arch}-{job.distro}-{job.component}" - complexity_data_fname = f"test/kitchen/{complexity_name}.tar.gz" + complexity_data_fname = f"test/new-e2e/tests/{complexity_name}.tar.gz" data = job.artifact_file_binary(complexity_data_fname, ignore_not_found=True) if data is None: print(f"Complexity data not found for {job.name} - filename {complexity_data_fname} not found") diff --git a/tasks/libs/pipeline/data.py b/tasks/libs/pipeline/data.py index dc56d54f202b3..6cfef9a40fc16 100644 --- a/tasks/libs/pipeline/data.py +++ b/tasks/libs/pipeline/data.py @@ -89,23 +89,11 @@ def get_failed_jobs(pipeline: ProjectPipeline) -> FailedJobs: ), FailedJobReason.RUNNER, ), - # kitchen tests Azure VM allocation failures - ( - re.compile( - r'Allocation failed\. We do not have sufficient capacity for the requested VM size in this region\.' - ), - FailedJobReason.KITCHEN_AZURE, - ), # Gitlab 5xx errors ( re.compile(r'fatal: unable to access \'.*\': The requested URL returned error: 5..'), FailedJobReason.GITLAB, ), - # kitchen tests general infrastructure issues - ( - re.compile(r'ERROR: The kitchen tests failed due to infrastructure failures\.'), - FailedJobReason.KITCHEN, - ), # End to end tests EC2 Spot instances allocation failures ( re.compile(r'Failed to allocate end to end test EC2 Spot instance after [0-9]+ attempts'), @@ -171,7 +159,7 @@ def truncate_job_name(job_name, max_char_per_job=48): # Those jobs have `allow_failure: true` but still need to be included # in failure reports -jobs_allowed_to_fail_but_need_report = [re.compile(r'kitchen_test_security_agent.*')] +jobs_allowed_to_fail_but_need_report = [] def should_report_job(job_name, allow_failure): diff --git a/tasks/libs/pipeline/tools.py b/tasks/libs/pipeline/tools.py index 7f9d08e8eca6e..2cab6a42d28b5 100644 --- a/tasks/libs/pipeline/tools.py +++ b/tasks/libs/pipeline/tools.py @@ -130,9 +130,9 @@ def trigger_agent_pipeline( """ Trigger a pipeline on the datadog-agent repositories. Multiple options are available: - run a pipeline with all builds (by default, a pipeline only runs a subset of all available builds), - - run a pipeline with all kitchen tests, + - run a pipeline with all e2e tests, - run a pipeline with all end-to-end tests, - - run a deploy pipeline (includes all builds & kitchen tests + uploads artifacts to staging repositories); + - run a deploy pipeline (includes all builds & e2e tests + uploads artifacts to staging repositories); """ ref = ref or get_default_branch() diff --git a/tasks/libs/types/types.py b/tasks/libs/types/types.py index cd8e13c9fa37f..37398ca62c2a8 100644 --- a/tasks/libs/types/types.py +++ b/tasks/libs/types/types.py @@ -48,10 +48,8 @@ class FailedJobType(Enum): class FailedJobReason(Enum): RUNNER = 1 - KITCHEN_AZURE = 4 FAILED_JOB_SCRIPT = 5 GITLAB = 6 - KITCHEN = 7 EC2_SPOT = 8 E2E_INFRA_FAILURE = 9 FAILED_BRIDGE_JOB = 10 diff --git a/tasks/linter.py b/tasks/linter.py index f549ae2005075..a0be3ca3970b9 100644 --- a/tasks/linter.py +++ b/tasks/linter.py @@ -113,9 +113,7 @@ def filenames(ctx): max_length = 255 for filename in files: if ( - not filename.startswith( - ('test/kitchen/', 'tools/windows/DatadogAgentInstaller', 'test/workload-checks', 'test/regression') - ) + not filename.startswith(('tools/windows/DatadogAgentInstaller', 'test/workload-checks', 'test/regression')) and prefix_length + len(filename) > max_length ): print( diff --git a/tasks/system_probe.py b/tasks/system_probe.py index 7478f31c415fc..6f8e4e1f7457e 100644 --- a/tasks/system_probe.py +++ b/tasks/system_probe.py @@ -44,8 +44,8 @@ BUNDLE_TAG = "ebpf_bindata" NPM_TAG = "npm" -KITCHEN_DIR = os.getenv('DD_AGENT_TESTING_DIR') or os.path.normpath(os.path.join(os.getcwd(), "test", "kitchen")) -KITCHEN_ARTIFACT_DIR = os.path.join(KITCHEN_DIR, "site-cookbooks", "dd-system-probe-check", "files", "default", "tests") +TEST_DIR = os.getenv('DD_AGENT_TESTING_DIR') or os.path.normpath(os.path.join(os.getcwd(), "test", "new-e2e", "tests")) +E2E_ARTIFACT_DIR = os.path.join(TEST_DIR, "sysprobe-functional/artifacts") TEST_PACKAGES_LIST = [ "./pkg/ebpf/...", "./pkg/network/...", @@ -822,7 +822,7 @@ def test( Run tests on eBPF parts If skip_object_files is set to True, this won't rebuild object files If output_path is set, we run `go test` with the flags `-c -o output_path`, which *compiles* the test suite - into a single binary. This artifact is meant to be used in conjunction with kitchen tests. + into a single binary. This artifact is meant to be used in conjunction with e2e tests. """ if os.getenv("GOPATH") is None: raise Exit( @@ -958,11 +958,11 @@ def go_package_dirs(packages, build_tags): return [p for p in target_packages if len(p) > 0] -BUILD_COMMIT = os.path.join(KITCHEN_ARTIFACT_DIR, "build.commit") +BUILD_COMMIT = os.path.join(E2E_ARTIFACT_DIR, "build.commit") def clean_build(ctx): - if not os.path.exists(KITCHEN_ARTIFACT_DIR): + if not os.path.exists(E2E_ARTIFACT_DIR): return True if not os.path.exists(BUILD_COMMIT): @@ -983,9 +983,9 @@ def full_pkg_path(name): @task -def kitchen_prepare(ctx, kernel_release=None, ci=False, packages=""): +def e2e_prepare(ctx, kernel_release=None, ci=False, packages=""): """ - Compile test suite for kitchen + Compile test suite for e2e tests """ build_tags = [NPM_TAG] if not is_windows: @@ -994,8 +994,8 @@ def kitchen_prepare(ctx, kernel_release=None, ci=False, packages=""): target_packages = go_package_dirs(TEST_PACKAGES_LIST, build_tags) # Clean up previous build - if os.path.exists(KITCHEN_ARTIFACT_DIR) and (packages == "" or clean_build(ctx)): - shutil.rmtree(KITCHEN_ARTIFACT_DIR) + if os.path.exists(E2E_ARTIFACT_DIR) and (packages == "" or clean_build(ctx)): + shutil.rmtree(E2E_ARTIFACT_DIR) elif packages != "": packages = [full_pkg_path(name) for name in packages.split(",")] # make sure valid packages were provided. @@ -1008,22 +1008,22 @@ def kitchen_prepare(ctx, kernel_release=None, ci=False, packages=""): if os.path.exists(BUILD_COMMIT): os.remove(BUILD_COMMIT) - os.makedirs(KITCHEN_ARTIFACT_DIR, exist_ok=True) + os.makedirs(E2E_ARTIFACT_DIR, exist_ok=True) # clean target_packages only for pkg_dir in target_packages: test_dir = pkg_dir.lstrip(os.getcwd()) - if os.path.exists(os.path.join(KITCHEN_ARTIFACT_DIR, test_dir)): - shutil.rmtree(os.path.join(KITCHEN_ARTIFACT_DIR, test_dir)) + if os.path.exists(os.path.join(E2E_ARTIFACT_DIR, test_dir)): + shutil.rmtree(os.path.join(E2E_ARTIFACT_DIR, test_dir)) # This will compile one 'testsuite' file per package by running `go test -c -o output_path`. - # These artifacts will be "vendored" inside a chef recipe like the following: - # test/kitchen/site-cookbooks/dd-system-probe-check/files/default/tests/pkg/network/testsuite - # test/kitchen/site-cookbooks/dd-system-probe-check/files/default/tests/pkg/network/netlink/testsuite - # test/kitchen/site-cookbooks/dd-system-probe-check/files/default/tests/pkg/ebpf/testsuite - # test/kitchen/site-cookbooks/dd-system-probe-check/files/default/tests/pkg/ebpf/bytecode/testsuite + # These artifacts will be "vendored" inside: + # test/new-e2e/tests/sysprobe-functional/artifacts/pkg/network/testsuite + # test/new-e2e/tests/sysprobe-functional/artifacts/pkg/network/netlink/testsuite + # test/new-e2e/tests/sysprobe-functional/artifacts/pkg/ebpf/testsuite + # test/new-e2e/tests/sysprobe-functional/artifacts/pkg/ebpf/bytecode/testsuite for i, pkg in enumerate(target_packages): - target_path = os.path.join(KITCHEN_ARTIFACT_DIR, os.path.relpath(pkg, os.getcwd())) + target_path = os.path.join(E2E_ARTIFACT_DIR, os.path.relpath(pkg, os.getcwd())) target_bin = "testsuite" if is_windows: target_bin = "testsuite.exe" @@ -1072,14 +1072,11 @@ def kitchen_prepare(ctx, kernel_release=None, ci=False, packages=""): f"{gopath}/bin/gotestsum", ] - files_dir = os.path.join(KITCHEN_ARTIFACT_DIR, "..") + files_dir = os.path.join(E2E_ARTIFACT_DIR, "..") for cf in copy_files: if os.path.exists(cf): shutil.copy(cf, files_dir) - if not ci: - kitchen_prepare_btfs(ctx, files_dir) - ctx.run(f"go build -o {files_dir}/test2json -ldflags=\"-s -w\" cmd/test2json", env={"CGO_ENABLED": "0"}) ctx.run(f"echo {get_commit_sha(ctx)} > {BUILD_COMMIT}") @@ -1628,59 +1625,6 @@ def check_for_ninja(ctx): ctx.run("ninja --version") -def is_bpftool_compatible(ctx): - try: - ctx.run("bpftool gen min_core_btf 2>&1 | grep -q \"'min_core_btf' needs at least 3 arguments, 0 found\"") - return True - except Exception: - return False - - -def kitchen_prepare_btfs(ctx, files_dir, arch=CURRENT_ARCH): - btf_dir = "/opt/datadog-agent/embedded/share/system-probe/ebpf/co-re/btf" - - if arch == "x64": - arch = "x86_64" - elif arch == "arm64": - arch = "aarch64" - - if not os.path.exists(f"{btf_dir}/kitchen-btfs-{arch}.tar.xz"): - exit("BTFs for kitchen test environments not found. Please update & re-provision your dev VM.") - - sudo = "sudo" if not is_root() else "" - ctx.run(f"{sudo} chmod -R 0777 {btf_dir}") - - if not os.path.exists(f"{btf_dir}/kitchen-btfs-{arch}"): - ctx.run( - f"mkdir {btf_dir}/kitchen-btfs-{arch} && " - + f"tar xf {btf_dir}/kitchen-btfs-{arch}.tar.xz -C {btf_dir}/kitchen-btfs-{arch}" - ) - - can_minimize = True - if not is_bpftool_compatible(ctx): - print( - "Cannot minimize BTFs: bpftool version 6 or higher is required: preparing kitchen environment with full sized BTFs instead." - ) - can_minimize = False - - if can_minimize: - co_re_programs = " ".join(glob.glob("/opt/datadog-agent/embedded/share/system-probe/ebpf/co-re/*.o")) - generate_minimized_btfs( - ctx, - source_dir=f"{btf_dir}/kitchen-btfs-{arch}", - output_dir=f"{btf_dir}/minimized-btfs", - bpf_programs=co_re_programs, - ) - - ctx.run( - f"cd {btf_dir}/minimized-btfs && " - + "tar -cJf minimized-btfs.tar.xz * && " - + f"mv minimized-btfs.tar.xz {files_dir}" - ) - else: - ctx.run(f"cp {btf_dir}/kitchen-btfs-{arch}.tar.xz {files_dir}/minimized-btfs.tar.xz") - - # list of programs we do not want to minimize against no_minimize = ["lock_contention.o"] diff --git a/tasks/unit_tests/junit_tests.py b/tasks/unit_tests/junit_tests.py index 6dfa6e0fe57ac..5e7ea0cb3184e 100644 --- a/tasks/unit_tests/junit_tests.py +++ b/tasks/unit_tests/junit_tests.py @@ -69,16 +69,6 @@ def test_default_e2e(self): self.assertNotIn("kitchen", grouped) self.assertNotIn("kitchen-e2e", grouped) - def test_e2e_kitchen(self): - test_dir = Path("./tasks/unit_tests/testdata/to_group") - grouped = junit.group_per_tags(test_dir, ["upload_option.os_version_from_name"]) - self.assertNotIn("default", grouped) - self.assertIn("kitchen", grouped) - self.assertCountEqual([f"{str(test_dir)}/onepiece", f"{str(test_dir)}/dragonball"], grouped["kitchen"]) - self.assertIn("kitchen-e2e", grouped) - self.assertEqual([f"{str(test_dir)}/naruto"], grouped["kitchen-e2e"]) - self.assertNotIn("e2e", grouped) - class TestSetTag(unittest.TestCase): @patch.dict("os.environ", {"CI_PIPELINE_ID": "1515"}) diff --git a/tasks/unit_tests/libs/data_tests.py b/tasks/unit_tests/libs/data_tests.py index 97d4981af82bb..e6d4c7d9be88f 100644 --- a/tasks/unit_tests/libs/data_tests.py +++ b/tasks/unit_tests/libs/data_tests.py @@ -9,14 +9,6 @@ def test_without_logs(self): self.assertEqual(get_infra_failure_info(''), FailedJobReason.GITLAB) self.assertEqual(get_infra_failure_info(None), FailedJobReason.GITLAB) - def test_kitchen(self): - self.assertEqual( - get_infra_failure_info( - 'something ERROR: The kitchen tests failed due to infrastructure failures. something' - ), - FailedJobReason.KITCHEN, - ) - def test_gitlab_5xx(self): self.assertEqual( get_infra_failure_info( diff --git a/tasks/unit_tests/testdata/secret.tar.gz/bedroom-rspec-win2016-azure-x86_64.xml b/tasks/unit_tests/testdata/secret.tar.gz/bedroom-rspec-win2016-azure-x86_64.xml index 947e3b3310580..04c6b23e6c637 100644 --- a/tasks/unit_tests/testdata/secret.tar.gz/bedroom-rspec-win2016-azure-x86_64.xml +++ b/tasks/unit_tests/testdata/secret.tar.gz/bedroom-rspec-win2016-azure-x86_64.xml @@ -1,26 +1,26 @@ - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/tasks/unit_tests/testdata/variables.yml b/tasks/unit_tests/testdata/variables.yml index 1583ab354d5cc..e95d55a033b7e 100644 --- a/tasks/unit_tests/testdata/variables.yml +++ b/tasks/unit_tests/testdata/variables.yml @@ -14,7 +14,7 @@ variables: # avoids accidentally overwriting files when downloading artifacts from # both RPM and SUSE rpm jobs. OMNIBUS_PACKAGE_DIR_SUSE: $CI_PROJECT_DIR/omnibus/suse/pkg - DD_AGENT_TESTING_DIR: $CI_PROJECT_DIR/test/kitchen + DD_AGENT_TESTING_DIR: $CI_PROJECT_DIR/test STATIC_BINARIES_DIR: bin/static DOGSTATSD_BINARIES_DIR: bin/dogstatsd AGENT_BINARIES_DIR: bin/agent @@ -145,11 +145,6 @@ variables: E2E_TESTS_AZURE_SUBSCRIPTION_ID: ci.datadog-agent.e2e_tests_azure_subscription_id # agent-devx-loops E2E_TESTS_GCP_CREDENTIALS: ci.datadog-agent.e2e_tests_gcp_credentials # agent-devx-loops E2E_PULUMI_CONFIG_PASSPHRASE: ci.datadog-agent.pulumi_password # agent-devx-loops - KITCHEN_EC2_SSH_KEY: ci.datadog-agent.aws_ec2_kitchen_ssh_key # agent-devx-loops - KITCHEN_AZURE_CLIENT_ID: ci.datadog-agent.azure_kitchen_client_id # agent-devx-loops - KITCHEN_AZURE_CLIENT_SECRET: ci.datadog-agent.azure_kitchen_client_secret # agent-devx-loops - KITCHEN_AZURE_SUBSCRIPTION_ID: ci.datadog-agent.azure_kitchen_subscription_id # agent-devx-loops - KITCHEN_AZURE_TENANT_ID: ci.datadog-agent.azure_kitchen_tenant_id # agent-devx-loops GITHUB_PR_COMMENTER_APP_KEY: pr-commenter.github_app_key # agent-devx-infra GITHUB_PR_COMMENTER_INTEGRATION_ID: pr-commenter.github_integration_id # agent-devx-infra GITHUB_PR_COMMENTER_INSTALLATION_ID: pr-commenter.github_installation_id # agent-devx-infra @@ -205,4 +200,4 @@ variables: RESTORE_CACHE_ATTEMPTS: 2 # Feature flags FF_SCRIPT_SECTIONS: 1 # Prevent multiline scripts log collapsing, see https://gitlab.com/gitlab-org/gitlab-runner/-/issues/3392 - FF_KUBERNETES_HONOR_ENTRYPOINT: true # Honor the entrypoint in the Docker image when running Kubernetes jobs \ No newline at end of file + FF_KUBERNETES_HONOR_ENTRYPOINT: true # Honor the entrypoint in the Docker image when running Kubernetes jobs diff --git a/tasks/winbuildscripts/secagent.ps1 b/tasks/winbuildscripts/secagent.ps1 index 0ff6a448cf737..af6a1cbb85eef 100644 --- a/tasks/winbuildscripts/secagent.ps1 +++ b/tasks/winbuildscripts/secagent.ps1 @@ -25,7 +25,7 @@ if ($Env:TARGET_ARCH -eq "x86") { $err = $LASTEXITCODE if($err -ne 0){ - Write-Host -ForegroundColor Red "kitchen prepare failed $err" + Write-Host -ForegroundColor Red "e2e prepare failed $err" [Environment]::Exit($err) } Write-Host Test passed diff --git a/tasks/winbuildscripts/sysprobe.bat b/tasks/winbuildscripts/sysprobe.bat index 4281fa5028a93..0b71364dbc0ef 100644 --- a/tasks/winbuildscripts/sysprobe.bat +++ b/tasks/winbuildscripts/sysprobe.bat @@ -18,5 +18,5 @@ call %BUILD_ROOT%\datadog-agent\tasks\winbuildscripts\extract-modcache.bat %BUIL Powershell -C "%BUILD_ROOT%\datadog-agent\tasks\winbuildscripts\sysprobe.ps1" || exit /b 5 REM copy resulting packages to expected location for collection by gitlab. -if not exist c:\mnt\test\kitchen\site-cookbooks\dd-system-probe-check\files\default\tests\ mkdir c:\mnt\test\kitchen\site-cookbooks\dd-system-probe-check\files\default\tests\ || exit /b 6 -xcopy /e/s/q %BUILD_ROOT%\datadog-agent\test\kitchen\site-cookbooks\dd-system-probe-check\files\default\tests\*.* c:\mnt\test\kitchen\site-cookbooks\dd-system-probe-check\files\default\tests\ || exit /b 7 +if not exist c:\mnt\test\new-e2e\tests\sysprobe-functional\artifacts\ mkdir c:\mnt\ttest\new-e2e\tests\sysprobe-functional\artifacts\ || exit /b 6 +xcopy /e/s/q %BUILD_ROOT%\datadog-agent\test\new-e2e\tests\sysprobe-functional\artifacts\*.* c:\mnt\test\new-e2e\tests\sysprobe-functional\artifacts\ || exit /b 7 diff --git a/tasks/winbuildscripts/sysprobe.ps1 b/tasks/winbuildscripts/sysprobe.ps1 index 7abc3cd02ba3f..2ac70e2766a27 100644 --- a/tasks/winbuildscripts/sysprobe.ps1 +++ b/tasks/winbuildscripts/sysprobe.ps1 @@ -23,11 +23,11 @@ if ($err -ne 0) { [Environment]::Exit($err) } -& inv -e system-probe.kitchen-prepare --ci +& inv -e system-probe.e2e-prepare --ci $err = $LASTEXITCODE if($err -ne 0){ - Write-Host -ForegroundColor Red "kitchen prepare failed $err" + Write-Host -ForegroundColor Red "e2e prepare failed $err" [Environment]::Exit($err) } Write-Host Test passed diff --git a/test/files/default/.gitkeep b/test/files/default/.gitkeep new file mode 100644 index 0000000000000..6fa10537e826d --- /dev/null +++ b/test/files/default/.gitkeep @@ -0,0 +1 @@ +This file is used by some tests as a folder to store artifacts diff --git a/test/kitchen/.gitignore b/test/kitchen/.gitignore deleted file mode 100644 index ff9d59ff7cdde..0000000000000 --- a/test/kitchen/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -.kitchen/ -.rbenv-version -.ruby-gemset -.ruby-version -.rvmrc -.vagrant -Berksfile.lock -cookbooks/ -.kitchen.yml -kitchen.yml -tmpkitchen.yml -ssh-key -ssh-key.pub -azureid.sh -*.bat -*.ps1 -!site-cookbooks/**/files/**/*.ps1 -localplatforms.json -uservars.json -rsa-key -rsa-key.pub -ed25519-key -ed25519-key.pub -Gemfile -Gemfile.lock -!test/**/Gemfile diff --git a/test/kitchen/Berksfile b/test/kitchen/Berksfile deleted file mode 100644 index 1ecd9cf9143c5..0000000000000 --- a/test/kitchen/Berksfile +++ /dev/null @@ -1,27 +0,0 @@ -source 'https://supermarket.chef.io' - -cookbook 'datadog', '~> 4.20.0' - -# We pin an old version of the apt cookbook because this cookbook triggers an "apt update" by default -# and in newer versions this update is not allowed to fail, while in 3.X it is. For some reason -# apt update fails a lot in our debian instances. -# This can be removed if the datadog cookbook no longer depends on apt, since it's only used there -# (ie: when the datadog cookbook requires chef >= 13.3, which already bundles everything we use from apt). -cookbook 'apt', '< 4.0' - -# Version 7.3.0 of the cookbook depends on chef version >= 15.0 but right now we are running 14.12.9 -cookbook 'docker', '< 7.3.0' -# Version 4.0.0 of the cookbook depends on chef version >= 15.3 but right now we are running 14.12.9 -cookbook 'selinux', '< 4.0.0' - -cookbook 'dd-agent-disable-system-repos', path: './site-cookbooks/dd-agent-disable-system-repos' -cookbook 'dd-agent-install', path: './site-cookbooks/dd-agent-install' -cookbook 'dd-agent-reinstall', path: './site-cookbooks/dd-agent-reinstall' -cookbook 'dd-agent-upgrade', path: './site-cookbooks/dd-agent-upgrade' -cookbook 'dd-agent-import-conf', path: './site-cookbooks/dd-agent-import-conf' -cookbook 'dd-agent-5', path: './site-cookbooks/dd-agent-5' -cookbook 'dd-agent-sles-workaround', path: './site-cookbooks/dd-agent-sles-workaround' -cookbook 'dd-agent-rhel-workaround', path: './site-cookbooks/dd-agent-rhel-workaround' -cookbook 'dd-agent-system-files-check', path: './site-cookbooks/dd-agent-system-files-check' -cookbook 'dd-security-agent-check', path: './site-cookbooks/dd-security-agent-check' -cookbook 'dd-system-probe-check', path: './site-cookbooks/dd-system-probe-check' diff --git a/test/kitchen/Gemfile.local b/test/kitchen/Gemfile.local deleted file mode 100644 index 9ecbbd033e9ed..0000000000000 --- a/test/kitchen/Gemfile.local +++ /dev/null @@ -1,11 +0,0 @@ -require 'open-uri' - -group :test do - gem "rspec" - gem "rspec_junit_formatter", require: false -end - -# Actual gemfile is stored in the buildimages repo because it comes pre-installed in the dd-agent-testing Docker image, read it from there -gemfile = ::URI.open('https://raw.githubusercontent.com/DataDog/datadog-agent-buildimages/main/dd-agent-testing/Gemfile') -eval gemfile.read - diff --git a/test/kitchen/README.md b/test/kitchen/README.md deleted file mode 100644 index 8f27b05a830f0..0000000000000 --- a/test/kitchen/README.md +++ /dev/null @@ -1,283 +0,0 @@ -# Datadog Agent Testing - -This directory contains automated integration tests for the Datadog Agent. It -currently tests Agent packaging (installing, updating, and removing the Agent), -as well as basic functionality. The tests are executed on virtual machines that -span most of the supported Agent platforms. They're currently run on Azure VMs. - -This is meant to be executed internally at Datadog and references our internal build structure. -However, people outside of Datadog can run it by editing the repository URL that they are uploaded to in the .kitchen-azure.yml file. You will also need to ensure that the repo branch is `pipeline-$CI_PIPELINE_ID`. - -## Getting Started - -### Dependencies -Non-bundled dependencies: - - [Ruby](http://www.ruby-lang.org/) (last tested with 2.2.1) - - [Bundler](http://bundler.io/) - -Then install bundled gem dependencies: -``` -bundle config set --local path '.' -bundle config set --local gemfile './Gemfile.local' -``` - -`bundle install` - -Note: When building on macOS M1, you might run into an error when installing the `ffi-yajl` gem. You should be able to get around that by setting the build `ldflags` for this gem in bundler configuration (see [this Github Issue](https://github.com/chef/ffi-yajl/issues/115)): -```bash -bundle config build.ffi-yajl --with-ldflags="-Wl,-undefined,dynamic_lookup" -``` - -#### Azure - -These tests are set up to be run on Azure. -It is set up to use our automated testing. -However, there are also provisions to run it locally. - -You will need to create a service principle. -You can do that with the following command on the azure cli tool: - -``` -az ad sp create-for-rbac --name -``` - -Then create a file called `azureid.sh` and export the relevant settings into environment variables: - -The subscription ID is retrieved from the azure portal, by starting a azure shell. --or-- the "id" returned from `az account list` - -The AZURE_CLIENT_ID is returned as the appId from the above command - -the AZURE_CLIENT_SECRET is returned as the password from the above command - -the AZURE_TENANT_ID is returned as tenant from the above command --or-- the "tenantId" returned from `az account list` - -``` -export AZURE_CLIENT_ID="$AZURE_CLIENT_ID" -export AZURE_CLIENT_SECRET="$AZURE_CLIENT_SECRET" -export AZURE_TENANT_ID="$AZURE_TENANT_ID" -export AZURE_SUBSCRIPTION_ID="$AZURE_SUBSCRIPTION_ID" -export CI_PIPELINE_ID="$CI_PIPELINE_ID" -export NOT_GITLAB="true" -``` - -##### Images - -If for some reason you need to find another version of a specific image you will -need to use the Azure CLI. - -This will list all the images available on Azure (and take ~10min to run) -```bash -az vm image list --all --output table -``` - -This will list all the images available on Azure for a specific OS (and take ~2min to run) -```bash -az vm image list --offer Ubuntu --all --output table -``` - -#### Common - -To see the rest of the rake commands, execute - - rake -T - -For finer control, you can invoke test-kitchen directly - -To list all available tests, execute - - kitchen list - -And to run one of these tests, execute - - kitchen test - -For more kitchen commands, execute - - kitchen help - -## Test Coverage - -Tests are composed of platforms and suites. A suite is a series of commands to -execute (usually in the form of Chef recipes) followed by a series of tests -that verify that the commands completed as expected. Platforms are -systems environments in which the suites are executed. Each test suite is -executed on each platform. - -### Platforms Tested: - -To generate a test suite, the platforms to be tested are passed in via the -TEST_PLATFORMS environment variable. The exact format of the list that's -supplied in this variable will vary depending upon which driver (provider) -is being used. - -In Azure (which is what is used in the ci pipeline), the list of platforms -is created in the top level .gitlab-ci.yaml, and the syntax is of the form: -`short_name1,azure_full_qualified_name1|short_name2,azure_full_qualified_name2` - -Each driver (provider) will have a slightly different format, which is described -in the driver-specific yaml (drivers/azure-driver.yml, drivers/ec2-driver, etc.) - - -### Packaging Test Suites - -The *release candidate* is the latest Agent built. -In other words, they are the most up-to-date packages on our -staging (datad0g.com) deb (unstable branch) and yum repositories. - -Agent packaging methods tested: - -- `chef`: Installing the latest release candidate using the - [chef-datadog](https://github.com/DataDog/chef-datadog). The recipe will - determine if the base Agent should be installed instead of the regular one - (based on the system version of Python). -- `upgrade-agent6`: Installs the latest release Agent 6 (the latest publicly - available Agent 6 version), then upgrades it to the latest release candidate - using the platform's package manager. -- `upgrade-agent5`: Installs the latest release Agent 5 (the latest publicly - available Agent 5 version), then upgrades it to the latest Agent 6 release candidate - using the platform's package manager. -- `install-script`: Installs the latest release candidate using our [Agent - install script](https://raw.github.com/DataDog/dd-agent/master/packaging/datadog-agent/source/install_agent.sh). -- `step-by-step`: Installs the latest release candidate using our - step-by-step installation instructions as listed on Dogweb. - -For each platform, for each packaging method, the following Agent tests are -run (in the order listed): - - * The Agent is running: - - the Agent is running after installation is complete - - the configuration has been correctly placed (where applicable) - - the info command output does not contain 'ERROR' and exits with a non-zero - value - * The Agent stops: - - the `stop` command does not error when the Agent is running - - no Agent processes are running after the Agent has been stopped - - the Agent starts after being stopped - * The Agent restarts: - - the `restart` command does not error when the Agent is running - - the Agent is running after a previously-running Agent it is restarted - - the `restart` command does not error when the Agent is stopped - - the Agent is running after a previously-stopped Agent it is restarted - * The Agent is removed (if installed using a package manager): - - removing the Agent using the package manager should not error - - the Agent should not be running after it is removed - - the Agent binary should not be present after removal - -For the `upgrade` method, the version of the agent after the upgrade is tested. -Be sure to set the `DD_AGENT_EXPECTED_VERSION` environment variable to the version the agent -should be upgraded to (for instance `export DD_AGENT_EXPECTED_VERSION='5.5.0+git.213.59ac9da'`). - -### Agent Properties that are NOT Tested - -This suite covers the installing, upgrading, and removing the Agent on most -platforms. The following, among other aspects, are *not* covered: - -* Updates from versions of the Agent prior to the latest publicly available - version. This can easily be added by setting the ['datadog']['agent_version'] - attribute to the version that you wish to upgrade from in the - `upgrade` suite -* Not all supported operating systems are tested. Missing operating systems - include: - - Mac OS 10.x - - Amazon Linux -* Memory leaks or any obscurities that result from the Agent running for a long time, and so short term tests like these will not catch them -* Sending metrics/events over Dogstatsd via client libraries -* Changes made to an environment by a user (no sudo present, system Python - removed, supervisor installed etc.) - -## Adding Tests - -For basic test-kitchen usage, see its [Getting Started -guide](https://github.com/opscode/test-kitchen/wiki/Getting-Started). - -### Adding a Platform -Tests are executed on Azure in ci. Platforms are defined in the OS dependent -files kitchen testing definitions in /.gitlab/kitchen_testing/.yaml - -### Adding a Suite -Suites define the commands that should be run on a platform as Chef recipes, -and tests that verify the outcome of these commands written in RSpec. Suites -are defined in specific yaml files in the `test-definitions` directory. - -Add new cookbooks by describing them in `Berksfile`. If you want to write your -own cookbook that is specific to this repository, place it in the -`site-cookbooks` directory. New cookbooks will not be available in your tests -until `rake berks` is executed. - -Tests should be placed in `test/integration//rspec/`. They will be -copied and executed on a platform after the suite's recipes have been applied -to the environment. They are not managed by `Berks`. Code that can be shared -between suites is in `test/integration/common/rspec/`. - -Tests do not need to be written in RSpec; [Busser](https://github.com/fnichol/busser), -the framework that executes the tests, supports several different testing -frameworks (including Bats and minitest). - -### Creating a complete test file (kitchen.yaml) - -To support running multiple kitchen suites using multiple back-end providers, the -kitchen configuration file (kitchen.yaml) is created dynamically by combining three -provided yaml files. - -A complete kitchen configuration (kitchen.yaml) is created by taking one of the -driver files, adding the common configuration options [platforms-common](test-definitions/platforms-common.yml), -and then adding the desired test suite(s) from the test-definitions directory. - -There is an invoke task for creating the completed `kitchen.yml`. The usage for -the invoke task is: - - invoke kitchen.genconfig --platform=platform --osversions=osversions --provider=provider --arch=arch --testfiles=testfiles - -where: - platform is an index into the platforms.json. It is (currently) one of: - - centos - - debian - - suse - - ubuntu - - windows - - amazonlinux - - osversions is an index into the per-provider dictionary for the given - platform. Examples include - - win2012r2 (which is in both windows/azure and windows/ec2) - - ubuntu-20-04 (which is in ubuntu/azure) - - Provider is the kitchen driver to be used. Currently supported are - - azure - - ec2 - - vagrant - - hyperv (with a user-supplied platforms file) - - arch is: - - x86_64 - - arm64 - - Testfiles is the name of the test-specific file(s) (found in [test-definitions](test-definitions) ) to be - added. The testfiles define the tests that are run, on what OS, on the given provider. - -An example command would be - invoke kitchen.genconfig --platform ubuntu --osversions all --provider azure --arch x86_64 --testfiles install-script-test - - This will generate a kitchen.yml which executes the `install-script-test` on all of the defined `ubuntu` - OS images in azure. - -#### Running in CI - -When run in CI, the gitlab job will set up the `TEST_PLATFORMS` environment variable, -and then concatenate the [azure driver](drivers/azure-driver.yml), [platforms-common](test-definitions/platforms-common.yml), -and the desired test suite file (for example [upgrade7-test](test-definitions/upgrade7-test.yml)). - -Test kitchen then expands out each of the `TEST_PLATFORMS` into a kitchen platform, and runs -each suite on each provided platform - -#### Running locally - -To run kitchen locally, either to do broad tests on a given build or to develop the -kitchen tests themselves, additional driver files are provided for using AWS EC2, Hyper-V, -or vagrant as the back end. - -To create a kitchen file, take the same steps as above. Combine the desired driver file, -the common file, and the desired test suite(s). Using `erb` as a manual step will generate -a kitchen file that can be reused. - -At present, the EC2 and Hyper-V driver files have only been tested for Windows targets. diff --git a/test/kitchen/azure-creds.erb b/test/kitchen/azure-creds.erb deleted file mode 100644 index 65cd405c3f46e..0000000000000 --- a/test/kitchen/azure-creds.erb +++ /dev/null @@ -1,4 +0,0 @@ -[<%= subscription_id %>] -client_id = "<%= client_id %>" -client_secret = "<%= client_secret %>" -tenant_id = "<%= tenant_id %>" diff --git a/test/kitchen/docs/README.md b/test/kitchen/docs/README.md deleted file mode 100644 index 80e3b3fa28df7..0000000000000 --- a/test/kitchen/docs/README.md +++ /dev/null @@ -1,236 +0,0 @@ -# Test Kitchen Overview - -## Build pipeline testing - -### Configuration (.gitlab-ci.yml) - -The gitlab pipelines which require kitchen testing have 3 independent stages for provisioning kitchen testing, running kitchen testing, and cleaning up (removing the artifacts). The `testkitchen_deploy` stage copies the build artifacts to an S3 bucket. The `testkitchen_testing` stage executes the kitchen tests. The `testkitchen_cleanup` stage cleans up the s3 buckets and the azure virtual machines. - -#### testkitchen_deploy - -This stage contains jobs to deploy the Agent packages created by the package build jobs to our test repositories: -- apttesting.datad0g.com (for .deb packages used by the Debian and Ubuntu tests) -- yumtesting.datad0g.com (for .rpm packages used by the CentOS/RHEL and SUSE tests) -- s3.amazonaws.com/dd-agent-mstesting (for .msi packages used by the Windows tests) - -For each package type, there are two jobs: one to deploy the A6 package, the other -to deploy the A7 and IoT packages. - -Each pipeline puts its packages in a dedicated branch: -- .deb packages are put in the `dists/pipeline--a6` and `dists/pipeline--a7` branches apttesting.datad0g.com. -- .rpm packages are put in the `pipeline--a6` and `pipeline--a7` branches of yumtesting.datad0g.com. -- SUSE .rpm packages are put in the `suse/pipeline--a6` and `suse/pipeline--a7` branches of yumtesting.datad0g.com. -- .msi packages are put in the `pipelines/A6/` and `pipelines/A7/` branches of s3.amazonaws.com/dd-agent-mstesting. - -#### testkitchen_testing - -This stage contains jobs which execute the kitchen tests on our Azure account. - -Each job executes one specific test suite, for one OS, for one Agent flavor and one major Agent version. - -The `.gitlab-ci.yml` file has been structured to avoid config duplication with the following jobs: - -- a common `kitchen_common` job from which all kitchen testing jobs inherit -- `kitchen_agent_aX` jobs that specify the Agent version tested -- `kitchen_os_X` jobs that specify which OS is tested -- `kitchen_test_X` jobs that specify which test suite is run -- `kitchen_datadog_X_flavor` jobs that specify which Agent flavor is run (eg. `datadog-agent`, `datadog-iot-agent`) -- `kitchen_azure_location_X` jobs that specify the Azure location where the tests are run. - -**Note:** We spread our kitchen tests on multiple regions mainly because we have a limited number of resources available on each region on Azure. - -From these base blocks, we define: -- test types: `kitchen_test__` which is a combination of a chosen test suite, Agent flavor and Azure location. -- scenarios: `kitchen_scenario__aX` which is a combination of a chosen OS and major Agent version. - -**Note:** When jobs use combinations of other jobs with the `extends` keyword (eg. test types, scenarios), the `extends` list is processed in order. Duplicate keys are overridden (ie. the latest job in the list which contains the key wins). Therefore, `extends` lists need to be ordered from the most generic to the most specific extension. - -**Note:** To avoid having too many different test types, we bind each test suite with a specific Azure location. Eg. all install script tests are run in the same Azure location. - -The real jobs that are run in the Gitlab pipelines are thus a combination of test types and scenarios, named `kitchen___-aX`. - -##### testkitchen_cleanup - -The `testkitchen_cleanup_azure-aX` jobs clean up the Azure VMs that were used during the `testkitchen_testing` stage. - -**Note:** The kitchen test jobs send a `destroy` request to Azure when their tests end, so usually these jobs do nothing. They're mainly useful to make sure all VMs have been destroyed, or when kitchen jobs are cancelled while they're running. - -**Note:** Azure VMs are also cleaned up on a daily basis by a job in the `mars-jenkins-scripts` pipeline. - -The `testkitchen_cleanup_s3-aX` jobs clean up the S3 buckets of the testing repos. - -**Important note:** These jobs are always run, even when a kitchen test fails. This is done on purpose (to avoid having remaining resources once a job fails). -The downside of this approach is that when you want to retry a failing kitchen test job, you'll have to re-run the corresponding deploy job first (to put the Agent packages back in the testing repository). - -#### Test suites - -kitchen tests are defined in a file named `kitchen.yml` which defines: -- the provisioner (`provisioner:` key) used in the tests. In the pipeline, `chef-solo` is used. -- the driver (`driver:` + `driver_config:` keys) used to run the tests. In the pipeline, the [Azure kitchen driver](https://github.com/test-kitchen/kitchen-azurerm) is used. - -- the list of platforms (`platforms:` key) used in the tests. -- the list of test suites (`suites:` key) to run. - -To reduce duplication, the `kitchen.yml` file is generated at test time by the `run-test-kitchen.sh` script ([see below](#test-execution-tasksrun-test-kitchensh)) by concatenating 2 template files: - -- the `kitchen-azure-common.yml` file, which defines the provisioner, driver, and platforms that will be used. It also defines a number of useful variables that can be used by the test suite templates (such as: which major Agent version is used, what are the testing repository URLs, etc.). -- a `kitchen-azure--test.yml` file, which contains the test suite definition for a particular test. That definition consists in the list of recipes to run, with their attributes, and optionally a list of platforms to not run the test on (eg. if you know that a particular test x platform combination cannot work). - -These files are `.erb` template files, the rendered contents (eg. the list of platforms) depend on what variables are passed to the `run-test-kitchen.sh` script. - -#### Test execution (tasks/run-test-kitchen.sh) - -Each individual test environment is controlled from the `.gitlab-ci.yml` jobs. The tests are set up using environment variables. - -##### `TEST_PLATFORMS` - -`TEST_PLATFORMS` is a list of test platforms which are turned into test kitchen platforms. In `.gitlab-ci.yml`, the platform list has the following syntax: - `short_name1,type1,azure_fully_qualified_name1|short_name2,type2,azure_fully_qualified_name2` - -There are two types of platforms: -- ones which use a public image (type `urn`): the azure qualified name for such an image can be found by using `az vm image list` to search for the image (using the publisher name, the offer name and/or the sku). The `urn` field contains the azure fully qualified name. -- ones which use a private image (type `id`): the image is in an image gallery in the `kitchen-test-images` resource group of the Azure account. The fully qualified name is the full path to the image in the gallery. - -We mainly use private images for platforms we still want to test, but have been removed from the public Azure images list (eg. because they're EOL). - -**Note:** this variable is set by the `kitchen_os_X` jobs. - -##### `AZURE_LOCATION` - -`AZURE_LOCATION` is a string that indicates on which Azure region the test VMs are spun up. - -**Note:** this variable is set by the `kitchen_azure_location_X` jobs. - -##### `AGENT_FLAVOR` - -`AGENT_FLAVOR` is a string that indicates which flavor the Agent is installed (eg. datadog-agent, datadog-iot-agent). In particular, it helps knowing which package has to be installed, and which tests should be applied (eg. doing Python tests on the IoT Agent doesn't make sense). - -**Note:** this variable is set by the `kitchen_datadog_X_flavor` jobs. - -This configuration is fed to the `tasks/run-test-kitchen.sh`. That script also takes two mandatory parameters: - -- an identifier for the test suite that is run (eg. `install-script`, `upgrade5`), -- the major Agent version that is tested (eg. `6` or `7`). - -In turn, it sets up additional variables for Azure (authentication/environment variables), as well as some variables used during testing (such as the exact expected Agent version, gathered from the `inv agent.version` command). - -It concatenates the `kitchen-azure-common.yml` file with the file specific to the provided test suite into a `kitchen.yml` file, and then executes the actual kitchen command. - -### Test Implementation - -#### Directory structure - -Test kitchen imposes a very specific directory structure. For more information, see the [test kitchen documentation](https://kitchen.ci/docs). However, a brief overview: - -##### Cookbooks - -The `site_cookbooks` tree contains the chef cookbooks that are run during the `kitchen converge` stage. - -**Note:** The test suites can also use recipes from other cookbooks defined in the `Berksfile`, such as our official `chef-datadog` cookbook. - -``` -. -├── site-cookbooks -│   ├── dd-agent-install-script -│   │   ├── attributes -│   │   │   └── default.rb -│   │   ├── recipes -│   │   │   └── default.rb -``` -etc. - -The `recipes` directory contains the actions that the cookbook does. By default (ie. when including the `[]` recipe to your test suite), the `default.rb` recipe is used. To target a specific recipe, include `[:]`. - -The `attributes` directory contains the default attributes of your recipes. While not mandatory (you can explicitly define all attributes in the test suites), they are useful to quickly know what can be configured in the recipe. - -**Note:** The cookbooks are run prior to an individual test. Each listed cookbook is run before any verification stage, so multi-stage tests can't do verification in between stages (like the upgrade test). - -##### Tests - -The `test/integration` tree contains the `rspec` verification tests that are run during the `kitchen verify` stage. - -``` -└── test - └── integration - ├── common - │   └── rspec - │   └── spec_helper.rb - │   └── iot_spec_helper.rb - ├── install-script - │   └── rspec - │   ├── install_script_spec.rb - │   └── spec_helper.rb -> ../../common/rspec/spec_helper.rb - │   └── iot_spec_helper.rb -> ../../common/rspec/iot_spec_helper.rb - ├── win-all-subservices - │   └── rspec - │   ├── win-all-subservices_spec.rb - │   └── spec_helper.rb -> ../../common/rspec/spec_helper.rb - ├── win-installopts - │   └── rspec - │   ├── win-installopts_spec.rb - │   └── spec_helper.rb -> ../../common/rspec/spec_helper.rb -``` - -To prevent copy/paste, and make maintenance manageable, therefore there's a group of common test definitions in `spec_helper.rb` that is shared to the other via the symbolic links. The symbolic link is necessary because chef/kitchen only copies the test files from the specific test directory that will be run to the target machine. - -The same is done for IoT-specific helpers, via the `iot_spec_helper.rb` file. - -**On Windows** symbolic links must be explicitly enabled in git prior to fetching the tree. This can be done at install time, or after the fact with `git config --global core.symlinks=true`. - -The two `spec_helper` files define helpers and groups of examples that can be used by test suites. Test suites can then add their own specific tests in their test file, and/or use the test groups and helpers defined in the `spec_helper` files. - -In particular, both `spec_helper` and `iot_spec_helper` have: -- an "install" test group, to check that the Agent is correctly installed. -- a "behavior" test group, to check various properties of the Agent. -- an "uninstall" test group, to uninstall the Agent and verify its uninstall properties (eg. no files left after uninstall). - - -#### Test definition - -Each test suite runs one or more chef recipes (usually to install the agent in various ways), defined by the `run_list:` key, and then its verifier. The verifier is assumed (by kitchen) to be in the directory that has the name of the suite. So, the suite named `dd-agent-install-script` suite runs the verifier script in `dd-agent-install-script/rspec/dd-agent-install-script_spec.rb`. - -### How to add a new test suite to the pipeline - -1. If needed, create (a) new cookbook(s) that perform(s) the install type you want to test. - -- To scaffold your cookbook, you can use the same cookbook structure as existing cookbooks in the directory -- Don't forget to add your cookbook to the `Berksfile`, otherwise Chef won't know that it's there. -- Think of the different attributes that your cookbook needs (usually, it needs a way to know which Agent version it installs, as well as a location where it can fetch the Agent package built by the pipeline), add them to the `attributes/default.rb` file. - -2. Create the new test suite file (`kitchen-azure--test.yml`). - -- The most important parts are the run list, the attributes to set for each cookbook used, and optionally a list of platforms to exclude. -- Add the suite to the list of accepted suites in `tasks/run-test-kitchen.sh`. - -**Note:** When creating kitchen resources on Azure, the kitchen Azure driver creates one resource group for each suite + test platform combination. Its name is computed as follows: -`kitchen---pl-`, with: -- `suite_name`: the kitchen test suite name, defined in `kitchen-azure--test.yml`. -- `platform_name`: the short name of the test platform, defined in the `TEST_PLATFORMS`. -- `timestamp`: a `YYYYMMDDThhmmss` timestamp (15 chars), -- `pipeline n°`: the pipeline number (7-8 chars for the foreseeable future). -- `suffix`: `a6` or `a7` (2 chars). - -Azure will throw an error if a resource group name is longer than 80 characters: `Failed to complete #create action: [{"error"=>{"code"=>"InvalidParameter", "message"=>"The entity name 'resourceGroupName' is invalid according to its validation rule: ^[^_\\W][\\w-._]{0,79}(?"resourceGroupName"}}]` - -Therefore, your test suite name + test platform short name combinations need to be short enough to not exceed the limit. - -**Note (HACK):** On some test suites, we define attributes for a cookbook named `dd-agent-rspec`. This is not a real cookbook; we're using this as a workaround to pass variables to the rspec tests (in the rspec tests, we only have access to a `dna.json` file that has the contents of `kitchen.yml`). - -3. Create the rspec test directory matching your new test suite. - -- Do not forget to create the symlinks to the `rspec_helper` files from the `common` directory if you need them. -- Remember that your main test file must be in `test/integration//_spec.rb`. - -4. Create the necessary Gitlab jobs to run your test suite on all platforms, Agent flavors and versions you want, following the existing naming conventions. - -5. Update the periodic cleanup job (`periodic_kitchen_cleanup_azure`) - -When kitchen tests are run, VMs are created in dedicated resource groups in Azure. These resource groups are prefixed with `kitchen-`. - -The periodic cleanup jobs runs the `cleanup_azure.py` script on a given list of Azure resource group prefixes. Eg.: -``` -RESOURCE_GROUP_PREFIX=kitchen-dd-agent python3 /deploy_scripts/cleanup_azure.py -``` -cleans up all resources created by test suites that start with `dd-agent`. - -If you add a new test suite that doesn't match any of the already present prefixes, then you need to add a line to the cleanup job to clean up the resources created under this new prefix. \ No newline at end of file diff --git a/test/kitchen/docs/win-all-subservices.md b/test/kitchen/docs/win-all-subservices.md deleted file mode 100644 index c73dfe50b25b1..0000000000000 --- a/test/kitchen/docs/win-all-subservices.md +++ /dev/null @@ -1,27 +0,0 @@ -## win-all-subservices.md - -### Objective - -Test the Windows command line installer options for explicitly enabling the various datadog subservices (processes, trace, and logs) - -### Installation Recipe - -Uses the \_install_windows_base recipe to do a fresh install of the agent. -1. Uses a fresh install because install options are ignored on upgrades -2. Uses the \_base recipe which allows setting of additional options - -### Test definition - -The test is successful if: -1. APM - 1. APM is enabled in the configuration file - 2. Something is listening on port 8126 - 3. there is a process in the process table called `trace-agent.exe` - 4. There is a service registered called `datadog-trace-agent` which can be queried via `sc qc` -2. Logs - 1. Logs is enabled in the configuration file -3. Process - 1. Process is enabled in the configuration file - 2. There is a process in the process table called `process-agent.exe` - 3. There is a service registered called `datadog-process-agent` which can be queried via `sc qc` - \ No newline at end of file diff --git a/test/kitchen/docs/win-installopts.md b/test/kitchen/docs/win-installopts.md deleted file mode 100644 index 1ff285bdb9613..0000000000000 --- a/test/kitchen/docs/win-installopts.md +++ /dev/null @@ -1,15 +0,0 @@ -## win-installopts - -### Objective - -Test the Windows command line installer options for tags, hostname, command port, all proxy settings, and datadog site-specific settings - -### Installation Recipe - -Uses the \_install_windows_base recipe to do a fresh install of the agent. -1. Uses a fresh install because install options are ignored on upgrades -2. Uses the \_base recipe which allows setting of additional options - -### Test definition - -Test is successful if the options are correctly written to `datadog.yaml`. The verifier reads and parses the resulting configuration file to verify the test options are correctly written. \ No newline at end of file diff --git a/test/kitchen/docs/win-no-subservices.md b/test/kitchen/docs/win-no-subservices.md deleted file mode 100644 index b6be7b425e1a5..0000000000000 --- a/test/kitchen/docs/win-no-subservices.md +++ /dev/null @@ -1,27 +0,0 @@ -## win-no-subservices.md - -### Objective - -Test the Windows command line installer options for explicitly disabling the various datadog subservices (processes, trace, and logs) - -### Installation Recipe - -Uses the \_install_windows_base recipe to do a fresh install of the agent. -1. Uses a fresh install because install options are ignored on upgrades -2. Uses the \_base recipe which allows setting of additional options - -### Test definition - -The test is successful if: -1. APM - 1. APM is disabled in the configuration file - 2. Nothing is listening on port 8126 - 3. there is no process in the process table called `trace-agent.exe` - 4. There is not a service registered called `datadog-trace-agent` which can be queried via `sc qc` -2. Logs - 1. Logs is not enabled in the configuration file -3. Process - 1. Process is disabled in the configuration file - 2. There is no process in the process table called `process-agent.exe` - 3. There is not a service registered called `datadog-process-agent` which can be queried via `sc qc` - \ No newline at end of file diff --git a/test/kitchen/drivers/azure-driver.yml b/test/kitchen/drivers/azure-driver.yml deleted file mode 100644 index 65f815b10eff4..0000000000000 --- a/test/kitchen/drivers/azure-driver.yml +++ /dev/null @@ -1,200 +0,0 @@ -<% - ENV['AZURE_LOCATION'] ||= "North Central US" - location = ENV['AZURE_LOCATION'] -%> - -<% - vm_tags = { - 'dd_agent_testing': 'dd_agent_testing' - } - vm_username = ENV['VM_USERNAME'] ? ENV['VM_USERNAME'] : "datadog" - if ENV['DD_PIPELINE_ID'] - vm_tags['pipeline_id'] = ENV['DD_PIPELINE_ID'] - else - vm_tags['pipeline_id'] = 'nopipeline' - end -%> - -provisioner: - name: chef_solo - <% if ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH'] %> - root_path: <%= ENV['KITCHEN_CI_ROOT_PATH'] %>/kitchen - <% end %> - product_name: chef - # There is no arm64 distribution of Chef 14 for Debian. Use the Ubuntu package instead - <% if ENV['KITCHEN_PLATFORM'] == "debian" && ENV['KITCHEN_ARCH'] == "arm64" %> - download_url: https://packages.chef.io/files/stable/chef/14.15.6/ubuntu/18.04/chef_14.15.6-1_arm64.deb - product_version: 14.15.6 - <% else %> - product_version: <%= ENV['CHEF_VERSION'] ||= '14.12.9' %> - <% end %> - install_strategy: always - # the following settings make it possible to do a reboot during setup - # (necessary for FIPS tests which reboot to enable FIPS mode) - max_retries: 3 - wait_for_retry: 90 - client_rb: - client_fork: false - -driver: - name: azurerm - -driver_config: - subscription_id: <%= ENV['AZURE_SUBSCRIPTION_ID'] %> - location: <%= location %> - <% if ENV['DD_PIPELINE_ID'] %> - azure_resource_group_suffix: pl<%= ENV['DD_PIPELINE_ID'] %> - <% else %> - azure_resource_group_suffix: plnone - <% end %> - -platforms: -# Loop through two lists and output a total matrix of all possible platform + chef versions, -# for both drivers - - -<% - # TEST_PLATFORMS syntax is `short_name1,azure_full_qualified_name1|short_name2,azure_full_qualified_name1` - # TEST_PLATFORMS syntax is `short_name1,parent vhd folder,parent_vhd_name|...` - azure_test_platforms = ENV['TEST_PLATFORMS'].split('|').map { |p| p.split(',') } - cws_supported_platforms = (ENV['KITCHEN_CWS_SUPPORTED_OSVERS'] || "").split(',') - - if ENV['TEST_IMAGE_SIZE'] != "" - sizes = [ - ENV['TEST_IMAGE_SIZE'] - ] - else - sizes = [ - "Standard_D1_v2", - "Standard_A1_v2", - ] - end - - windows_sizes = [ - "Standard_D2_v4" - ] - - windows_platforms = [] - sles15_platforms = [] - - idx = 0 - azure_test_platforms.each do |platform| - idx += 1 - - host = "azure" - - # KITCHEN_PLATFORM_SUFFIX is set for non-standard Agent tests (eg. IoT Agent, FIPS) - # that use the same test suites as the standard Agent. - # This is needed because the resource group name used by the driver is computed as: - # --- - # which means that, without that KITCHEN_PLATFORM_SUFFIX, two types of tests - # running at the same time can conflict with each other if they start at the same time, - # as they try to use the same resource group name, leading to provisioning errors. - if ENV['KITCHEN_PLATFORM_SUFFIX'] - platform_name = platform[0] + "-" + ENV['KITCHEN_PLATFORM_SUFFIX'] + "-#{host}-#{ENV['KITCHEN_ARCH']}" - else - platform_name = platform[0] + "-#{host}-#{ENV['KITCHEN_ARCH']}" - end - - windows = platform_name.include?("win") - sles15 = platform_name.include?("sles-15") - debian9 = platform_name.include?("debian-9") - - if windows - windows_platforms << platform_name - size = windows_sizes[idx % windows_sizes.length] - else - if sles15 - sles15_platforms << platform_name - end - size = sizes[idx % sizes.length] - end - - # Check if we should use an ed25519 key, an rsa key or the default key - # Some newer platforms don't support rsa, while some older platforms don't support ed25519 - # In Azure, ed25519 is not supported, but the default key created by the driver works - default_key_platforms = ["ubuntu-22-04", "rhel-91", "debian-12"] - use_default_key = default_key_platforms.any? { |p| platform_name.include?(p) } - - ed25519_platforms = [] - use_ed25519 = ed25519_platforms.any? { |p| platform_name.include?(p) } - - vm_password = ENV['SERVER_PASSWORD'] - -%> - -- name: <%= platform_name %> - attributes: - color_idx: <%= idx %> - dd-agent-rspec: - enable_cws: <%= ENV['KITCHEN_CWS'] == "true" && cws_supported_platforms.include?(platform[0]) %> - <% if ENV["KITCHEN_CWS_PLATFORM"] %> - cws_platform: <%= ENV["KITCHEN_CWS_PLATFORM"] %> - <% end %> - <% if ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH'] %> - provisioner: - command_prefix: TMPDIR=<%= ENV['KITCHEN_CI_ROOT_PATH'] %> - <% end %> - driver_config: - machine_size: <%= size %> - <% if platform[1] == "urn" %> - image_urn: <%= platform[2] %> - <% else %> - image_id: <%= platform[2] %> - <% end %> - location: <%= location %> - <% if windows %> - vm_name: ddat<%= platform[0] %> - <% else %> - vm_name: dd-agent-testing-<%= platform[0] %>-azure - <% end %> - vm_tags: - <% vm_tags.each do |key,value| %> - <%= key %>: <%= value %> - <% end %> - username: <%= vm_username %> - password: <%= vm_password %> - <% if (ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH']) || debian9 %> - lifecycle: - post_create: - <% if ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH'] %> - - remote: | - sudo mkdir -p <%= ENV['KITCHEN_CI_MOUNT_PATH'] %>; - sudo chmod a+rwx <%= ENV['KITCHEN_CI_MOUNT_PATH'] %>; - sudo ln -s <%= ENV['KITCHEN_CI_MOUNT_PATH'] %> <%= ENV['KITCHEN_CI_ROOT_PATH'] %>; - <% end %> - <% if debian9 %> - - local: echo 'Updating the sources.list file to use archive.debian.org for the stretch suites' - - remote: | - # Stretch has been moved to archive.debian.org - # See https://lists.debian.org/debian-devel-announce/2023/03/msg00006.html - sudo sed -i 's/debian-archive.trafficmanager.net/archive.debian.org/g' /etc/apt/sources.list - # The stretch-updates dist doesn't exist in archive.debian.org/debian - sudo sed -i '/stretch-updates/d' /etc/apt/sources.list - <% end %> - <% end %> - - transport: - <% if windows %> - name: winrm - username: <%= vm_username %> - password: <%= vm_password %> - <% else %> - connection_retries: 30 - connection_retry_sleep: 2 - <% if use_default_key %> - ssh_key: - <% elsif use_ed25519 %> - ssh_key: <%= ENV['KITCHEN_ED25519_SSH_KEY_PATH'] %> - <% else %> - ssh_key: <%= ENV['KITCHEN_RSA_SSH_KEY_PATH'] %> - <% end %> - <% end %> - - verifier: - downloads: - "/tmp/junit.tar.gz": junit-<%= platform_name %>.tar.gz - "/tmp/testjson.tar.gz": testjson/<%= platform_name %>/testjson.tar.gz - "/tmp/kitchen/rspec.xml": kitchen-rspec-<%= platform_name %>.xml - -<% end %> diff --git a/test/kitchen/drivers/ec2-driver.yml b/test/kitchen/drivers/ec2-driver.yml deleted file mode 100644 index 57359d902dd5d..0000000000000 --- a/test/kitchen/drivers/ec2-driver.yml +++ /dev/null @@ -1,215 +0,0 @@ -provisioner: - name: chef_solo - <% if ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH'] %> - root_path: <%= ENV['KITCHEN_CI_ROOT_PATH'] %>/kitchen - <% end %> - product_name: chef - # There is no arm64 distribution of Chef 14 for Debian. Use the Ubuntu package instead - <% if ENV['KITCHEN_PLATFORM'] == "debian" && ENV['KITCHEN_ARCH'] == "arm64" %> - download_url: https://packages.chef.io/files/stable/chef/14.15.6/ubuntu/18.04/chef_14.15.6-1_arm64.deb - product_version: 14.15.6 - <% elsif (ENV['KITCHEN_PLATFORM'] == "amazonlinux" || ENV['KITCHEN_PLATFORM'] == "suse") && ENV['KITCHEN_ARCH'] == "arm64" %> - # There is no arm64 distribution of Chef 14 for Amazon Linux 2022 nor SLES 15. Use the CentOS package instead - download_url: https://packages.chef.io/files/stable/chef/14.15.6/el/7/chef-14.15.6-1.el7.aarch64.rpm - product_version: 14.15.6 - <% elsif ENV['KITCHEN_PLATFORM'] == "amazonlinux" && ENV['KITCHEN_ARCH'] == "x86_64" %> - # There is no x86_64 distribution of Chef 14 for Amazon Linux 2022. Use the CentOS package instead - download_url: https://packages.chef.io/files/stable/chef/14.15.6/el/7/chef-14.15.6-1.el7.x86_64.rpm - product_version: 14.15.6 - <% else %> - product_version: <%= ENV['CHEF_VERSION'] ||= '14.12.9' %> - <% end %> - install_strategy: always - # the following settings make it possible to do a reboot during setup - # (necessary for FIPS tests which reboot to enable FIPS mode) - max_retries: 3 - wait_for_retry: 90 - client_rb: - client_fork: false - -driver: - name: ec2 - <% if ENV['KITCHEN_EC2_SSH_KEY_ID'] %> - aws_ssh_key_id: <%= ENV['KITCHEN_EC2_SSH_KEY_ID'] %> - <% end %> - <% if ENV['KITCHEN_EC2_SG_IDS'] %> - security_group_ids: <%= [ENV['KITCHEN_EC2_SG_IDS']] %> - <% else %> - security_group_ids: [ "sg-7fedd80a","sg-46506837" ] - <% end %> - # Fix an edge case where IMDSv2 doesn't work for this specific ubuntu AMI - # Using this AMI with any other (e.g : KITCHEN_OSVERS: ubuntu-16-04-4.4,ubuntu-18-04) will use IMDSv2 and fail. - <% if ENV['KITCHEN_OSVERS'] != "ubuntu-16-04-4.4" %> - metadata_options: - http_tokens: required - http_put_response_hop_limit: 1 - instance_metadata_tags: enabled - <% end %> - region: <%= ENV['KITCHEN_EC2_REGION'] ||= "us-east-1" %> - instance_type: <%= ENV['KITCHEN_EC2_INSTANCE_TYPE'] ||= 't3.xlarge' %> - associate_public_ip: false - subnet_id: <%= ENV['KITCHEN_EC2_SUBNET'] ||= 'subnet-b89e00e2' %> - iam_profile_name: <%= ENV['KITCHEN_EC2_IAM_PROFILE_NAME'] ||= nil %> - <% if ENV['KITCHEN_EC2_SPOT_PRICE'] %> - spot_price: <%= ENV['KITCHEN_EC2_SPOT_PRICE'] %> - <% end %> - block_duration_minutes: <%= ENV['KITCHEN_EC2_SPOT_DURATION'] ||= '60' %> - tags: - Name: ci-datadog-agent-kitchen - Team: agent-devx-loops - PipelineId: <%= ENV['DD_PIPELINE_ID'] %> - CreatedBy: datadog-agent-kitchen-tests - Creator: <%= ENV['KITCHEN_EC2_TAG_CREATOR'] || "datadog-agent-kitchen-user" %> - -platforms: -# Loop through two lists and output a total matrix of all possible platform + chef versions, -# for both drivers - - -<% - # TEST_PLATFORMS syntax is `short_name1,ami|...` - ec2_test_platforms = ENV['TEST_PLATFORMS'].split('|').map { |p| p.split(',') } - cws_supported_platforms = (ENV['KITCHEN_CWS_SUPPORTED_OSVERS'] || "").split(',') - - windows_platforms = [] - sles15_platforms = [] - - idx = 0 - ec2_test_platforms.each do |platform| - idx += 1 - - host = "ec2" - platform_name = platform[0] + "-#{host}-#{ENV['KITCHEN_ARCH']}" - - windows = platform_name.include?("win") - sles15 = platform_name.include?("sles-15") - al2022 = platform_name.include?("amazonlinux2022") - al2023 = platform_name.include?("amazonlinux2023") - fedora = platform_name.include?("fedora") - rocky = platform_name.include?("rocky") - - if windows - windows_platforms << platform_name - else - if sles15 - sles15_platforms << platform_name - end - end - - # Check if we should use allow RSA key usage via user_data - allow_rsa_key_platforms = ["ubuntu-22-04"] - allow_rsa_key = allow_rsa_key_platforms.any? { |p| platform_name.include?(p) } - - vm_username = ENV['VM_USERNAME'] ? ENV['VM_USERNAME'] : "datadog" - vm_password = ENV['SERVER_PASSWORD'] - -%> - -- name: <%= platform_name %> - attributes: - color_idx: <%= idx %> - dd-agent-rspec: - enable_cws: <%= ENV['KITCHEN_CWS'] == "true" && cws_supported_platforms.include?(platform[0]) %> - <% if ENV["KITCHEN_CWS_PLATFORM"] %> - cws_platform: <%= ENV["KITCHEN_CWS_PLATFORM"] %> - <% end %> - <% if ENV["DOCKER_REGISTRY_LOGIN"] && ENV["DOCKER_REGISTRY_PASSWORD"] %> - docker: - registry: <%= ENV["DOCKER_REGISTRY_URL"] %> - username: <%= ENV["DOCKER_REGISTRY_LOGIN"] %> - password: <%%= ENV["DOCKER_REGISTRY_PASSWORD"] %> - <% end %> - <% if ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH'] %> - provisioner: - command_prefix: TMPDIR=<%= ENV['KITCHEN_CI_ROOT_PATH'] %> - <% end %> - driver: - <% if windows %> - connection_timeout: 20 - connection_retries: 40 - retryable_tries: 600 - connection_retry_sleep: 20 - max_wait_until_ready: 1200 - <% end %> - image_id: <%= platform[1] %> - block_device_mappings: - <% if ENV['KITCHEN_ARCH'] == "arm64" %> - - device_name: <%= ENV['KITCHEN_EC2_DEVICE_NAME'] || "/dev/sda1" %> - <% else %> - - device_name: <%= ENV['KITCHEN_EC2_DEVICE_NAME'] || "/dev/xvda" %> - <% end %> - ebs: - volume_type: gp2 - volume_size: 100 - delete_on_termination: true - <% if allow_rsa_key || al2022 || al2023 || fedora %> - user_data: | - #!/bin/sh - <% end %> - <% if allow_rsa_key %> - echo PubkeyAcceptedKeyTypes=+ssh-rsa >> /etc/ssh/sshd_config - service ssh reload - <% end %> - <% if al2022 || al2023 || fedora %> - sudo dnf install -y libxcrypt-compat - <% end %> - <% if (ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH']) || al2022 || al2023 || fedora %> - lifecycle: - post_create: - <% end %> - <% if ENV['KITCHEN_CI_MOUNT_PATH'] && ENV['KITCHEN_CI_ROOT_PATH'] %> - - remote: | - sudo mkdir -p <%= ENV['KITCHEN_CI_MOUNT_PATH'] %>; - sudo chmod a+rwx <%= ENV['KITCHEN_CI_MOUNT_PATH'] %>; - sudo ln -s <%= ENV['KITCHEN_CI_MOUNT_PATH'] %> <%= ENV['KITCHEN_CI_ROOT_PATH'] %>; - <% end %> - <% if al2022 || al2023 || fedora %> - # Add a hook after creating the host, to make sure we wait until the user_data - # script has been run. - # Snippet taken from the kitchen docs: https://kitchen.ci/docs/reference/lifecycle-hooks/ - - local: echo 'Awaiting cloud-init completion' - - remote: | - declare i=0; - declare wait=5; - declare timeout=300; - while true; do - [ -f /var/lib/cloud/instance/boot-finished ] && break; - if [ ${i} -ge ${timeout} ]; then - echo "Timed out after ${i}s waiting for cloud-init to complete"; - exit 1; - fi; - echo "Waited ${i}/${timeout}s for cloud-init to complete, retrying in ${wait} seconds" - sleep ${wait}; - let i+=${wait}; - done; - <% end %> - verifier: - downloads: - "/tmp/junit.tar.gz": junit-<%= platform_name %>.tar.gz - "/tmp/testjson.tar.gz": testjson/<%= platform_name %>/testjson.tar.gz - "/tmp/kitchen/rspec.xml": kitchen-rspec-<%= platform_name %>.xml - - transport: - <% if windows %> - name: winrm - elevated: true - username: administrator - - <% else %> - connection_retries: 30 - connection_retry_sleep: 2 - max_wait_until_ready: 30 - <% end %> - <% if sles15 || al2022 || al2023 %> - # The AWS EC2 driver doesn't recognize Amazon Linux 2022 yet, - # therefore it doesn't know that it needs to use ec2-user. - username: ec2-user - <% end %> - <% if rocky %> - username: rocky - <% end %> - <% if ENV['KITCHEN_EC2_SSH_KEY_PATH'] %> - ssh_key: <%= ENV['KITCHEN_EC2_SSH_KEY_PATH'] %> - <% end %> - -<% end %> diff --git a/test/kitchen/drivers/hyperv-driver.yml b/test/kitchen/drivers/hyperv-driver.yml deleted file mode 100644 index 3626cf008479f..0000000000000 --- a/test/kitchen/drivers/hyperv-driver.yml +++ /dev/null @@ -1,89 +0,0 @@ -provisioner: - name: chef_solo - product_name: chef - product_version: 13.9.4 - install_strategy: always - # the following settings make it possible to do a reboot during setup - # (necessary for FIPS tests which reboot to enable FIPS mode) - max_retries: 3 - wait_for_retry: 90 - client_rb: - client_fork: false - -driver: - name: hyperv - vm_switch: <%= ENV['KITCHEN_HYPERV_SWITCH'] %> - dynamic_memory: true - <% if ENV['KITCHEN_HYPERV_MEM_MIN'] %> - dynamic_memory_min_bytes: <%= ENV['KITCHEN_HYPERV_MEM_MIN'] %> - memory_startup_bytes: <%= ENV['KITCHEN_HYPERV_MEM_MIN'] %> - <% else %> - dynamic_memory_min_bytes: 2GB - memory_startup_bytes: 2GB - <% end %> - <% if ENV['KITCHEN_HYPERV_MEM_MAX'] %> - dynamic_memory_max_bytes: <%= ENV['KITCHEN_HYPERV_MEM_MAX'] %> - <% else %> - dynamic_memory_max_bytes: 8GB - <% end %> - <% if ENV['KITCHEN_HYPERV_PROC_COUNT'] %> - processor_count: <%= ENV['KITCHEN_HYPERV_PROC_COUNT'] %> - <% end %> - -platforms: -# Loop through two lists and output a total matrix of all possible platform + chef versions, -# for both drivers - - -<% - # TEST_PLATFORMS syntax is `short_name1,parent vhd folder,parent_vhd_name|...` - hyperv_test_platforms = ENV['TEST_PLATFORMS'].split('|').map { |p| p.split(',') } - - windows_platforms = [] - sles15_platforms = [] - - idx = 0 - hyperv_test_platforms.each do |platform| - idx += 1 - - host = "hyperv" - platform_name = platform[0] + "-#{host}" - - windows = platform_name.include?("win") - sles15 = platform_name.include?("sles-15") - - if windows - windows_platforms << platform_name - end - if sles15 - sles15_platforms << platform_name - end - - vm_username = ENV['VM_USERNAME'] ? ENV['VM_USERNAME'] : "datadog" - vm_password = ENV['SERVER_PASSWORD'] - vm_hyperv_switch = ENV['KITCHEN_HYPERV_SWITCH'] ? ENV['KITCHEN_HYPERV_SWITCH'] : "public_eth" - -%> - -- name: <%= platform_name %> - driver: - name: hyperv - parent_vhd_folder: <%= platform[1] %> - parent_vhd_name: <%= platform[2] %> - vm_switch: <%= vm_hyperv_switch %> - driver_config: - username: <%= vm_username %> - password: <%= vm_password %> - - transport: - <% if windows %> - name: winrm - username: <%= vm_username %> - password: <%= vm_password %> - <% else %> - connection_retries: 30 - connection_retry_sleep: 2 - ssh_key: <%= ENV['KITCHEN_SSH_KEY_PATH'] %> - <% end %> - -<% end %> \ No newline at end of file diff --git a/test/kitchen/drivers/vagrant-driver.yml b/test/kitchen/drivers/vagrant-driver.yml deleted file mode 100644 index 846174d69e1d9..0000000000000 --- a/test/kitchen/drivers/vagrant-driver.yml +++ /dev/null @@ -1,54 +0,0 @@ ---- -driver: - name: vagrant - provider: <%= ENV['KITCHEN_VAGRANT_PROVIDER'] %> - - <% if ENV['KITCHEN_VAGRANT_PROVIDER'] != "hyperv" && ENV['KITCHEN_VAGRANT_SYNCED_FOLDER'] %> - # Hyper-V doesn't support synced folders - synced_folders: - - ["<%= ENV['KITCHEN_VAGRANT_SYNCED_FOLDER'].tr('\\', '/') %>", "/datadog-agent"] - <% end %> - -provisioner: - name: chef_solo - product_name: chef - install_strategy: always - # Use the same product_version as the CI kitchen test in Azure. - product_version: 14.12.9 - # the following settings make it possible to do a reboot during setup - # (necessary for FIPS tests which reboot to enable FIPS mode) - max_retries: 3 - wait_for_retry: 90 - client_rb: - client_fork: false - -platforms: -<% - ENV['TEST_PLATFORMS'] ||= "centos7,roboxes/centos7|centos8,roboxes/centos8" - cws_supported_platforms = (ENV['KITCHEN_CWS_SUPPORTED_OSVERS'] || "").split(',') - test_platforms = ENV['TEST_PLATFORMS'].split('|').map { |p| p.split(',') } - test_platforms.each do |platform| -%> - - name: <%= platform[0] %> - attributes: - dd-agent-rspec: - enable_cws: <%= ENV['KITCHEN_CWS'] && cws_supported_platforms.include?(platform[0]) %> - driver: - box: <%= platform[1] %> - # Always use linked_clone when possible, it's so much faster - linked_clone: true - <% if ENV['KITCHEN_VAGRANT_PROVIDER'] == "virtualbox" %> - gui: true - <% end %> - <% if platform[1].include?('opensuse') %> - customize: - disk_bus: sata - <% end %> -# uncomment below to locally inspect junit tarballs used for CI visibility -# verifier: -# downloads: -# "/tmp/junit.tar.gz": junit-<%= platform[0] %>.tar.gz -# "/tmp/testjson.tar.gz": testjson/<%= platform[0] %>/testjson.tar.gz -<% - end -%> diff --git a/test/kitchen/platforms.json b/test/kitchen/platforms.json deleted file mode 100644 index 6f3d87834c60c..0000000000000 --- a/test/kitchen/platforms.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "centos": { - "azure": { - "x86_64": { - "centos-76": "urn,OpenLogic:CentOS:7.6:7.6.201909120", - "centos-77": "urn,OpenLogic:CentOS:7.7:7.7.201912090", - "rhel-81": "urn,RedHat:RHEL:8.1:8.1.2021040910", - "rhel-85": "urn,RedHat:RHEL:8_5:8.5.2021121501", - "rhel-91": "urn,RedHat:RHEL:9_1:9.1.2022112113" - } - }, - "ec2": { - "x86_64": { - "centos-79": "ami-036de472bb001ae9c", - "rhel-86": "ami-031eff1ae75bb87e4", - "rocky-92": "ami-08f362c39d03a4eb5" - }, - "arm64": { - "centos-79": "ami-0cb7a00afccf30559", - "rhel-86": "ami-0238411fb452f8275" - } - }, - "vagrant": { - "x86_64": { - "centos-76": "bento/centos-7.6", - "centos7": "roboxes/centos7", - "centos8": "roboxes/centos8" - } - } - }, - "debian": { - "azure": { - "x86_64": { - "debian-8": "urn,credativ:Debian:8:8.0.201901221", - "debian-9": "urn,credativ:Debian:9:9.20200722.0", - "debian-10": "urn,Debian:debian-10:10:0.20230802.1460", - "debian-11": "urn,Debian:debian-11:11:0.20230501.1367", - "debian-12": "urn,Debian:debian-12:12:0.20230802.1460" - } - }, - "ec2": { - "x86_64": { - "debian-10": "ami-067a196d70cb53732", - "debian-11": "ami-0607e701db389efe7", - "debian-12": "ami-07edaec601cf2b6d3" - }, - "arm64": { - "debian-10": "ami-0b6ee4b8f4aa91fb4", - "debian-11": "ami-00988b9ead6afb0b1", - "debian-12": "ami-02aab8d5301cb8d68" - } - } - }, - "fedora": { - "ec2": { - "x86_64": { - "fedora-36": "ami-05e7ccec1e0408397", - "fedora-37": "ami-032e9a5778bde5a1a" - }, - "arm64": { - "fedora-36": "ami-0487fbde1f898f0f1", - "fedora-37": "ami-0e9221491fc51fca6" - } - } - }, - "suse": { - "azure": { - "x86_64": { - "sles-12": "urn,SUSE:sles-12-sp5-byos:gen1:2023.03.21", - "sles-15": "urn,SUSE:sles-15-sp2-byos:gen1:2022.11.09", - "opensuse-15-3": "urn,SUSE:opensuse-leap-15-3:gen1:2022.01.28" - } - }, - "ec2": { - "arm64": { - "sles-15": "ami-02f7663f03ca92749" - } - } - }, - "ubuntu": { - "azure": { - "x86_64": { - "ubuntu-14-04": "urn,Canonical:UbuntuServer:14.04.5-LTS:14.04.201905140", - "ubuntu-16-04": "urn,Canonical:UbuntuServer:16.04.0-LTS:16.04.202106110", - "ubuntu-18-04-0": "urn,Canonical:UbuntuServer:18.04-LTS:18.04.201809110", - "ubuntu-18-04": "urn,Canonical:UbuntuServer:18.04-LTS:18.04.201906040", - "ubuntu-18-04-3": "urn,Canonical:UbuntuServer:18.04-LTS:18.04.201912180", - "ubuntu-20-04": "urn,Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202004230", - "ubuntu-20-04-2": "urn,Canonical:0001-com-ubuntu-server-focal:20_04-lts:20.04.202107200", - "ubuntu-22-04": "urn,Canonical:0001-com-ubuntu-server-jammy:22_04-lts:22.04.202205060" - } - }, - "ec2": { - "x86_64": { - "ubuntu-16-04": "ami-089043ae24872fe78", - "ubuntu-18-04": "ami-015715c1584e7243c", - "ubuntu-20-04": "ami-0ffb8e1df897204c4", - "ubuntu-22-04": "ami-02e99c6973f5a184a", - "ubuntu-23-04": "ami-09c5d86a379ab69a5", - "ubuntu-23-10": "ami-0949b45ef274e55a1" - }, - "arm64": { - "ubuntu-18-04": "ami-002c0df0f55a14f82", - "ubuntu-20-04": "ami-0ccf50ab09c6df2d4", - "ubuntu-20-04-2": "ami-023f1e40b096c3ebc", - "ubuntu-21-04": "ami-044f0ceee8e885e87", - "ubuntu-22-04": "ami-0f1d4680f8b775120", - "ubuntu-23-04": "ami-05fab5da2d7fe0b0b", - "ubuntu-23-10": "ami-0dea732dd5f1da0a8" - } - }, - "vagrant": { - "x86_64": { - "ubuntu-16-04": "bento/ubuntu-16.04" - }, - "arm64": { - "ubuntu-20-04": "bytesguy/ubuntu-server-20.04-arm64", - "ubuntu-22-04": "brycekahle/ubuntu-22.04-arm64" - } - } - }, - "oracle": { - "azure": { - "x86_64": { - "oracle-7-9": "urn,Oracle:Oracle-Linux:ol79:7.9.9" - } - } - }, - "amazonlinux": { - "ec2": { - "x86_64": { - "amazonlinux2-4-14": "ami-038b3df3312ddf25d", - "amazonlinux2-5-10": "ami-06a0cd9728546d178", - "amazonlinux2022-5-15": "ami-0f0f00c2d082c52ae", - "amazonlinux2023": "ami-064ed2d3fc01d3ec1" - }, - "arm64": { - "amazonlinux2-4-14": "ami-090230ed0c6b13c74", - "amazonlinux2-5-10": "ami-09e51988f56677f44", - "amazonlinux2022-5-15": "ami-0acc51c3357f26240", - "amazonlinux2023": "ami-0a515c154e76934f7" - } - } - }, - "windows": { - "azure": { - "x86_64": { - "win2016": "urn,MicrosoftWindowsServer:WindowsServer:2016-Datacenter-Server-Core:latest", - "win2019": "urn,MicrosoftWindowsServer:WindowsServer:2019-Datacenter-Core:latest", - "win2019cn": "urn,MicrosoftWindowsServer:WindowsServer:2019-Datacenter-zhcn:latest", - "win2022": "urn,MicrosoftWindowsServer:WindowsServer:2022-datacenter-core:latest" - } - }, - "ec2": { - "x86_64": { - "win2016": "ami-03bee25bb430166e4", - "comment-win2016": "# Windows_Server-2016-English-Core-Containers-2022.12.14", - "win2019": "ami-01cc656499debb56a", - "comment-win2019": "Windows_Server-2019-English-Core-ContainersLatest-2023.01.19", - "win2022": "ami-0176b2659d40f0696", - "comment-win2022": "Windows_Server-2022-English-Core-ContainersLatest-2023.01.19" - } - }, - "vagrant": { - "x86_64": { - "win2022": "cdaf/WindowsServer2022", - "comment-win2022": "Windows Server 2022 Standard Desktop Experience Evaluation", - "win2022-dc": "cdaf/WindowsServerDC", - "comment-win2022-dc": "Windows Server 2022 Standard Evaluation + Domain Controller", - "win2019-core": "cdaf/WindowsServerCore", - "comment-win2019-core": "Windows Server 2019 Standard Core Evaluation" - } - } - } -} diff --git a/test/kitchen/site-cookbooks/dd-agent-5/README.md b/test/kitchen/site-cookbooks/dd-agent-5/README.md deleted file mode 100644 index 21c8535d9b566..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# dd-agent-install cookbook - - -This installs the Datadog Agent. -The Windows installation on the Chef Cookbook is broken for Agent 6. -This will be a temporary solution. diff --git a/test/kitchen/site-cookbooks/dd-agent-5/attributes/default.rb b/test/kitchen/site-cookbooks/dd-agent-5/attributes/default.rb deleted file mode 100644 index aefa5307d24a7..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/attributes/default.rb +++ /dev/null @@ -1,26 +0,0 @@ -default['dd-agent-5']['api_key'] = nil -default['dd-agent-5']['url'] = nil - -if node['platform_family'] == 'windows' - default['dd-agent-5']['agent_package_retries'] = nil - default['dd-agent-5']['agent_package_retry_delay'] = nil - default['dd-agent-5']['windows_agent_checksum'] = nil - default['dd-agent-5']['windows_version'] = nil - default['dd-agent-5']['windows_agent_filename'] = "ddagent-cli-latest" - default['dd-agent-5']['windows_agent_url'] = 'https://ddagent-windows-stable.s3.amazonaws.com/' - default['dd-agent-5']['agent_install_options'] = nil - default['dd-agent-5']['config_dir'] = "#{ENV['ProgramData']}/Datadog" - default['dd-agent-5']['agent_name'] = 'DatadogAgent' - default['dd-agent-5']['agent6_config_dir'] = "#{ENV['ProgramData']}/Datadog" -else - default['dd-agent-5']['config_dir'] = '/etc/dd-agent' - default['dd-agent-5']['working_dir'] = '/tmp/install-script/' - default['dd-agent-5']['install_script_url'] = 'https://raw.githubusercontent.com/DataDog/dd-agent/master/packaging/datadog-agent/source/install_agent.sh' -end - -# Enable the agent to start at boot -default['dd-agent-5']['agent_enable'] = true -default['dd-agent-5']['agent_start'] = true -default['dd-agent-5']['enable_trace_agent'] = true -default['dd-agent-5']['enable_process_agent'] = true - diff --git a/test/kitchen/site-cookbooks/dd-agent-5/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-5/metadata.rb deleted file mode 100644 index 0bb3e5e3876bd..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/metadata.rb +++ /dev/null @@ -1,9 +0,0 @@ -name "dd-agent-5" -maintainer "Datadog" -description "Installs the Datadog Agent5" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.2.0" - -depends 'apt', '>= 2.1.0' -depends 'datadog' -depends 'yum', '< 7.0.0' diff --git a/test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_linux.rb b/test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_linux.rb deleted file mode 100644 index 2c06921195c42..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_linux.rb +++ /dev/null @@ -1,68 +0,0 @@ -# -# Cookbook Name:: dd-agent-install-script -# Recipe:: default -# -# Copyright (C) 2013-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -wrk_dir = node['dd-agent-5']['working_dir'] -is_windows = node['platform_family'] == 'windows' - -directory wrk_dir do - recursive true -end - -remote_file "#{wrk_dir}/install-script" do - source node['dd-agent-5']['install_script_url'] -end - -# apt-get update fails a LOT on our droplets, so ignore these failures -# TODO: assess whether we should do the same thing in the install script itself -execute 'ignore "apt-get update" failure' do - cwd wrk_dir - command "sed -i 's/apt-get update$/apt-get update || true/' install-script" -end - - -execute 'run agent install script' do - cwd wrk_dir - command <<-EOF - sed -i '1aDD_API_KEY=#{node['dd-agent-5']['api_key']}' install-script - bash install-script - sleep 10 - EOF - live_stream true -end - -agent_config_file = ::File.join(node['dd-agent-5']['config_dir'], 'datadog.conf') -template agent_config_file do - def template_vars - dd_url = 'https://app.datadoghq.com' - - api_keys = [node['dd-agent-5']['api_key']] - dd_urls = [dd_url] - { - :api_keys => api_keys, - :dd_urls => dd_urls - } - end - if is_windows - owner 'Administrators' - rights :full_control, 'Administrators' - inherits false - else - owner 'dd-agent' - group 'root' - mode '640' - end - variables( - if respond_to?(:lazy) - lazy { template_vars } - else - template_vars - end - ) - sensitive true if Chef::Resource.instance_methods(false).include?(:sensitive) -end \ No newline at end of file diff --git a/test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_windows_base.rb b/test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_windows_base.rb deleted file mode 100644 index 848780762329a..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/recipes/_install_windows_base.rb +++ /dev/null @@ -1,73 +0,0 @@ -# -# Cookbook Name:: dd-agent-5 -# Recipe:: _install_windows_base -# -# Copyright (C) 2019-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -package_retries = node['dd-agent-5']['agent_package_retries'] -package_retry_delay = node['dd-agent-5']['agent_package_retry_delay'] -dd_agent_version = node['dd-agent-5']['windows_version'] -dd_agent_filename = node['dd-agent-5']['windows_agent_filename'] - -dd_agent_installer_basename = dd_agent_filename - -temp_file_basename = ::File.join(Chef::Config[:file_cache_path], 'ddagent-cli').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) - -dd_agent_installer = "#{dd_agent_installer_basename}.msi" -temp_file = "#{temp_file_basename}.msi" -installer_type = :msi -# Agent >= 5.12.0 installs per-machine by default, but specifying ALLUSERS=1 shouldn't affect the install -agent_install_options = node['dd-agent-5']['agent_install_options'] -install_options = "/norestart ALLUSERS=1 #{agent_install_options}" -use_windows_package_resource = true - -agent_config_file = ::File.join(node['dd-agent-5']['config_dir'], 'datadog.conf') - -# Set the Agent service enable or disable -agent_enable = node['dd-agent-5']['agent_enable'] ? :enable : :disable -# Set the correct Agent startup action -agent_start = node['dd-agent-5']['agent_start'] ? :start : :stop - -package 'Datadog Agent removal' do - package_name 'Datadog Agent' - action :nothing -end - -source_url = node['dd-agent-5']['windows_agent_url'] -if !source_url.end_with? '/' - source_url += '/' -end -source_url += dd_agent_installer - - # Download the installer to a temp location -remote_file temp_file do - source source_url - checksum node['dd-agent-5']['windows_agent_checksum'] if node['dd-agent-5']['windows_agent_checksum'] - retries package_retries unless package_retries.nil? - retry_delay package_retry_delay unless package_retry_delay.nil? - # As of v1.37, the windows cookbook doesn't upgrade the package if a newer version is downloaded - # As a workaround uninstall the package first if a new MSI is downloaded - notifies :remove, 'package[Datadog Agent removal]', :immediately -end - -execute "install-agent" do - command "start /wait msiexec /log install.log /q /i #{temp_file} #{install_options}" - status_out = `sc interrogate datadogagent 2>&1` - puts status_out - action :run -end - -service 'datadog-agent' do - service_name node['dd-agent-5']['agent_name'] - action [agent_enable, agent_start] - supports :restart => true, :start => true, :stop => true - subscribes :restart, "template[#{agent_config_file}]", :delayed unless node['dd-agent-5']['agent_start'] == false - restart_command "powershell -Command \"restart-service -Force -Name datadogagent\"" - # HACK: the restart can fail when we hit systemd's restart limits (by default, 5 starts every 10 seconds) - # To workaround this, retry once after 5 seconds, and a second time after 10 seconds - retries 2 - retry_delay 5 - end diff --git a/test/kitchen/site-cookbooks/dd-agent-5/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-5/recipes/default.rb deleted file mode 100644 index dd46c2774cbcf..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/recipes/default.rb +++ /dev/null @@ -1,15 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: default -# -# Copyright (C) 2013-present Datadog -# -# All rights reserved - Do Not Redistribute -# -require 'uri' - -if node['platform_family'] == 'windows' - include_recipe 'dd-agent-5::_install_windows_base' -else - include_recipe 'dd-agent-5::_install_linux' -end diff --git a/test/kitchen/site-cookbooks/dd-agent-5/templates/datadog.conf.erb b/test/kitchen/site-cookbooks/dd-agent-5/templates/datadog.conf.erb deleted file mode 100644 index 21104977bbaa3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-5/templates/datadog.conf.erb +++ /dev/null @@ -1,3 +0,0 @@ -[Main] -dd_url: <%= @dd_urls.join(',') %> -api_key: <%= @api_keys.join(',') %> diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/.gitignore b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Berksfile b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Gemfile b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/README.md b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/README.md deleted file mode 100644 index 553e0565c0df3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# dd-agent-disable-system-repos cookbook - -Cookbook that disables all system package repositories (if applicable) diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/chefignore b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/metadata.rb deleted file mode 100644 index 2a0578c2e67e1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/metadata.rb +++ /dev/null @@ -1,5 +0,0 @@ -name "dd-agent-disable-system-repos" -maintainer "Datadog" -description "Cookbook that disables all system package repositories (if applicable)" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.0.1" diff --git a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/recipes/default.rb deleted file mode 100644 index 17ed9c2fb9e6c..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-disable-system-repos/recipes/default.rb +++ /dev/null @@ -1,20 +0,0 @@ -# -# Cookbook Name:: dd-agent-disable-system-repos -# Recipe:: default -# -# Copyright (C) 2021-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -if ['redhat', 'centos', 'fedora'].include?(node[:platform]) - execute 'disable all yum repositories' do - command 'yum-config-manager --disable "*"' - end -elsif ['suse', 'opensuseleap'].include?(node[:platform]) - execute 'disable all zypper repositories' do - # Zypper appears to be running when the VM starts, so we - # wait for up to 2 minutes for it to release its lock - command 'ZYPP_LOCK_TIMEOUT=120 zypper mr -da' - end -end diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/.gitignore b/test/kitchen/site-cookbooks/dd-agent-import-conf/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/Berksfile b/test/kitchen/site-cookbooks/dd-agent-import-conf/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/Gemfile b/test/kitchen/site-cookbooks/dd-agent-import-conf/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/README.md b/test/kitchen/site-cookbooks/dd-agent-import-conf/README.md deleted file mode 100644 index b12eb7c3a539b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# dd-agent-import-conf cookbook - -Only used while upgrading an Agent 5 to an Agent 6. -This way, we can have a generic cookbook to setup an Agent 6. diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/attributes/default.rb b/test/kitchen/site-cookbooks/dd-agent-import-conf/attributes/default.rb deleted file mode 100644 index 163b2c7f0c35c..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/attributes/default.rb +++ /dev/null @@ -1,13 +0,0 @@ -default['dd-agent-import-conf']['api_key'] = nil - -if node['platform_family'] == 'windows' - default['dd-agent-import-conf']['config_dir'] = "#{ENV['ProgramData']}/Datadog" - default['dd-agent-import-conf']['agent_name'] = 'DatadogAgent' - default['dd-agent-import-conf']['agent6_config_dir'] = "#{ENV['ProgramData']}/Datadog" -else - default['dd-agent-import-conf']['agent6_config_dir'] = '/etc/datadog-agent' - default['dd-agent-import-conf']['config_dir'] = '/etc/dd-agent' - default['dd-agent-import-conf']['agent_name'] = 'datadog-agent' -end - -default['dd-agent-import-conf']['agent_start'] = true diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/chefignore b/test/kitchen/site-cookbooks/dd-agent-import-conf/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-import-conf/metadata.rb deleted file mode 100644 index e7b17a74e19c1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/metadata.rb +++ /dev/null @@ -1,9 +0,0 @@ -name "dd-agent-import-conf" -maintainer "Datadog" -description "Import configuration from Agent 5 to Agent 6" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.1.0" - -depends 'apt', '>= 2.1.0' -depends 'datadog' -depends 'yum', '< 7.0.0' diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/_datadog-agent-6.rb b/test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/_datadog-agent-6.rb deleted file mode 100644 index 21c43cba9548c..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/_datadog-agent-6.rb +++ /dev/null @@ -1,75 +0,0 @@ -# -# Cookbook Name:: dd-agent-import-conf -# Recipe:: datadog-agent-6 -# -# Copyright 2011-present, Datadog -# -# 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. -# - -# Fail here at converge time if no api_key is set -ruby_block 'datadog-api-key-unset' do - block do - raise "Set ['datadog']['api_key'] as an attribute or on the node's run_state to configure this node's Datadog Agent." - end - only_if { node['dd-agent-import-conf']['api_key'].nil? } -end - -is_windows = node['platform_family'] == 'windows' - -# -# Configures a basic agent -# To add integration-specific configurations, add 'datadog::config_name' to -# the node's run_list and set the relevant attributes -# -agent6_config_file = ::File.join(node['dd-agent-import-conf']['agent6_config_dir'], 'datadog.yaml') - -# Common configuration -service_provider = nil -if (((node['platform'] == 'amazon' || node['platform_family'] == 'amazon') && node['platform_version'].to_i != 2) || - (node['platform'] == 'ubuntu' && node['platform_version'].to_f < 15.04) || # chef <11.14 doesn't use the correct service provider - (node['platform'] != 'amazon' && node['platform_family'] == 'rhel' && node['platform_version'].to_i < 7)) - # use Upstart provider explicitly for Agent 6 on Amazon Linux < 2.0 and RHEL < 7 - service_provider = Chef::Provider::Service::Upstart -end - -service 'datadog-agent-6' do - service_name node['dd-agent-import-conf']['agent_name'] - action :nothing - provider service_provider unless service_provider.nil? - if is_windows - supports :restart => true, :start => true, :stop => true - restart_command "powershell restart-service #{node['dd-agent-import-conf']['agent_name']} -Force" - stop_command "powershell stop-service #{node['dd-agent-import-conf']['agent_name']} -Force" - else - supports :restart => true, :status => true, :start => true, :stop => true - end - subscribes :restart, "template[#{agent6_config_file}]", :delayed unless node['dd-agent-import-conf']['agent_start'] == false - # HACK: the restart can fail when we hit systemd's restart limits (by default, 5 starts every 10 seconds) - # To workaround this, retry once after 5 seconds, and a second time after 10 seconds - retries 2 - retry_delay 5 -end - -# TODO: Add this when we update our datadog Berksfile dependency to 2.20 or 3.0 -# only load system-probe recipe if an agent6 installation comes with it -# ruby_block 'include system-probe' do -# block do -# if ::File.exist?('/opt/datadog-agent/embedded/bin/system-probe') && !is_windows -# run_context.include_recipe 'datadog::system-probe' -# end -# end -# end - -# Install integration packages -#include_recipe 'datadog::integrations' unless is_windows diff --git a/test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/default.rb deleted file mode 100644 index a34b67cbb46c1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-import-conf/recipes/default.rb +++ /dev/null @@ -1,26 +0,0 @@ -# Cookbook Name:: dd-agent-imprt-conf -# Recipe:: default -# -# Copyright (C) 2013-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -# We only do the import, meaning that the Agent 5 and -# the Agent 6 has already been setup. -# We just have to run the command. - - -if node['platform_family'] != 'windows' - include_recipe 'dd-agent-import-conf::_datadog-agent-6' - - execute "import-command" do - command "sudo -u dd-agent -- /opt/datadog-agent/bin/agent/agent import /etc/dd-agent/ /etc/datadog-agent/" - action :run - notifies :restart, 'service[datadog-agent-6]' - end -end - -if node['platform_family'] == 'windows' - # TODO(remy): do we want to test the import on Windows? -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/.gitignore b/test/kitchen/site-cookbooks/dd-agent-install/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-install/Berksfile b/test/kitchen/site-cookbooks/dd-agent-install/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-install/Gemfile b/test/kitchen/site-cookbooks/dd-agent-install/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-install/README.md b/test/kitchen/site-cookbooks/dd-agent-install/README.md deleted file mode 100644 index 21c8535d9b566..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# dd-agent-install cookbook - - -This installs the Datadog Agent. -The Windows installation on the Chef Cookbook is broken for Agent 6. -This will be a temporary solution. diff --git a/test/kitchen/site-cookbooks/dd-agent-install/attributes/default.rb b/test/kitchen/site-cookbooks/dd-agent-install/attributes/default.rb deleted file mode 100644 index 82463b244b5c5..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/attributes/default.rb +++ /dev/null @@ -1,83 +0,0 @@ -# -# Linux options (Linux uses the official datadog cookbook) -# - -default['datadog']['agent_start'] = true -default['datadog']['agent_enable'] = true -default['datadog']['agent_version'] = nil - -# All other options use the defaults set in the official cookbook, -# or the options set in the kitchen job (eg. aptrepo, yumrepo, etc.) - -# -# Windows options (Windows uses the custom dd-agent-install cookbook) -# - -# The dd-agent-install recipe is a copy of the official install recipe, -# the only difference being the command used to install the Agent. -# Here, we add a start /wait to the command, otherwise chef doesn't wait -# for the Agent to be installed before ending its run. -# This behavior could make kitchen tests fail, because we would start testing -# the Agent before it is ready. - -default['dd-agent-install']['api_key'] = nil -default['dd-agent-install']['agent_major_version'] = nil -default['dd-agent-install']['windows_version'] = nil # => install the latest available version -default['dd-agent-install']['windows_agent_checksum'] = nil -default['dd-agent-install']['windows_agent_url'] = 'https://ddagent-windows-stable.s3.amazonaws.com/' - -default['dd-agent-install']['agent_package_retries'] = nil -default['dd-agent-install']['agent_package_retry_delay'] = nil -default['dd-agent-install']['config_dir'] = "#{ENV['ProgramData']}/Datadog" -default['dd-agent-install']['agent_name'] = 'DatadogAgent' -default['dd-agent-install']['agent6_config_dir'] = "#{ENV['ProgramData']}/Datadog" - -# Enable the agent to start at boot -default['dd-agent-install']['agent_enable'] = true - -# Start agent or not -default['dd-agent-install']['agent_start'] = true -default['dd-agent-install']['enable_trace_agent'] = true -default['dd-agent-install']['enable_process_agent'] = true - -# Set the defaults from the chef recipe -default['dd-agent-install']['extra_endpoints']['prod']['enabled'] = nil -default['dd-agent-install']['extra_endpoints']['prod']['api_key'] = nil -default['dd-agent-install']['extra_endpoints']['prod']['application_key'] = nil -default['dd-agent-install']['extra_endpoints']['prod']['url'] = nil # op -default['dd-agent-install']['extra_config']['forwarder_timeout'] = nil -default['dd-agent-install']['web_proxy']['host'] = nil -default['dd-agent-install']['web_proxy']['port'] = nil -default['dd-agent-install']['web_proxy']['user'] = nil -default['dd-agent-install']['web_proxy']['password'] = nil -default['dd-agent-install']['web_proxy']['skip_ssl_validation'] = nil # accepted values 'yes' or 'no' -default['dd-agent-install']['dogstreams'] = [] -default['dd-agent-install']['custom_emitters'] = [] -default['dd-agent-install']['syslog']['active'] = false -default['dd-agent-install']['syslog']['udp'] = false -default['dd-agent-install']['syslog']['host'] = nil -default['dd-agent-install']['syslog']['port'] = nil -default['dd-agent-install']['log_file_directory'] = nil -default['dd-agent-install']['process_agent']['blacklist'] = nil -default['dd-agent-install']['process_agent']['container_blacklist'] = nil -default['dd-agent-install']['process_agent']['container_whitelist'] = nil -default['dd-agent-install']['process_agent']['log_file'] = nil -default['dd-agent-install']['process_agent']['process_interval'] = nil -default['dd-agent-install']['process_agent']['rtprocess_interval'] = nil -default['dd-agent-install']['process_agent']['container_interval'] = nil -default['dd-agent-install']['process_agent']['rtcontainer_interval'] = nil -default['dd-agent-install']['tags'] = '' -default['dd-agent-install']['histogram_aggregates'] = 'max, median, avg, count' -default['dd-agent-install']['histogram_percentiles'] = '0.95' -default['dd-agent-install']['dogstatsd'] = true -default['dd-agent-install']['dogstatsd_port'] = 8125 -default['dd-agent-install']['dogstatsd_interval'] = 10 -default['dd-agent-install']['dogstatsd_normalize'] = 'yes' -default['dd-agent-install']['dogstatsd_target'] = 'http://localhost:17123' -default['dd-agent-install']['statsd_forward_host'] = nil -default['dd-agent-install']['statsd_forward_port'] = 8125 -default['dd-agent-install']['statsd_metric_namespace'] = nil -default['dd-agent-install']['log_level'] = 'INFO' -default['dd-agent-install']['enable_logs_agent'] = false - -default['dd-agent-install']['agent_install_options'] = '' diff --git a/test/kitchen/site-cookbooks/dd-agent-install/chefignore b/test/kitchen/site-cookbooks/dd-agent-install/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-install/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-install/metadata.rb deleted file mode 100644 index 8430034d05a5d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/metadata.rb +++ /dev/null @@ -1,9 +0,0 @@ -name "dd-agent-install" -maintainer "Datadog" -description "Installs the Datadog Agent" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.2.0" - -depends 'apt', '>= 2.1.0' -depends 'datadog' -depends 'yum', '< 7.0.0' diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_agent6_windows_config.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_agent6_windows_config.rb deleted file mode 100644 index 6965c4fa2ddcc..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_agent6_windows_config.rb +++ /dev/null @@ -1,120 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: _agent6_windows_config -# -# Copyright 2011-present, Datadog -# -# 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. -# - -is_windows = node['platform_family'] == 'windows' - -# FIXME: with the agent6, we still need the agent5 conf file in duplicate -# in /etc/datadog-agent/trace-agent.conf for the trace agent. -# Remove them when these agents can read from datadog.yaml. -trace_agent_config_file = ::File.join(node['dd-agent-install']['agent6_config_dir'], 'trace-agent.conf') -config_dir = node['dd-agent-install']['agent_major_version'].to_i > 5 ? node['dd-agent-install']['agent6_config_dir'] : node['dd-agent-install']['config_dir'] - - -template trace_agent_config_file do - def conf_template_vars - { - :api_keys => [node['dd-agent-install']['api_key']], - :dd_urls => [node['dd-agent-install']['url']] - } - end - variables( - if respond_to?(:lazy) - lazy { conf_template_vars } - else - conf_template_vars - end - ) - if is_windows - # the windows installer takes care of setting the correct permissions - else - owner 'dd-agent' - group 'dd-agent' - mode '640' - end - source 'datadog.conf.erb' - sensitive true if Chef::Resource.instance_methods(false).include?(:sensitive) - notifies :restart, 'service[datadog-agent]', :delayed unless node['dd-agent-install']['agent_start'] == false -end - - -# With agent6, the process-agent and trace-agent are enabled as long-running checks -# TODO: on agent6, we can't really make the trace-agent _not_ run yet -template ::File.join(config_dir, 'conf.d', "apm.yaml") do - if node['platform_family'] == 'windows' - owner 'Administrators' - rights :full_control, 'Administrators' - inherits false - else - owner 'dd-agent' - mode '600' - end - - source 'integration.yaml.erb' - - variables( - instances: [{}] - ) - sensitive true if Chef::Resource.instance_methods(false).include?(:sensitive) - notifies :restart, 'service[datadog-agent]', :delayed if node['dd-agent-install']['agent_start'] -end - -agent6_config_file = ::File.join(node['dd-agent-install']['agent6_config_dir'], 'datadog.yaml') -template agent6_config_file do # rubocop:disable Metrics/BlockLength - def template_vars # rubocop:disable Metrics/AbcSize, Metrics/MethodLength - additional_endpoints = {} - node['dd-agent-install']['extra_endpoints'].each do |_, endpoint| - next unless endpoint['enabled'] - url = if endpoint['url'] - endpoint['url'] - else - node['dd-agent-install']['url'] - end - if additional_endpoints.key?(url) - additional_endpoints[url] << endpoint['api_key'] - else - additional_endpoints[url] = [endpoint['api_key']] - end - end - extra_config = {} - node['dd-agent-install']['extra_config'].each do |k, v| - next if v.nil? - extra_config[k] = v - end - { - extra_config: extra_config, - api_key: Chef::Datadog.api_key(node), - additional_endpoints: additional_endpoints - } - end - - if node['platform_family'] == 'windows' - else - owner 'dd-agent' - mode '600' - end - variables( - if respond_to?(:lazy) - lazy { template_vars } - else - template_vars - end - ) - sensitive true if Chef::Resource.instance_methods(false).include?(:sensitive) - notifies :restart, 'service[datadog-agent]', :delayed unless node['dd-agent-install']['agent_start'] == false -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_damage_windows_install.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_damage_windows_install.rb deleted file mode 100644 index ebdcbf3a84741..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_damage_windows_install.rb +++ /dev/null @@ -1,11 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: _damage_windows_install -# -# Copyright (C) 2021-present Datadog - -powershell_script "damage-agent" do - code <<-EOF - Remove-Item -Recurse -Force 'C:\\Program Files\\Datadog\\Datadog Agent\\bin\\agent.exe' - EOF -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows.rb deleted file mode 100644 index f229e7aabde29..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows.rb +++ /dev/null @@ -1,47 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: _install_windows -# -# Copyright (C) 2019-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -if node['dd-agent-install']['enable_testsigning'] - reboot 'enable_testsigning' do - action :nothing - reason 'Cannot continue Chef run without a reboot.' - end - - execute 'enable unsigned drivers' do - command "bcdedit.exe /set testsigning on" - notifies :reboot_now, 'reboot[enable_testsigning]', :immediately - not_if 'bcdedit.exe | findstr "testsigning" | findstr "Yes"' - end -end - - -include_recipe 'dd-agent-install::_install_windows_base' - -agent_config_file = ::File.join(node['dd-agent-install']['config_dir'], 'datadog.conf') - -# Set the Agent service enable or disable -agent_enable = node['dd-agent-install']['agent_enable'] ? :enable : :disable -# Set the correct Agent startup action -agent_start = node['dd-agent-install']['agent_start'] ? :start : :stop - - -include_recipe 'dd-agent-install::_agent6_windows_config' - -# Common configuration -service 'datadog-agent' do - service_name node['dd-agent-install']['agent_name'] - action [agent_enable, agent_start] - supports :restart => true, :start => true, :stop => true - subscribes :restart, "template[#{agent_config_file}]", :delayed unless node['dd-agent-install']['agent_start'] == false - restart_command "powershell -Command \"restart-service -Force -Name datadogagent\"" - # HACK: the restart can fail when we hit systemd's restart limits (by default, 5 starts every 10 seconds) - # To workaround this, retry once after 5 seconds, and a second time after 10 seconds - retries 2 - retry_delay 5 -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows_base.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows_base.rb deleted file mode 100644 index 274d2c1fd7b3c..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_install_windows_base.rb +++ /dev/null @@ -1,101 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: _install_windows_base -# -# Copyright (C) 2019-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -package_retries = node['dd-agent-install']['agent_package_retries'] -package_retry_delay = node['dd-agent-install']['agent_package_retry_delay'] -dd_agent_version = node['datadog']['agent_version'] || node['dd-agent-install']['windows_version'] -dd_agent_filename = node['dd-agent-install']['windows_agent_filename'] - -source_url = node['dd-agent-install']['windows_agent_url'] -if !source_url.end_with? '/' - source_url += '/' -end - -if dd_agent_filename - dd_agent_installer_basename = dd_agent_filename -else - # HACK: the packages have different names in the stable repos and the testing repos - # Check the source URL to know if we need to use the "stable" filename, or the "testing" filename - if source_url == "https://ddagent-windows-stable.s3.amazonaws.com/" # Use a version of the Agent from the official repos - dd_agent_installer_basename = "ddagent-cli-#{dd_agent_version}" - else # Use a version of the Agent from the testing repos - dd_agent_installer_basename = "datadog-agent-#{dd_agent_version}-1-x86_64" - end -end - -temp_file_basename = ::File.join(Chef::Config[:file_cache_path], 'ddagent-cli').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) - -dd_agent_installer = "#{dd_agent_installer_basename}.msi" -source_url += dd_agent_installer -temp_file = "#{temp_file_basename}.msi" - -log_file_name = ::File.join(Chef::Config[:file_cache_path], 'install.log').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) -# Delete the log file in case it exists (in case of multiple converge runs for example) -file log_file_name do - action :delete -end - -# Agent >= 5.12.0 installs per-machine by default, but specifying ALLUSERS=1 shouldn't affect the install -agent_install_options = node['dd-agent-install']['agent_install_options'] -install_options = "/log #{log_file_name} /norestart ALLUSERS=1 #{agent_install_options}" - -# This fake package resource serves only to trigger the Datadog Agent uninstall. -# If the checksum is not provided, assume we need to reinstall the Agent. -package 'Datadog Agent removal' do - only_if { node['dd-agent-install']['windows_agent_checksum'].nil? } - package_name 'Datadog Agent' - action :remove -end - -# When WIXFAILWHENDEFERRED is present, we expect the installer to fail. -expected_msi_result_code = [0, 3010] -expected_msi_result_code.append(1603) if agent_install_options.include?('WIXFAILWHENDEFERRED') - -windows_package 'Datadog Agent' do - source source_url - checksum node['dd-agent-install']['windows_agent_checksum'] if node['dd-agent-install']['windows_agent_checksum'] - retries package_retries unless package_retries.nil? - retry_delay package_retry_delay unless package_retry_delay.nil? - options install_options - action :install - remote_file_attributes ({ - :path => temp_file - }) - returns expected_msi_result_code - # It's ok to ignore failure, the kitchen test will fail anyway - # but we need to print the install logs. - ignore_failure true -end - -# This runs during the converge phase and will return a non-zero exit -# code if the service doesn't run. While it can be useful to quickly -# test locally if the Datadog Agent service is running after a converge phase -# it defeats the purpose of the kitchen tests, so keep it commented unless debugging the installer. -#execute "check-agent-service" do -# command "sc interrogate datadogagent 2>&1" -# action :run -#end - -ruby_block "Print install logs" do - only_if { ::File.exists?(log_file_name) } - block do - # Use warn, because Chef's default "log" is too chatty - # and the kitchen tests default to "warn" - Chef::Log.warn(File.open(log_file_name, "rb:UTF-16LE", &:read).encode('UTF-8')) - end -end - -ruby_block "Check install sucess" do - not_if { agent_install_options.include?('WIXFAILWHENDEFERRED') } - block do - raise "Could not find installation log file, did the installer run ?" if !File.file?(log_file_name) - logfile = File.open(log_file_name, "rb:UTF-16LE", &:read).encode('UTF-8') - raise "The Agent failed to install" if logfile.include? "Product: Datadog Agent -- Installation failed." - end -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_repair_windows_install.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_repair_windows_install.rb deleted file mode 100644 index 6c4f76fbe2dd1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_repair_windows_install.rb +++ /dev/null @@ -1,12 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: _repair_windows_install -# -# Copyright (C) 2021-present Datadog - -powershell_script "repair-agent" do - code <<-EOF - $product_code = (Get-WmiObject Win32_Product | Where-Object -Property Name -eq 'Datadog Agent').IdentifyingNumber - Start-Process msiexec.exe -Wait -ArgumentList '/q','/log','repair.log','/fa',$product_code - EOF -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb deleted file mode 100644 index f45604773bbb1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/_stop_windows_agent.rb +++ /dev/null @@ -1,23 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: _stop_windows_agent -# -# Copyright (C) 2021-present Datadog - -# -# gives the agent 60s to actually get started if it hasn't fully started yet -# -powershell_script 'stop-datadog-agent' do - code <<-EOH - $serviceName = "#{node['dd-agent-install']['agent_name']}" - sc.exe query $serviceName; - for($i= 0; $i -lt 30; $i++) { - $s = (get-service datadogagent).status - if($s -ne "StartPending") { - break; - } - start-sleep -seconds 2 - } - Stop-Service -force $serviceName - EOH -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-install/recipes/default.rb deleted file mode 100644 index 5697c1873426f..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/recipes/default.rb +++ /dev/null @@ -1,15 +0,0 @@ -# -# Cookbook Name:: dd-agent-install -# Recipe:: default -# -# Copyright (C) 2013-present Datadog -# -# All rights reserved - Do Not Redistribute -# -require 'uri' - -if node['platform_family'] == 'windows' && node['dd-agent-install']['agent_major_version'].to_i > 5 - include_recipe 'dd-agent-install::_install_windows' -else - include_recipe 'datadog::dd-agent' -end diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/activemq.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/activemq.yaml.erb deleted file mode 100644 index 6b001e0ea0a23..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/activemq.yaml.erb +++ /dev/null @@ -1,60 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -# List of metrics to be collected by the integration -# You should not have to modify this. -init_config: - conf: - - include: - Type: Queue - attribute: - AverageEnqueueTime: - alias: activemq.queue.avg_enqueue_time - metric_type: gauge - ConsumerCount: - alias: activemq.queue.consumer_count - metric_type: gauge - DequeueCount: - alias: activemq.queue.dequeue_count - metric_type: counter - DispatchCount: - alias: activemq.queue.dispatch_count - metric_type: counter - EnqueueCount: - alias: activemq.queue.enqueue_count - metric_type: counter - ExpiredCount: - alias: activemq.queue.expired_count - metric_type: counter - InFlightCount: - alias: activemq.queue.in_flight_count - metric_type: counter - MaxEnqueueTime: - alias: activemq.queue.max_enqueue_time - metric_type: gauge - MemoryPercentUsage: - alias: activemq.queue.memory_pct - metric_type: gauge - MinEnqueueTime: - alias: activemq.queue.min_enqueue_time - metric_type: gauge - ProducerCount: - alias: activemq.queue.producer_count - metric_type: gauge - QueueSize: - alias: activemq.queue.size - metric_type: gauge - - - include: - Type: Broker - attribute: - MemoryPercentUsage: - alias: activemq.broker.memory_pct - metric_type: gauge - StorePercentUsage: - alias: activemq.broker.store_pct - metric_type: gauge - TempPercentUsage: - alias: activemq.broker.temp_pct - metric_type: gauge diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/apache.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/apache.yaml.erb deleted file mode 100644 index 6af28d1a3358d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/apache.yaml.erb +++ /dev/null @@ -1,19 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - apache_status_url: <%= i['status_url'] %> - <% if i['apache_user'] -%>apache_user: <%= i['apache_user'] %><% end -%> - <% if i['apache_password'] -%>apache_password: <%= i['apache_password'] %><% end -%> - <% if i['disable_ssl_validation'] -%>disable_ssl_validation: <%= i['disable_ssl_validation'] %><% end -%> - - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/cacti.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/cacti.yaml.erb deleted file mode 100644 index 1a73bb3977395..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/cacti.yaml.erb +++ /dev/null @@ -1,22 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - mysql_host: <%= i['mysql_host'] %> - mysql_user: <%= i['mysql_user'] %> - mysql_password: <%= i['mysql_password'] %> - rrd_path: <%= i['rrd_path'] %> - <% if i['rrd_whitelist'] -%> - rrd_whitelist: <%= i['rrd_whitelist'] %> - <% end -%> - - <% if i.key?('field_names') -%> - field_names: - <% i['field_names'].each do |fn| -%> - - <%= fn %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/cassandra.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/cassandra.yaml.erb deleted file mode 100644 index daf913192f645..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/cassandra.yaml.erb +++ /dev/null @@ -1,152 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - host: <%= i['server'] || i['host'] %> - <% (i.keys - ['host']).each do |key| -%> - <%= key %>: <%= i[key] %> - <% end -%> - cassandra_aliasing: true -<% end -%> - -<% if @version == 2 %> -init_config: - # List of metrics to be collected by the integration - # Read http://docs.datadoghq.com/integrations/java/ to learn how to customize it - conf: - - include: - domain: org.apache.cassandra.metrics - type: ClientRequest - scope: - - Read - - Write - name: - - Latency - - Timeouts - - Unavailables - attribute: - - Count - - OneMinuteRate - - include: - domain: org.apache.cassandra.metrics - type: ClientRequest - scope: - - Read - - Write - name: - - TotalLatency - - include: - domain: org.apache.cassandra.metrics - type: Storage - name: - - Load - - Exceptions - - include: - domain: org.apache.cassandra.metrics - type: ColumnFamily - bean_regex: - - .*keyspace=.* - name: - - TotalDiskSpaceUsed - - BloomFilterDiskSpaceUsed - - BloomFilterFalsePositives - - BloomFilterFalseRatio - - CompressionRatio - - LiveDiskSpaceUsed - - LiveSSTableCount - - MaxRowSize - - MeanRowSize - - MemtableColumnsCount - - MemtableLiveDataSize - - MemtableSwitchCount - - MinRowSize - exclude: - keyspace: - - OpsCenter - - system - - system_auth - - system_distributed - - system_schema - - system_traces - - include: - domain: org.apache.cassandra.metrics - type: Cache - name: - - Capacity - - Size - attribute: - - Value - - include: - domain: org.apache.cassandra.metrics - type: Cache - name: - - Hits - - Requests - attribute: - - Count - - include: - domain: org.apache.cassandra.metrics - type: ThreadPools - path: request - name: - - ActiveTasks - - CompletedTasks - - PendingTasks - - CurrentlyBlockedTasks - - include: - domain: org.apache.cassandra.db - attribute: - - UpdateInterval -<% else %> -# List of metrics to be collected. -init_config: - conf: - - include: - domain: org.apache.cassandra.db - attribute: - - BloomFilterDiskSpaceUsed - - BloomFilterFalsePositives - - BloomFilterFalseRatio - - Capacity - - CompletedTasks - - CompressionRatio - - ExceptionCount - - Hits - - KeyCacheRecentHitRate - - LiveDiskSpaceUsed - - LiveSSTableCount - - Load - - MaxRowSize - - MeanRowSize - - MemtableColumnsCount - - MemtableDataSize - - MemtableSwitchCount - - MinRowSize - - PendingTasks - - ReadCount - - RecentHitRate - - RecentRangeLatencyMicros - - RecentReadLatencyMicros - - RecentWriteLatencyMicros - - Requests - - RowCacheRecentHitRate - - Size - - TotalDiskSpaceUsed - - TotalReadLatencyMicros - - TotalWriteLatencyMicros - - UpdateInterval - - WriteCount - exclude: - keyspace: system - - include: - domain: org.apache.cassandra.internal - attribute: - - ActiveCount - - CompletedTasks - - CurrentlyBlockedTasks - - TotalBlockedTasks - - include: - domain: org.apache.cassandra.net - attribute: - - TotalTimeouts -<% end %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/consul.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/consul.yaml.erb deleted file mode 100644 index 345bb8751e1c6..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/consul.yaml.erb +++ /dev/null @@ -1,24 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - url: <%= i['url'] %> - <% unless i['new_leader_checks'].nil? %> - new_leader_checks: <%= i['new_leader_checks'] %> - <% end %> - <% unless i['catalog_checks'].nil? %> - catalog_checks: <%= i['catalog_checks'] %> - <% end %> - <% unless i['service_whitelist'].nil? %> - service_whitelist: <%= i['service_whitelist'] %> - <% end %> - <% if i.key?('tags') && !i['tags'].empty? -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/couch.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/couch.yaml.erb deleted file mode 100644 index d4987a07f9fe1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/couch.yaml.erb +++ /dev/null @@ -1,12 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - server: <%= i['server'] %> - <% (i.keys - ['server']).each do |key| -%> - <%= key %>: <%= i[key] %> - <% end -%> -<% end -%> - -# Nothing to change below -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/couchbase.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/couchbase.yaml.erb deleted file mode 100644 index 4010a711a8d02..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/couchbase.yaml.erb +++ /dev/null @@ -1,9 +0,0 @@ -<%= JSON.parse(({ 'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - server: <%= i['server'] %> - user: <%= @node.fetch('couchbase', {}).fetch('server', {}).fetch('username', i.fetch('username', 'Administrator')) %> - password: <%= @node.fetch('couchbase', {}).fetch('server', {}).fetch('password', i.fetch('password', '')) %> -<% end %> -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.conf.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.conf.erb deleted file mode 100644 index 1117d30b69cd6..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.conf.erb +++ /dev/null @@ -1,240 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -[Main] -dd_url: <%= @dd_urls.join(',') %> -api_key: <%= @api_keys.join(',') %> -check_freq: <%= node['dd-agent-install']['check_freq'] %> -hostname: <%= node['dd-agent-install']['hostname'] %> -use_mount: <%= node['dd-agent-install']['use_mount'] ? "yes" : "no" %> -listen_port: <%= node['dd-agent-install']['agent_port'] %> -bind_host: <%= node['dd-agent-install']['bind_host'] %> -<% if node['dd-agent-install']['autorestart'] -%> -autorestart: <%= node['dd-agent-install']['autorestart'] %> -<% end -%> -<% if node['dd-agent-install']['web_proxy']['skip_ssl_validation'] -%> -skip_ssl_validation: <%= node['dd-agent-install']['web_proxy']['skip_ssl_validation'] %> -<% end -%> -<% if node['dd-agent-install']['developer_mode'] -%> -developer_mode: <%= node['dd-agent-install']['developer_mode'] %> -<% end -%> - -<% if node['dd-agent-install']['tags'].respond_to?(:each_pair) -%> -tags: <%= node['dd-agent-install']['tags'].reject{ |_k,v| v.empty? }.map{ |k,v| "#{k}:#{v}" }.join(',') %> -<% else -%> -tags: <%= node['dd-agent-install']['tags'] %> -<% end -%> -<% if node['dd-agent-install']['create_dd_check_tags'] -%> -create_dd_check_tags: <%= node['dd-agent-install']['create_dd_check_tags'] %> -<% end -%> -<% if node['dd-agent-install']['collect_ec2_tags'] -%> -collect_ec2_tags: <%= node['dd-agent-install']['collect_ec2_tags'] %> -<% end -%> - -<% if node['dd-agent-install']['web_proxy']['host'] -%> -proxy_host: <%= node['dd-agent-install']['web_proxy']['host'] %> -proxy_port: <%= node['dd-agent-install']['web_proxy']['port'] %> -proxy_user: <%= node['dd-agent-install']['web_proxy']['user'] %> -proxy_password: <%= node['dd-agent-install']['web_proxy']['password'] %> -<% end -%> - -<% if node['dd-agent-install']['non_local_traffic'] == true %> -non_local_traffic: true -<% end -%> - -<% if !node['dd-agent-install']['dogstreams'].empty? -%> -dogstreams: <%= node['dd-agent-install']['dogstreams'].join(', ') %> -<% end -%> - -<% if !node['dd-agent-install']['custom_emitters'].empty? -%> -custom_emitters: <%= node['dd-agent-install']['custom_emitters'].join(', ') %> -<% end -%> - -<% if node['dd-agent-install']['agent_checks_interval'] -%> -agent_checks_interval: <%= node['dd-agent-install']['agent_checks_interval'] %> -<% end -%> - -<% if node['dd-agent-install']['graphite'] -%> -graphite_listen_port: <%= node['dd-agent-install']['graphite_port'] %> -<% end -%> - -## Histogram settings -histogram_aggregates: <%= node['dd-agent-install']['histogram_aggregates'] %> -histogram_percentiles: <%= node['dd-agent-install']['histogram_percentiles'] %> - -<% if node['dd-agent-install']['service_discovery_backend'] -%> -# ========================================================================== # -# Service Discovery # -# See https://docs.datadoghq.com/guides/servicediscovery/ for details # -# ========================================================================== # - -# Service discovery allows the agent to look for running services -# and load a configuration object for the one it recognizes. -# This feature is disabled by default. -# Uncomment this line to enable it (works for docker containers only for now). -service_discovery_backend: <%= node['dd-agent-install']['service_discovery_backend'] %> - -# Define which key/value store must be used to look for configuration templates. -# Default is etcd. Consul is also supported. -sd_config_backend: <%= node['dd-agent-install']['sd_config_backend'] %> - -# Settings for connecting to the service discovery backend. -sd_backend_host: <%= node['dd-agent-install']['sd_backend_host'] %> -sd_backend_port: <%= node['dd-agent-install']['sd_backend_port'] %> - -# By default, the agent will look for the configuration templates under the -# `/datadog/check_configs` key in the back-end. If you wish otherwise, uncomment this option -# and modify its value. -sd_template_dir: <%= node['dd-agent-install']['sd_template_dir'] %> -<% end -%> - -<% if node['dd-agent-install']['dogstatsd'] -%> -# ========================================================================== # -# DogStatsd configuration # -# ========================================================================== # - -# DogStatsd is a small server that aggregates your custom app metrics. For -# usage information, check out http://docs.datadoghq.com - -# Make sure your client is sending to the same port. -dogstatsd_port: <%= node['dd-agent-install']['dogstatsd_port'] %> - -## The dogstatsd flush period. -dogstatsd_interval: <%= node['dd-agent-install']['dogstatsd_interval'] %> - -## The target location to send the data -dogstatsd_target: <%= node['dd-agent-install']['dogstatsd_target'] %> - -## If 'yes', counters and rates will be normalized to 1 second (that is divided -## by the dogstatsd_interval) before being sent to the server. Defaults to 'yes' -dogstatsd_normalize: <%= node['dd-agent-install']['dogstatsd_normalize'] %> -<% if node['dd-agent-install']['statsd_forward_host'] -%> -statsd_forward_host: <%= node['dd-agent-install']['statsd_forward_host'] %> -statsd_forward_port: <%= node['dd-agent-install']['statsd_forward_port'] %> -<% end -%> - -<% if node['dd-agent-install']['statsd_metric_namespace'] -%> -statsd_metric_namespace: <%= node['dd-agent-install']['statsd_metric_namespace'] %> -<% end -%> -<% else -%> -use_dogstatsd: no -<% end -%> - -# ========================================================================== # -# Logging -# ========================================================================== # - -log_level: <%= node['dd-agent-install']['log_level'] %> - -<% if node['dd-agent-install']['log_file_directory'] -%> -collector_log_file: <%= node['dd-agent-install']['log_file_directory'] %>/collector.log -forwarder_log_file: <%= node['dd-agent-install']['log_file_directory'] %>/forwarder.log -dogstatsd_log_file: <%= node['dd-agent-install']['log_file_directory'] %>/dogstatsd.log -jmxfetch_log_file: <%= node['dd-agent-install']['log_file_directory'] %>/jmxfetch.log -<% unless node['platform_family'] == 'windows' -%> -go-metro_log_file: <%= node['dd-agent-install']['log_file_directory'] %>/go-metro.log -<% end -%> -<% end -%> - -# if syslog is enabled but a host and port are not set, a local domain socket -# connection will be attempted -# -log_to_syslog: <%= node['dd-agent-install']['syslog']['active'] ? 'yes' : 'no' %> -<% if node['dd-agent-install']['syslog']['udp'] -%> -syslog_host: <%= node['dd-agent-install']['syslog']['host'] %> -syslog_port: <%= node['dd-agent-install']['syslog']['port'] %> - -<% end -%> -# ========================================================================== # -# Legacy Integrations -# ========================================================================== # - -# For integrations which do not yet use the yaml configurations -<% -if node['dd-agent-install']['legacy_integrations'] - node['dd-agent-install']['legacy_integrations'].each do |int_name, int_hash| - if int_hash["enabled"] and int_hash.has_key? "config" - description = int_name - description += " - #{int_hash["description"]}" if int_hash["description"] - description.gsub!(/^/, '# ') --%> -<%= description %> -<% - int_hash['config'].each do |k,v| --%> -<%= k %>: <%= v %> -<% - end - end - end -end --%> - -<% if node['dd-agent-install']['enable_process_agent'].is_a?(TrueClass) || node['dd-agent-install']['enable_process_agent'].is_a?(FalseClass) -%> -process_agent_enabled: <%= node['dd-agent-install']['enable_process_agent'] %> -<% end -%> - -<% if node['dd-agent-install']['enable_trace_agent'].is_a?(TrueClass) || node['dd-agent-install']['enable_trace_agent'].is_a?(FalseClass) -%> -apm_enabled: <%= node['dd-agent-install']['enable_trace_agent'] %> -<% end -%> - -<% if ! node['dd-agent-install']['extra_config'].empty? -%> -# ========================================================================== # -# Other config options -# ========================================================================== # - <% node['dd-agent-install']['extra_config'].each do |k, v| -%> - <% if ! v.nil? -%> -<%= k %>: <%= v %> - <% end -%> - <% end -%> -<% end -%> - -## Trace settings - -[trace.config] -<% unless node['dd-agent-install']['trace_env'].nil? -%> -env: <%= node['dd-agent-install']['trace_env'] %> -<% end -%> - -[trace.sampler] -<% unless node['dd-agent-install']['extra_sample_rate'].nil? -%> -extra_sample_rate: <%= node['dd-agent-install']['extra_sample_rate'] %> -<% end -%> -<% unless node['dd-agent-install']['max_traces_per_second'].nil? -%> -max_traces_per_second: <%= node['dd-agent-install']['max_traces_per_second'] %> -<% end -%> - -[trace.receiver] -<% unless node['dd-agent-install']['receiver_port'].nil? -%> -receiver_port: <%= node['dd-agent-install']['receiver_port'] %> -<% end -%> -<% unless node['dd-agent-install']['connection_limit'].nil? -%> -connection_limit: <%= node['dd-agent-install']['connection_limit'] %> -<% end -%> - -## Process settings - -[process.config] -<% unless node['dd-agent-install']['process_agent']['blacklist'].nil? -%> -blacklist: <%= node['dd-agent-install']['process_agent']['blacklist'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['container_blacklist'].nil? -%> -container_blacklist: <%= node['dd-agent-install']['process_agent']['container_blacklist'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['container_whitelist'].nil? -%> -container_whitelist: <%= node['dd-agent-install']['process_agent']['container_whitelist'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['process_interval'].nil? -%> -process_interval = <%= node['dd-agent-install']['process_agent']['process_interval'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['rtprocess_interval'].nil? -%> -rtprocess_interval = <%= node['dd-agent-install']['process_agent']['rtprocess_interval'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['container_interval'].nil? -%> -container_interval = <%= node['dd-agent-install']['process_agent']['container_interval'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['rtcontainer_interval'].nil? -%> -rtcontainer_interval = <%= node['dd-agent-install']['process_agent']['rtcontainer_interval'] %> -<% end -%> -<% unless node['dd-agent-install']['process_agent']['log_file'].nil? -%> -log_file: <%= node['dd-agent-install']['process_agent']['log_file'] %> -<% end -%> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.yaml.erb deleted file mode 100644 index be783c320da42..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/datadog.yaml.erb +++ /dev/null @@ -1,116 +0,0 @@ -<% -# OPTIONS REMOVED IN AGENT 6: -# - check_freq -# - use_mount -# - developer_mode -# - dogstreams -# - autorestart -# - custom_emitters -# - graphite -# - dogstatsd_target -# - dogstatsd_interval -# - dogstatsd_normalize -# - legacy_integrations - -# TODO: options not supported yet: -# - agent_checks_interval -# - Autodiscovery (aka Service Discovery) related options -# - statsd_forward_host -# - statsd_forward_port -# - statsd_metric_namespace -# - enable_trace_agent: always enabled -# - all trace-related options are written to an INI file - -def string_list_to_array(string_list) - # return an array from a comma-separated list in a string - string_list.split(',').map{ |elem| elem.strip } -end - -## Normalize complex config values for agent6 format ## -if node['dd-agent-install']['tags'].respond_to?(:each_pair) - tags = node['dd-agent-install']['tags'].reject{ |_k,v| v.empty? }.map{ |k,v| "#{k.strip}:#{v.strip}" } -else - tags = string_list_to_array(node['dd-agent-install']['tags']) -end - -# TODO: support the more complete proxy settings that the agent6 supports -http_proxy = nil -if node['dd-agent-install']['web_proxy']['host'] - host = node['dd-agent-install']['web_proxy']['host'] - port = node['dd-agent-install']['web_proxy']['port'] - user = node['dd-agent-install']['web_proxy']['user'] - password = node['dd-agent-install']['web_proxy']['password'] - scheme = "" - - unless host.start_with?('http://') or host.start_with?('https://') - scheme = 'http://' - end - - http_proxy = host - if port - http_proxy += ":#{port}" - end - if user - if password - http_proxy = "#{user}:#{port}@#{http_proxy}" - else - http_proxy = "#{user}@#{http_proxy}" - end - end - - http_proxy = scheme + http_proxy -end - -## Populate agent_config ## -agent_config = @extra_config.merge({ - api_key: @api_key, - dd_url: node['dd-agent-install']['url'], - hostname: node['dd-agent-install']['hostname'], - additional_endpoints: @additional_endpoints, - listen_port: node['dd-agent-install']['agent_port'], - bind_host: node['dd-agent-install']['bind_host'], - skip_ssl_validation: node['dd-agent-install']['web_proxy']['skip_ssl_validation'], - tags: tags, - create_dd_check_tags: node['dd-agent-install']['create_dd_check_tags'], - collect_ec2_tags: node['dd-agent-install']['collect_ec2_tags'], - non_local_traffic: node['dd-agent-install']['non_local_traffic'], - histogram_aggregates: string_list_to_array(node['dd-agent-install']['histogram_aggregates']), - histogram_percentiles: string_list_to_array(node['dd-agent-install']['histogram_percentiles']), # TODO: check that the value works with agent6 - use_dogstatsd: node['dd-agent-install']['dogstatsd'], - log_level: node['dd-agent-install']['log_level'], # TODO: make sure it's a seelog-compatible log level - - # log agent options - logs_enabled: node['dd-agent-install']['enable_logs_agent'] -}) - -if node['dd-agent-install']['log_file_directory'] - agent_config['log_file'] = ::File.join(node['dd-agent-install']['log_file_directory'], "agent.log") -end - -if node['dd-agent-install']['use_v2_api'] - agent_config['use_v2_api'] = node['dd-agent-install']['use_v2_api'] -end - -if node['dd-agent-install']['syslog']['active'] - agent_config['log_to_syslog'] = true - # TODO: double check the udp settings work with agent6 - if node['dd-agent-install']['syslog']['udp'] - agent_config['syslog_uri'] = "#{node['dd-agent-install']['syslog']['host']}:#{node['dd-agent-install']['syslog']['port']}" - end -end - -# Set proxy options -if !http_proxy.nil? - agent_config['proxy'] = { - http: http_proxy, - https: http_proxy - } -end - -# Remove nil values -agent_config.reject!{ |k,v| v.nil? } - --%> -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(agent_config.to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/directory.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/directory.yaml.erb deleted file mode 100644 index 26413d4f9d601..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/directory.yaml.erb +++ /dev/null @@ -1,15 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - directory: "<%= i['directory'] %>" - <% if i['name'] -%>name: "<%= i['name'] %>"<% end -%> - <% if i['dirtagname'] -%>dirtagname: "<%= i['dirtagname'] %>"<% end -%> - <% if i['filetagname'] -%>filetagname: "<%= i['filetagname'] %>"<% end -%> - <% if i.key?('filegauges') -%>filegauges: <%= i['filegauges'] %><% end -%> - <% if i['pattern'] -%>pattern: "<%= i['pattern'] %>"<% end -%> - <% if i.key?('recursive') -%>recursive: <%= i['recursive'] %><% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/disk.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/disk.yaml.erb deleted file mode 100644 index 70a04547944bc..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/disk.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'init_config' => @init_config, 'logs' => @logs }).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/dns_check.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/dns_check.yaml.erb deleted file mode 100644 index 62207e78d22f3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/dns_check.yaml.erb +++ /dev/null @@ -1,13 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - hostname: <%= i["hostname"] %> - nameserver: <%= i["nameserver"] || '127.0.0.1' %> - <% unless i["timeout"].nil? %> - timeout: <%= i["timeout"] %> - <% end %> - <% end %> - -init_config: - default_timeout: 4 diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker.yaml.erb deleted file mode 100644 index 3b2d3b1ef91f3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker.yaml.erb +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: - <% if @init_config %> - <% if @init_config.key?('docker_root') -%> - docker_root: <%= @init_config['docker_root'] %> - <% end -%> - <% if @init_config.key?('socket_timeout') -%> - socket_timeout: <%= @init_config['socket_timeout'] %> - <% end -%> - <% end -%> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker_daemon.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker_daemon.yaml.erb deleted file mode 100644 index 1b3b8c08cbd1d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/docker_daemon.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'init_config' => @init_config, 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/elastic.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/elastic.yaml.erb deleted file mode 100644 index 37e077e263394..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/elastic.yaml.erb +++ /dev/null @@ -1,48 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - url: <%= i["url"] %> - <% unless i["shard_level_metrics"].nil? %> - shard_level_metrics: <%= i["shard_level_metrics"] %> - <% end %> - <% unless i["pshard_stats"].nil? %> - pshard_stats: <%= i["pshard_stats"] %> - <% end %> - <% unless i["cluster_stats"].nil? %> - cluster_stats: <%= i["cluster_stats"] %> - <% end %> - <% unless i["is_external"].nil? %> - is_external: <%= i["is_external"] %> - <% end %> - <% unless i["username"].nil? %> - username: <%= i["username"] %> - <% end %> - <% unless i["password"].nil? %> - password: <%= i["password"] %> - <% end %> - <% unless i["timeout"].nil? %> - timeout: <%= i["timeout"] %> - <% end %> - <% unless i["pending_task_stats"].nil? %> - pending_task_stats: <%= i["pending_task_stats"] %> - <% end %> - <% unless i["ssl_verify"].nil? %> - ssl_verify: <%= i["ssl_verify"] %> - <% end %> - <% unless i["ssl_cert"].nil? %> - ssl_cert: <%= i["ssl_cert"] %> - <% end %> - <% unless i["ssl_key"].nil? %> - ssl_key: <%= i["ssl_key"] %> - <% end %> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% end %> - -# Nothing to configure below -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/etcd.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/etcd.yaml.erb deleted file mode 100644 index 8473daa4a1cc2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/etcd.yaml.erb +++ /dev/null @@ -1,20 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - url: <%= i['url'] %> - <% if i['timeout'] -%>timeout: <%= i['timeout'] %><% end -%> - <% if i['ssl_keyfile'] -%>ssl_keyfile: <%= i['ssl_keyfile'] %><% end -%> - <% if i['ssl_certfile'] -%>ssl_certfile: <%= i['ssl_certfile'] %><% end -%> - <% if i['ssl_cert_validation'] -%>ssl_cert_validation: <%= i['ssl_cert_validation'] %><% end -%> - <% if i['ssl_ca_certs'] -%>ssl_ca_certs: <%= i['ssl_ca_certs'] %><% end -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/fluentd.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/fluentd.yaml.erb deleted file mode 100644 index f09867a7e9efd..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/fluentd.yaml.erb +++ /dev/null @@ -1,4 +0,0 @@ -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/go-metro.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/go-metro.yaml.erb deleted file mode 100644 index 7351b887819c4..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/go-metro.yaml.erb +++ /dev/null @@ -1,4 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'init_config' => @init_config, 'instances' => @instances, 'logs' => @logs}).to_json).to_yaml %> - diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/go_expvar.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/go_expvar.yaml.erb deleted file mode 100644 index 1b3b8c08cbd1d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/go_expvar.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'init_config' => @init_config, 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/gunicorn.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/gunicorn.yaml.erb deleted file mode 100644 index 2b40a714fdc97..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/gunicorn.yaml.erb +++ /dev/null @@ -1,15 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - proc_name: <%= i['proc_name'] %> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/haproxy.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/haproxy.yaml.erb deleted file mode 100644 index 1afb39166aecf..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/haproxy.yaml.erb +++ /dev/null @@ -1,17 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -<% excluded_keys = ["url", "username", "password"] -%> -instances: - <% @instances.each do |i| -%> - - url: <%= i['url'] %> - <% if i.key?('username') && i.key?('password') -%> - username: <%= i['username'] %> - password: <%= i['password'] %> - <% end -%> - <% (i.keys - excluded_keys).each do |key| -%> - <%= key %>: <%= i[key] %> - <% end -%> - <% end -%> - -# Nothing to configure below -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/hdfs.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/hdfs.yaml.erb deleted file mode 100644 index 9643fb11012a7..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/hdfs.yaml.erb +++ /dev/null @@ -1,18 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -# Each instance requires a namenode hostname. -# Port defaults to 8020. -instances: - <% @instances.each do |instance| -%> - - namenode: <%= instance.fetch("fqdn"){ node["fqdn"] } %> - port: <%= instance.fetch("port", 8020) %> - <% if instance.key?("tags") -%> - tags: - <% instance["tags"].each do |tag| -%> - - <%= tag %> - <% end -%> - <% end -%> - <% end -%> - -# HDFS check does not require any init_config -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/http_check.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/http_check.yaml.erb deleted file mode 100644 index 5f39a4d59e5c2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/http_check.yaml.erb +++ /dev/null @@ -1,5 +0,0 @@ -<%# Sanitize the compiled Mash to standard Array/Hash objects by way of JSON -%> -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/iis.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/iis.yaml.erb deleted file mode 100644 index 8176b70ce29f3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/iis.yaml.erb +++ /dev/null @@ -1,41 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -# By default, this check will run against a single instance - the current -# machine that the Agent is running on. It will check the WMI performance -# counters for IIS on that machine. -# -# If you want to check other remote machines as well, you can add one -# instance per host. Note: If you also want to check the counters on the -# current machine, you will have to create an instance with empty params. - -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - <% if i['host'] == 'localhost' -%> - - host: . - <% else -%> - - host: <%= i['host'] %> - <% end -%> - <% if i.key?('username') -%> - username: <%= i['username'] %> - password: <%= i['password'] %> - <% end -%> - <% if i.key?('provider') -%> - provider: <%= i['provider'] %> - <% end -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% if i.key?('sites') -%> - sites: - <% i['sites'].each do |s| -%> - - <%= s %> - <% end -%> - <% end -%> - <% end -%> - -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/integration.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/integration.yaml.erb deleted file mode 100644 index 70a04547944bc..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/integration.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'init_config' => @init_config, 'logs' => @logs }).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/jenkins.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/jenkins.yaml.erb deleted file mode 100644 index 3f81fdfde8b20..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/jenkins.yaml.erb +++ /dev/null @@ -1,9 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - name: <%= i['name'] %> - jenkins_home: <%= i['home'] %> - <% end -%> - -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/jmx.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/jmx.yaml.erb deleted file mode 100644 index 5f39a4d59e5c2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/jmx.yaml.erb +++ /dev/null @@ -1,5 +0,0 @@ -<%# Sanitize the compiled Mash to standard Array/Hash objects by way of JSON -%> -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka.yaml.erb deleted file mode 100644 index 45bb4ef39ff63..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka.yaml.erb +++ /dev/null @@ -1,553 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - host: <%= i['host'] %> - port: <%= i['port'] %> - <% if i['name'] -%> - name: <%= i['name'] %> - <% end -%> - <% if i['user'] -%> - user: <%= i['user'] %> - <% end -%> - <% if i['password'] -%> - password: <%= i['password'] %> - <% end -%> - <% if i['process_name_regex'] and i['tools_jar_path'] -%> - process_name_regex: <%= i['process_name_regex'] %> # Instead of specifying a host, and port. The agent can connect using the attach api. - # This requires the JDK to be installed and the path to tools.jar to be set below. - tools_jar_path: <%= i['tools_jar_path'] %> - <% end -%> - <% if i['java_bin_path'] -%> - java_bin_path: <%= i['java_bin_path'] %> #Optional, should be set if the agent cannot find your java executable - <% end -%> - <% if i['trust_store_path'] -%> - trust_store_path: <%= i['trust_store_path'] %> # Optional, should be set if ssl is enabled - <% end -%> - <% if i['trust_store_password'] -%> - trust_store_password: <%= i['trust_store_password'] %> - <% end -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |k, v| -%> - <%= k %>: <%= v %> - <% end -%> - <% end -%> - <% end -%> - -<% if @version == 2 %> -init_config: - is_jmx: true - - # Metrics collected by this check. You should not have to modify this. - conf: - # v0.8.2.x Producers - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=ProducerRequestMetrics,name=ProducerRequestRateAndTimeMs,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.producer.request_rate - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=ProducerRequestMetrics,name=ProducerRequestRateAndTimeMs,clientId=.*' - attribute: - Mean: - metric_type: gauge - alias: kafka.producer.request_latency_avg - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=ProducerTopicMetrics,name=BytesPerSec,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.producer.bytes_out - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=ProducerTopicMetrics,name=MessagesPerSec,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.producer.message_rate - - - # v0.9.0.x Producers - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=producer-metrics,client-id=.*' - attribute: - response-rate: - metric_type: gauge - alias: kafka.producer.response_rate - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=producer-metrics,client-id=.*' - attribute: - request-rate: - metric_type: gauge - alias: kafka.producer.request_rate - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=producer-metrics,client-id=.*' - attribute: - request-latency-avg: - metric_type: gauge - alias: kafka.producer.request_latency_avg - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=producer-metrics,client-id=.*' - attribute: - outgoing-byte-rate: - metric_type: gauge - alias: kafka.producer.bytes_out - - include: - domain: 'kafka.producer' - bean_regex: 'kafka\.producer:type=producer-metrics,client-id=.*' - attribute: - io-wait-time-ns-avg: - metric_type: gauge - alias: kafka.producer.io_wait - - - # v0.8.2.x Consumers - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=ConsumerFetcherManager,name=MaxLag,clientId=.*' - attribute: - Value: - metric_type: gauge - alias: kafka.consumer.max_lag - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=ConsumerFetcherManager,name=MinFetchRate,clientId=.*' - attribute: - Value: - metric_type: gauge - alias: kafka.consumer.fetch_rate - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=ConsumerTopicMetrics,name=BytesPerSec,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.consumer.bytes_in - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=ConsumerTopicMetrics,name=MessagesPerSec,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.consumer.messages_in - - # Offsets committed to ZooKeeper - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=ZookeeperConsumerConnector,name=ZooKeeperCommitsPerSec,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.consumer.zookeeper_commits - # Offsets committed to Kafka - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=ZookeeperConsumerConnector,name=KafkaCommitsPerSec,clientId=.*' - attribute: - Count: - metric_type: rate - alias: kafka.consumer.kafka_commits - - # v0.9.0.x Consumers - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=consumer-fetch-manager-metrics,client-id=.*' - attribute: - bytes-consumed-rate: - metric_type: gauge - alias: kafka.consumer.bytes_in - - include: - domain: 'kafka.consumer' - bean_regex: 'kafka\.consumer:type=consumer-fetch-manager-metrics,client-id=.*' - attribute: - records-consumed-rate: - metric_type: gauge - alias: kafka.consumer.messages_in - - # - # Aggregate cluster stats - # - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.net.bytes_out.rate - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.net.bytes_in.rate - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.messages_in.rate - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=BrokerTopicMetrics,name=BytesRejectedPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.net.bytes_rejected.rate - - # - # Request timings - # - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=BrokerTopicMetrics,name=FailedFetchRequestsPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.request.fetch.failed.rate - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=BrokerTopicMetrics,name=FailedProduceRequestsPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.request.produce.failed.rate - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=RequestsPerSec,request=Produce' - attribute: - Count: - metric_type: rate - alias: kafka.request.produce.rate - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Produce' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.produce.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.produce.time.99percentile - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=RequestsPerSec,request=FetchConsumer' - attribute: - Count: - metric_type: rate - alias: kafka.request.fetch_consumer.rate - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=RequestsPerSec,request=FetchFollower' - attribute: - Count: - metric_type: rate - alias: kafka.request.fetch_follower.rate - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=TotalTimeMs,request=FetchConsumer' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.fetch_consumer.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.fetch_consumer.time.99percentile - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=TotalTimeMs,request=FetchFollower' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.fetch_follower.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.fetch_follower.time.99percentile - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=TotalTimeMs,request=UpdateMetadata' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.update_metadata.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.update_metadata.time.99percentile - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Metadata' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.metadata.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.metadata.time.99percentile - - include: - domain: 'kafka.network' - bean: 'kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Offsets' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.offsets.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.offsets.time.99percentile - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=KafkaRequestHandlerPool,name=RequestHandlerAvgIdlePercent' - attribute: - Count: - metric_type: rate - alias: kafka.request.handler.avg.idle.pct.rate - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ProducerRequestPurgatory,name=PurgatorySize' - attribute: - Value: - metric_type: gauge - alias: kafka.request.producer_request_purgatory.size - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=FetchRequestPurgatory,name=PurgatorySize' - attribute: - Value: - metric_type: gauge - alias: kafka.request.fetch_request_purgatory.size - - # - # Replication stats - # - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions' - attribute: - Value: - metric_type: gauge - alias: kafka.replication.under_replicated_partitions - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ReplicaManager,name=IsrShrinksPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.replication.isr_shrinks.rate - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ReplicaManager,name=IsrExpandsPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.replication.isr_expands.rate - - include: - domain: 'kafka.controller' - bean: 'kafka.controller:type=ControllerStats,name=LeaderElectionRateAndTimeMs' - attribute: - Count: - metric_type: rate - alias: kafka.replication.leader_elections.rate - - include: - domain: 'kafka.controller' - bean: 'kafka.controller:type=ControllerStats,name=UncleanLeaderElectionsPerSec' - attribute: - Count: - metric_type: rate - alias: kafka.replication.unclean_leader_elections.rate - - include: - domain: 'kafka.controller' - bean: 'kafka.controller:type=KafkaController,name=OfflinePartitionsCount' - attribute: - Value: - metric_type: gauge - alias: kafka.replication.offline_partitions_count - - include: - domain: 'kafka.controller' - bean: 'kafka.controller:type=KafkaController,name=ActiveControllerCount' - attribute: - Value: - metric_type: gauge - alias: kafka.replication.active_controller_count - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ReplicaManager,name=PartitionCount' - attribute: - Value: - metric_type: gauge - alias: kafka.replication.partition_count - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ReplicaManager,name=LeaderCount' - attribute: - Value: - metric_type: gauge - alias: kafka.replication.leader_count - - include: - domain: 'kafka.server' - bean: 'kafka.server:type=ReplicaFetcherManager,name=MaxLag,clientId=Replica' - attribute: - Value: - metric_type: gauge - alias: kafka.replication.max_lag - - # - # Log flush stats - # - - include: - domain: 'kafka.log' - bean: 'kafka.log:type=LogFlushStats,name=LogFlushRateAndTimeMs' - attribute: - Count: - metric_type: rate - alias: kafka.log.flush_rate.rate -<% else %> -init_config: - is_jmx: true - - # Metrics collected by this check. You should not have to modify this. - conf: - # - # Aggregate cluster stats - # - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsBytesOutPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.net.bytes_out - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsBytesInPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.net.bytes_in - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsMessagesInPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.messages_in - - # - # Request timings - # - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsFailedFetchRequestsPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.request.fetch.failed - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="BrokerTopicMetrics",name="AllTopicsFailedProduceRequestsPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.request.produce.failed - - include: - domain: '"kafka.network"' - bean: '"kafka.network":type="RequestMetrics",name="Produce-TotalTimeMs"' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.produce.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.produce.time.99percentile - - include: - domain: '"kafka.network"' - bean: '"kafka.network":type="RequestMetrics",name="Fetch-TotalTimeMs"' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.fetch.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.fetch.time.99percentile - - include: - domain: '"kafka.network"' - bean: '"kafka.network":type="RequestMetrics",name="UpdateMetadata-TotalTimeMs"' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.update_metadata.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.update_metadata.time.99percentile - - include: - domain: '"kafka.network"' - bean: '"kafka.network":type="RequestMetrics",name="Metadata-TotalTimeMs"' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.metadata.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.metadata.time.99percentile - - include: - domain: '"kafka.network"' - bean: '"kafka.network":type="RequestMetrics",name="Offsets-TotalTimeMs"' - attribute: - Mean: - metric_type: gauge - alias: kafka.request.offsets.time.avg - 99thPercentile: - metric_type: gauge - alias: kafka.request.offsets.time.99percentile - - # - # Replication stats - # - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="ReplicaManager",name="ISRShrinksPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.replication.isr_shrinks - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="ReplicaManager",name="ISRExpandsPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.replication.isr_expands - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="ControllerStats",name="LeaderElectionRateAndTimeMs"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.replication.leader_elections - - include: - domain: '"kafka.server"' - bean: '"kafka.server":type="ControllerStats",name="UncleanLeaderElectionsPerSec"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.replication.unclean_leader_elections - - # - # Log flush stats - # - - include: - domain: '"kafka.log"' - bean: '"kafka.log":type="LogFlushStats",name="LogFlushRateAndTimeMs"' - attribute: - MeanRate: - metric_type: gauge - alias: kafka.log.flush_rate -<% end %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka_consumer.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka_consumer.yaml.erb deleted file mode 100644 index 68c6d23bfdc41..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kafka_consumer.yaml.erb +++ /dev/null @@ -1,23 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - kafka_connect_str: <%= i['kafka_connect_str'] %> - zk_connect_str: <%= i['zk_connect_str'] %> - <% if i['zk_prefix'] -%> - zk_prefix: <%= i['zk_prefix'] %> - <% end -%> - <% if i['consumer_groups'] -%> - consumer_groups: <%= i['name'] %> - <% i["consumer_groups"].each do |consumer, t| -%> - <%= consumer %>: - <% t.each do |topic, l| -%> - <%= topic %>: <%= l %> - <% end -%> - <% end -%> - <% end -%> - <% end -%> - -init_config: -# The Kafka Consumer check does not require any init_config - diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kubernetes.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kubernetes.yaml.erb deleted file mode 100644 index f09867a7e9efd..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kubernetes.yaml.erb +++ /dev/null @@ -1,4 +0,0 @@ -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kyototycoon.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kyototycoon.yaml.erb deleted file mode 100644 index 3d9caa307304a..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/kyototycoon.yaml.erb +++ /dev/null @@ -1,19 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -# Add one or more instances, which accept report_url, -# name, and optionally tags keys. The report URL should -# be a URL to the Kyoto Tycoon "report" RPC endpoint. -instances: - <% @instances.each do |i| -%> - - name: <%= i['name'] %> - report_url: <%= i['report_url'] %> # e.g. http://localhost:1978/rpc/report - <% if i.key?('tags') -%> - tags: - <% @tags.each do |k, v| -%> - <%= k %>: <%= v %> - <% end -%> - <% end -%> - <% end -%> - -init_config: -# The Kyoto Tycoon check does not require any init_config diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/lighttpd.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/lighttpd.yaml.erb deleted file mode 100644 index e2ab2f0205b94..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/lighttpd.yaml.erb +++ /dev/null @@ -1,15 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - lighttpd_status_url: <%= i['status_url'] %> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each_pair do |k, v| -%> - - <%= k %>: <%= v %> - <% end -%> - <% end -%> - <% end -%> - -init_config: -# No init_config section needed diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mcache.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mcache.yaml.erb deleted file mode 100644 index c64cca9687d7b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mcache.yaml.erb +++ /dev/null @@ -1,18 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - url: <%= i['url'] %> - <% if i.key?('port') -%> - port: <%= i['port'] %> - <% end -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% end -%> - -init_config: -# No init_config section needed diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mesos.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mesos.yaml.erb deleted file mode 100644 index 88097d78f8f7f..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mesos.yaml.erb +++ /dev/null @@ -1,8 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: - <% if @init_config.key?('default_timeout') -%> - default_timeout: <%= @init_config['default_timeout'] %> - <% end -%> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mongo.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mongo.yaml.erb deleted file mode 100644 index cd45bae7c1532..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mongo.yaml.erb +++ /dev/null @@ -1,35 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - server: mongodb://<%= i['host']%>:<%= i['port'] %> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% if i.key?('ssl') -%> - ssl: <%= i['ssl'] %> - ssl_ca_certs: <%= i['ssl_ca_certs'] %> - ssl_cert_reqs: <%= i['ssl_cert_reqs'] %> - ssl_certfile: <%= i['ssl_certfile'] %> - ssl_keyfile: <%= i['ssl_keyfile'] %> - <% end %> - <% if i.key?('additional_metrics') -%> - additional_metrics: - <% i['additional_metrics'].each do |t| %> - - <%= t %> - <%end -%> - <% end %> - <% if i.key?('collections') -%> - collections: - <% i['collections'].each do |t| %> - - <%= t %> - <%end -%> - <% end %> - <% end -%> - -init_config: -# No init_config details needed - diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mysql.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mysql.yaml.erb deleted file mode 100644 index e7cc4672fbcd7..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/mysql.yaml.erb +++ /dev/null @@ -1,38 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - server: <%= i['server'] %> - <% if i.key?('port') -%> - port: <%= i['port'] %> - <% end -%> - user: <%= i['user'] %> - pass: <%= i['pass'] %> - <% if i.key?('sock') -%> - sock: <%= i['sock'] %> - <% end -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% if i.key?('options') -%> - options: - <% i['options'].each do |o| -%> - <%= o %> - <% end -%> - <% end -%> - <% if i.key?('queries') -%> - queries: - <% i['queries'].each do |q| -%> - - type: <%= q['type'] %> - field: <%= q['field'] %> - metric: <%= q['metric'] %> - query: <%= q['query'] %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/network.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/network.yaml.erb deleted file mode 100644 index 8646ba6c06d41..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/network.yaml.erb +++ /dev/null @@ -1,13 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -init_config: - -# Network check supports only one configured instance -instances: -<% @instances.each do |i| -%> - - collect_connection_state: <%= i['collect_connection_state'] || 'false' %> - excluded_interfaces: - <% i["excluded_interfaces"].each do |interface| -%> - - <%= interface %> - <% end -%> -<% end -%> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/nginx.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/nginx.yaml.erb deleted file mode 100644 index bda9413ab5448..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/nginx.yaml.erb +++ /dev/null @@ -1,23 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - nginx_status_url: <%= i['nginx_status_url'] %> - <% unless i['ssl_validation'].nil? -%> - ssl_validation: <%= i['ssl_validation'] %> - <% end -%> - <%# don't print user/password if either is nil -%> - <% unless i['user'].nil? || i['password'].nil? -%> - user: <%= i['user'] %> - password: <%= i['password'] %> - <% end -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/ntp.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/ntp.yaml.erb deleted file mode 100644 index 5f39a4d59e5c2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/ntp.yaml.erb +++ /dev/null @@ -1,5 +0,0 @@ -<%# Sanitize the compiled Mash to standard Array/Hash objects by way of JSON -%> -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/pgbouncer.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/pgbouncer.yaml.erb deleted file mode 100644 index d6f4ae3cde641..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/pgbouncer.yaml.erb +++ /dev/null @@ -1,6 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/php_fpm.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/php_fpm.yaml.erb deleted file mode 100644 index c4b509c7e7881..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/php_fpm.yaml.erb +++ /dev/null @@ -1,4 +0,0 @@ -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# nothing to add here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/postfix.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/postfix.yaml.erb deleted file mode 100644 index ead1e879187c1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/postfix.yaml.erb +++ /dev/null @@ -1,21 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -# Each instance requires a directory and an array of queues. -# Tags are optional. -instances: - <% @instances.each do |instance| -%> - - directory: <%= instance['directory'] %> - queues: - <% Array(instance['queues']).each do |queue| -%> - - <%= queue %> - <% end -%> - <% if instance.key?('tags') -%> - tags: - <% Array(instance['tags']).each do |tag| -%> - - <%= tag %> - <% end -%> - <% end -%> - <% end -%> - -# Postfix check does not require any init_config -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/postgres.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/postgres.yaml.erb deleted file mode 100644 index 0ad4a4f09d45c..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/postgres.yaml.erb +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%# TODO: Breaking change, remove defaults -%> -<% - # Apply default transformations to @instances, an ImmutableArray - instances = @instances.to_a - - instances.each do |instance| - # The `server` key renders as a `host` value - # `if` test future-proofs the key from being modified if users change to - # using `host` as their key. - instance['host'] = instance.delete 'server' if instance['server'] - - # If `port` is unspecified, set to 5432 - instance['port'] = 5432 if instance['port'].nil? - end --%> -<%= JSON.parse(({ 'instances' => instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/process.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/process.yaml.erb deleted file mode 100644 index 6d65c5a271baf..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/process.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: \ No newline at end of file diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/rabbitmq.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/rabbitmq.yaml.erb deleted file mode 100644 index 426d4dc34bb69..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/rabbitmq.yaml.erb +++ /dev/null @@ -1,54 +0,0 @@ -# Generated by Chef, local modifications will be overwritten -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: - # for every instance a 'rabbitmq_api_url' must be provided, pointing to the api - # url of the RabbitMQ Management Plugin (http://www.rabbitmq.com/management.html) - # optional: 'rabbitmq_user' (default: guest), 'rabbitmq_pass' (default: guest), 'ssl_verify' (default: true) and 'tag_families' (default: false) -<% @instances.each do |i| -%> - - rabbitmq_api_url: <%= i['api_url'] %> - rabbitmq_user: <%= i['user'] || 'guest' %> - rabbitmq_pass: <%= i['pass'] || 'guest' %> - ssl_verify: <%= i.key?('ssl_verify') ? i['ssl_verify'] : 'true' %> - # https://help.datadoghq.com/hc/en-us/articles/211590103-Tagging-RabbitMQ-queues-by-tag-family - tag_families: <%= i['tag_families'] || 'false' %> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |x| -%> - - <%= x %> - <% end -%> - <% end -%> - <% if i.key?('nodes') -%> - nodes: - <% i['nodes'].each do |x| -%> - - <%= x %> - <% end -%> - <% end -%> - <% if i.key?('nodes_regexes') -%> - nodes_regexes: - <% i['nodes_regexes'].each do |x| -%> - - <%= x %> - <% end -%> - <% end -%> - <% if i.key?('queues') -%> - queues: - <% i['queues'].each do |x| -%> - - <%= x %> - <% end -%> - <% end -%> - <% if i.key?('queues_regexes') -%> - queues_regexes: - <% i['queues_regexes'].each do |x| -%> - - <%= x %> - <% end -%> - <% end -%> - <% if i.key?('vhosts') -%> - vhosts: - <% i['vhosts'].each do |x| -%> - - <%= x %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/redisdb.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/redisdb.yaml.erb deleted file mode 100644 index e610af37df9e8..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/redisdb.yaml.erb +++ /dev/null @@ -1,38 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - <% if i.key?("unix_socket_path") -%> - - unix_socket_path: <%= i["unix_socket_path"] %> - <% else -%> - - host: <%= i["server"] %> - port: <%= i["port"] || 6379 %> - <% end -%> - <% if i.key?("password") -%> - password: <%= i["password"] %> - <% end -%> - <% if i.key?("db") -%> - db: <%= i["db"] %> - <% end -%> - <% if i.key?("tags") -%> - tags: - <% i["tags"].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% if i.key?("keys") -%> - <% if i.key?("warn_on_missing_keys") -%> - warn_on_missing_keys: <%= i['warn_on_missing_keys'] %> - <% end -%> - keys: - <% i["keys"].each do |k| -%> - - <%= k %> - <% end -%> - <% end -%> - <% if i.key?('slowlog-max-len') -%>slowlog-max-len: <%= i['slowlog-max-len'] %><% end -%> - <% if i.key?('socket_timeout') -%>socket_timeout: <%= i['socket_timeout'] %><% end -%> - <% if i.key?('command_stats') -%>command_stats: <%= i['command_stats'] %><% end -%> -<% end -%> - -init_config: -# nothing to add here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/riak.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/riak.yaml.erb deleted file mode 100644 index 9f5f1958fbff2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/riak.yaml.erb +++ /dev/null @@ -1,9 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - url: <%= i["url"] %> -<% end -%> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/snmp.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/snmp.yaml.erb deleted file mode 100644 index 11b348e06fe94..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/snmp.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({'init_config' => @init_config, 'instances' => @instances, 'logs' => @logs}).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/solr.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/solr.yaml.erb deleted file mode 100644 index f4e6cd90b24f5..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/solr.yaml.erb +++ /dev/null @@ -1,71 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -# List of metrics to be collected by the integration -# Read http://docs.datadoghq.com/integrations/java/ to learn how to customize it -init_config: - conf: - - include: - type: searcher - attribute: - maxDoc: - alias: solr.searcher.maxdoc - metric_type: gauge - numDocs: - alias: solr.searcher.numdocs - metric_type: gauge - warmupTime: - alias: solr.searcher.warmup - metric_type: gauge - - include: - id: org.apache.solr.search.FastLRUCache - attribute: - cumulative_lookups: - alias: solr.cache.lookups - metric_type: counter - cumulative_hits: - alias: solr.cache.hits - metric_type: counter - cumulative_inserts: - alias: solr.cache.inserts - metric_type: counter - cumulative_evictions: - alias: solr.cache.evictions - metric_type: counter - - include: - id: org.apache.solr.search.LRUCache - attribute: - cumulative_lookups: - alias: solr.cache.lookups - metric_type: counter - cumulative_hits: - alias: solr.cache.hits - metric_type: counter - cumulative_inserts: - alias: solr.cache.inserts - metric_type: counter - cumulative_evictions: - alias: solr.cache.evictions - metric_type: counter - - include: - id: org.apache.solr.handler.component.SearchHandler - attribute: - errors: - alias: solr.search_handler.errors - metric_type: counter - requests: - alias: solr.search_handler.requests - metric_type: counter - timeouts: - alias: solr.search_handler.timeouts - metric_type: counter - totalTime: - alias: solr.search_handler.time - metric_type: counter - avgTimePerRequest: - alias: solr.search_handler.avg_time_per_req - metric_type: gauge - avgRequestsPerSecond: - alias: solr.search_handler.avg_requests_per_sec - metric_type: gauge diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/sqlserver.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/sqlserver.yaml.erb deleted file mode 100644 index e44ccc5f42938..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/sqlserver.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({'init_config' => @init_config, 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/ssh_check.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/ssh_check.yaml.erb deleted file mode 100644 index daf37dbcac11d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/ssh_check.yaml.erb +++ /dev/null @@ -1,26 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - host: <%= i['host'] %> - username: <%= i['username'] %> - <% - keys = %w(password port sftp_check private_key_file add_missing_keys tags) - keys.each do |key| - if i.key?(key) - -%> - <%= key %>: <%= i[key] %> - <% - end - end - -%> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> -<% end -%> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/supervisord.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/supervisord.yaml.erb deleted file mode 100644 index ab6c4d5b09541..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/supervisord.yaml.erb +++ /dev/null @@ -1,6 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_core.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_core.yaml.erb deleted file mode 100644 index 5f7e3d4c7ea39..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_core.yaml.erb +++ /dev/null @@ -1,9 +0,0 @@ -# Generated by Chef, local modifications will be overwritten -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -init_config: - -instances: - # No configuration is needed for this check. - # A single instance needs to be defined with any value. - - foo: bar diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_swap.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_swap.yaml.erb deleted file mode 100644 index 489e2bb4ee68a..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/system_swap.yaml.erb +++ /dev/null @@ -1,9 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -# This check takes no initial configuration -init_config: - -instances: - [{}] diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tcp_check.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tcp_check.yaml.erb deleted file mode 100644 index 5f39a4d59e5c2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tcp_check.yaml.erb +++ /dev/null @@ -1,5 +0,0 @@ -<%# Sanitize the compiled Mash to standard Array/Hash objects by way of JSON -%> -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tokumx.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tokumx.yaml.erb deleted file mode 100644 index a7fbcb3a27ecc..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tokumx.yaml.erb +++ /dev/null @@ -1,34 +0,0 @@ -<%= JSON.parse(({ 'logs' => @logs }).to_json).to_yaml %> - -instances: - <% @instances.each do |i| -%> - - server: mongodb://<%= i['host']%>:<%= i['port'] %> - <% if i.key?('tags') -%> - tags: - <% i['tags'].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% if i.key?('ssl') -%> - ssl: <%= i['ssl'] %> - ssl_ca_certs: <%= i['ssl_ca_certs'] %> - ssl_cert_reqs: <%= i['ssl_cert_reqs'] %> - ssl_certfile: <%= i['ssl_certfile'] %> - ssl_keyfile: <%= i['ssl_keyfile'] %> - <% end %> - <% if i.key?('additional_metrics') -%> - additional_metrics: - <% i['additional_metrics'].each do |t| %> - - <%= t %> - <%end -%> - <% end %> - <% if i.key?('collections') -%> - collections: - <% i['collections'].each do |t| %> - - <%= t %> - <%end -%> - <% end %> - <% end -%> - -init_config: -# No init_config details needed diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tomcat.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tomcat.yaml.erb deleted file mode 100644 index 17f4c7298b931..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/tomcat.yaml.erb +++ /dev/null @@ -1,78 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - host: <%= i["server"] %> - port: <%= i["port"] %> - <% if i.key?("username") -%> - user: <%= i["username"] %> - password: <%= i["password"] %> - <% end -%> - name: <%= i["name"] || "tomcat" %> -<% end -%> - -# List of metrics to be collected by the integration -# You should not need to modify this. -init_config: - conf: - - include: - type: ThreadPool - attribute: - maxThreads: - alias: tomcat.threads.max - metric_type: gauge - currentThreadCount: - alias: tomcat.threads.count - metric_type: gauge - currentThreadsBusy: - alias: tomcat.threads.busy - metric_type: gauge - - include: - type: GlobalRequestProcessor - attribute: - bytesSent: - alias: tomcat.bytes_sent - metric_type: counter - bytesReceived: - alias: tomcat.bytes_rcvd - metric_type: counter - errorCount: - alias: tomcat.error_count - metric_type: counter - requestCount: - alias: tomcat.request_count - metric_type: counter - maxTime: - alias: tomcat.max_time - metric_type: gauge - processingTime: - alias: tomcat.processing_time - metric_type: counter - - include: - j2eeType: Servlet - attribute: - processingTime: - alias: tomcat.servlet.processing_time - metric_type: counter - errorCount: - alias: tomcat.servlet.error_count - metric_type: counter - requestCount: - alias: tomcat.servlet.request_count - metric_type: counter - - include: - type: Cache - accessCount: - alias: tomcat.cache.access_count - metric_type: counter - hitsCounts: - alias: tomcat.cache.hits_count - metric_type: counter - - include: - type: JspMonitor - jspCount: - alias: tomcat.jsp.count - metric_type: counter - jspReloadCount: - alias: tomcat.jsp.reload_count - metric_type: counter diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/varnish.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/varnish.yaml.erb deleted file mode 100644 index 512bbce5a76b0..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/varnish.yaml.erb +++ /dev/null @@ -1,24 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -instances: -<% @instances.each do |i| -%> - - varnishstat: <%= i["varnishstat"] || "/usr/bin/varnishstat" %> - <% if i.key?("name") -%> - name: <%= i["name"] %> - <% end -%> - <% if i.key?("tags") -%> - tags: - <% i["tags"].each do |t| -%> - - <%= t %> - <% end -%> - <% end -%> - <% if i.key?("varnishadm") -%> - varnishadm: <%= i["varnishadm"] %> - <% end -%> - <% if i.key?("secretfile") -%> - secretfile: <%= i["secretfile"] %> - <% end -%> -<% end -%> - -init_config: -# Nothing to configure here diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/win32_event_log.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/win32_event_log.yaml.erb deleted file mode 100644 index 11b348e06fe94..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/win32_event_log.yaml.erb +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({'init_config' => @init_config, 'instances' => @instances, 'logs' => @logs}).to_json).to_yaml %> diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/windows_service.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/windows_service.yaml.erb deleted file mode 100644 index ab6c4d5b09541..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/windows_service.yaml.erb +++ /dev/null @@ -1,6 +0,0 @@ -# Generated by Chef, local modifications will be overwritten - -<%= JSON.parse(({ 'instances' => @instances, 'logs' => @logs }).to_json).to_yaml %> - -# Nothing to configure here -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/wmi_check.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/wmi_check.yaml.erb deleted file mode 100644 index a80c523a04bbb..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/wmi_check.yaml.erb +++ /dev/null @@ -1,75 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -init_config: - -instances: - # Each WMI query has 2 required options, `class` and `metrics` and two - # optional options, `filters` and `tag_by`. - # - # `class` is the name of the WMI class, for example Win32_OperatingSystem - # or Win32_PerfFormattedData_PerfProc_Process. You can find many of the - # standard class names on the MSDN docs at - # http://msdn.microsoft.com/en-us/library/windows/desktop/aa394084.aspx. - # The Win32_FormattedData_* classes provide many useful performance counters - # by default. - # - # - # `metrics` is a list of metrics you want to capture, with each item in the - # list being a set of [WMI property name, metric name, metric type]. - # - # - The property name is something like `NumberOfUsers` or `ThreadCount`. - # The standard properties are also available on the MSDN docs for each - # class. - # - # - The metric name is the name you want to show up in Datadog. - # - # - The metric type is from the standard choices for all agent checks, such - # as gauge, rate, histogram or counter. - # - # - # `filters` is a list of filters on the WMI query you may want. For example, - # for a process-based WMI class you may want metrics for only certain - # processes running on your machine, so you could add a filter for each - # process name. See below for an example of this case. - # - # - # `tag_by` optionally lets you tag each metric with a property from the - # WMI class you're using. This is only useful when you will have multiple - # values for your WMI query. The examples below show how you can tag your - # process metrics with the process name (giving a tag of "name:app_name"). - - - # Fetch the number of processes and users - - class: Win32_OperatingSystem - metrics: - - [NumberOfProcesses, system.proc.count, gauge] - - [NumberOfUsers, system.users.count, gauge] - - # Fetch metrics for a single running application, called myapp - - class: Win32_PerfFormattedData_PerfProc_Process - metrics: - - [ThreadCount, my_app.threads.count, gauge] - - [VirtualBytes, my_app.mem.virtual, gauge] - filters: - - Name: myapp - - # Fetch process metrics for a set of processes, tagging by app name. - - class: Win32_PerfFormattedData_PerfProc_Process - metrics: - - [ThreadCount, proc.threads.count, gauge] - - [VirtualBytes, proc.mem.virtual, gauge] - - [PercentProcessorTime, proc.cpu_pct, gauge] - filters: - - Name: app1 - - Name: app2 - - Name: app3 - tag_by: Name - - # Fetch process metrics for every available process, tagging by app name. - - class: Win32_PerfFormattedData_PerfProc_Process - metrics: - - [IOReadBytesPerSec, proc.io.bytes_read, gauge] - - [IOWriteBytesPerSec, proc.io.bytes_written, gauge] - tag_by: Name - - diff --git a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/zk.yaml.erb b/test/kitchen/site-cookbooks/dd-agent-install/templates/default/zk.yaml.erb deleted file mode 100644 index c5ee8f8386bf5..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-install/templates/default/zk.yaml.erb +++ /dev/null @@ -1,22 +0,0 @@ -<%= JSON.parse(({'logs' => @logs }).to_json).to_yaml %> - -<% excluded_keys = ["host", "port", "timeout", "tags"] -%> -instances: - <% @instances.each do |instance| -%> - - host: <%= instance["host"] %> - port: <%= instance["port"] %> - <% if instance.key?("timeout") -%> - timeout: <%= instance["timeout"] %> - <% end -%> - <% if instance.key?("tags") -%> - tags: - <% instance["tags"].each do |tag| -%> - - <%= tag %> - <% end -%> - <% end -%> - <% (instance.keys - excluded_keys).each do |key| -%> - <%= key %>: <%= instance[key] %> - <% end -%> - <% end %> - -init_config: diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/.gitignore b/test/kitchen/site-cookbooks/dd-agent-reinstall/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/Berksfile b/test/kitchen/site-cookbooks/dd-agent-reinstall/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/Gemfile b/test/kitchen/site-cookbooks/dd-agent-reinstall/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/README.md b/test/kitchen/site-cookbooks/dd-agent-reinstall/README.md deleted file mode 100644 index 15c8de8b2df5a..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# dd-agent-reinstall cookbook - -Reinstalls the same Windows Agent version, using different installer flags \ No newline at end of file diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/attributes/default.rb b/test/kitchen/site-cookbooks/dd-agent-reinstall/attributes/default.rb deleted file mode 100644 index 6df9bffb59358..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/attributes/default.rb +++ /dev/null @@ -1,8 +0,0 @@ -default['dd-agent-reinstall']['agent_package_retries'] = nil -default['dd-agent-reinstall']['agent_package_retry_delay'] = nil - -default['dd-agent-reinstall']['windows_version'] = nil # => install the latest available version -default['dd-agent-reinstall']['windows_agent_url'] = 'https://ddagent-windows-stable.s3.amazonaws.com/' -default['dd-agent-reinstall']['windows_agent_filename'] = nil - -default['dd-agent-reinstall']['agent_install_options'] = '' diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/chefignore b/test/kitchen/site-cookbooks/dd-agent-reinstall/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-reinstall/metadata.rb deleted file mode 100644 index c196d46aadd9f..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/metadata.rb +++ /dev/null @@ -1,5 +0,0 @@ -name "dd-agent-reinstall" -maintainer "Datadog" -description "Reinstalls the installed Windows Agent" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.2.0" diff --git a/test/kitchen/site-cookbooks/dd-agent-reinstall/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-reinstall/recipes/default.rb deleted file mode 100644 index d16e90baee341..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-reinstall/recipes/default.rb +++ /dev/null @@ -1,57 +0,0 @@ -# -# Cookbook Name:: dd-agent-reinstall -# Recipe:: default -# -# Copyright (C) 2013 Datadog -# -# All rights reserved - Do Not Redistribute -# -require 'uri' - -if node['platform_family'] != 'windows' - raise "The dd-agent-reinstall cookbook is only usable on Windows." -end - -package_retries = node['dd-agent-reinstall']['agent_package_retries'] -package_retry_delay = node['dd-agent-reinstall']['agent_package_retry_delay'] -dd_agent_version = node['dd-agent-reinstall']['windows_version'] -dd_agent_filename = node['dd-agent-reinstall']['windows_agent_filename'] - -if dd_agent_filename - dd_agent_installer_basename = dd_agent_filename -else - if dd_agent_version - dd_agent_installer_basename = "datadog-agent-#{dd_agent_version}-1-x86_64" - else - dd_agent_installer_basename = "datadog-agent-6.0.0-beta.latest.amd64" - end -end - -temp_file_basename = ::File.join(Chef::Config[:file_cache_path], 'ddagent-up').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) - -dd_agent_installer = "#{dd_agent_installer_basename}.msi" -temp_file = "#{temp_file_basename}.msi" -installer_type = :msi -# Agent >= 5.12.0 installs per-machine by default, but specifying ALLUSERS=1 shouldn't affect the install -agent_install_options = node['dd-agent-reinstall']['agent_install_options'] -install_options = "/norestart ALLUSERS=1 #{agent_install_options}" - -use_windows_package_resource = true - -source_url = node['dd-agent-reinstall']['windows_agent_url'] -if !source_url.end_with? '/' - source_url += '/' -end -source_url += dd_agent_installer - -# Download the installer to a temp location -remote_file temp_file do - source source_url - retries package_retries unless package_retries.nil? - retry_delay package_retry_delay unless package_retry_delay.nil? -end - -execute "reinstall-agent" do - command "start /wait msiexec /log upgrade.log /q /i #{temp_file} #{install_options}" - action :run -end diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/.gitignore b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Berksfile b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Gemfile b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/README.md b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/README.md deleted file mode 100644 index 1c73493f28680..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# dd-agent-rhel-workaround cookbook - -Works around the root partition not being large enough to install and upgrade the Agent diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/chefignore b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/metadata.rb deleted file mode 100644 index 3c9e3a75cd96d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/metadata.rb +++ /dev/null @@ -1,5 +0,0 @@ -name "dd-agent-rhel-workaround" -maintainer "Datadog" -description "Works around the root partition not being large enough to install and upgrade the Agent" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.0.1" diff --git a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/recipes/default.rb deleted file mode 100644 index ba081242e8fcc..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-rhel-workaround/recipes/default.rb +++ /dev/null @@ -1,22 +0,0 @@ -# -# Cookbook Name:: dd-agent-rhel-workaround -# Recipe:: default -# -# Copyright (C) 2020-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -if node['platform_family'] == 'rhel' && node['platform_version'].to_i >= 8 - execute 'increase / partition size' do - command <<-EOF - export size=32; - export rootpart=$(cat /proc/mounts | awk '{ if ($2 =="/") print $1; }'); - while [[ $size -ne "0" ]] && ! sudo lvextend --size +${size}G ${rootpart}; do - size=$(($size / 2)); - done; - sudo xfs_growfs / - EOF - live_stream true - end -end diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/.gitignore b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/Berksfile b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/Gemfile b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/README.md b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/README.md deleted file mode 100644 index ed9a87cebbd96..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# dd-agent-sles-workaround cookbook - -Works around the Azure Agent trying to restart network interfaces -on SLES 12. diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/chefignore b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/metadata.rb deleted file mode 100644 index aa90d59ab293e..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/metadata.rb +++ /dev/null @@ -1,5 +0,0 @@ -name "dd-agent-sles-workaround" -maintainer "Datadog" -description "Works around waagent restarting network interfaces on SLES 12" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.0.1" diff --git a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-sles-workaround/recipes/default.rb deleted file mode 100644 index f941e8fffd57f..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-sles-workaround/recipes/default.rb +++ /dev/null @@ -1,29 +0,0 @@ -# -# Cookbook Name:: dd-agent-sles-workaround -# Recipe:: default -# -# Copyright (C) 2020-present Datadog -# -# All rights reserved - Do Not Redistribute -# - -if node['platform_family'] == 'suse' && node.key?('azure') - # Update the waagent conf to stop watching hostname changes. - execute 'update Azure Agent conf' do - command "sed -i 's/Provisioning\\.MonitorHostName=y/Provisioning\\.MonitorHostName=n/' /etc/waagent.conf" - end - - # Change the Windows Azure Agent conf to stop watching hostname changes. - # For some reason it's changing the hostname every 30s on SLES 12, which - # leads to a network interface reset, making it likely for tests to fail if a - # network call happens during the reset. - service 'waagent' do - service_name "waagent" - action :restart - end - - # Put eth0 back up in case the waagent was taking it down while we restarted it. - execute 'bring eth0 up' do - command "/sbin/ifup eth0" - end -end diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/.gitignore b/test/kitchen/site-cookbooks/dd-agent-system-files-check/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/Berksfile b/test/kitchen/site-cookbooks/dd-agent-system-files-check/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/Gemfile b/test/kitchen/site-cookbooks/dd-agent-system-files-check/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/README.md b/test/kitchen/site-cookbooks/dd-agent-system-files-check/README.md deleted file mode 100644 index d1bbe95134ca5..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# dd-agent-system-files-check cookbook - -Lists system files before and after an install-uninstall cycle and checks we aren't deleting what we shouldn't. diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/chefignore b/test/kitchen/site-cookbooks/dd-agent-system-files-check/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-system-files-check/metadata.rb deleted file mode 100644 index 2866375908287..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/metadata.rb +++ /dev/null @@ -1,5 +0,0 @@ -name "dd-agent-system-files-check" -maintainer "Datadog" -description "Lists system files before and after an install-uninstall cycle and checks we aren't deleting what we shouldn't." -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.0.1" diff --git a/test/kitchen/site-cookbooks/dd-agent-system-files-check/recipes/list-files-before-install.rb b/test/kitchen/site-cookbooks/dd-agent-system-files-check/recipes/list-files-before-install.rb deleted file mode 100644 index b77d8c48c74cd..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-system-files-check/recipes/list-files-before-install.rb +++ /dev/null @@ -1,27 +0,0 @@ -# -# Cookbook Name:: dd-agent-system-files-check -# Recipe:: default -# -# Copyright (C) 2020-present Datadog -# -# All rights reserved - Do Not Redistribute -# -require 'find' - -if node['platform_family'] != 'windows' - puts "dd-agent-system-files-check: Not implemented on non-windows" -else - ruby_block "list-before-files" do - block do - # Windows update is likely to change lots of files, disable it. - # It's okay to do this because this should run on an ephemereal VM. - system("sc.exe config wuauserv start=disabled") - system("sc.exe stop wuauserv") - - File.open("c:/before-files.txt", "w") do |out| - Find.find('c:/windows/').each { |f| out.puts(f) } - end - end - action :run - end -end diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/.gitignore b/test/kitchen/site-cookbooks/dd-agent-upgrade/.gitignore deleted file mode 100644 index 45b891c93cfc3..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -.vagrant -Berksfile.lock -*~ -*# -.#* -\#*# -.*.sw[a-z] -*.un~ -/cookbooks - -# Bundler -Gemfile.lock -bin/* -.bundle/* - diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/Berksfile b/test/kitchen/site-cookbooks/dd-agent-upgrade/Berksfile deleted file mode 100644 index c4bb297b7275b..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode - -metadata diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/Gemfile b/test/kitchen/site-cookbooks/dd-agent-upgrade/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/README.md b/test/kitchen/site-cookbooks/dd-agent-upgrade/README.md deleted file mode 100644 index a6ce282f7c05a..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# dd-agent-upgrade cookbook - -Updates an installed Agent to the latest version (default), or the version -specified in `version`. You can also add a new repository by setting the -`add_new_repo` flag to `true` and passing an `aptrepo` and/or a `yumrepo`. This -is useful when you want to use the `dd-agent` recipe to install the latest -release, and then use this repository to add the candidate repository and -install the latest candidate. diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/Vagrantfile b/test/kitchen/site-cookbooks/dd-agent-upgrade/Vagrantfile deleted file mode 100644 index 23861276f1181..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/Vagrantfile +++ /dev/null @@ -1,25 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -Vagrant.configure("2") do |config| - config.vm.hostname = "dd-agent-upgrade-dev" - config.vm.box = "opscode_ubuntu-12.04_chef-11.4.4" - - #config.vm.box_url = "https://dl.dropbox.com/u/31081437/Berkshelf-CentOS-6.3-x86_64-minimal.box" - - config.berkshelf.enabled = true - - config.vm.provision :chef_solo do |chef| - chef.json = { - :mysql => { - :server_root_password => 'rootpass', - :server_debian_password => 'debpass', - :server_repl_password => 'replpass' - } - } - - chef.run_list = [ - "recipe[dd-agent-upgrade::default]" - ] - end -end diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/attributes/default.rb b/test/kitchen/site-cookbooks/dd-agent-upgrade/attributes/default.rb deleted file mode 100644 index cc3ea3f8ade8d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/attributes/default.rb +++ /dev/null @@ -1,70 +0,0 @@ -default['dd-agent-upgrade']['api_key'] = nil -default['dd-agent-upgrade']['agent_major_version'] = nil - -default['dd-agent-upgrade']['version'] = nil # => install the latest available version -default['dd-agent-upgrade']['add_new_repo'] = false # If set to true, be sure to set aptrepo and yumrepo -default['dd-agent-upgrade']['aptrepo'] = nil -default['dd-agent-upgrade']['aptrepo_dist'] = nil -default['dd-agent-upgrade']['yumrepo'] = nil -default['dd-agent-upgrade']['yumrepo_suse'] = nil -default['dd-agent-upgrade']['package_name'] = 'datadog-agent' - -default['dd-agent-upgrade']['windows_version'] = nil # => install the latest available version -default['dd-agent-upgrade']['windows_agent_checksum'] = nil -default['dd-agent-upgrade']['windows_agent_url'] = 'https://ddagent-windows-stable.s3.amazonaws.com/' - -default['dd-agent-upgrade']['agent_package_retries'] = nil -default['dd-agent-upgrade']['agent_package_retry_delay'] = nil - -# Enable the agent to start at boot -default['dd-agent-upgrade']['agent_enable'] = true - -# Start agent or not -default['dd-agent-upgrade']['agent_start'] = true -default['dd-agent-upgrade']['enable_trace_agent'] = true -default['dd-agent-upgrade']['enable_process_agent'] = true - -# Set the defaults from the chef recipe -default['dd-agent-upgrade']['extra_endpoints']['prod']['enabled'] = nil -default['dd-agent-upgrade']['extra_endpoints']['prod']['api_key'] = nil -default['dd-agent-upgrade']['extra_endpoints']['prod']['application_key'] = nil -default['dd-agent-upgrade']['extra_endpoints']['prod']['url'] = nil # op -default['dd-agent-upgrade']['extra_config']['forwarder_timeout'] = nil -default['dd-agent-upgrade']['web_proxy']['host'] = nil -default['dd-agent-upgrade']['web_proxy']['port'] = nil -default['dd-agent-upgrade']['web_proxy']['user'] = nil -default['dd-agent-upgrade']['web_proxy']['password'] = nil -default['dd-agent-upgrade']['web_proxy']['skip_ssl_validation'] = nil # accepted values 'yes' or 'no' -default['dd-agent-upgrade']['dogstreams'] = [] -default['dd-agent-upgrade']['custom_emitters'] = [] -default['dd-agent-upgrade']['syslog']['active'] = false -default['dd-agent-upgrade']['syslog']['udp'] = false -default['dd-agent-upgrade']['syslog']['host'] = nil -default['dd-agent-upgrade']['syslog']['port'] = nil -default['dd-agent-upgrade']['log_file_directory'] = - if node['platform_family'] == 'windows' - nil # let the agent use a default log file dir - else - '/var/log/datadog' - end -default['dd-agent-upgrade']['process_agent']['blacklist'] = nil -default['dd-agent-upgrade']['process_agent']['container_blacklist'] = nil -default['dd-agent-upgrade']['process_agent']['container_whitelist'] = nil -default['dd-agent-upgrade']['process_agent']['log_file'] = nil -default['dd-agent-upgrade']['process_agent']['process_interval'] = nil -default['dd-agent-upgrade']['process_agent']['rtprocess_interval'] = nil -default['dd-agent-upgrade']['process_agent']['container_interval'] = nil -default['dd-agent-upgrade']['process_agent']['rtcontainer_interval'] = nil -default['dd-agent-upgrade']['tags'] = '' -default['dd-agent-upgrade']['histogram_aggregates'] = 'max, median, avg, count' -default['dd-agent-upgrade']['histogram_percentiles'] = '0.95' -default['dd-agent-upgrade']['dogstatsd'] = true -default['dd-agent-upgrade']['dogstatsd_port'] = 8125 -default['dd-agent-upgrade']['dogstatsd_interval'] = 10 -default['dd-agent-upgrade']['dogstatsd_normalize'] = 'yes' -default['dd-agent-upgrade']['dogstatsd_target'] = 'http://localhost:17123' -default['dd-agent-upgrade']['statsd_forward_host'] = nil -default['dd-agent-upgrade']['statsd_forward_port'] = 8125 -default['dd-agent-upgrade']['statsd_metric_namespace'] = nil -default['dd-agent-upgrade']['log_level'] = 'INFO' -default['dd-agent-upgrade']['enable_logs_agent'] = false diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/chefignore b/test/kitchen/site-cookbooks/dd-agent-upgrade/chefignore deleted file mode 100644 index a6de14221d876..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/chefignore +++ /dev/null @@ -1,96 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -## COMPILED ## -############## -a.out -*.o -*.pyc -*.so -*.com -*.class -*.dll -*.exe -*/rdoc/ - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/metadata.rb b/test/kitchen/site-cookbooks/dd-agent-upgrade/metadata.rb deleted file mode 100644 index e2fa67352e52f..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/metadata.rb +++ /dev/null @@ -1,9 +0,0 @@ -name "dd-agent-upgrade" -maintainer "Datadog" -description "Updates the installed Agent" -long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) -version "0.2.0" - -depends 'apt', '>= 2.1.0' -depends 'datadog' -depends 'yum', '< 7.0.0' diff --git a/test/kitchen/site-cookbooks/dd-agent-upgrade/recipes/default.rb b/test/kitchen/site-cookbooks/dd-agent-upgrade/recipes/default.rb deleted file mode 100644 index 1cba4f72b0d3a..0000000000000 --- a/test/kitchen/site-cookbooks/dd-agent-upgrade/recipes/default.rb +++ /dev/null @@ -1,188 +0,0 @@ -# -# Cookbook Name:: dd-agent-upgrade -# Recipe:: default -# -# Copyright (C) 2013-present Datadog -# -# All rights reserved - Do Not Redistribute -# -require 'uri' - -if node['dd-agent-upgrade']['add_new_repo'] - case node['platform_family'] - when 'debian' - include_recipe 'apt' - apt_trusted_d_keyring = '/etc/apt/trusted.gpg.d/datadog-archive-keyring.gpg' - apt_usr_share_keyring = '/usr/share/keyrings/datadog-archive-keyring.gpg' - apt_gpg_keys = { - 'DATADOG_APT_KEY_CURRENT.public' => 'https://keys.datadoghq.com/DATADOG_APT_KEY_CURRENT.public', - 'D75CEA17048B9ACBF186794B32637D44F14F620E' => 'https://keys.datadoghq.com/DATADOG_APT_KEY_F14F620E.public', - 'A2923DFF56EDA6E76E55E492D3A80E30382E94DE' => 'https://keys.datadoghq.com/DATADOG_APT_KEY_382E94DE.public', - } - - package 'install dependencies' do - package_name ['apt-transport-https', 'gnupg'] - action :install - end - - file apt_usr_share_keyring do - action :create_if_missing - content '' - mode '0644' - end - - apt_gpg_keys.each do |key_fingerprint, key_url| - # Download the APT key - key_local_path = ::File.join(Chef::Config[:file_cache_path], key_fingerprint) - # By default, remote_file will use `If-Modified-Since` header to see if the file - # was modified remotely, so this works fine for the "current" key - remote_file "remote_file_#{key_fingerprint}" do - path key_local_path - source key_url - notifies :run, "execute[import apt datadog key #{key_fingerprint}]", :immediately - end - - # Import the APT key - execute "import apt datadog key #{key_fingerprint}" do - command "/bin/cat #{key_local_path} | gpg --import --batch --no-default-keyring --keyring #{apt_usr_share_keyring}" - # the second part extracts the fingerprint of the key from output like "fpr::::A2923DFF56EDA6E76E55E492D3A80E30382E94DE:" - not_if "/usr/bin/gpg --no-default-keyring --keyring #{apt_usr_share_keyring} --list-keys --with-fingerprint --with-colons | grep \ - $(cat #{key_local_path} | gpg --with-colons --with-fingerprint 2>/dev/null | grep 'fpr:' | sed 's|^fpr||' | tr -d ':')" - action :nothing - end - end - - remote_file apt_trusted_d_keyring do - action :create - mode '0644' - source "file://#{apt_usr_share_keyring}" - only_if { (platform?('ubuntu') && node['platform_version'].to_i < 16) || (platform?('debian') && node['platform_version'].to_i < 9) } - end - - # Add APT repositories - # Chef's apt_repository resource doesn't allow specifying the signed-by option and we can't pass - # it in uri, as that would make it fail parsing, hence we use the file and apt_update resources. - apt_update 'datadog' do - retries retries - ignore_failure true # this is exactly what apt_repository does - action :nothing - end - - file '/etc/apt/sources.list.d/datadog.list' do - action :create - owner 'root' - group 'root' - mode '0644' - content "deb #{node['dd-agent-upgrade']['aptrepo']} #{node['dd-agent-upgrade']['aptrepo_dist']} #{node['dd-agent-upgrade']['agent_major_version']}" - notifies :update, 'apt_update[datadog]', :immediately - end - - when 'rhel' - include_recipe 'yum' - - yum_repository 'datadog' do - name 'datadog' - description 'datadog' - url node['dd-agent-upgrade']['yumrepo'] - action :add - make_cache true - # Older versions of yum embed M2Crypto with SSL that doesn't support TLS1.2 - protocol = node['platform_version'].to_i < 6 ? 'http' : 'https' - gpgkey [ - "#{protocol}://keys.datadoghq.com/DATADOG_RPM_KEY_CURRENT.public", - "#{protocol}://keys.datadoghq.com/DATADOG_RPM_KEY_FD4BF915.public", - "#{protocol}://keys.datadoghq.com/DATADOG_RPM_KEY_E09422B3.public", - ] - end - when 'suse' - zypper_repository 'datadog' do - name 'datadog' - description 'datadog' - baseurl node['dd-agent-upgrade']['yumrepo_suse'] - action :add - gpgcheck false - # Older versions of yum embed M2Crypto with SSL that doesn't support TLS1.2 - protocol = node['platform_version'].to_i < 6 ? 'http' : 'https' - gpgkey "#{protocol}://keys.datadoghq.com/DATADOG_RPM_KEY_CURRENT.public" - gpgautoimportkeys false - end - end -end - -if node['platform_family'] != 'windows' - package node['dd-agent-upgrade']['package_name'] do - action :upgrade - version node['dd-agent-upgrade']['version'] - end - # the :upgrade method seems broken for sles: https://github.com/chef/chef/issues/4863 - if node['platform_family'] == 'suse' - package node['dd-agent-upgrade']['package_name'] do - action :remove - end - # We have this commented and run it as `execute` command to be able to provide - # ZYPP_RPM_DEBUG=1 and see debug output. Whenever we solve/understand - # https://bugzilla.suse.com/show_bug.cgi?id=1192034, we can uncomment - # and remove the command. - # - # package node['dd-agent-upgrade']['package_name'] do - # action :install - # version node['dd-agent-upgrade']['version'] - # end - execute 'install agent' do - command "zypper --non-interactive install --auto-agree-with-licenses #{node['dd-agent-upgrade']['package_name']}=#{node['dd-agent-upgrade']['version']}" - - environment({'ZYPP_RPM_DEBUG' => '1'}) - live_stream true - action :run - end - end -end - -if node['platform_family'] == 'windows' - package_retries = node['dd-agent-upgrade']['agent_package_retries'] - package_retry_delay = node['dd-agent-upgrade']['agent_package_retry_delay'] - dd_agent_version = node['dd-agent-upgrade']['windows_version'] - dd_agent_filename = node['dd-agent-upgrade']['windows_agent_filename'] - - if dd_agent_filename - dd_agent_installer_basename = dd_agent_filename - else - if dd_agent_version - dd_agent_installer_basename = "datadog-agent-#{dd_agent_version}-1-x86_64" - else - dd_agent_installer_basename = "datadog-agent-6.0.0-beta.latest.amd64" - end - end - - temp_file_basename = ::File.join(Chef::Config[:file_cache_path], 'ddagent-up').gsub(File::SEPARATOR, File::ALT_SEPARATOR || File::SEPARATOR) - - dd_agent_installer = "#{dd_agent_installer_basename}.msi" - temp_file = "#{temp_file_basename}.msi" - installer_type = :msi - # Agent >= 5.12.0 installs per-machine by default, but specifying ALLUSERS=1 shouldn't affect the install - agent_install_options = node['dd-agent-upgrade']['agent_install_options'] - install_options = "/norestart ALLUSERS=1 #{agent_install_options}" - - use_windows_package_resource = true - - source_url = node['dd-agent-upgrade']['windows_agent_url'] - if !source_url.end_with? '/' - source_url += '/' - end - source_url += dd_agent_installer - - # Download the installer to a temp location - remote_file temp_file do - source source_url - checksum node['dd-agent-upgrade']['windows_agent_checksum'] if node['dd-agent-upgrade']['windows_agent_checksum'] - retries package_retries unless package_retries.nil? - retry_delay package_retry_delay unless package_retry_delay.nil? - end - - execute "install-agent" do - command "start /wait msiexec /log upgrade.log /q /i #{temp_file} #{install_options}" - action :run - # notifies :restart, 'service[datadog-agent]' - end - -end diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore b/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore deleted file mode 100644 index bae3233263f53..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -# Exclude system-probe test files generated by running inv -e system-probe.kitchen-prepare -files/default/tests/* -files/default/clang-bpf -files/default/llc-bpf -files/default/gotestsum -files/default/test2json -files/default/minimized-btfs.tar.xz diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/Berksfile b/test/kitchen/site-cookbooks/dd-system-probe-check/Berksfile deleted file mode 100644 index d1086cfcbeba1..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/Berksfile +++ /dev/null @@ -1,3 +0,0 @@ -site :opscode -source 'https://supermarket.chef.io' -metadata diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/Gemfile b/test/kitchen/site-cookbooks/dd-system-probe-check/Gemfile deleted file mode 100644 index 01b5db30b2f16..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem 'bundler', '~> 2.2.17' -gem 'berkshelf' diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/README.md b/test/kitchen/site-cookbooks/dd-system-probe-check/README.md deleted file mode 100644 index 4b81ad7cc58c2..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# dd-system-probe-check - -Prepare environment for system-probe test execution diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/attributes/default.rb b/test/kitchen/site-cookbooks/dd-system-probe-check/attributes/default.rb deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/chefignore b/test/kitchen/site-cookbooks/dd-system-probe-check/chefignore deleted file mode 100644 index e08f95962d56d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/chefignore +++ /dev/null @@ -1,84 +0,0 @@ -# Put files/directories that should be ignored in this file when uploading -# or sharing to the community site. -# Lines that start with '# ' are comments. - -# OS generated files # -###################### -.DS_Store -Icon? -nohup.out -ehthumbs.db -Thumbs.db - -# SASS # -######## -.sass-cache - -# EDITORS # -########### -\#* -.#* -*~ -*.sw[a-z] -*.bak -REVISION -TAGS* -tmtags -*_flymake.* -*_flymake -*.tmproj -.project -.settings -mkmf.log - -# Testing # -########### -.watchr -.rspec -spec/* -spec/fixtures/* -test/* -features/* -Guardfile -Procfile - -# SCM # -####### -.git -*/.git -.gitignore -.gitmodules -.gitconfig -.gitattributes -.svn -*/.bzr/* -*/.hg/* -*/.svn/* - -# Berkshelf # -############# -Berksfile -Berksfile.lock -cookbooks/* -tmp - -# Cookbooks # -############# -CONTRIBUTING -CHANGELOG* - -# Strainer # -############ -Colanderfile -Strainerfile -.colander -.strainer - -# Vagrant # -########### -.vagrant -Vagrantfile - -# Travis # -########## -.travis.yml diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/files/default/.gitkeep b/test/kitchen/site-cookbooks/dd-system-probe-check/files/default/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/decompress_merge_module.ps1 b/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/decompress_merge_module.ps1 deleted file mode 100644 index 13d2c62887c7d..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/decompress_merge_module.ps1 +++ /dev/null @@ -1,61 +0,0 @@ -param( - [Parameter(Mandatory = $true)][string] $file, - [Parameter(Mandatory = $true)][string] $targetDir - ) - - -[Reflection.Assembly]::LoadFrom("$($Env:WIX)\Microsoft.Deployment.WindowsInstaller.dll") - -write-host "Extracting files from merge module: "$file - -if(![IO.Directory]::Exists($targetDir)) { new-item -type directory -path $targetDir } - -$cabFile = join-path $targetDir "temp.cab" -if([IO.File]::Exists($cabFile)) { remove-item $cabFile } - -$db = new-object Microsoft.Deployment.WindowsInstaller.DataBase($file, [Microsoft.Deployment.WindowsInstaller.DataBaseOpenMode]::ReadOnly) -$view = $db.OpenView("SELECT `Name`,`Data` FROM _Streams WHERE `Name`= 'MergeModule.CABinet'") -$view.Execute() -$record = $view.Fetch() -$record.GetStream(2, $cabFile) -$view.Dispose() - -& "$($Env:WINDIR)\system32\expand" -F:* $cabFile $targetDir - -remove-item $cabFile - -$extractedFiles = get-childitem $targetDir -$hashFiles = @{} -foreach($extracted in $extractedFiles) -{ - try - { - $longName = $db.ExecuteScalar("SELECT `FileName` FROM `File` WHERE `File`='{0}'", $extracted.Name) - } - catch - { - write-host "$($extracted.Name) is not in the MSM file" - } - - if($longName) - { - $longName = $LongName.SubString($LongName.IndexOf("|") + 1) - Write-host $longName - - #There are duplicates in the - if($hashFiles.Contains($longName)) - { - write-host "Removing duplicate of $longName" - remove-item $extracted.FullName - } - else - { - write-host "Rename $($extracted.Name) to $longName" - $hashFiles[$longName] = $extracted - $targetFilePath = join-path $targetDir $longName - if([IO.File]::Exists($targetFilePath)) {remove-item $targetFilePath} - rename-item $extracted.FullName -NewName $longName - } - } -} -$db.Dispose() diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.htm b/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.htm deleted file mode 100644 index e658d1b5f675c..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.htm +++ /dev/null @@ -1,32 +0,0 @@ - - - - -IIS Windows - - - -
-IIS -
- - \ No newline at end of file diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.png b/test/kitchen/site-cookbooks/dd-system-probe-check/files/windows/iisstart.png deleted file mode 100644 index 29f1c908592a36630e1433cf72556634c99492e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98757 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

mEW?jjf>(oy;h&7B)SZlX_Q zXDI_z4_B;@3F9=MfoxG{1=p&89*|p6;Hs&k@rJo#H77~+X48kc%2d5jIW?A@Hq!Wc zue165v+W_?;Gyhd;=#($HbW{}9K_F{XB~su;=`$+Nee?_fEMflSZ=T1n^+#Kr4H2T z1te&v01Bd5j2!zfTHayE4Xhq<(PIGa5*NX=ElLAcWCyv_(E*F^aop~vp20A zy~bBXtEeUZV&ZK;sE%b@P(2Q5)Y(pFr9Qu%&Z~VJMqF)bkeIbni!{zl+?ZTR2{m-q zLz=LBOot)6qv?eX&ZIMkHWM30n?3g@3@^p+=tn3TLJjr>Y0Fe!UX$l}=RnK?Mukwy zSCg)I%`d#AbS?qo_P}0YqoOhtil~pHIS$x5e=__`x8JOwek0pn`d*?`T3|lCFp%K)Z2}ZLeAvdWuiR^95;JZd@ zp+|_}1$8<~XG4OQLbjZ4U_$k8tu4|~Cj1EHO{M05M6A3hjTR20p4K-p*0}A4@WTuB zS9a`epe5~F7g2b!QE#-xweec7Bx5cE$8C;rFbtHDo|Qs|G`GNLYInUn(wFx^n|M{k z>G*jdGrC7A1;^Laf0ZTDfR^StRt}sCrK9qLbtp#~f-Py)(w*PH|NiXoH*Du!+h~Zc z4r%%oxB9`GHY$*1{OP;n%Qh>rK}<+ zrrEHiv62loIQ&#b2f?HjRgFUc>^4t z=ckKq(Hi_VgGB>%Yle_9D(+OIpfw6nVwEoF{1`Iw$(2a@vp3jwS5E-b#zpeNkp-1% zq|8|bQlm-$RpCT|z6BFu3mZpi&?O&XG#ODjNv2VO*j7}x<+pqh!7bm{3Z?A=xZL$X zRdF*QK*^2b)~o!Fp-bcJ`!;PvT6pf?D#nWlxVpit**a^0L=j9k3!&}h*Rtpqe2hH= zVF}Uc$T0~#!4H1%7yNA!%KIdWpj0`hxM`QHly+4$om@?;>g)A87UP~uM{ZO(?7!9q z5z#~mPszm5ZNh(HqwlUuX$>|y27=GH)fi}==TJbI@?h90ILD_uVmH~LT+*sb{l2jg`|KBMXw zi&GjQd^H8 zWHELhB=|t%@L_EH-gdq%s9RZ#A4cnA9|S>R!+@|`6ak!aomCkaD3U{)Ix;hbNG?fictJ@tq%7H$3XqE(^Pd+Lt{gF^#2?{ zrCR!}uX;rXXu?wMS*Q((yEKIBcAcRPSb~H-_lVVq^Qbh!C^J=re6sCn8ss~JD>*u- znr&6H>?JxBO%Wi_@-hI&7Kd9+^S-`3SLThbGlS&hlMD@T4DtD?*z_5A&j6OunHiM1qaho(&CBV*sMkK|N2_?sdW$( zoAaJnlwzE8ljsQYVjX`7E(j8DGjy@~s~SvuM>l-cKkoE`&*ta`Wm8s#g|fM*k>Xqbp9n{|I?-hxpn(j>GAkXb7s>V7BbMp zUlEraxdVyBu?B+KMo|bEe9+_^76xz2V3-fjDpL!TnEw$AO*+|;DM~O{$sH&K85P~a z2N)fAe1;iuK1{~(7xUxK9v;&e=qGQ|fIyK+sm)$p%bgBA$6fXM7zG-ZkTEI+Jq!lf znn2ZhzZS5eTPqFg(7#kVrLF0xZCfj8kV21(p<6g7AF-)HD!0UW)Z|Zy(~qte;Fm)1z7XNMF#$12+sQZF`Qk+vz9eCu+9l_{Mj|wv40j_=~C-|$MtwF zgY-7Wp9j6-aez|B$z-^=+WDtz1O&d$SwQOqkR_YzV6Q)ZtvovOUy~K~{I?2|o|K-C zBuZiba4RX)@N>r0Tl$%9#JX~_p z>Q^(Ya{StUpw}R#$l&^&U(-AA%sX(#l=Q$RIAarRa!~855M#59)*X#iJd4$sjMX1R zEBiG0nlzaXBHe5aUruaBb7ut!sR;WDehyWIR^Trid~jsz)=e&*+` z={4o|`M*^5szRj6dG-=vNpIy6$x3eJ%-rissO|)6GTH0NMkM5Qrh|2++t&@+b6Uvh z!=uDdRqlIs^lyJQo?>MN%kY_-;wRq7chh*$C-BPd0FyXng_y6(M9MHg_SmpiNb$aU zp?>#Aig_bu7c0EJR2ozSyh<&27Lsb0q^q5oX%iiyUlLB)g-JJClBvLF7u@6K+v67A z%aX#;f6USKuh$H9UXlut4pA>-j-}+HukFVaecb$>^`*@5hBh2gPnN z)|GfALi?p6u%epRR@G6~#ho`yGmOTw-0M`-9B3$dX~&3PRQ|D!!GTq zE{%gw5z*f7seT#ncXSxhByA0-M&j;y#(B6>x5dXN_Jl*rfP{I$3 z{F>syMLU5++KOkipGNeZg{EMddU&#a!76cy>yqS2PnG-cZW&BSNPlhF{SY@E;eFSQ zn4iXSUzakI^YeG)J2x3{s3i8hG870^hy8*)VS-4x9wD2<(^aDb{Yzx-eV5F_OvRWj z%JA>rwyuvIrj_3penhtdaSOfB)e5S2f5iIjp?U5@^A!`;6?OAub(~!F8#5fa?6cj8 zXMWGTz$0E)BRZ1Lnlpc0yhKWDc#e3r3+aZAreO;~LWSYhg2Xn}5w=yYUpj@^)Wp~w zD{Q^)-Z@m*fpxAC_O9V~ZG^KBXC)C@K8rFNi#C52vototY4uJ%|JD;82IZ1lF?Xq1 zgjLv{{e<78hTo+nW{x@|?a-@`{jx9XyD$5bKh*BcnM4KD=actqmLJ?Ey1gvxQ8F(H zAl+^a@G6NXI`-H?-)!&q-1Hq2WR0xtNsSXBG%k<1SqJ!E zw66DIQ?qDZ&uc96YiG?MU!B%ijrtg+ya356HDSg}p#cu%(wF9A3eUzAYQ|+ZFwmY@ z+4?ZH+!TxCTCL-+qsYqWynt;{69=--BH3l)jb*$gR*ZtBcSLi=KbhQ15WV$OlvauM zXn^6cpWd}+)1!ylv4{4sm-?`qUa6QC&J^WoLHx>$@Utahy%~{s7Qy5lVzC?|u^fVw z#~wf0-RfAY(tRn0nJhv+ax>QjMZD4O^NYvl%1wy5ngt?(0ng-IOi` zMV2M*j^$2fKw_MRu=9n;O~+Lk#%VJkpATT^?}l<2OJcltQ$h*}B8m+*amCA^;kW2z zr9nq-O%J9*vG|d6n6hu=@VoE`A~Wt|GUa3SXUSyGlGV*u)E}Rd-Hl|Xi*b&e<#3CE zDVM^0XEuXsHN$ z=@@VQH}OKs*~IS)DZ@+erpTpNKPj#sb#5N_(mM{UAN14jc2Vh>b_#f7SX}NEJNHU? zbaL8sa(a(*o8rlTa`P#Dp;_}pGx_PGP%WcKC&!O=nhkzNQPPO)B+K#wjrZ|(qxwBJ zsorScZR@1*GENqRB=*XfyJD5R#Gc|K(h!VMD~}#5i}~&p@!ct0;Fn4{VQ(3{-zDE!dwe!i#wB{1JSABLqU^i}y8+0EkPI zY~cLvj$Yjaqi&cFJ$iK@c)y31{2apS9T1Q8v@e)I&55y4oHEUe5=F*{nWSeGd!Ic? zpB*B(6e3Apx6N8WWEL9RjUE=8`6@P(1zlOKn@tD_o2u@diq8AeAG;~sbSNB?;GUdC zbY82qv8t8Ux!n9(EA&J-W|*gDn8%?zYsFyTHT}+OgPBdqnnU}H-f63Sq=rH=&{pfw zkF=yHTLBvy4NS;PzX;rZE7PBk^~8LkWDV;m{IVMVa zS{1KjMd0N}ikg)XaRM=)ZKz7El0U4+7cOYnQarUu#%#Wu0$_bBLn=l6ev+meZ|$PA z&riLVEM%)Q#I$E5VIovOAe?a&{=0@7Gl2!U<3X@s_FCQHtwsLi4Z(NeIwfYN8O)}$ z(T(k+VAk!pZ1qjoD&6X3Dt_g#b7`fB3lmgZSuU5v8u9 z%*4^Ts+<-#;W*`^r^?agebIZxDtmUq|A())3X5y&nuQZ21PBmsJ(CJW~5sGJ9>;YdJ^^i8bIp>vcd7U!twoN?R?o%bkkOV zwM=)FE^`C<>N6Po&1nF^wYyx^%_W~;fd-!>q@<^RO>>gDvk#DW)6<>4#CIrR2C3Qs-mzwM>#G6d|J6JMd$ zQ`55QO=Ft`P8z(c7ng9Q&*A{u27hbMyWQ(oxM&`S4DZV5zeJre%umqq=Tx~qg8xj0 ziMJ0S1TaW7#{b;b4I8I?D^TM)QVkpT!lL(+BY2P_0?8z$f(X+55>z^dzEN5_>BJXt z>&+B?T8eZ0qg}oyDO8f?B`dO5;6E?8`sgq~OA?g_VraIzFVl&1}a?CPGm@? zqo*YkOyWez$m%`iRn)W7N=ZxbK(3dt?I6TSG}p_<^l-2&Z8&o&_H*A$VQlZ4cTS@5 zB=1T0NZQkaXRvaZp$1NK>4D2eI*SbngAF9dHX+YGJNLlY^zA2WLUjwo;!K`DNLV0K zq@>|lRV&VT{SwKDKS3)7<^BfwUk~<9kLXH^#&1rI8FsC~9+fID?&6(`>g_5M-J%oi zvg+-Ezw7l-FmF;g#0T3%bQ)}Ehdid!)7oiHvyRXRLf^>@auKAs^WI=!#VAfR`$tvl zAN_vy^Oo>ok?NDFnw;X@~56-a*J|^eXoR zqY_JW$cYdaYoNz#pog~=Y?Vey%R6XD0A=wT(IV+>KGNS<;6b_~r>S&!Fach4ZDp%QA*{Wq3NMi zt65^;Lg}AM-i=0?CyJ;qZH>|dh|&(D!CTk(aJC5mZnyEtxX;rmM(+%>?O>={xkp?1 zWDaYsFs*EoDNEV2emFG3(-%pA3Mc5VzJsp3(_h_8r^rj|*i6rNhkoIL_Ie0?s0B#X zwwk-Qy_1JeZRa*`=E_ft%lC-OKbgw+d@_B?38J*R_AoqmMX~$MSF^y?xFFoBBUYfv zpCcvKEX7`J#9yrft#LL>5aNx zh2+R?{UK}%w+>tMK3ZfOET9}La9)@-j=2=A8U>#@Vu%VNN6>wszC-3i7Xfm1Bu{m; z2A`Bt{#fp0Z3U0DK8=wYV=+0;i7KejOU&(3&+YakeS0c=CEDM5ih?z0h&od5AT&j! z)ywt~%~m%wQ|DZ;Y(G$9X|L3}Te~91K}bTwU!qoaLorz$!+Jx%QQbLi>6P=)uCd*9 zkKZ^hZOrZT?U&u}k;WP$x_W!?$gG3NtR>jmUF1{$bZ6nO)16;y+WU&mJnwB*KmBVn z>aN1D^9@{DZ+4Fr;)&^!mu7TI(80pE7Qrm&kC$#zS93(lzsU9DysUG(K_ixj{QQjY)GtZ-Cyh8 zSi;rMviaTC39-PfNnlwjUt2SFRU-CHqUz5+%9wg^)pt>ZUEZ1F@R{$!&Kuu~z;3o0 z&qa1nH&YRmrU*)#XE4*GJ=7qvT8EyqyOwjTU$&`nk~LX?PPo=aPsGj+n(`njj`bIYJ?%gBLL*Me-xlyGgEc>R!g!J1;p zo@izlakn#d@*o4Hy=8>GV??BIggO_>TCu=gx6ba<&EPZ1T(-{aFv*<&V`e(R{WJC#zZ_#Bs>3C(^K05SuBcFo%9_X~ZyjsA4AXazjCbaQ@vTK>{Wx6(v@ z(ggm}?+m3bjzelkJEnP#&Cf`~Mo3Xch`$a zsWoR^k!0y@O0*1O1SG zoU{I07Xu=uMMB73ik*Mr(Y+SQt6AdPh16FIkkHw5lsPiA1+rJOOJ8S~WabQH`2ckF zf`d)SpvM0h<2_Xl+!PPJvC9myet?fyWM4sM^o#L<&kCu~P zj~shPp1G?XyDRNqDj)wuIcCO(+mBRC}3*almecYW$wKEkT%a>fL zA)e+%n)VgZ$^p8PDc%NFjwV2zHEq2wPv;?6cFWWI!qNGHJl82}vPF8|aQsY{1~GWD z|0^ycJ;k!quD_|BIa}6hm*O>DwQps}KiX-Q@xdal>PT_glU6=`mvJ#3|Kzvgbtqy{ zHdTC&mzfH39O+2{MCPAA+3g*Ko=Ebz*z%J!~T|9SPQHN34fL+Cn?Nl4# z{1VBD3c8y*d73u8k-2t~y@Z!KlWsUmlm?}Mtfy!RCu#|0Xb7c#;z~8-%TVWy2MWgP zbEX;dW*G{-lOV?!r@B-=Yl?9E@!{qx0XAsw1@zQS@whtDc?zd==CTseaBI3VwOXj~ z!DvW8c-j=O`iu*nj0-KtT6|Vbmvq`SE+pD@F4dO2gkq~~YYOGr8+wulqBPW$WohlD z!Fd4&{??xjx0YTg+gG={H*$nHd;DtBiK|Mb>BCOx%=?D4-Yju|lyLE!HXuysr7ia5 z8QQ-NNP6&ssKX)tEA9d;ZWmH(g>=i2w7s>)(JluA(`|HR9+P1nleOe>TN9LH653PU zIA^`sLRJhHJ$!o*KC@toou4)->OAq?0`dI<1pnGVa%>k1$i)9#iif*N-(53_rzEIkvOK_R|4> zGDY^Y1Z}g0ZAs@Gi0AV+)TuI74>Cpmq|I+7uGmp6IFrmd63X6v%M1=mN|swPf=XgO zn@4q72z*ZYM7v zW-gtkLr)TB@IFmaDO182zV{`@5H*U0m!~Q_rH(nIGx)G4U9u2)v8PbxljVu_Yh z`oA_B`tfSJoD4(YlKL$|wniB&UQYDS)ymvDG!#{5`$6R3OJU zyK#ymBnqNm6eAf&vVK10;TVmf?(?BAK1)HR_^1{tTWAtbO z)P@N}RC-TThL&Rg3b=e$0la1-^k&5cBx5d5+8l$${uL3)(2NxIW;kuvhY_q^9=+<$ zt#eM_{cW&oFF>gKkZ@&m(UAGNXf2fRi4L23=bD;;Pr_>crPVyxDw;Z}Q{f6cq_P%) z#b?$q9>?p`$NqmCQVU83l( zKsHxxh28)<@1=g9RGIpHG=BSs`O;?X)f(nDXIZ`r_PVHYK8(`Z=;E4)(uT<5n%5OI z7$uF^CAH`!wU}kKSQX);&f~@VY8AxFRg|h_JqV81OSGLjr(4~2De zvm2Tc5Mz^tV3`+Zo0DLNRbjJDKb^-4-%gg&b>K}q4;|XHe^mT z9LCQW9(ycPL3U7)Iy^Q{%h=L4L_F^hkHN{-a(SLU>j#4`+)x&pG?iWhr(k{tZ$UaQ z!9JfaUjxlk4E(EHyiEemKP&0;TcHTKe0=Znn`n{SO5`|`cRQZT6nAxxc!5CT*hAsO zTj9W60f9=NzWCxysqcbk>_VntL8h#}{W~K$F>n0$<8}BWqTxk=GRd*ulV{^kiQU!Q z55(R3KS|!1Y7KqT-T35tZu{DgC7fqdhl5m|Crdp@EXS25&zz~zp1#PRFV~r^!-})c zim}5>@MmC4jt6g-LxZ*L9KhuluLD=Jt57>WJn`n=x6gz&Sw{C)jMMieup$zmao^GX z0soKMN;2y;j?p;2q5zEhMyud*0*U^Jf-TifCzbdnb`5VPZEqHJ57vdh<+In7)3DO% z^HT30&h^+;b&j3Xm#O;;@n9(8e%mtxPy&MSl#6ecj$-N1boQ*ydD{;{lm$ zNL#OoUvH7zH$=r=<$(RJGM#4in9dfU&=xF;Pj0aS< zGSX$2xaeD&M%{NB^V6EA!ko6lyg3IfTB*Dp$kOO5oFTlKAhMr0 zZ9_PhOEKvVEm0k-`6bdaCX_oPTC*yeJHwaTD_SzcNHS?f0ktEYGJCtcfxk{Ez3(%! zk3;(g6;}=^;=@M&mbz5}C&6blP6AD{LL7}FYnZ`aUTIMR84;I3GM544CzMv3h8z%Y zlSN^UM`4abgW09JX-{Cxu|n13gD48Z4f5Zc%^~fv?W1MJ6kZL2(YgkTi^>BV#q{mp zsYsx4WNcQ4ET4t6Vq25qGj;Pns)#f6i&Rai10-Ivq}Bsc>d=w~3N3X=%JQjDlPuHL ztx%EfFpx|L@&_S6V`)_z@?3_vl@!C3Y@@YolQ}ZYNr>TMit%)|zEG?VfLQIgCc@S` z+QldG%vJ5+d^oRNlsJ|DPYPf^e*P?D9#30fJ6?1@S#TR7vYjNd4-xqj$Ge>|?}E4P zL^)T2w_=SuPaeB^0$JKin3MBs;V4@d!E1KU_OQsWmg|!;ILCb!CIYK+g^qs`v1B#D{YGm=apM>;!17f@*R@`CAi^f;A>tu z3uCV#W4^H6jIdtRBY=-qs>=KWJIshV@0&+%rAo*P`AOx(a6=_Lekj4 z)LlwfRw)4NgW>nS%<_GeyFi}lZ?U=s_I&O{j(4eIlo}kH*)vB;3U|~=e^w~VV!tUB zSt&YWEkCg)t7m$ni+H22vXvy7(0M8y-TXd|VkNys5FKM===9MjxZmKI-vTefR=Dmd z;_n^b`G2QjbSDQ+qS@bXW8dz)oOsnJ@+S-R5!B6SHOXhz%~Lw@p+c_A;=&R1c_neWHh=7nA!kvSr>8YLq#(l0Vn zD8jrWGGc@mGYlY#(kD_BA{quw>InRo^W1P=zNIq3U4m7imq~L>2wr5I*6x>F>XjUA zk(Em}HC(kQTF}SWyh2yI{Gn)=vwfPaV49}baH4FKFGqSXE5}wsqmCKa$gWY#JnhQF zi)Gt*S<+sy0a91I*)@W15ovv;RfSN)ouX1gF$PHl;A&*-zqr`-y{Gk`#+3`kv_fi{R^F67LaW zPX(%a#bZoHVr&K+K?K}viS4`lCPeZf@nu;3OSEcL()#Fw18u|8E?e`Ek6}ZkEF-MwGj*qxzbDbM!IjOGB#W+L3%G<1eYjCOK53psFiFR zPBF-*Be>9!@5uUIj@;u}afG;Uw|D<+TUuBzw_H^PE!AFi_$(4PVZy2}&Lc89E6x67 zA=n}!9U&{cWzWG%MX{VYj^;6@))~fd$X|cla!a_X4exdhHZO1j|O>M{5Eapu; z4xsG>j`U|@S_R@L-HXw9vGT`MXuTS~*$$xv{_-+$jfBl4`~jp|tZj>u8d zzqHNYA>gA^-R*U*2~CfWlRh6-Ifitq85ji!N?HT0&ix2!4Do z^ZyD+mMK-;x$jhg$xeZ2ZzBJ?Vf?-L>+Vs9@Pj>GVPyO5;ae46{a%cSf#G8O1iJnV z4Lb|!?r)M)7+mVk2M#r8k2L8qRQGd~ud>vR&^L~7)(kS&t#g-&eXL@yaQyf&h$CJY zUxzD0i%&7vlQ!4)W3J`L5=((XM?{ur{Gu>KQ!H-XQ>??ArtQht>qgmp$5IxqWqjdi zd}IiQYPj!o=xUhgpJ-`K<;ZCm5u3%%awRQuWY2Y`%?o5twWm(izc>~w!&>CtY4g&n z82LOL9M+xWv0S}?rX!CZY|MCU#CmAJS`>aO<<3s}-xjC448uv9b8Dj60P9Q!bXU+F z=;u=b3sxrcjr}gHz_p8dSSfRON_Xf?r|(=y>Rfo}T&SN#KuSpf1n=n7*A{;Njp1!| z4|b~62gjS!NVXrhuNc00({}6U*C+E8TRt*Fxc=dfvD>HLL*q2mEUvy)0yuyXK+q~| zqb+D_`<)JlD#m#Bo8iM~>PrSfEP6s58({SI>~||*Op*2{@Fs0ZfN-NPPpd6Yq_Au$ z70xKx-!U=_n&@wFgOUms!39(AVZN3J9s97M$<2tbkqBMLcd>J0{R?;Ry}>l=r#F z=2_&%zidt-*rGrm7^}yZTFsg?hlqHKnp%&DGzY{v4vA#mxzS_^7#=URLJ9`DmufbQ zuP{@y(R8zRkBt1Tj*4?5!XXO#8eW}Rol_m#9Sna!xx2kTeV_Vm4W+NZeCt?u37Fn z2Q<&|@n(eTg5f)A!f7b}S`wZ~bZaNpBoUQT0gbTBsh z%gPV&l4#O*6I9D}YG2Q0;}DUs3i<-y=o2UC=0>fXstWj75$4kdjM+isC%URG`b=jA zWA=K=XwE7m5aV%sgCS=F#EY>r!&jmz1p#TuDjT=(N19W_gf8$O6FOV*Ps2Hd1is-! z-jO!5RMc3m;ZCzer#}cBjwzP&LotBpz%S|0SBuzBC-qjF^Z}@gqO}~V?I)*mBoOC> zR2KM7f84maXKcI=;j8*2Y@{ zMD8X+DKdgwwE70_^EA-YHTXV9C|;P-gloTs ?Gs&F(#bk|RXYlm};`IJ3jVJRgAZ!gyX_ZM7`kD+tNrCti0Z@{cP=WjYiKMuNYTIlt65hZm<-|Ly4j-JC4-4h;+sj=AYdcF$~|W-<@T zpx%AGy;}>qVWqdm?rMIgabuB9K75nKxc$a&_YG+8&BM0Fi|OMekqqc36brrHPs_lCUU#8iR7YT*pAc@WGt;>0YTV|0 zjs5xp$JG|s*!f##+sD0TxKuL5*-A6h2_=wN?wF0tS8KV>a1Bkjgv8K}#DMiww|w8Y zl0>(JOuvLe*Nzml$W#AL9Hmy2LY;>~zg`b4Uzk{lf}A+x;_tL^AN+5MFKMW#+`8cU zY^EuZ_^b#0e(PH=!-%wTX)AvRmm)1xkWeV)AUHs>Z+oF_8e_GXP2Mqe(BN~DZZFN~TkG~hTl z7vQuNVG;U_zIr3 zH0nhsYd&FxD3i=&0FqICST1(TF}7LIr;F}1zWJrp*YY@FB%a7~S=0KZ(^!SQ)>-{^CHFrIJWFr}uS!0?`_hgkjq1CYis~nD9q|{lmV33`b7+l$ zyXpsQ2TNl?!;F7tP&3jW_&c%B-s}b=*CJxEVNn<+P-IVCXeL ze?6miy`A6eXYFfYMfEU%**y2B@jn+@x`BqK(RR8^gD8z&;j=q38m(ZHlg=`XsXLNs z?zJyf$Y5q9F(>lO%b&jaYqyNNf%30lwOy|#$rg*(Lx2U&m+yAhMrFbTpu9XRiM6!% z4nWsl0kz@cKk>3f(IOH(-)JV?=f!iB=8T4W^w-{B_np_Z8;%;1J0ijkSVl(y-j3@n z9t_;v90x`K?_*Ph>2#m8x*d?-+Su6{T|Les3_DB2dw(}n(m1CWu&^smah4ExQ>4pNHJUP{*YLcb^aJH3v=kTS}{=up@xmVDf+ z7Qwh+;D8ZLdj=8qi6|}G$6q6E8~b20%4=kEBz^k<5`r6y2TD94!i9FfmSPa9fT!CT z##>wSJ+2y$l9RQq`l7;&>!i!woy#IC1Q=-Ne-50%oWD*1K#iZQSTS{OyLQ%p>9^l5 zOv?=9$y9F2)I{!dXfq=fDj5u622qbwIrv#}T;F7N+j>}kX4WiEYp*VJeYx29t9!6j zD*G5|7YiebaBU*HWAX2#%PwT&_xc@EiYlL2>*D#g;mC)^$U;_`Bg!A&{%x1rPF5%? z*NZN~lUT119~L;O)b6aMP+0r+y4gy#**POfkNqseKe-Z5eIU_wHT=DWYNvx{xv4>( zsY)l410#Lk;MmY`e@`dhhTq=x2^2y?Qqx!2fNFb**zHJsI9;o2kb*@6FT)?ln1>Pm zpv|7=mo>ehuc&HD7)P0eU4f1hEe77NDtEBaSB)XaqJkkLycV4;y=lQl1GplDobY)! ztXvPp{$Op=${HMP2zj+|9kf3(7+nln_TZREOx81(_qpHrq0(578c7t9(cshC^&P)*=!NoKow5uj z0CR7hnzdcKww}%fnEP<>hiF|$E#S#)?HH{;s^~+I%hRO;tT)BoNX>k=izVp3^v}jf zNy<7vlLupCyhOz{cKq{fD{`Fd$Cj3#)pzDUKeVcfzkt;Rh9WijfW=nga zDK8>$YaEjqI3twim>=u0Kf0r{o<~%;zh?D_DgOJt6862sEvCZb zdvOg`1>aTGtUDWqy!~vAib(VGN9GweRquZy1`r<+$>NpcdS|BjIKZd!jtB8qx$*EA z(87vi|4t!4Ok@lB9WG9ZY;L}z`336luOtWH=ll8bjd*fEhv;+qc)YuL^C$RiK31E4 zo%9s@Dqx*3d6p%3oWM_r0HUeaG3nPanX_KALl6T-cvVLEVP;HOKj?m67$;#Fmop`Ous4z2Pk~Bps#)u-+#l4nPc4zPinMap z`LJe;`xG^Z6Ars*3A0SW0xLSEv!56tX}w|Le^b@?y`u4lm_2FWqVT<|@2TC^esA)* zT*X$*@~H?y_>(+9M8zW-qYvkM-0-0>s%q2~3e+kJ3m z^JmpKkMK(Ty{W+xQuQHRC8m*f#fRb7I7 zSGPoZd~DEnrASn>Y8rMGdZSAa7+WH{I9?hR%65$Yz)hPKHfSgM)hBup#2;)&J0^Jx zZrkd+Y4E zr_!!x_w3$O)P&!HF|#z%5AjFU|B#9QCbk(#wH!*@MW~V!>V`F|Sz|fJX1wY3P?Hz| zg!U~-FT#L6%)opB&yrRLNUbI$-YHi_yrsMd2S7GbnF%Fk?8^An{rh*d6LcQ2(K)Zb zB2TM5M#1g~M8m|xV<$>^fm0RxxjQ)U;j{R~h3na3O-KxcQ~hk(GI;||-h1E(ucQTp z70Zqkn1yYN4$g`;jRxm6K2Z0mH(mC8+O+i?>bQl0O0@Boylyn zm+_w`C1uhRt`$e4ZQiw<+*vEk1OFuRj2M^ra$@YV zVC)KnOtvVW8nYhi(Os3}UsWbw&%hIXW}>=yMY{yA)3w=O_j?AV*_w}J18BbB;UR&`+%7ULs%z-ZzX^vx7sUMAfG)EMJ+a zV6U$}eY4o&bObut{?>gEuqbHf(Y zQh2QtNi|dEx)pVkZk$2>bie&qC-Go*(dYayy9?(D^dqpN>6v-*n7!}bt9x9({qI6K z$;p$NF??(AOBlNg0#Tj3+dg@0Sxr*n%?1aS?d5A`s--|u5-cN%OlEy z{&<9+6g=#uQRxK1=6*yE8n_p&f0!T=ll-Te-Tp%i9>+Pu= z0cdm?6m6^V*i$u~qxphl{!4NtBjbPKX1X<(QX#|;5@Pn(ZuKZ-tXgeq_#mCHdSr?e zbzD5*tm%;~q%rSt8J)e|C8i5koSi zDcA=q?n zw|mSc)}a&?@OoCy8bSA5zSeGov(1gb)7&L$nVD0PkTpT6r@LP8 zU2pK$De+BP4m*~5*HKm*fih>VPRD6Fi#}F7j>9CtDHeIFDNU>}i8^2AWObeuQST6= zucV}FI6i@0m4{!~q6#>9_(kuT=%Jp|hyuT6ZMzqz;j=fS%gw3U5A?a_Zf=W3S=o@h z97)(P%vre5UgRxTlowo)vQ62CqQTP)>KE$OdG4R~`#G?Xj{d>owy8Ut4{RFr= z9C`S$mL~N5y9pF(b=q6j4^!NdjlFMQng~; z1-EuuS@yn8AGdi9_q!F*JQ@j7`SwHr-YB<bG4~|8X;Gy7fS3R`aveQES4s)9cb`OFB?| zJ3<^&qdQk3KU5>%lPkZ_A+0ZV5gV|q_v09IxkY0D#p)q)#D`or^)s!@*2bo}<%$f# zuJah;x8UvljUr4CqIOZ6y=TQQN@pFQzan#3yq6Ss6YpuPx(ntru3sU9LTt&cTp7eo zPW$DZRc??ME^(h%dc=npFI->Sp)7j5_ItC)-3_I2>*? z93D7aY;)@S!jG$XAN*F_d=uqy~*J@=XW=acg@Z66A6cz&9_5$GD<}zpIemJHj z^`MdhhmsttTtCYOze}@|zxHE)6yd*_Jn5cgu2R;b*1<5i8crAd;Gjt?@N!j+D(GQ` zU+f8G<>n4YtO5+*I^-7{3%c6si=xU7RKqo|7QVk`SVc4GTKF4)`B{h=`PQ>PB_*tj z)bBioJ?QoziVAEG-=wn2e)@|rx|SQ;6XR&A>WGjRVWU8xqIsdLcADciqGbrMrE}P7 z;(Q{HDBEQyBiTN1<)Yt*%SnxVQ0yY}=?m;=MFulbVjo6V?S*Ey7Icj{cltAkIn^T@ zY|VcT5$}hEZQqqLnAl+lYzp7$&2FYJKq;S-+W!JKkWMz9KK!eW(r`+#s{m4I8|O7h zBR5bk-VaUDXi_9FersR4A+Xify z6<)|0p$Ab7KX@ko?blLQiw;uz21V@Z^?b94`?q(NI1jsT?sl-y@ZX@lmHmY=h+wy5 zQoe`bM_bLVc_<#%MVvImoO!7pUMNysj!;Cr|M62t?6*r6ebYqpO{LHs1EZ0UkWLoN zvEX#(yhv`U%QY}!q~{MAhiL#G}I+~4l<2$J>f1@l2jVvLKtt9!=IPN(N> zDo9I0eSNEa_ikmkrF@_Tp&RN;Ye|Jc!Z#tmrbrf`R6;D@~j+ojRbuV{JL4 z2u!HzuZsaH{-{EO7>VCg=KLgsfyQaJeSj_RIb`?GAYF{f0E_Um(tV=u)nRv?%S4mt zT0Ec*^|j~JV{*X*wnfnM=3sVtnAlQ0uL`4D_Hw*X1Dy@M`%{ZNycfsahH*!5#sFh) zoyjPV5*z1V*UN8W>vf)C^~Ui|2gnB(l~3O985eQ2GckBq6nP98kt%k8yKglZU6O*v z!i!CHJQo_}`)j136^i{upVQ@hp$|b8R#r=$PRu)3JtxpcC#d2bJdwhHL^QxeHr9&{ z3iDHw4$agmOi<1`h4j1*75uWZ^{qMv#3e@Y8}2CJQYhk(OMh4fT8fb?v%vJv!<6G< zlB;tVxFDks|A9xsy9Lp{akr<39n#m84q8Nh+rpH~SIFN$?Oh{5R_}{z4PH7fIvD+S zuu=rc*j;LFmElk6?$nx?kaYlphQsP;I*&{4%73(LkU!VcJ>Pkr)y2)L0hlO(mPCL< zqc!&7dXKP&{)9MpjqB)_{UO;!b7OScV+cu)T#A}plB!&?au~iU8j)%k;TTH%&kpyq zl$-L{wq$gNDuQ=y``}?RWM8M%i-xM%K!x0myT--_oJI9ohwMraYYq}0l2KQ31^CHq z#-sPZCF^;Mp<$@1DKSU^!eDeow=+Wd{v|2eRY@tF`4I|?+U>X30f;>hc)%`j!ac-8 z*BSNdNuM8P%g*xmI=A0z(o1#87;})^0g62;cFv&=?6~$<;1z@pbw{mhSQktw@=z$b zC%0fgW#R}5Xt}DH>)X>1p`xfV5;1w+*Sh#HFigku&rkyXe;|e(d9t12JNw>Xcu~MVPKU9ebUeoINLH zho%1r4b4nS;tI7m3Ttb0v0Cg*N^k=_Upp-iN?#}!Mvhh{=^HxS#AnLSL6o_5*{=Mw zsIHnt-5Xf`igNx@aM+Ex@LI>RLIm3|09Vv1$d$^QiA;omQ-V9myrz_^4!El}6k?`? za}ERxE+ha`{H32%Yh{}YRz&=gfdn1@!>xNhhE^ z#qYJs&3T?tU2vTl3KP|O@CuMiNjX&+XSi_&Z*PaI!?%5G>=8CJQ`vK{BZXK1stno_ zeaK;z8PP16*vN;50w-#|f7CKCXeMq6go`N+QIS-R3j(6^tM|MR4re?ScAmW#y&+Zh zVh@82Q&o)C%8Ytsd_`LoMMMC7V~+av#i_?HH5;Ly9+V!IT)?;I*@zuvV(vaZZ#+k3 zG_?k2QG%VKGx~pU{+@X`zO8H*X2V6vRH%l)ghs=r*oDmKamsNHt%JW3>dprrgYXN^ z3zPeCa0{zTa;|Ic-P!uBsu)xzBgGjMUw2=7d9cvOP*n>wDX40Hoq9*(cHnovl~PC* zMA7osFwe{j(~YoRTx2uoUx~MbeoC6Y=^(&)5`s4oD{ z%s6s8%U-A;4%gY_yRF|-0(yI%791LOEHXAs6ZW}%pb}xzxMRVjEx!1TWqfC&xU5(_ z%D0e(4LRbQF*4Y2en4o*q~|(g1;UqoT_|^*&+M&0z0t26i^Eu{;aJVXYL&-NpVo9$ zXA;@n5b|%*M6t~*PEYQp&C(xW&BR`N(CJ6P#N*s-a~6XW3jytT*h%mCL|7T&h~}x) zD;zpMS<?)6q7G6}gt-bVJ4rPrB~a`x<|yPJ5x;G%h3x$t(Gyman?oJYUJ?YFy8P8C&NS;a&UE)VI@CD!7^=~GS+Lg=Aka?n}vp^>S z_>XJ2i{V}u1?W76D(K$kI^k>yIxkIL8iS*67TD(Lrt~DdL(v06@M#w-4a{-|lwE4Z zi}4~Ig^uW;XB@}CD4wADogq+xUu9a-NT!-k61&Ew5NOwB`)&&h$Hh~$WA*A1xS&}w z&M^Ic3a(XilRrYCM#7xTs3{sN{^4yG&VO{1Y-WYyxrJ=GGT1#b*ukORPclHTjJHI; zcTZt-uC^+!wrU)2<3>YcF7JHL+`L4?D+w>vo^DQ$Hpg~t)sgTs(Pj^{$=!-KZQf4M z&dd1^YrE4uFG2R?62JB#O=|&TI5_$IO%J&9w@1xrQ01ZzNB;&m z7-}0`p+-9-auyu)*Cs!mLbII@=`bUWAIY#cTKvt_p;$Fbvm?Df26mP}~ zldELOmp0p^FCN7SnPx7QCYuc5nSKaRF5s9fXIti5Q|??|_x?C;!!zc>B6cZZ*0(i( z+%o+&*Ya%sEx<(E&TRJtNQurlMm0DmGVB6TtMGfP<0jVnC}BASPpvJP%qw~SPFD>r zwg@SFMq-=f&*az#oPUTNXtH~-xX%+qu<=%Ja>^qGyH9;*K$J5cYmk$F&)n7Fz~VwM z^E$7{L+#o-}^y_B5U0?j`MffzS;995PFT4l>+!vZB zKA-X4L3YwLC-Eaxeb=Q}AgQ=DkrAK{{`P62OtSyy{9N5%H_KnlXP>_!%Qba9voVul zGGkthQ$WR58l46koet$tM4XR*00q@;J?M;X5=T%Y1VVe0ycb%3CCO=CQf}+3;bqti z8P{3$7@g0<6~0ONopO>Sb$$iCybB5Li+leoJg7&W*pH=aqtj#Hv%^5F!$7sob-2fU zwFN9zYP#BJI#%<(+G{!|h%je_rpSo9?vRjCtt~fkeJM66ig8xIlW`z#vX^6FwtBL! zd~t;bYFO88>?Qy$1N661FSf3&|B_a}ODQ+>zYslPv{*M7}ihIqIgwa#lQsYQ3*f~?`B_d>PgbX%Dc0EJ_8z#Y~|6TxG zt5ZGpkf*3tB(7GWtPekGQX#KbAmxcU;f*?+x^{6>c2PPdUKnLq8&bnKIB>Uf5Y50J zMHEeiZzJ0{%+5g8p+ICw*^YMJE)9Q~)J*@lB+2Qg-i}qOZ3$RWMh5K%-?ykbaZ>&y+!lPxZZs~^yKrE-PwHdm}S%f3yc1U_A8jg=mk8Y#~bTwjzc_+=l-TUEdfTX`?ke!Gse`>||nRVrydCnb@}NOl;c|+qP}9 zW3!{%=R5biJnvfR{ONzs+FeiWUAt;0e8qSgZR*Dc7EQ5xRbSQfQ{$0&bI9HCtnN6Z zMOnpNWGQD!LDr9Jq&Me##dqEfz10DK!G-*S5!xNd6TcN#TveA?H}W_%Q=RM_sH;ug zn+=+)&D{_L1lg?Ds4l0PT;(UP_}5-Z5AET)wBc%W z;i@&^DzInk)DM~A%FyIbS^Jry%$~DWld9butK5#I#Y^~`k5GpTSCt1-o&#jY;fFex z>HU<=V*E#AeZGa9VgniV3NpIYXx-5O4bWZf!O=qM_t`4ZzcAIMZ&)IIm<7v4za`LW3X6?w0nImIMUr(Fd9|Z@=bp}^>Es|6S2|mHmK=(gduQyv88mv4_abM}C z9N^2%>Xy1dfb%B*#VxQ~d3)oO(h$igXFq?6Xcu<~&fKZ4?f6MhqKcQisf^BvOlYK;@e;gu$;)wFl zL1{x@#&;wOdd9{U>g1Rl2}1{Y!X)H< z?=xt^j_J{Xe2y^hOYW&3EOb%RgIt$FpXn$@05xsGdoYEG5y-i7s5SUCkfFvkk0)Kh#^gSELOWOR=HD33;r**%5dW(-vMw+Fpy3Wjo=iJ}1xaa5s(drD7B8k;E#PJ3*8Q0r6hgTB)nC9$`rl2U{AVaA;tiA7 z&S9QoeWp`>JIij9Qf)T6@Laz1QoG_vF@H~y`a(V)L;NFN`^}!fo{`0#k=&8-hbJGg z@eg8SzMuAERAzHio}8rivvkTbPVD{AS4>wc_D9!wsL)8Kx?CJ-#w=LX=x+Nnzxzje z;-LvfFRIGCKim!d2PAywAo%wn2>S|kKh*Vfx^1WQ3{J$AcWZ37Vs(4%i0n!8?ItK} zSvu@0@~(UwJsl-PIBWAkcmGJK+QZ}(f9og#)O2i=kUA#c*_X|?iPaxwJ4dj6^nz&2C7q^HG#-RrpAP(W^ z(QgDra!k>AM#<<*s?0@3I+m6-UmQ#0;Cp<$lo0y9 znOPk5_Uy|)k-Osi! z3JOgJ8D?PUe=ZC?_=3{j+<$;mq%<(mzDJ;0-BzC*ZZ-ZGU5`z&hBwBiM)3;E87QJR zP9QvrPf@zXKy^rtcOYDGlg3(;=7yef3!)nWOaX@`JVa$zfIQbQpR~mDulMLKqEI@j zOQ0=2s%)O6^S^G|i6nsHTg)T+-IOb8U3nLmuozmraOze}r5W7#dDO&t%*1uv%=HvS zu0%yPJYAklZ9Wt=rgRlfE@pOSPWC%J8yoY7-Q&(1XlCY!awLl4;^HHKNlG#yuQ%{w zS=T&G6K11pe{&w4bH5iJ6Ar|BiJ9@`FMNJCOZR z5neZXo*h6t%uR;=;h3uf^&@@N11sJ6R6ng*iG3P#-N*{`I9Yueue_m+uK z0`P1-x-Pvd&0Bxq`}_{Z{EW+87-IRcO-2yGYoX3^10SG)@2-X5SO4+GoVKH@u9Vp8 z#6}<5&y$nU!KB5w(UZ}%leFNM!_acwE|1lv&2bV^Du;(+NAKSw2fSCHYX!;VpGV~F z(W<)O{;_dlgwT`>TZ?h>tqlnWV3iEh$!hPDTjthMn)$ld;5H^N66T# zuj6l%tNcg9%YwH~D6lVLn9`5xH8E~M!*<_~T^oldht1=HjU_S%08<{w`s|3_1(V@dKJ!+bqfT6b3*RI#8L6`4?I}yo#7NIX z?^*AajSu4y1AcSw3={5&Anm6!wc5Xo7 z#Khi1P!y^|2FaTJ#Q_*Ye|rp$jDq}j@7~OYnWTdDJwi&7MoN-8{OiHkDHs2?9;u;zT*Mtb%-tRQ&26}y!_Ad}p1#4+R`XL|u#|-f2EppU>0481aKCOW6yNxTTk2+8 zD$;qYWl^bVk8h?t0kl&qwL z7&UQufq)dTU&7BbCyvdFkv!VOBPS0^B0|#++^To$m=RRqo$0f6vGYyB=bszQwc!6; ztdy(Bmzqa3>X@LuRpnyD)jHyvHx1Og;nBuB#@>9&ykiP8d~$pp=6-!j{9Q_d1173t z3W@`uKi;&1xa4;rM*chie9xql1oPbhdh+*W2In~3pYDgP^%BJM{Ubmd6&0iL9!r%W zYq2$>%^u4Uy7M;whk{+7fLW8&8Yt?eTTZmwRkT|TBlZL=^x$LTum5H5R&;M|ehAwy z0gFLPAoy+vTQhk8X8-SoR`rg@&H^2PM(K^zd~5 z{$&P9LnM_BL!e(yDLHLsc!E}Mox&NK*0+ZDmuWa?tlJajkL#6E{ zPOIAbY>I|$;jF6X6xbOWnpvwq5ZmJ@+Nx zAAiW|Z@SFO>>yT~{=MRRQW%os>8WKZBO;?^8Cuyme^OAAXahR2{kSm;5$X~l5e5eb zdwp|v19BGI-`!rrLHJ`NBky1y9UUAV?STFt?d@#c>@NN0#!?y&DG%YNyVCee=mW9_ zl{&vkTy2=9liPH+K(G`2XJ8%Cz!=f`o@gcUhfSD_yRO06K38NTsP-YzccH>}!TYKv zX`v%Yy3fGt(V%aQ7Ey0H++Aw)t5n$ltmU-5)be0Z=F9a0_Ep$RPfN*YA(iDe4IWP< zZDd8e%Y~7?A}VS%r+XKmcr3v5AkucBLG7Tz_bp!TKwMqbYS+%;(9GjSUUpGjcJdwT zm!$((ZLKeDb4OQxSwWX!ZoWHFXU!-#liYS+ZGM%$n}LU$m&19l*YdTK)Rpk>Wp(FQ z0nbmj<&nV0uG#3`o8+z9Jm{EwX2~Z)j=!LGb$FD#JZxirNkK=`eRm_t5ISZ|LSi$i z&3*Ua1fu;Z3_cv@2LAfy`o<3Qxs8AehXH}Dy;9vqrnWZT&Ziql!e}ouOWb^*ZL*+m z)&J4yPF3wqR&5x(@}#_o4BDsne>>dL1R-EMf`X)EO zoR*|}J}s~Kdh$me-*%@jx7uAzlpQR%;_D&5iU^=Vk^x8qh^XPHC6N{60}e7Br*d=s zz(oZdrdT#*esY_Le9PVUOmCZSwq@Mk>#A?(`Sb+7@H}L0mn~SRWHA^!CvYUhKK-by z5ZI273CxPfvYu?qDY{AJUXpz$M=Y@MX^2fMi(RnaK8D>M@dTS?udmLYy5LS*iTBB) zsI?ei&*Pz|0B8dAKpT(wYZ=DQGUkI1Nos2h3$ECj?U`JjU7mJMdTv%`UVlAPH+Y#= zdBwXH8J+4YODb&-L|+9QpX4_yqubUu@e7!5%7VEkte(&?jT6zDHm&}^#KfT`Y*97~ zswp|fq@B%;g*WA{8Xg7UL4LR3dcqzx{7H*v8 z$~|dTV6u%b%h$5F#ki^A;qtH-b1QH4IMA+9@V5>TjAqshE2Q8yJnM%bO*1X#FPZ~F z#}ljb!9X8lf;`MkVhh7QYA8Hy+$gKiw_jzuutIzv3&#s-4R0q6;K=Fbu&qQw(?)1= z6o5c+Uev5r3-_I-z_b2|+mhB4ll?o-_g}#L_^lyyJT>{F1HCw8a%&XSOGj?r3*6QH zBkludpN-cyCo>#Q4tH{%2XiYMBd>(A&&t%ksnoF_&9Q~Y=N0AF5a$#zy-=kq9<@6+=eGDan0W+?WsqcLk)o7_$;-S84yOEPxjRXg*P+j}Ja9GJ za4+v45$7e#t31gDFcZ{u&I!!2>3T zMg*hBsLsRhLM4X^!vTJLU;;qHKpD5dVzBmAcJeH)flZ||&nw4v%U1V+_C~H^D;_o&?p}dLLj-9@ln-ZA0I<@7P zhn6EwXPzeW$3b!Lmmv3piEQvD*SQR$WQ%i;H|ft05uZt6H;)U6X5dPNP%qsLS?3M< zCRGt@_K)3dNulpOK1~T1^J{qNfu{ype+jtgRPdw;#;gHzF^XdeN}c&^+QJI0=C4a> zQ7TT3vh5ETR`P;=fLGC`KMM1DRRSOaAF)J@df$V5WgMn!QqsbOwt zVXtjxA%YWgeWL?H)~zLYm@IgxSZt`+^a$g3+nn2js;B9v`1{3FRd2XItcBM0NaN9E zQ+C{=po6{j+2C3Tu&r$;cjiG+(SX<>|5yH8{2cBf`|;(>oboy~#n-w{Jh1*@ zxo#vGv@ek10pO5e-xwG$xrbL9XoB$>=5dRes^yGzGNxKNf3L78*?AThzUYXo8~*cC zZbq9aNyUU!FE)^wNWO{tyW#LB6 z%9MqXAQCZ_`Az1mnV$_C*_)m5(?^k!llHJ_eDq@P|0u6u1^Zi6>A(eWl#F0%7ZqdB2h#5g6MDI$W}5?XX< zm{RGz-%utiFv=A;j>`>4zp${Vv)a9^pkUM4QW{i~8wQ#J2Bj9(&5>VNud`R^GJwx9 zVN6fQ4BqSqK|+2HAQc45Ct6=?%wR85aph^*cz6cgMRC7V78zd{Tq+wg(KH@ce#kmG z3!I*X-n9s9>kvS0;L5Xv3FyMKcnegu(V!1fg@H8Vjsd3|*52$VgNnv>e&way`q-p+ z3-Jao`#zc&b{`(AZlTRZ#^R5H!k?wXlBF#GD^(zBB0YF0pU>p^)DrFfobYZq?A14F zN^&&>hzur01d8&6jeBFI)&CYqjR=Jpp2pR;So9jYgf)T#6(`yj2RdyLQ#{sL1eN}gOQ%l^27-z z-SgZ(Y?)YsF;cj*v^g9`G6-@Z^2@%LC5Ev`itjl&d`K()VCB1Vo*Mi}5L{uk^nKoi zCUGCM?=H>Xgtpj_+l-pZjFj%q(Rt*mEaW@0*gNz;ANMv_fmmI{|E{r^hplpgj=-rB zCE_fjrWuN(`D$tVV5G8P)v~%av!J2l3o!9qrnGJXN_q>32h6!pywH(*${Cqy1%sYx zX{*PB?097xZZmOzpFuux8&pWgW@qDqa#K0At?EW@gP>1AMMY#`VoO+R#R8BngUx>+ zviBMu`77zbz@Uimps=ur$UxB7U{E5=4M*S0TT|qEH>qxs(Ppmkb}D@vuZlwih6-z% zvY6E0yh7G3F~Xp7gwtDa!I{&bsvj^wozfd5%~s=9WX&I@SNY!A!O@prAG67(LX|Ae z5#=&r37q)Zk8qiiVnw1PO9l%S0u0C@3PAVNzeQ)s(tw-IrZtpGYkFOd#4+F7`bA5W z@c+n?{`_-XmguD^&BjXaO5J#DZ6b0&uawNnZ*S)SJi*yUlJ!B8>9$2+lZqODA){($ z+nxJ3pidcyW;Va*V*J`QYyRRa(+ni%5;a?7Z)0F-_}#YU^CGI|Aea@Grm~r|)-^ji ze>YAoot4iTC2N-YY&GZPc=yNb>ZE<1*)6ZD=-yy5t7>a)jiw1hmAp-} zou%2rN@c4}L_$SEK|)YaR#Q|_`j?=pth92ZABlLl)R?%qM0j{07TphOdTP?K{@yO* zP>G|-;k2lEjpdSC8yWPCbb9N2{_Z$CbEbmq^i6@u(vm!+zC|c!cYh)?=U>anklqXn z&(M_{b=okMvHAM>>Bc~e`oyRqb1fN^I)sZ6K0s)64z}G>)}L|WP%@>0xnnv0VPiik zn0aPwk^AaeDY`;_DEtiO)9;WN?ON)*SvpKv3cse8ZZwn_IU8DdfOMyY9ng8Bh`5O& zL0^}v-d7bhlX1|Vezv+XFz%DVy3BhN9D9h)%eZ)t(~lEvce!L^Wtm+!Z;+DGwQNsrOJ7T#9Fqi@t8N{b&Wgy2 zmZc=et5cGa;*&8_V$o1Bp}{oO6El(yLCCRIX&TOo+R9#XXCrH@TY|BfpS+zvq)S|) zTjY12sm&bD2cw3&aQHPKcMQ^SmM)=c!I*>98}d@7u006(dpjS z)SpMnQ>>b^GMXm{l6_>7r|8tkx~%^H{6x9WnOI#-&D2e;nkU!HQyjhaA2Bf5|CD_C zy{4^Z)|CZW-L6tfnt@ufD2yyo#IWo?<6po$$jhzR+O60+Th9DUmu&zFgvbRXRB;i2^R zxVEZq$-2-VuR#ji-dMv`{f7k zDb(S2pj>u_#Arzng-mu##x;D-xA2k>inu@nGsd#|R&?gHA|iq9$x6HjID!pNr(3VL zRJoBbwH_m*Qzy-n&57HS1!4=QH8;BrC-u4K6FahRHWzJ#wVCIjJdb?0E@{L1+E@+? zH>Q!91HaVJ-BAcmbn``a`i*nyva^v2tFi74hZ7T1cW+M}6(!Zd%8`k+od%piYoIXr z*4!L59s8A{cYjpVd)YPk zV%8COKtS@+64l8G1geq@KJO%cR%NFUzBdUkNkJeH zUR80eiu0&yRHel!HTBq^KMqVxiUtO^OmlE&#_S{3AU5@vh=zfVjE;;-WB?WYfL*jC z=}2Ysuk|TSo8XjH;USBn|9$yF1=I{^RY00tH34;(1P>YVo$CK->z&wu0a|*kVk08e zHGk*rA9UI)ZX2CEAMwxZ`5{o4U$jYA`9tuKneEAgFp{`3G?+4eOMW8jd(1jn>`JS` z((#$PZQp>EzrQC#11GcEF0|M1qg^h!xg5^Fk&%YuWOJdX-xK{@lCVMLXNS%X%}7Z4 zYIMv>Ye{=xlp|a?(>Gsiz+8Q-sceBmj=?s7!D^(&Vv@XAg1MZcV^h|(1E5>i7h9Y>0BUPU503CN`hXt(CQji0G*5 zh$@Bz^>Y(&B!YA22Wvrk~M! zxT3tLp1*t&#-KFJ6@CyPs?w__vs(IK0FEs9T~0N;E?ab0ob;sE!~N?0ZvZGva-qe~ zA*Mk?hax3t*@%+&*D**^Wh13l)FUGV)e@d_O8A~1h2!6s`#L6;v>qyDCS@ioe+v~D zDoa|b`C9UmvCslzgQu`<2|?v3>cKVS!4<-_MkH!!X|t>iJSXCnDF17-+907I2o_{M zV^~^lYNeN3oKH>D2_mZ-t6>K__hYH&^qp$>lpG^F%Z&`XUcNGNR?8KNk+gJxVO4-u0FSN_-fy=(=pcC z$9x&nXRvUaQx@-YGjdRpasv+Olbk;|0gwqI%G{CtbRy~#0K?&87L z?%00tI5@3O4j5*i%h8s~F{j14w8l;=ypJ_)CnppoGs(cl!8tiTwXoDo$I?j0Ny9zK zI1a?>lv3031R%=b)5%yzU92xCt0b`pVpUe<=a+Z(uT2by%c&XH*TwlO2wMnhzB~k+ zYNg<2oMr$?#zTaphKa|A4H@DM>ErvyDNXN&e*K}$`?~+n6FsM%>V=KUnW4^sq0W`L zlA+0kO*QdSvl9F65`I?7WRy6`2-zH2x)wDZ@9yKh`aLOTM)SiV)mf%L;b-XcEDuO< zu$Uv13Y!q3a+w)Cm@=?Z>DTatyr;}Qw>+!-a4on=YiCZ{;Sr&s8A4bws6S93Yf~Q# zh))gn+U*96qOunHb@16qY zkaiwZy%$x7EV*B7Ee@3Nd}3M~-!*9Em}u!f{4V@GeO6I^Y-LF%w@uT%P+F9i*R3?Z zwlT1_u`)L>Gq=*SA+SAxJj1*+4|+irRhH!y)yf#2Em{AiZqvkBDh^>Q76q&#hwaP(U&@^4GcOq0UqNf}feB(JiRQ-0X{x`-@|0Q2$59DmwOB!p+~t z+OaO<%F1p}-pC@MXujuCC=k(xgnmotbz?~OSq>;B12rTsghHi18nahFj$qyL@t6ay z?gI-({Jozh;4tMoCU1=fnOC4>)?yc|>D6xF);>kQZ93;-o15lJ`||$-we{i6tQ=Pa6Zhkh5n?hhj`S1I)}p?#k+Uofx{Bha6O)l|sx$ zmGk@cO?xk_s}fxCo+G(eA7u%N86aUq5H>Nkka5~i&~sT(3-Dd-YIMg<(u{|W>q5fG zftWN^5fRl_odnQ^=TgkP6pV7O7S)XF@==0+SpXz!q)u!YVSJ#gt&;dsIvHWvb~vbYufki=jY{Sh8jaom(R=n)~30y zFTd$>0cLtJ?&Y@w^pt;YO=nK7;kWeBhasf0WYN!&TCiMbStKOL)b*7j$^i#ucL&#n z&}6KJe7%cYLzTmFyiubbSQ!#hV_BoLMUaD0?qB7ghGas>FSS$|E~1DsY&VuN|1WGVHSy?c7Vt96Kd# zcbEvfSMS-5|&dB-~(i7!MVjyH}-7`@% z=`NsIsb!cVGmeQaqMVJ*IZI5pYVZe|!*5nO*E+`bbmaSIRh7o8oAU5o+oSES49~mA zhlpi{>@E;4T%4uA=NwTCL7^xz%~wlfD6>L|0sh0|ecDFXb|}j;g)#Si2dXUcep!T4 zni1vtB&?;y{AkW9^s#d5YUz0Yq`oT#G5!5T@3^qZg;?!@|0-|{;5u%hkF;oqPCB8F+Ilrz#h7(EKiTqG7T={cn=^@YMjN1 z9VyhwiypbmdcGhe@@gEr-(fGp`b{Oi=E!GFd@O=DoWv0q^uPE`eVp@}{x!_>8gn@& zFTEVuGGB3>>3r{*wV!r06!Q*wYKwpGBcC3QhsZap#b(AHB*_L7g65^vmsl8K(bUFx zkzS~IDk~eOFg=@=UUrvR^pIQ5PVaI!x}1zH$&$Du2___G@JaofRkAoGqvIo0_F{Jh z+}r2QA#8pJ8XTXMhwJ7bd;%Lj$Ln{eW1ukz9y@Yu(sJ6~eNLw~RvOd(v`}M4IA#pc zAYN4P8z&hTC0VtS2zW}pFh(@Ii;69(OdXq05_Dk3DMK#YSS8lsR3bReknP+X=y6jCG>HXaO-Nv=b&cX-#bY}<7%tR=gG!K z|7N}qF!<8i>}ad&o0{Xv&(F^Pbb4`yX{*EQdGmHN4tN6S@O!ap7Yt=^_y(5FTiw5Y8(n zk=9nvo0~Zg^ir}gme&`B3nF>kd0tNk6WDFDJ2O1Lg5PhfV-m4{-kLr3o|9TTxH*+N zTD7EbFaYyJ~=NqzT^K z!bxBKON~oiI)RLqBU}yu7Qw{qTE@w-)^|%2LQ2|QGHP_n67@VwoxjE_o;^|L_BKo$ zHn-YnFIEFaW<2lXdDFv41lL%cd(7Baa)^-yL1c0vg-Qtpgw14pR+3&TnQx_Z7y3#Y zff))Yv!rh4|)Ytq@1TU-=mdF!)WrUCa6#=1SEA_u5}#F zt0h;KWw!02s%Go@@TTysHD5>0>$AR({%(KDpj<=*q2SBo z!`(7N4xjJi^G$)L^4P(_^UT5l5eS>W?6T(w_ynCl?q^|Y*hE3OOmik1DDa1W)v~j-pNo*sss1JMe(Gjb zoZruit>pkE72c0c9h3H3vasY(d@giHXI(L(5lJq>7KJ)!;+YKDE`$NWFr)YO<%?tu zR-OGdIJa@d?JG!%CUOIkoKhjm2S`s)#_=FDAr&u?T*XcC!_CxXT?r7I(iX2V>pmKR zxqIr>N4Br!f_e1x<)X6moaR&G&)JU0{2P3{- ztCH}1k^=*Fi_zIvx|42s?(C_@$?g{JCnw+!_noN=ONdGtk}PX$*L0un-hn5bKkd{j@eK+&|g1jMB}eXlMz+v|}o`E$E3 zx4mzldlM*-d|nQF%Q3qrI^92fJ{E_cZ27#sUQhZng5_*|-*5dd?_L>n`FvkGp55(l z?f@b)&%m?3>KuN0`UwV~bO=6%3Ez+VkGsCtLAfiwF6cPmU|(PRbOd3SPjU4twtA`| zA9(NVxEGusYA7dVV4%CZ4HN)>f8&kN|9=XKXZ%UOCgk4-Xo#MNAQou#bg>cA%9B~( z#^OIr>lyfMq6zhNj(jJ5-CVS>ePN-PuW{UYV$$ISw*zoKQ-8(`M`oz&eKCn#%?i{D%UKxHRd_SbloM$R9`2NV z7e=AfNtNg8$K+c(<`qD84-n zr|Zr9+aCC_7m~}L16$$#*>t~5@+Xwx~Gz~0Q8!lkaiPdP2pv(pIT6(mWJbxZtUQONG*F4oy zT#5Vw)`E53&I%FD5SC{P(m@G!L$H1@f}Nn^sYQN+^Mk^Qk7LA*oR4hnfrDU)&jur< zhbUb)DJ7`U5bgQe^T${QKN5v@s6$B<*9tE&5-qwz<-poc_K1$CK6U~OXTl!>^yR^o zdNTa?h8Knj#>BWtFl3>)k%%v&=&;q}5G*LBajh`18fj8T1f&bZV3+~~gC^%N!glh+ z);0E`xG>qp0CQ2;rXe@ne;3Q|pC-$rikr+JT34o@?(jLdTCjl}}u zhZw(8+5RY_6nTJek6cHnfOaLsTk|ZO{;&gF26iUPqEbvbV_lvwHsCjG@ayfeG^`sx z=Za;WO%2WCxCS6x2H~(Wlszre@cm7;Xl2w<@;P`sY^}E4W(c@{bGn@Duh!K8QTv`v7c;WMUcm6o5zUoPQff0^&JWvK#ip}o*KK@*Wlu0|{ z+u?Ty&dC~^<&Wtg>(2~M3n6JokSD8NLv;Wx?l%kN*!zOGHWJ@+W#shVlG$fjLyF=_ zs0c84uKR}Xj<&u-VutfGoNv4>mLPXI^AvJ7$vy2;=8;VKT9(+BUs&?0tv#2=`;guc z3+0UqW zcd>2C?i*DFTxbD)^|)3*x6{in4a3c%^uM=z0UPms9mHpy*ne=o!%-6ngjR3kRTsvU z=ec^8NOTWw39bhUu|Z!RYb~4Mx@d4W9&0rpt2>=uUDmIN@t!Up9>g0KtDm=UPMb@G zWGSX!6f4)utQMzZ;-72DWnw>t7aJeS{;up=S7+z;3T4_@vTMz!=CwI`Od2|U8+&_B zk6-w+5j55@kdeZKOC5hIwQrM5v2ZZFgifJsB9cV<6`dT)bO`c`xx$C}tbf_8AeF*L z_-+@hehF&ddw!rdO8*pT@GDse(0KSO8aZ^5X^5Ipkg^dZW(j1n5u_R*B*`=gt>{_p z5c2mJJe?d;l{gahGz_f-Jf-XnjVxydCIAABG>b}xS1SqEt&y~Yn3;%XjD&fPmwSkY zVX2++MpyEG6vQ%1Z&B%2T1`k;i5REuQXkL1Nw4z&hu&V(QtcKl&SDPp=hSROumbKlNR=#89vC_}YZUK?!Qj7OrNBYn!kdUtSbjW84GV=`{)uhR2pg7=dQ(-d=ANG$Ua z-)X~j$8Wxu#d@FgE357a!tU+ZSBth;$#p#8!H6a^rzD?JK3%@X^D+=P3=aIGv;!y-0LPGw;Lm{o!xK-UEs_)gRE{ySsF03pPzXaO;T9waHDaXtff__zBw3$+|BK1m5Hg4O|(}sK>D!;$Y4X;I+Htc$s&})u zi*Tc%o^Nc?I3a0Qq245n1(HWuJ_Xuc+)xYDdgGs+|21Q<%YH`Yd5?RcXAb$ z{Ts+;3>`CQ=THaxoiT&`k5u?~caYY;smf!Ng8 zky+uTZ6*AT0(M+xz~RoJ9v0>2ABQ~$rhIii8y*a+gf7elL6|9$10yh{1AdpDT?9l! zyJS#;y9N~AXt!s&9~4JQuOK4V$!Bplogd3bDFPE$otPapqstA_|A~HFRfn@caSwwo zz89PmxvN}&N%*z@M3G+9hQCclUJN@NqY%ja_PRd{7WK6J;`Cmk2E8(su9O8rMF9%8 z3x<+WVMOX7#BL8cq+!G&<(h9Jy=3px0`BGqgWaAD-Co_#XVtp)VE53~z0p0|$Q6P} zVf)3c2i+dd*O?b(TEGQ8pJ}C^%K*6dw5Wis5Jdp5|tyrFJm zft9bJsCVMwZ`<^sf}~*Vp&cTc1XZOONtWJC@J6!4GdM?>O4Mt<#>U6_ z9E_R_%@5^*u?2g1T;Yaet1w+1uOAY2sw@nF)xf2WZ`|n`81H{sS>agr7atuup()R- z72&qb&PR&-w38YR7G;c^wZf>dHClmqh%ifyYxOE(!!u*Qwl@}f#tiyRL~b4w^XE|Bz#-}J zLUR22QENK9wBOYE!2SLD_3b(Ez+#3`uko}qd9*X#Xw`!VA+>q<3C;Yz$n@yLxX}_a zfKoT%;c;mw%xday>>TInSwk{{_Q~{KuHSe_!3mRN;E8qxGSpIo(Emqm=NZ*h*7flK zp#(7WCM{qPfzSpBRY)WTkdA;Ly@OJMRD(e1ASDUC!+?MV1r(%85h*H2Q|V2R4ocI| zpExt`%==}YZ_izKt-ID~zVbB~P z4mS}f-yJ60NTMb$*|2-3`_mQDl@-mG237<;@jiFokiM53xnNJF)Puh%WX)CWpVrRWpD^mx!#jNG5UXQ{zmR+79+wqJd0s z)V2V^1je02e1+p82PE(0tW-x+-}X;lkum-;hETV&7S$yeK())qA{H-8DQB8t(fGE9 z1^`gGy`6pT&g5vftmus;_*!W+L^H~|b+3DMHmXB=c~-mcVd~w5Gna#ApM68n;M7#h zlo}wmATbZYe1Ez;tM00Vz8NoYWhMF65-?R<1I-XOD*<^B)$?d~_qKh_BuQ4aX3PjQ zZtj&9yNPAF;wZawZB=!TN%t-H{DEG)1)K1Pq{QALQ=<iKDaQAIfCYgBU>cbaWv4NMLf$d`xr<2+FETt18IEB#a|txs<_o zP3l)ZVwZO@m>tZWok%YX2IGgpkk22=-Y`CgEi5B2j8UxiFhGiPw+AKIV-ZK|MnN~& zd-vSZ@R@!Vr@cHmzG`?qY4cws6^0}JQhV$d(Sru5U+n=l@A#gtMbg3T4oPzz_r(T5 z!!qu2wC)kRp>fiKv`Y<{TD@p)0)XFt^P3o`f~%8qz>#m94U@JC$kdF&oM2k$&Tc7H)Q!r!p*QAab78dBHHo|eu} z^fxWd&1u&NjvlVwe7NyEW4ffu!+xEgbzqT03ej31`IDiRsT>q$t9Dkz9b zOU&c#>`bIqY9uuPu&HQ`*AzGeqZFx6<0!(puXhCChoc$if+Zb0(`8b4Evn1ALl|Vv z&$>qyg&;wn9ruo@{*UTCGbR6eKls#$FY*}BV7#15n;f9NXSgrPG#J@&(#z#&%@-Eo z8BGBiOsYy(4+Dj2<$U!YJ)*`!mdJO@i)2SOB&kt(*=YM(VJV}Pvv!Yuh8^s$?*=6n zziK-UqLgo;I`@?BZ@fJ|CZnK$+?co8)*2mDTD~yzwEUAwxk%H}-ARAS&k|cgpqr_{ zAM|v}Ao{4{N_@}ldCX((Ff&*nFXxkY0~Pl>-0ctcx0OOEXOiOUAzvhQ_Vzqc?K!L% zS7;;;(H;rSX5Bsn=3f+Tu1LW;pgppE44mELKdNMwKE^ucCC8gg25~C~qu(^gpbGS_ zDPx91cFhBehN(aw2pQRzMJ?sG2!~nw*3tj|D+jjhxxdD{ZvP+i^f(< zyEz?7#;AXh)LqdC*NeEpq%uQa3swOMZ78#^g{^>hpaIx`QCfm_GB;p7IJlv)u@MoC z#$c)=su^)`CUSpfQCSg0gr{znC#<4Rf%u-cC2ujme^m;xM4d_21oF*v z40I|C2@^zMe*%zA*g+IrkHl# zmFrH`!d#=Ll6gLMu>933CZ&*T*i97;7cU)`(*4Ki@*i>F1DY$SZom zW#xxIPYFp^K%~Sk3PUeJq1wVKuSPB-IlrdAmN?`g_NzDD3^vPmozP{;vwX? zjbIW|Z~*?P@ptXMi2mTJct+dhI#?sSLx--oBlBvb$~Jv^ue2f0J?%5Sj60MkR!Wpr z({?w%-<~}Q>b>DyU9gI#^!Fdp@D{oN;%=F6n@LeG*DxpToRk=0&g|4wIopm^_S{YH!Efh)XOxWC*S);7lk|)Pvv(S;5bzH_q9evEnBQLZ{#WS zKM4pe5r;hzfjkqd3Cnu${O$Z^rlQ`aU;Uc%6Za61ZY01Q40=z@HY;zrmUz?4 zHrT^)#j>i@(Kf~KF-_BJe&5=YUv6!&yp!tpYRX%@X?6I?>BN~K5`4Gm{H;~@+a3~Lrs=8aoLnp% z9OdC!aoi^iD%uu|g1i#zxeB+(m6RGt!4_lVVW$Uf=H{I00#f9p^!6qcj*}`j1iP>2hGlxm1;kExOuE&_QNtOjz7|sU=hHS8IymADja9|J~;zqe0hPt=#MA$d& zd3J}f%3jr5dX4>h%QE8*sOwrz|JUF063f!RbbUUeOW%QTDKmHu~_W=*RaunHQ!rwU*X;Nr?9O znmsM0cp!|4Yq=?4eQX?Qv{a(;y5oIaN(?n{C1CyY&Yh8O@>CE-zu{83llgN327!xU zc}~qU6E$xsDO+2{6R>=2Zyd*BH*;g~wzZmtfq?qIgIPD*kXp7nc7dfIV)YNnP1BbB zD}C}dT3ugM8F_>>tQ=mC{4#UJvG7WX7BJ=~JpqA(+ckmCo#%uOwl}A0a}3`<$-P** z1lFW!j!W8z)&Ds&RT+T1rCa&1wkm$iSV%||NfE;8E1l4QhZajB#$ZyF^_JUxr#7jS z!120DlPf06!fD?7Db_8YhNl#*!z-SYJX5dQa11f@IRge{tH{ad@RXZ`^mI=i#@;+a zTZL#f#rAl-7&u;V+7=CZV&=Av&i9{wF^U+l@a;si2nng%60k_ha*Z#2?_R&_=RKDT2DM=Q1hf2TX8FOaDa^^L$g_YX+hECsMAz2zYrJ~$B$1@3P}?Du{Hdn z^--mnP${dB@Yf5%Yp_f9y24|G_?OUmp1yEJbdj5R!w ze44y@x&9D+GgkEI?e!pRh_v19)=xtU=u+cvv!zqbld4FMEqR*C`5wko}|DM7kHh~C1%0W#5Rl^1SdVYyPo>Fj3r zB5;!&mojSB7U~AD*;y)iX(rmgvCPY$e}0O9;Oq?b&qv8B~qO?JO(C$6j9TskAgZ%AERv*2$QBK6$>(tm^$E zo9W`ri^9ti&_Fb5%1&EY54H0=e}ZsYI7B5tCIg)cm%G(Yj`}txKkh%1xV4lZj-t~k zWaXsJnatN7Y~QgW(iJ}yN2PO!cx7>ow<4{h)0{3uH0X~GPYfx`DoV(x%fai9@A+em zT{ah^;-apbRb207C+ByaZlM>Pzok_GnZ~_ZO&$j-+!z`0ezAw; z@vsCL%TjXo=$>`E83YoDtB6~!HixMy<_2J}lmYlKNc}}M=8i88aI!m~vAaF!Bj+S* z&3&jjur~m9T%pKiOPr^HQrQ8v)KOFMr77*FKbMAIcMf$1k5#t$0ske(>8`0KGVe@J`*Aya^5k zty)<5&j!NJW_%+lDTIa)+Nos|8oOZ=7bv)4H1euWr}+w6*&6lQN;|j>@HRC*h?89n zcBxv|+~OLb>Y_v?R4n@IT>8TDbh!tlMrUBG`|XGQ=m{{tvWFO(=E#VU*dvh}Rr^Vw z0~j+E0=t$?yOu|1R`T@pq}e%G9cpIk8f%OsKiLg=(#}rQg&(cYBF>*~`)EXt8fu)> zy7uQ5jp9-iZX+35J`dZ$)-5b7I-L1e013G<85}V16*-EY#Gak+yS_tya)Or?qu?y> z6PK4S&dWj&etsiG5#9FR?{N!r2^QX7)r{twI?lKL&f`uOdCEvuOGC(C!6oa)$G^`= z{-sE#`(=cz@cvQ+F#qw+;>a4nKdf|zG-L+*PwSxKFTnkmFIma@OMUsL``)=fhb3E! ueGp`=+n?^CRAjOHpYH$5q45p%XW^TY+4+jn?0f+7qjS{&_3Vm$ { 'default' => ::File.join(Chef::Config[:file_cache_path], 'system-probe') }, -) - -directory rootdir do - recursive true -end - -# This will copy the whole file tree from COOKBOOK_NAME/files/default/tests -# to the directory where RSpec is expecting them. -remote_directory ::File.join(rootdir, "tests") do - source 'tests' - mode '755' - files_mode '755' - sensitive true -end - -if platform?('windows') - include_recipe "::windows" -end diff --git a/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/windows.rb b/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/windows.rb deleted file mode 100644 index 912ff2fe1d115..0000000000000 --- a/test/kitchen/site-cookbooks/dd-system-probe-check/recipes/windows.rb +++ /dev/null @@ -1,96 +0,0 @@ -require 'json' - -# manually install and start the NPM driver -tmp_dir = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp" -dna_json_path = "#{tmp_dir}\\kitchen\\dna.json" -agentvars = JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec') -driver_path = agentvars.fetch('driver_path') -driver_ver = agentvars.fetch('driver_ver') -driver_msmsha = agentvars.fetch('driver_msmsha') - -remote_path = "https://s3.amazonaws.com/dd-windowsfilter/builds/#{driver_path}/ddnpminstall-#{driver_ver}.msm" -remote_file "#{tmp_dir}\\ddnpm.msm" do - source remote_path - checksum driver_msmsha -end - -remote_file "#{tmp_dir}\\wix311-binaries.zip" do - source "https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip" -end - - -execute 'wix-extract' do - cwd tmp_dir - command "powershell -C \"Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::ExtractToDirectory('wix311-binaries.zip', 'wix');\"" - not_if { ::File.directory?(::File.join(tmp_dir, 'wix')) } -end - -cookbook_file "#{tmp_dir}\\decompress_merge_module.ps1" do - source 'decompress_merge_module.ps1' -end - -execute 'extract driver merge module' do - cwd tmp_dir - live_stream true - environment 'WIX' => "#{tmp_dir}\\wix" - command "powershell -C \".\\decompress_merge_module.ps1 -file ddnpm.msm -targetDir .\\expanded\"" - not_if { ::File.exist?(::File.join(tmp_dir, 'expanded', 'ddnpm.msm')) } -end - -execute 'IIS' do - command "powershell -C \"Install-WindowsFeature -name Web-Server -IncludeManagementTools\"" -end - -directory "Make IIS Paths" do - path "c:\\tmp\\inetpub\\testsite1" - recursive true -end - -cookbook_file "c:\\tmp\\inetpub\\testsite1\\iisstart.htm" do - source 'iisstart.htm' -end -cookbook_file "c:\\tmp\\inetpub\\testsite1\\iisstart.png" do - source 'iisstart.png' -end - -directory "Make IIS Paths" do - path "c:\\tmp\\inetpub\\testsite2" - recursive true -end - -cookbook_file "c:\\tmp\\inetpub\\testsite2\\iisstart.htm" do - source 'iisstart.htm' -end -cookbook_file "c:\\tmp\\inetpub\\testsite2\\iisstart.png" do - source 'iisstart.png' -end -execute "create testsite 1" do - command "powershell -C \"New-IISSite -Name 'TestSite1' -BindingInformation '*:8081:' -PhysicalPath c:\\tmp\\inetpub\\testsite1\"" -end - -execute "create testsite 2" do - command "powershell -C \"New-IISSite -Name 'TestSite2' -BindingInformation '*:8082:' -PhysicalPath c:\\tmp\\inetpub\\testsite2\"" -end - -if driver_path == "testsigned" - reboot 'now' do - action :nothing - reason 'Cannot continue Chef run without a reboot.' - end - - execute 'enable unsigned drivers' do - command "bcdedit.exe /set testsigning on" - notifies :reboot_now, 'reboot[now]', :immediately - not_if 'bcdedit.exe | findstr "testsigning" | findstr "Yes"' - end -end - -execute 'system-probe-driver-install' do - command "powershell -C \"sc.exe create ddnpm type= kernel binpath= #{tmp_dir}\\expanded\\ddnpm.sys start= demand\"" - not_if 'sc.exe query ddnpm' -end - -windows_service 'system-probe-driver' do - service_name 'ddnpm' - action :start -end diff --git a/test/kitchen/tasks/README.md b/test/kitchen/tasks/README.md deleted file mode 100644 index 63dc2a0ca125b..0000000000000 --- a/test/kitchen/tasks/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Tasks - -These are shell scripts that execute the build and cleanup. They also have some debugging included. -They are meant to be run from our build environment, however they can also be run locally if you provide the proper variables. - -Look at the test kitchen readme for a discussion of these environment variables and how to get them. diff --git a/test/kitchen/tasks/__init__.py b/test/kitchen/tasks/__init__.py deleted file mode 100644 index 7d75e1a988354..0000000000000 --- a/test/kitchen/tasks/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -""" -Invoke entrypoint, import here all the tasks we want to make available -""" - -from invoke import Collection - -from . import kitchen - -ns = Collection() - -ns.add_collection(kitchen) diff --git a/test/kitchen/tasks/clean.sh b/test/kitchen/tasks/clean.sh deleted file mode 100755 index b05c08fa71f7d..0000000000000 --- a/test/kitchen/tasks/clean.sh +++ /dev/null @@ -1,72 +0,0 @@ -#!/bin/bash - -# This script cleans up any stray azure vms that may remain from the prior run. - -# http://redsymbol.net/articles/unofficial-bash-strict-mode/ -IFS=$'\n\t' -set -euo pipefail - -# These should not be printed out -if [ -z ${AZURE_CLIENT_ID+x} ]; then - AZURE_CLIENT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE client_id) - export AZURE_CLIENT_ID -fi -if [ -z ${AZURE_CLIENT_SECRET+x} ]; then - AZURE_CLIENT_SECRET=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE token) - export AZURE_CLIENT_SECRET -fi -if [ -z ${AZURE_TENANT_ID+x} ]; then - AZURE_TENANT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE tenant_id) - export AZURE_TENANT_ID -fi -if [ -z ${AZURE_SUBSCRIPTION_ID+x} ]; then - AZURE_SUBSCRIPTION_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE subscription_id) - export AZURE_SUBSCRIPTION_ID -fi -if [ -z ${DD_PIPELINE_ID+x} ]; then - DD_PIPELINE_ID='none' - export DD_PIPELINE_ID -fi - -if [ -z ${AZURE_SUBSCRIPTION_ID+x} ] || [ -z ${AZURE_TENANT_ID+x} ] || [ -z ${AZURE_CLIENT_SECRET+x} ] || [ -z ${AZURE_CLIENT_ID+x} ]; then - printf "You are missing some of the necessary credentials. Exiting." - exit 1 -fi - -az login --service-principal -u "$AZURE_CLIENT_ID" -p "$AZURE_CLIENT_SECRET" --tenant "$AZURE_TENANT_ID" > /dev/null - -if [ ${CLEAN_ALL+x} ]; then - groups=$(az group list -o tsv --query "[?starts_with(name, 'kitchen')].[name]") -else - groups=$(az group list -o tsv --query "[?starts_with(name, 'kitchen')]|[?ends_with(name, 'pl$DD_PIPELINE_ID')].[name]") -fi - -# This will really only fail if a VM or Group -# is in the process of being deleted when queried but is deleted -# when the deletion attempt is made. -# So, failure should generally be swallowed. - -for group in $groups; do - echo "az group delete -n $group -y" - if [ ${CLEAN_ASYNC+x} ]; then - ( az group delete -n "$group" -y || true ) & - else - ( az group delete -n "$group" -y || true ) - fi - printf "\n\n" -done - -if [ ${CLEAN_ALL+x} ]; then - vms=$(az vm list --query "[?tags.dd_agent_testing=='dd_agent_testing']|[*].[id]" -o tsv) -else - vms=$(az vm list --query "[?tags.dd_agent_testing=='dd_agent_testing']|[?tags.pipeline_id=='$DD_PIPELINE_ID']|[*].[id]" -o tsv) -fi - -for vm in $vms; do - echo "az vm delete --ids $vm -y" - if [ ${CLEAN_ASYNC+x} ]; then - (az vm delete --ids "$vm" -y || true) & - else - (az vm delete --ids "$vm" -y || true) - fi -done diff --git a/test/kitchen/tasks/kitchen.py b/test/kitchen/tasks/kitchen.py deleted file mode 100644 index beb345b66d4ad..0000000000000 --- a/test/kitchen/tasks/kitchen.py +++ /dev/null @@ -1,253 +0,0 @@ -import glob -import json -import os -import re -import sys -import traceback - -import requests -from invoke import task -from invoke.exceptions import Exit - -WINDOWS_SKIP_IF_TESTSIGNING = ['.*cn'] - - -@task(iterable=['platlist']) -def genconfig( - ctx, - platform=None, - provider=None, - osversions="all", - testfiles=None, - uservars=None, - platformfile=None, - platlist=None, - fips=False, - arch="x86_64", - imagesize=None, -): - """ - Create a kitchen config - """ - if not platform and not platlist: - raise Exit(message="Must supply a platform to configure\n", code=1) - - if not testfiles: - raise Exit(message="Must supply one or more testfiles to include\n", code=1) - - if platlist and (platform or provider): - raise Exit( - message="Can specify either a list of specific OS images OR a platform and provider, but not both\n", code=1 - ) - - if not platlist and not provider: - provider = "azure" - - if platformfile: - with open(platformfile) as f: - platforms = json.load(f) - else: - try: - print( - "Fetching the latest kitchen platforms.json from Github. Use --platformfile=platforms.json to override with a local file." - ) - r = requests.get( - 'https://raw.githubusercontent.com/DataDog/datadog-agent/main/test/kitchen/platforms.json', - allow_redirects=True, - ) - r.raise_for_status() - platforms = r.json() - except Exception: - traceback.print_exc() - print("Warning: Could not fetch the latest kitchen platforms.json from Github, using local version.") - with open("platforms.json") as f: - platforms = json.load(f) - - # create the TEST_PLATFORMS environment variable - testplatformslist = [] - - if platform: - plat = platforms.get(platform) - if not plat: - raise Exit( - message=f"Unknown platform {platform}. Known platforms are {list(platforms.keys())}\n", - code=2, - ) - - # check to see if the OS is configured for the given provider - prov = plat.get(provider) - if not prov: - raise Exit( - message=f"Unknown provider {provider}. Known providers for platform {platform} are {list(plat.keys())}\n", - code=3, - ) - - ar = prov.get(arch) - if not ar: - raise Exit( - message=f"Unknown architecture {arch}. Known architectures for platform {platform} provider {provider} are {list(prov.keys())}\n", - code=4, - ) - - # get list of target OSes - if osversions.lower() == "all": - osversions = ".*" - - osimages = load_targets(ctx, ar, osversions, platform) - - print(f"Chose os targets {osimages}\n") - for osimage in osimages: - testplatformslist.append(f"{osimage},{ar[osimage]}") - - elif platlist: - # platform list should be in the form of driver,os,arch,image - for entry in platlist: - driver, osv, arch, image = entry.split(",") - if provider and driver != provider: - raise Exit(message=f"Can only use one driver type per config ( {provider} != {driver} )\n", code=1) - - provider = driver - # check to see if we know this one - if not platforms.get(osv): - raise Exit(message=f"Unknown OS in {entry}\n", code=4) - - if not platforms[osv].get(driver): - raise Exit(message=f"Unknown driver in {entry}\n", code=5) - - if not platforms[osv][driver].get(arch): - raise Exit(message=f"Unknown architecture in {entry}\n", code=5) - - if not platforms[osv][driver][arch].get(image): - raise Exit(message=f"Unknown image in {entry}\n", code=6) - - testplatformslist.append(f"{image},{platforms[osv][driver][arch][image]}") - - print("Using the following test platform(s)\n") - for logplat in testplatformslist: - print(f" {logplat}") - testplatforms = "|".join(testplatformslist) - - # create the kitchen.yml file - with open('tmpkitchen.yml', 'w') as kitchenyml: - # first read the correct driver - print(f"Adding driver file drivers/{provider}-driver.yml\n") - - with open(f"drivers/{provider}-driver.yml") as driverfile: - kitchenyml.write(driverfile.read()) - - # read the generic contents - with open("test-definitions/platforms-common.yml") as commonfile: - kitchenyml.write(commonfile.read()) - - # now open the requested test files - for f in glob.glob(f"test-definitions/{testfiles}.yml"): - if f.lower().endswith("platforms-common.yml"): - print("Skipping common file\n") - with open(f) as infile: - print(f"Adding file {f}\n") - kitchenyml.write(infile.read()) - - env = {} - if uservars: - env = load_user_env(ctx, provider, uservars) - - # set KITCHEN_ARCH if it's not set in the user env - if 'KITCHEN_ARCH' not in env and 'KITCHEN_ARCH' not in os.environ.keys(): - env['KITCHEN_ARCH'] = arch - - env['TEST_PLATFORMS'] = testplatforms - - if provider == "azure": - env['TEST_IMAGE_SIZE'] = imagesize if imagesize else "" - elif provider == "ec2" and imagesize: - env['KITCHEN_EC2_INSTANCE_TYPE'] = imagesize - - if fips: - env['FIPS'] = 'true' - ctx.run("erb tmpkitchen.yml > kitchen.yml", env=env) - - -@task -def should_rerun_failed(_, runlog): - """ - Parse a log from kitchen run and see if we should rerun it (e.g. because of a network issue). - """ - test_result_re_gotest = re.compile(r'--- FAIL: (?P[A-Z].*) \(.*\)') - test_result_re_rspec = re.compile(r'\d+\s+examples?,\s+(?P\d+)\s+failures?') - - with open(runlog, encoding='utf-8') as f: - text = f.read() - result_rspec = set(test_result_re_rspec.findall(text)) - result_gotest = set(test_result_re_gotest.findall(text)) - result = result_rspec.union(result_gotest) - if result == {'0'} or result == set(): - print( - "Seeing no failed kitchen tests in log this is probably an infrastructure problem, advising to rerun the failed test suite" - ) - else: - raise Exit("Seeing some failed kitchen tests in log, not advising to rerun the failed test suite", 1) - - -@task -def invoke_unit_tests(ctx): - """ - Run the unit tests on the invoke tasks - """ - for _, _, files in os.walk("tasks/unit-tests/"): - for file in files: - if file[-3:] == ".py" and file != "__init__.py": - ctx.run(f"{sys.executable} -m tasks.unit-tests.{file[:-3]}") - - -def load_targets(_, targethash, selections, platform): - returnlist = [] - skiplist = [] - commentpattern = re.compile("^comment") - - if platform == "windows": - if 'WINDOWS_DDNPM_DRIVER' in os.environ.keys() and os.environ['WINDOWS_DDNPM_DRIVER'] == 'testsigned': - for skip in WINDOWS_SKIP_IF_TESTSIGNING: - skiplist.append(re.compile(skip)) - - for selection in selections.split(","): - selectionpattern = re.compile(f"^{selection}$") - - matched = False - for key in targethash: - if commentpattern.match(key): - continue - if selectionpattern.search(key): - for skip in skiplist: - if skip.match(key): - print(f"Matched key {key} to skip list, skipping\n") - matched = True - break - else: - # will only execute if there's not a break in the previous for - # loop. - matched = True - if key not in returnlist: - returnlist.append(key) - else: - print(f"Skipping duplicate target key {key} (matched search {selection})\n") - - if not matched: - raise Exit(message=f"Couldn't find any match for target {selection}\n", code=7) - return returnlist - - -def load_user_env(_, provider, varsfile): - env = {} - commentpattern = re.compile("^comment") - if os.path.exists(varsfile): - with open(varsfile) as f: - vars = json.load(f) - for key, val in vars.get("global", {}).items(): - if commentpattern.match(key): - continue - env[key] = val - for key, val in vars.get(provider, {}).items(): - if commentpattern.match(key): - continue - env[key] = val - return env diff --git a/test/kitchen/tasks/kitchen_rspec_xml_update.sh b/test/kitchen/tasks/kitchen_rspec_xml_update.sh deleted file mode 100755 index d7f253a1212ec..0000000000000 --- a/test/kitchen/tasks/kitchen_rspec_xml_update.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash - -# set testsuite name with the job name -sed -i "s/name=\"rspec\"/name=\"$2\"/g" "$1" -# Edit filepath from relative to the kitchen test to the datadog git repository for codeowners -parent_folder=$(sed -n 's/.*classname="\([^"]*\)_spec.*/\1/p' "$1" | head -1) -sed -i "s/file=\".\/${parent_folder}_spec.rb\"/file=\".\/test\/kitchen\/test\/integration\/${parent_folder}\/rspec_datadog\/${parent_folder}_spec.rb\"/g" "$1" diff --git a/test/kitchen/tasks/kitchen_setup.sh b/test/kitchen/tasks/kitchen_setup.sh deleted file mode 100755 index dfa0d7652624f..0000000000000 --- a/test/kitchen/tasks/kitchen_setup.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -rm -rf "$CI_PROJECT_DIR/kitchen_logs" -rm -rf "$DD_AGENT_TESTING_DIR/.kitchen" -mkdir "$CI_PROJECT_DIR/kitchen_logs" -ln -s "$CI_PROJECT_DIR/kitchen_logs" "$DD_AGENT_TESTING_DIR/.kitchen" diff --git a/test/kitchen/tasks/run-test-kitchen.ps1 b/test/kitchen/tasks/run-test-kitchen.ps1 deleted file mode 100644 index ad6a536e57526..0000000000000 --- a/test/kitchen/tasks/run-test-kitchen.ps1 +++ /dev/null @@ -1,35 +0,0 @@ -if (Test-Path $PSScriptRoot\ssh-key) { - Write-Host -ForegroundColor Yellow "Deleting existing $PSScriptRoot\ssh-key" - Remove-Item $PSScriptRoot\ssh-key -} - -if (Test-Path $PSScriptRoot\ssh-key.pub) { - Write-Host -ForegroundColor Yellow "Deleting existing $PSScriptRoot\ssh-key" - Remove-Item $PSScriptRoot\ssh-key.pub -} - -$keyfile = "$PSScriptRoot\ssh-key" -Write-Host -ForegroundColor Green "Generating $PSScriptRoot\ssh-key" -& 'ssh-keygen.exe' -f $keyfile -P """" -t rsa -b 2048 - -$KITCHEN_SSH_KEY_PATH=$keyfile -& 'ssh-agent.exe' -s -& 'ssh-add' $keyfile - -if (-not (Test-Path env:AZURE_CLIENT_ID)) { - Write-Host -ForegroundColor Red "Need AZURE_CLIENT_ID" - exit -} - -if (-not (Test-Path env:AZURE_CLIENT_SECRET)) { - Write-Host -ForegroundColor Red "Need AZURE_CLIENT_SECRET" - exit -} -if (-not (Test-Path env:AZURE_TENANT_ID)) { - Write-Host -ForegroundColor Red "Need AZURE_TENANT_ID" - exit -} -if (-not (Test-Path env:AZURE_SUBSCRIPTION_ID)) { - Write-Host -ForegroundColor Red "Need AZURE_SUBSCRIPTION_ID" - exit -} diff --git a/test/kitchen/tasks/run-test-kitchen.sh b/test/kitchen/tasks/run-test-kitchen.sh deleted file mode 100755 index 795ee25dc4ff1..0000000000000 --- a/test/kitchen/tasks/run-test-kitchen.sh +++ /dev/null @@ -1,200 +0,0 @@ -#!/bin/bash - -# This script sets up the environment and then runs the test kitchen itself. - -# http://redsymbol.net/articles/unofficial-bash-strict-mode/ -IFS=$'\n\t' -set -euo pipefail - -# Ensure that the ssh key is never reused between tests -if [ -f "$(pwd)/ssh-key" ]; then - rm ssh-key -fi -if [ -f "$(pwd)/ssh-key.pub" ]; then - rm ssh-key.pub -fi -# Set a PARENT_DIR variable to call the aws_ssm wrapper in both local and CI contexts -pushd ../.. -if [ -n "$CI_PROJECT_DIR" ]; then - PARENT_DIR="$CI_PROJECT_DIR" -else - PARENT_DIR="$(pwd)" -fi -popd - -# in docker we cannot interact to do this so we must disable it -mkdir -p ~/.ssh -[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config - -if [ "$KITCHEN_PROVIDER" == "azure" ]; then - # Generating SSH keys to connect to Azure VMs - - ssh-keygen -f "$(pwd)/ed25519-key" -P "" -a 100 -t ed25519 - KITCHEN_ED25519_SSH_KEY_PATH="$(pwd)/ed25519-key" - export KITCHEN_ED25519_SSH_KEY_PATH - - # show that the ed25519 ssh key is there - ls "$(pwd)/ed25519-key" - - ssh-keygen -f "$(pwd)/rsa-key" -P "" -t rsa -b 2048 - KITCHEN_RSA_SSH_KEY_PATH="$(pwd)/rsa-key" - export KITCHEN_RSA_SSH_KEY_PATH - - # show that the rsa ssh key is there - ls "$(pwd)/rsa-key" - - # start the ssh-agent and add the keys - eval "$(ssh-agent -s)" - ssh-add "$KITCHEN_RSA_SSH_KEY_PATH" - ssh-add "$KITCHEN_ED25519_SSH_KEY_PATH" - - # Setup the azure credentials, grabbing them from AWS if they do not exist in the environment already - # If running locally, they should be imported into the environment - - # These should not be printed out - set +x - if [ -z ${AZURE_CLIENT_ID+x} ]; then - AZURE_CLIENT_ID=$($PARENT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE client_id) - # make sure whitespace is removed - AZURE_CLIENT_ID="$(echo -e "${AZURE_CLIENT_ID}" | tr -d '[:space:]')" - export AZURE_CLIENT_ID - fi - if [ -z ${AZURE_CLIENT_SECRET+x} ]; then - AZURE_CLIENT_SECRET=$($PARENT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE token) - # make sure whitespace is removed - AZURE_CLIENT_SECRET="$(echo -e "${AZURE_CLIENT_SECRET}" | tr -d '[:space:]')" - export AZURE_CLIENT_SECRET - fi - if [ -z ${AZURE_TENANT_ID+x} ]; then - AZURE_TENANT_ID=$($PARENT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE tenant_id) - # make sure whitespace is removed - AZURE_TENANT_ID="$(echo -e "${AZURE_TENANT_ID}" | tr -d '[:space:]')" - export AZURE_TENANT_ID - fi - if [ -z ${AZURE_SUBSCRIPTION_ID+x} ]; then - AZURE_SUBSCRIPTION_ID=$($PARENT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE subscription_id) - # make sure whitespace is removed - AZURE_SUBSCRIPTION_ID="$(echo -e "${AZURE_SUBSCRIPTION_ID}" | tr -d '[:space:]')" - export AZURE_SUBSCRIPTION_ID - fi - - if [ -z ${AZURE_SUBSCRIPTION_ID+x} ] || [ -z ${AZURE_TENANT_ID+x} ] || [ -z ${AZURE_CLIENT_SECRET+x} ] || [ -z ${AZURE_CLIENT_ID+x} ]; then - printf "You are missing some of the necessary credentials. Exiting." - exit 1 - fi - - # Create the Azure credentials file as requried by the kitchen-azurerm driver - mkdir -p ~/.azure/ - (echo "<% subscription_id=\"$AZURE_SUBSCRIPTION_ID\"; client_id=\"$AZURE_CLIENT_ID\"; client_secret=\"$AZURE_CLIENT_SECRET\"; tenant_id=\"$AZURE_TENANT_ID\"; %>" && cat azure-creds.erb) | erb > ~/.azure/credentials - -elif [ "$KITCHEN_PROVIDER" == "ec2" ]; then - echo "using ec2 kitchen provider" - - # Setup the AWS credentials: grab the ED25519 ssh key that is needed to connect to Amazon Linux 2022 instances - # See: https://github.com/test-kitchen/kitchen-ec2/issues/588 - # Note: this issue happens even when allowing RSA keys in the ssh service of the remote host (which was the fix we did for Ubuntu 22.04), - # therefore using the auto-generated SSH key is not possible at all. - - # These should not be printed out - set +x - if [ -z ${KITCHEN_EC2_SSH_KEY_ID+x} ]; then - export KITCHEN_EC2_SSH_KEY_ID="datadog-agent-kitchen" - export KITCHEN_EC2_SSH_KEY_PATH="$(pwd)/aws-ssh-key" - touch $KITCHEN_EC2_SSH_KEY_PATH && chmod 600 $KITCHEN_EC2_SSH_KEY_PATH - $PARENT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AWS ssh_private_key > $KITCHEN_EC2_SSH_KEY_PATH - fi -fi - -# Generate a password to use for the windows servers -if [ -z ${SERVER_PASSWORD+x} ]; then - export SERVER_PASSWORD="$(tr -dc A-Za-z0-9 < /dev/urandom | head -c32)0aZ" -fi - -if [[ $# == 0 ]]; then - echo "Missing run suite argument. Exiting." - exit 1 -fi - -if [[ $# == 1 ]]; then - echo "Missing major version argument. Exiting." - exit 1 -fi - -export MAJOR_VERSION=$2 - -# if the agent version isn't set, grab it -# This is for the windows agent, as it needs to know the exact right version to grab -# on linux it can just download the latest version from the package manager -if [ -z ${AGENT_VERSION+x} ]; then - pushd ../.. - AGENT_VERSION=$(inv agent.version --url-safe --git-sha-length=7 --major-version "$MAJOR_VERSION") - export AGENT_VERSION - DD_AGENT_EXPECTED_VERSION=$(inv agent.version --url-safe --git-sha-length=7 --major-version "$MAJOR_VERSION") - export DD_AGENT_EXPECTED_VERSION - popd -fi - -KITCHEN_IMAGE_SIZE="${KITCHEN_IMAGE_SIZE:-}" - -invoke -e kitchen.genconfig --platform="$KITCHEN_PLATFORM" --osversions="$KITCHEN_OSVERS" --provider="$KITCHEN_PROVIDER" --arch="${KITCHEN_ARCH:-x86_64}" --imagesize="${KITCHEN_IMAGE_SIZE}" --testfiles="$1" ${KITCHEN_FIPS:+--fips} --platformfile=platforms.json - -bundle exec kitchen diagnose --no-instances --loader - -## copy the generated kitchen.yml to the .kitchen directory so it'll be included -## in the artifacts (for debugging when necessary) -cp kitchen.yml ./.kitchen/generated_kitchen.yml - -rm -rf cookbooks -rm -f Berksfile.lock -berks vendor ./cookbooks - -set +o pipefail - -# Initially test every suite, as we only generate those we want to run -test_suites=".*" -# This for loop retries kitchen tests failing because of infrastructure/networking issues -for attempt in $(seq 0 "${KITCHEN_INFRASTRUCTURE_FLAKES_RETRY:-2}"); do - bundle exec kitchen verify "$test_suites" -c -d always 2>&1 | tee "/tmp/runlog${attempt}" - result=${PIPESTATUS[0]} - # Before destroying the kitchen machines, get the list of failed suites, - # as their status will be reset to non-failing once they're destroyed. - # failing_test_suites is a newline-separated list of the failing test suite names. - failing_test_suites=$(bundle exec kitchen list --no-log-overwrite --json | jq -cr "[ .[] | select( .last_error != null ) ] | map( .instance ) | .[]") - - # Then, destroy the kitchen machines - # Do not fail on kitchen destroy, it breaks the infra failures filter - set +e - bundle exec kitchen destroy "$test_suites" --no-log-overwrite - destroy_result=$? - set -e - - # If the destory operation fails, it is not safe to continue running kitchen - # so we just exit with an infrastructure failure message. - if [ "$destroy_result" -ne 0 ]; then - echo "Failure while destroying kitchen infrastructure, skipping retries" - break - fi - - if [ "$result" -eq 0 ]; then - echo "Kitchen test succeeded exiting 0" - exit 0 - else - if ! invoke kitchen.should-rerun-failed "/tmp/runlog${attempt}" ; then - # if kitchen test failed and shouldn't be rerun, exit with 1 - echo "Kitchen tests failed and it should not be an infrastructure problem" - exit 1 - else - cp -R "${DD_AGENT_TESTING_DIR}"/.kitchen/logs "${DD_AGENT_TESTING_DIR}/.kitchen/logs-${attempt}" - # Only keep test suites that have a non-null error code - # Build the result as a regexp: "test_suite1|test_suite2|test_suite3", as kitchen only - # supports one instance name or a regexp as argument. - test_suites=$(echo -n "$failing_test_suites" | tr '\n' '|') - fi - fi -done - - -# if we ran out of attempts because of infrastructure/networking issues, exit with 1 -echo "Ran out of retry attempts" -echo "ERROR: The kitchen tests failed due to infrastructure failures." -exit 1 diff --git a/test/kitchen/tasks/show-strays.sh b/test/kitchen/tasks/show-strays.sh deleted file mode 100755 index f1d2eff4df7a8..0000000000000 --- a/test/kitchen/tasks/show-strays.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash - -# This script lists any stray azure vms that remain from an arbitrary pipeline. -# It's meant to be run manually to see if any cleanup is necessary. - -# http://redsymbol.net/articles/unofficial-bash-strict-mode/ -IFS=$'\n\t' -set -euo pipefail - -# These should not be printed out -set +x -if [ -z ${AZURE_CLIENT_ID+x} ]; then - AZURE_CLIENT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE client_id) - export AZURE_CLIENT_ID -fi -if [ -z ${AZURE_CLIENT_SECRET+x} ]; then - AZURE_CLIENT_SECRET=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE token) - export AZURE_CLIENT_SECRET -fi -if [ -z ${AZURE_TENANT_ID+x} ]; then - AZURE_TENANT_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE tenant_id) - export AZURE_TENANT_ID -fi -if [ -z ${AZURE_SUBSCRIPTION_ID+x} ]; then - AZURE_SUBSCRIPTION_ID=$($CI_PROJECT_DIR/tools/ci/fetch_secret.sh $KITCHEN_AZURE subscription_id) - export AZURE_SUBSCRIPTION_ID -fi -if [ -z ${DD_PIPELINE_ID+x} ]; then - DD_PIPELINE_ID='none' - export DD_PIPELINE_ID -fi - -if [ -z ${AZURE_SUBSCRIPTION_ID+x} -o -z ${AZURE_TENANT_ID+x} -o -z ${AZURE_CLIENT_SECRET+x} -o -z ${AZURE_CLIENT_ID+x} ]; then - printf "You are missing some of the necessary credentials. Exiting." - exit 1 -fi - -az login --service-principal -u "$AZURE_CLIENT_ID" -p "$AZURE_CLIENT_SECRET" --tenant "$AZURE_TENANT_ID" > /dev/null - -printf "VMs:\n" - -if [ ${SHOW_ALL+x} ]; then - export VM_QUERY="[?tags.dd_agent_testing=='dd_agent_testing']" -else - export VM_QUERY="[?tags.dd_agent_testing=='dd_agent_testing']|[?tags.pipeline_id=='$CI_PIPELINE_ID']" -fi - -if [ ${STRAYS_VERBOSE+x} ]; then - az vm list --query "$VM_QUERY" -else - az vm list --query "$VM_QUERY|[*].{name:name,location:location,state:provisioningState}" -o tsv -fi - -printf "\n" - -printf "Groups:\n" - -if [ ${SHOW_ALL+x} ]; then - export GROUPS_QUERY="[?starts_with(name, 'kitchen-')]" -else - export GROUPS_QUERY="[?starts_with(name, 'kitchen-')]|[?ends_with(name, 'pl"$CI_PIPELINE_ID"')]" -fi -if [ ${STRAYS_VERBOSE+x} ]; then - az group list --query "$GROUPS_QUERY" -else - az group list --query "$GROUPS_QUERY|[*].{name:name,location:location,state:properties.provisioningState}" -o table -fi diff --git a/test/kitchen/tasks/unit-tests/__init__.py b/test/kitchen/tasks/unit-tests/__init__.py deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/test/kitchen/tasks/unit-tests/gotest-failed-runlog b/test/kitchen/tasks/unit-tests/gotest-failed-runlog deleted file mode 100644 index 86ec9aec47ae9..0000000000000 --- a/test/kitchen/tasks/unit-tests/gotest-failed-runlog +++ /dev/null @@ -1,10 +0,0 @@ -I, [2023-06-20T17:11:07.082387 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: PASS -I, [2023-06-20T17:11:07.083578 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: finished system-probe tests for /pkg/network/tracer/testsuite.exe -I, [2023-06-20T17:11:07.084475 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: -I, [2023-06-20T17:11:07.085372 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: -I, [2023-06-20T17:11:07.086272 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: FAILURES: -I, [2023-06-20T17:11:07.087161 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: -I, [2023-06-20T17:11:07.088145 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: system-probe tests for /pkg/network/testsuite.exe successfully runs: -I, [2023-06-20T17:11:07.089081 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: --- FAIL: TestMustFail (0.00s) -I, [2023-06-20T17:11:07.089982 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: -I, [2023-06-20T17:11:07.090900 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: Finished in 29.9 seconds. \ No newline at end of file diff --git a/test/kitchen/tasks/unit-tests/gotest-infra-failed-runlog b/test/kitchen/tasks/unit-tests/gotest-infra-failed-runlog deleted file mode 100644 index 347a21939800c..0000000000000 --- a/test/kitchen/tasks/unit-tests/gotest-infra-failed-runlog +++ /dev/null @@ -1,10 +0,0 @@ -I, [2023-06-20T17:11:07.071887 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: --- PASS: TestTracerSuite/prebuilt/TestUDPSendAndReceive/v4/random_port (0.08s) -I, [2023-06-20T17:11:07.072844 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: --- PASS: TestTracerSuite/prebuilt/TestUDPSendAndReceive/v6 (0.16s) -I, [2023-06-20T17:11:07.073819 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: --- PASS: TestTracerSuite/prebuilt/TestUDPSendAndReceive/v6/fixed_port (0.08s) -I, [2023-06-20T17:11:07.074785 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: --- PASS: TestTracerSuite/prebuilt/TestUDPSendAndReceive/v6/random_port (0.08s) -I, [2023-06-20T17:11:07.075773 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: --- PASS: TestTracerSuite/prebuilt/TestUnconnectedUDPSendIPv4 (0.08s) -I, [2023-06-20T17:11:07.076712 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: === RUN TestSkipConnectionDNS -I, [2023-06-20T17:11:07.077662 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: === RUN TestSkipConnectionDNS/CollectLocalDNS_disabled -I, [2023-06-20T17:11:07.087161 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: -I, [2023-06-20T17:11:07.089982 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: -I, [2023-06-20T17:11:07.090900 #404] INFO -- win-sysprobe-test-win2012r2-azure-x86-64: Finished in 29.9 seconds. \ No newline at end of file diff --git a/test/kitchen/tasks/unit-tests/infra-failed-runlog b/test/kitchen/tasks/unit-tests/infra-failed-runlog deleted file mode 100644 index 1fc8c62cc9826..0000000000000 --- a/test/kitchen/tasks/unit-tests/infra-failed-runlog +++ /dev/null @@ -1,10 +0,0 @@ -I, [2023-06-19T14:41:49.342860 #357] INFO -- chef-win2022-azure-x86-64: Shared Example Group: "Agent behavior" called from ./chef_spec.rb:5 -I, [2023-06-19T14:41:49.343999 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:225:in `block in integration_install' -I, [2023-06-19T14:41:49.345581 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:224:in `tap' -I, [2023-06-19T14:41:49.347113 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:224:in `integration_install' -I, [2023-06-19T14:41:49.348798 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:782:in `block (2 levels) in ' -I, [2023-06-19T14:41:49.350390 #357] INFO -- chef-win2022-azure-x86-64: # C:/Users/datadog/AppData/Local/Temp/verifier/gems/gems/busser-rspec_datadog-0.8.5/lib/busser/rspec_datadog/runner.rb:23:in `

' -I, [2023-06-19T14:41:49.351817 #357] INFO -- chef-win2022-azure-x86-64: -I, [2023-06-19T14:41:49.353374 #357] INFO -- chef-win2022-azure-x86-64: Finished in 6 minutes 2 seconds (files took 0.45318 seconds to load) -I, [2023-06-19T14:41:49.354914 #357] INFO -- chef-win2022-azure-x86-64: 33 examples, 0 failures, 3 pending -I, [2023-06-19T14:41:49.356773 #357] INFO -- chef-win2022-azure-x86-64: \ No newline at end of file diff --git a/test/kitchen/tasks/unit-tests/kitchen_unit_tests.py b/test/kitchen/tasks/unit-tests/kitchen_unit_tests.py deleted file mode 100644 index 822a27a652ff4..0000000000000 --- a/test/kitchen/tasks/unit-tests/kitchen_unit_tests.py +++ /dev/null @@ -1,35 +0,0 @@ -import unittest - -from invoke import Exit, MockContext - -from ..kitchen import should_rerun_failed - - -class TestKitchenInvokeMethod(unittest.TestCase): - def test_no_rerun_gotest(self): - mock_context = MockContext() - with self.assertRaises(Exit): - should_rerun_failed(mock_context, "tasks/unit-tests/gotest-failed-runlog") - - def test_rerun_gotest(self): - mock_context = MockContext() - try: - should_rerun_failed(mock_context, "tasks/unit-tests/gotest-infra-failed-runlog") - except Exit: - self.fail("should_rerun_failed returned non-zero exit code") - - def test_no_rerun_rspec(self): - mock_context = MockContext() - with self.assertRaises(Exit): - should_rerun_failed(mock_context, "tasks/unit-tests/test-failed-runlog") - - def test_rerun_rspec(self): - mock_context = MockContext() - try: - should_rerun_failed(mock_context, "tasks/unit-tests/infra-failed-runlog") - except Exit: - self.fail("should_rerun_failed returned non-zero exit code") - - -if __name__ == '__main__': - unittest.main() diff --git a/test/kitchen/tasks/unit-tests/test-failed-runlog b/test/kitchen/tasks/unit-tests/test-failed-runlog deleted file mode 100644 index e98d0de145fc0..0000000000000 --- a/test/kitchen/tasks/unit-tests/test-failed-runlog +++ /dev/null @@ -1,10 +0,0 @@ -I, [2023-06-19T14:41:49.342860 #357] INFO -- chef-win2022-azure-x86-64: Shared Example Group: "Agent behavior" called from ./chef_spec.rb:5 -I, [2023-06-19T14:41:49.343999 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:225:in `block in integration_install' -I, [2023-06-19T14:41:49.345581 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:224:in `tap' -I, [2023-06-19T14:41:49.347113 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:224:in `integration_install' -I, [2023-06-19T14:41:49.348798 #357] INFO -- chef-win2022-azure-x86-64: # ./spec_helper.rb:782:in `block (2 levels) in ' -I, [2023-06-19T14:41:49.350390 #357] INFO -- chef-win2022-azure-x86-64: # C:/Users/datadog/AppData/Local/Temp/verifier/gems/gems/busser-rspec_datadog-0.8.5/lib/busser/rspec_datadog/runner.rb:23:in `
' -I, [2023-06-19T14:41:49.351817 #357] INFO -- chef-win2022-azure-x86-64: -I, [2023-06-19T14:41:49.353374 #357] INFO -- chef-win2022-azure-x86-64: Finished in 6 minutes 2 seconds (files took 0.45318 seconds to load) -I, [2023-06-19T14:41:49.354914 #357] INFO -- chef-win2022-azure-x86-64: 33 examples, 2 failures, 3 pending -I, [2023-06-19T14:41:49.356773 #357] INFO -- chef-win2022-azure-x86-64: diff --git a/test/kitchen/test-definitions/chef-test.yml b/test/kitchen/test-definitions/chef-test.yml deleted file mode 100644 index c1df5b346e1ec..0000000000000 --- a/test/kitchen/test-definitions/chef-test.yml +++ /dev/null @@ -1,28 +0,0 @@ -suites: - -# Install the latest release candidate using Chef -- name: chef - run_list: - - "recipe[dd-agent-disable-system-repos]" - - "recipe[dd-agent-sles-workaround]" - - "recipe[dd-agent-system-files-check::list-files-before-install]" - - "recipe[dd-agent-install]" - attributes: - apt: - unattended_upgrades: - enable: false - datadog: - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - dd-agent-install: - agent_major_version: <%= agent_major_version %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - windows_agent_url: <%= windows_agent_url %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/platforms-common.yml b/test/kitchen/test-definitions/platforms-common.yml deleted file mode 100644 index 3272ba99a70c6..0000000000000 --- a/test/kitchen/test-definitions/platforms-common.yml +++ /dev/null @@ -1,30 +0,0 @@ -<% -def kitchen_arch_to_repo_arch(arch) - case arch - when 'arm64' - "aarch64" - else - arch - end -end - api_key = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - application_key = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - url = "https://app.datad0g.com" - aptrepo = "[signed-by=/usr/share/keyrings/datadog-archive-keyring.gpg] http://apttesting.datad0g.com/" - aptrepo_dist = "pipeline-#{ENV['DD_PIPELINE_ID']}-#{ENV['KITCHEN_ARCH']}" - yumrepo = "http://yumtesting.datad0g.com/testing/pipeline-#{ENV['DD_PIPELINE_ID']}/#{ENV['MAJOR_VERSION']}/#{kitchen_arch_to_repo_arch(ENV['KITCHEN_ARCH'])}/" - yumrepo_suse = "http://yumtesting.datad0g.com/suse/testing/pipeline-#{ENV['DD_PIPELINE_ID']}/#{ENV['MAJOR_VERSION']}/#{kitchen_arch_to_repo_arch(ENV['KITCHEN_ARCH'])}/" - agent_major_version = "#{ENV['MAJOR_VERSION']}" - windows_agent_url = ENV['WINDOWS_AGENT_URL'] ? ENV['WINDOWS_AGENT_URL'] : "https://#{ENV['WIN_S3_BUCKET']}.s3.amazonaws.com/#{ENV['WINDOWS_TESTING_S3_BUCKET']}" - dd_agent_config = { - 'agent_major_version': agent_major_version, - 'api_key': api_key, - 'application_key': application_key, - 'url': url, - 'aptrepo': aptrepo, - 'aptrepo_dist': aptrepo_dist, - 'yumrepo': yumrepo, - 'yumrepo_suse': yumrepo_suse, - 'windows_agent_url': windows_agent_url - } -%> diff --git a/test/kitchen/test-definitions/security-agent-stress.yml b/test/kitchen/test-definitions/security-agent-stress.yml deleted file mode 100644 index a4774731e45ec..0000000000000 --- a/test/kitchen/test-definitions/security-agent-stress.yml +++ /dev/null @@ -1,13 +0,0 @@ -suites: - -# Deploys and run the stress tests -- name: security-agent-stress - run_list: - - "recipe[dd-agent-rhel-workaround]" - - "recipe[dd-agent-sles-workaround]" - - "recipe[dd-security-agent-check]" - - "recipe[dd-security-agent-check::stress-tests]" - attributes: - apt: - unattended_upgrades: - enable: false diff --git a/test/kitchen/test-definitions/security-agent-test.yml b/test/kitchen/test-definitions/security-agent-test.yml deleted file mode 100644 index bd09658974ac4..0000000000000 --- a/test/kitchen/test-definitions/security-agent-test.yml +++ /dev/null @@ -1,13 +0,0 @@ -suites: - -# Deploys and run the functional tests -- name: security-agent-test - run_list: - - "recipe[dd-agent-rhel-workaround]" - - "recipe[dd-agent-sles-workaround]" - - "recipe[dd-security-agent-check]" - - "recipe[dd-security-agent-check::functional-tests]" - attributes: - apt: - unattended_upgrades: - enable: false diff --git a/test/kitchen/test-definitions/upgrade5-test.yml b/test/kitchen/test-definitions/upgrade5-test.yml deleted file mode 100644 index 345a892ae5dc6..0000000000000 --- a/test/kitchen/test-definitions/upgrade5-test.yml +++ /dev/null @@ -1,40 +0,0 @@ -suites: - -# Installs the latest release Agent 5, then updates it to the latest release -# candidate -- name: upgrade-agent5 - excludes: <% if (sles15_platforms.nil? || sles15_platforms.empty?) %>[]<% end %> # Agent 5 package doesn't work on SLES 15 - <% sles15_platforms.each do |p| %> - - <%= p %> - <% end %> - run_list: - - "recipe[dd-agent-disable-system-repos]" - - "recipe[dd-agent-rhel-workaround]" - - "recipe[dd-agent-sles-workaround]" - - "recipe[dd-agent-5]" # Setup agent 5 - - "recipe[dd-agent-upgrade]" # Upgrade to Agent 6 - - "recipe[dd-agent-import-conf]" # Import the configuration from 5 to 6 - attributes: - apt: - unattended_upgrades: - enable: false - dd-agent-5: - api_key: <%= api_key %> - dd-agent-upgrade: - add_new_repo: true - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/upgrade6-test.yml b/test/kitchen/test-definitions/upgrade6-test.yml deleted file mode 100644 index 166c7df74e270..0000000000000 --- a/test/kitchen/test-definitions/upgrade6-test.yml +++ /dev/null @@ -1,41 +0,0 @@ -suites: - -# Installs the latest release Agent 6, then updates it to the latest release -# candidate -- name: upgrade-agent6 - run_list: - <% if ENV['FIPS'] == 'true' %> - - "recipe[dd-agent-enable-fips::enable]" - - "recipe[dd-agent-enable-fips::ensure]" - <% end %> - - "recipe[dd-agent-disable-system-repos]" - - "recipe[dd-agent-rhel-workaround]" - - "recipe[dd-agent-sles-workaround]" - - "recipe[dd-agent-install]" - - "recipe[dd-agent-upgrade]" - attributes: - apt: - unattended_upgrades: - enable: false - datadog: - agent_major_version: 6 - agent_version: <%= ENV['LAST_STABLE_VERSION'] %> - api_key: <%= api_key %> - dd-agent-upgrade: - add_new_repo: true - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/upgrade7-test.yml b/test/kitchen/test-definitions/upgrade7-test.yml deleted file mode 100644 index 0a5f6a7e75bf3..0000000000000 --- a/test/kitchen/test-definitions/upgrade7-test.yml +++ /dev/null @@ -1,47 +0,0 @@ -suites: - -# Installs the latest release Agent 7, then updates it to the latest release -# candidate -- name: upgrade-agent7 - run_list: - <% if ENV['FIPS'] == 'true' %> - - "recipe[dd-agent-enable-fips::enable]" - - "recipe[dd-agent-enable-fips::ensure]" - <% end %> - - "recipe[dd-agent-disable-system-repos]" - - "recipe[dd-agent-rhel-workaround]" - - "recipe[dd-agent-sles-workaround]" - - "recipe[dd-agent-install]" - - "recipe[dd-agent-upgrade]" - attributes: - apt: - unattended_upgrades: - enable: false - datadog: - agent_major_version: 7 - agent_version: <%= ENV['LAST_STABLE_VERSION'] %> - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-upgrade: - add_new_repo: true - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - package_name: 'datadog-iot-agent' - <% end %> - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/windows-cwsinstall.yml b/test/kitchen/test-definitions/windows-cwsinstall.yml deleted file mode 100644 index f2baf33d3737a..0000000000000 --- a/test/kitchen/test-definitions/windows-cwsinstall.yml +++ /dev/null @@ -1,30 +0,0 @@ -suites: - -- name: win-agent-with-cws-option - run_list: - - "recipe[dd-agent-install]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - enable_process_agent: true - dd-agent-install: - agent_major_version: 7 - agent6: true - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - agent_install_options: > - NPM=true - enable_testsigning: <%= ENV['WINDOWS_DDPROCMON_DRIVER'] == "testsigned" %> - - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/windows-install-test.yml b/test/kitchen/test-definitions/windows-install-test.yml deleted file mode 100644 index b149a60ab7459..0000000000000 --- a/test/kitchen/test-definitions/windows-install-test.yml +++ /dev/null @@ -1,24 +0,0 @@ -suites: - - name: win-user - run_list: - - "recipe[dd-agent-install::_install_windows_base]" - attributes: - datadog: - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - dd-agent-install: - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - windows_agent_url: <%= windows_agent_url %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - agent_install_options: > - APIKEY=<%= api_key %> - LOGS_ENABLED=false - PROCESS_ENABLED=true - APM_ENABLED=true - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/windows-npm-test.md b/test/kitchen/test-definitions/windows-npm-test.md deleted file mode 100644 index c42bd916ceada..0000000000000 --- a/test/kitchen/test-definitions/windows-npm-test.md +++ /dev/null @@ -1,54 +0,0 @@ -# Windows NPM Test definitions - -## Test matrix - -The tests in this test file attempt to test all of the install/upgrade scenarios for installing the Windows agent with various install options. Starting in 7.45, the installation option changed from a Windows feature (NPM) to a more general "allow closed source". - -For these tests, then, installing/upgrading from an "old" version means <= 7.43. -Installing/upgrading from a "previous" version means > 7.43, but less than current version. (this is different for testing reacting -to the way the new state is recorded). -The "current" version is the version in test. - - -Install scenarios expected -1. Install old version with no NPM flag, install new version - - expect driver installed, system probe to enable & start -2. Install old version with no NPM flag, install new version - - expect driver installed, disabled -3. Install old version with NPM flag, install new version - - expect install to detect NPM previously installed, results in system probe enabling/starting driver -4. Install new version with NPM disabled - - expect driver installed, disabled -5. Install new version with NPM enabled - - expect driver installed, system probe to enable & start -7. Install version with no flag, reinstall same version with ADDLOCAL=ALL - - expect previous setting to be maintained (driver installed, system probe starts it) -8. Install version with ADDLOCAL=ALL - - (driver installed, system probe starts it) -9. Install version with ADDLOCAL=NPM - -## win-npm-upgrade-to-npm -Scenario 1 - -## win-npm-upgrade-no-npm -Scenario 2 - -## win-npm-upgrade-to-npm-no-csflag -Scenario 3 - -## win-npm-no-npm-option -Scenario 4 - -## win-npm-with-cs-option -Scenario 5 - -## Scenario 6 not currently enabled - -## win-npm-reinstall-option -Scenario 7 - -## win-npm-with-addlocal-all -Scenario 8 - -## win-npm-with-addlocal-npm -Scenario 9 diff --git a/test/kitchen/test-definitions/windows-npm-test.yml b/test/kitchen/test-definitions/windows-npm-test.yml deleted file mode 100644 index e724110bdd54c..0000000000000 --- a/test/kitchen/test-definitions/windows-npm-test.yml +++ /dev/null @@ -1,322 +0,0 @@ -suites: - -# Scenario 1 -# Install old version with no NPM flag, install new version -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-upgrade-to-npm - run_list: - - "recipe[dd-agent-install]" - - "recipe[dd-agent-upgrade]" - attributes: - datadog: - agent_major_version: 7 - agent_version: 7.42.0 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - agent_version: 7.42.0 - dd-agent-upgrade: - add_new_repo: true - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - package_name: 'datadog-iot-agent' - <% end %> - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - - - - -# Scenario 2 -# Install old version with no NPM flag, install new version -# - expect driver installed, does not enable NPM, expect NPM installed but not running -- name: win-npm-upgrade-no-npm - run_list: - - "recipe[dd-agent-install]" - - "recipe[dd-agent-upgrade]" - attributes: - datadog: - agent_major_version: 7 - agent_version: 7.42.0 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-upgrade: - add_new_repo: true - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - package_name: 'datadog-iot-agent' - <% end %> - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - - -# Scenario 3 -# Install old version with NPM flag, install new version -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-upgrade-to-npm-no-csflag - run_list: - - "recipe[dd-agent-install]" - - "recipe[dd-agent-upgrade]" - attributes: - datadog: - agent_major_version: 7 - agent_version: 7.42.0 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - agent_version: 7.42.0 - agent_install_options: > - ADDLOCAL=NPM - dd-agent-upgrade: - add_new_repo: true - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - package_name: 'datadog-iot-agent' - <% end %> - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - - -# Scenario 4 -# Install latest -# - expect driver installed, does not enable NPM, expect NPM installed but not running -- name: win-npm-no-npm-option - run_list: - - "recipe[dd-agent-install]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - -# Scenario 5 -# Install latest -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-with-cs-option - run_list: - - "recipe[dd-agent-install]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - -# Scenario 7 -# Install latest, reinstall latest with ADDLOCAL=ALL to test old option compat -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-reinstall-option - run_list: - - "recipe[dd-agent-install]" - - "recipe[dd-agent-reinstall]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-reinstall: - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - agent_install_options: > - ADDLOCAL=ALL - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - -# Scenario 8 -# Install latest with ADDLOCAL=ALL to test old option compat -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-with-addlocal-all - run_list: - - "recipe[dd-agent-install]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - agent_install_options: > - ADDLOCAL=ALL - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - - -# Scenario 9 -# Install latest with ADDLOCAL=NPM to test old option compat -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-with-addlocal-npm - run_list: - - "recipe[dd-agent-install]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - agent_install_options: > - ADDLOCAL=NPM - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> - -# Scenario 10 -# Install original NPM beta version, upgrade to latest -# - expect driver installed, enable NPM, expect system probe to enable & start -- name: win-npm-beta-upgrade - run_list: - - "recipe[dd-agent-install]" - - "recipe[dd-agent-upgrade]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - dd-agent-install: - agent_major_version: 7 - windows_agent_url: https://ddagent-windows-unstable.s3.amazonaws.com/ - windows_agent_filename: datadog-agent-7.23.2-beta1-1-x86_64 - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-upgrade: - add_new_repo: true - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - package_name: 'datadog-iot-agent' - <% end %> - <% dd_agent_config.each do |key, value| %> - <%= key %>: "<%= value %>" - <% end %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - dd-agent-import-conf: - api_key: <%= api_key %> - dd-agent-upgrade-rspec: - # Used by the rspec test to know the version to which the agent should be upgraded - agent_expected_version: &agent_expected_version <%= ENV['DD_AGENT_EXPECTED_VERSION'] || "5.99.0" %> - dd-agent-rspec: - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/windows-npmdriver.yml b/test/kitchen/test-definitions/windows-npmdriver.yml deleted file mode 100644 index 5910f15a8f45a..0000000000000 --- a/test/kitchen/test-definitions/windows-npmdriver.yml +++ /dev/null @@ -1,29 +0,0 @@ -suites: - -- name: win-npm-with-npm-option - run_list: - - "recipe[dd-agent-install]" - attributes: - datadog: - agent_major_version: 7 - api_key: <%= api_key %> - <% if ENV['AGENT_FLAVOR'] == 'datadog-iot-agent' %> - agent_flavor: 'datadog-iot-agent' - <% end %> - enable_process_agent: true - dd-agent-install: - agent_major_version: 7 - agent6: true - windows_agent_url: <%= windows_agent_url %> - <% if ENV['AGENT_VERSION'] %> - windows_version: "<%= ENV['AGENT_VERSION'] %>" - <% end %> - <% if ENV['WINDOWS_AGENT_FILE'] %> - windows_agent_filename: "<%= ENV['WINDOWS_AGENT_FILE'] %>" - <% end %> - agent_install_options: > - NPM=true - enable_testsigning: <%= ENV['WINDOWS_DDNPM_DRIVER'] == "testsigned" %> - dd-agent-rspec: - agent_flavor: <%= ENV['AGENT_FLAVOR'] || "datadog-agent" %> - skip_windows_signing_test: &skip_windows_signing_test <%= ENV['SKIP_SIGNATURE_TEST'] || false %> diff --git a/test/kitchen/test-definitions/windows-secagent-test.yml b/test/kitchen/test-definitions/windows-secagent-test.yml deleted file mode 100644 index 04e78f2f102c1..0000000000000 --- a/test/kitchen/test-definitions/windows-secagent-test.yml +++ /dev/null @@ -1,10 +0,0 @@ -suites: - -- name: win-secagent-test - run_list: - - "recipe[dd-security-agent-check]" - attributes: - dd-agent-rspec: - driver_path: <%= ENV['WINDOWS_DDPROCMON_DRIVER'] %> - driver_ver: <%= ENV['WINDOWS_DDPROCMON_VERSION'] %> - driver_msmsha: <%= ENV['WINDOWS_DDPROCMON_SHASUM'] %> diff --git a/test/kitchen/test-definitions/windows-sysprobe-test.yml b/test/kitchen/test-definitions/windows-sysprobe-test.yml deleted file mode 100644 index e1458e24d8c36..0000000000000 --- a/test/kitchen/test-definitions/windows-sysprobe-test.yml +++ /dev/null @@ -1,10 +0,0 @@ -suites: - -- name: win-sysprobe-test - run_list: - - "recipe[dd-system-probe-check]" - attributes: - dd-agent-rspec: - driver_path: <%= ENV['WINDOWS_DDNPM_DRIVER'] %> - driver_ver: <%= ENV['WINDOWS_DDNPM_VERSION'] %> - driver_msmsha: <%= ENV['WINDOWS_DDNPM_SHASUM'] %> diff --git a/test/kitchen/test/integration/chef/rspec_datadog/Gemfile b/test/kitchen/test/integration/chef/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/chef/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/chef/rspec_datadog/chef_spec.rb b/test/kitchen/test/integration/chef/rspec_datadog/chef_spec.rb deleted file mode 100644 index a2cc4aff11ebe..0000000000000 --- a/test/kitchen/test/integration/chef/rspec_datadog/chef_spec.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'spec_helper' - -describe 'dd-agent' do - include_examples 'Agent install' - include_examples 'Agent behavior' - include_examples 'Agent uninstall' -end diff --git a/test/kitchen/test/integration/chef/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/chef/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/chef/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/common/rspec_datadog/Gemfile b/test/kitchen/test/integration/common/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/common/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/common/rspec_datadog/kernel_out_spec_helper.rb b/test/kitchen/test/integration/common/rspec_datadog/kernel_out_spec_helper.rb deleted file mode 100644 index c6d5252ebc98c..0000000000000 --- a/test/kitchen/test/integration/common/rspec_datadog/kernel_out_spec_helper.rb +++ /dev/null @@ -1,83 +0,0 @@ -require "rspec/core/formatters/base_text_formatter" - -COLORS = [ - :green, - :blue, - :magenta, - :yellow, - :cyan, -] - -class KernelOut - @@release = `uname -r`.strip - if File.exist?('/tmp/color_idx') - color_idx = File.read('/tmp/color_idx').strip.to_i - 1 - @@color = COLORS[color_idx] - else - @@color = :no_format - end - - def self.format(text, tag="") - tag = "[#{tag}]" if tag != "" - if @@color != :no_format - return RSpec::Core::Formatters::ConsoleCodes.wrap("[#{@@release}]#{tag} #{text}", @@color) - else - return "[#{@@release}]#{tag} #{text}" - end - end -end - -class CustomFormatter - RSpec::Core::Formatters.register self, :example_passed, :example_failed, :dump_summary, :dump_failures, :example_group_started, :example_group_finished - - def initialize(output) - @output = output - end - - # Remove "."'s from the test execution output - def example_passed(_) - end - - # Remove "F"'s from the test execution output - def example_failed(_) - end - - def example_group_started(notification) - @output << "\n" - @output << KernelOut.format("started #{notification.group.description}\n") - end - - def example_group_finished(notification) - @output << KernelOut.format("finished #{notification.group.description}\n\n") - end - - def dump_summary(notification) - @output << KernelOut.format("Finished in #{RSpec::Core::Formatters::Helpers.format_duration(notification.duration)}.\n") - @output << KernelOut.format("#{notification.totals_line}\n") - @output << KernelOut.format("Platform: #{`uname -a`}\n\n") - end - - def dump_failures(notification) # ExamplesNotification - if notification.failed_examples.length > 0 - rel = KernelOut.format("") - failures = RSpec::Core::Formatters::ConsoleCodes.wrap("FAILURES:", :failure) - @output << "\n#{rel} #{failures}\n\n" - @output << error_summary(notification) - end - end - - private - - def error_summary(notification) - summary_output = notification.failed_examples.map do |example| - "#{example.full_description}:\n#{example.execution_result.exception.message}\n\n" - end - - summary_output.join - end -end - - -RSpec.configure do |config| - config.formatter = CustomFormatter -end diff --git a/test/kitchen/test/integration/common/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/common/rspec_datadog/spec_helper.rb deleted file mode 100644 index 89b2fa59a91fd..0000000000000 --- a/test/kitchen/test/integration/common/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1,1383 +0,0 @@ -require 'json' -require 'open-uri' -require 'rspec' -require 'rbconfig' -require 'yaml' -require 'find' -require 'tempfile' -require 'fileutils' -require 'set' - -# -# this enables RSpec output so that individual tests ("it behaves like...") are -# logged. -RSpec.configure do |c| - c.add_formatter "documentation" - FileUtils.mkdir_p '/tmp' - c.add_formatter("RspecJunitFormatter", "/tmp/kitchen/rspec.xml") -end - -os_cache = nil - -# We retrieve the value defined in kitchen.yml because there is no simple way -# to set env variables on the target machine or via parameters in Kitchen/Busser -# See https://github.com/test-kitchen/test-kitchen/issues/662 for reference -def parse_dna - if os == :windows - dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" - else - dna_json_path = "/tmp/kitchen/dna.json" - end - JSON.parse(IO.read(dna_json_path)) -end - -def get_agent_flavor - parse_dna().fetch('dd-agent-rspec').fetch('agent_flavor') -end - -def get_service_name(flavor) - # Return the service name of the given flavor depending on the OS - if os == :windows - case flavor - when "datadog-agent", "datadog-heroku-agent", "datadog-iot-agent" - "datadogagent" - when "datadog-dogstatsd" - # Placeholder, not used yet - "dogstatsd" - end - else - case flavor - when "datadog-agent", "datadog-heroku-agent", "datadog-iot-agent" - "datadog-agent" - when "datadog-dogstatsd" - "datadog-dogstatsd" - end - end -end - -def os - # OS Detection from https://stackoverflow.com/questions/11784109/detecting-operating-systems-in-ruby - os_cache ||= ( - host_os = RbConfig::CONFIG['host_os'] - case host_os - when /mswin|msys|mingw|cygwin|bccwin|wince|emc/ - :windows - when /darwin|mac os/ - :macosx - when /linux/ - :linux - when /solaris|bsd/ - :unix - else - raise Error::WebDriverError, "unknown os: #{host_os.inspect}" - end - ) -end - -def safe_program_files - # HACK: on non-English Windows, Chef wrongly installs its 32-bit version on 64-bit hosts because - # of this issue: https://github.com/chef/mixlib-install/issues/343 - # Because of this, the ENV['ProgramFiles'] content is wrong (it's `C:/Program Files (x86)`) - # while the Agent is installed in `C:/Program Files` - # To prevent this issue, we check the system arch and the ProgramFiles folder, and we fix it - # if needed. - - # Env variables are frozen strings, they need to be duplicated to modify them - program_files = ENV['ProgramFiles'].dup - arch = `Powershell -command "(Get-WmiObject Win32_OperatingSystem).OsArchitecture"` - if arch.include? "64" and program_files.include? "(x86)" - program_files.slice!("(x86)") - program_files.strip! - end - - program_files -end - - -def agent_command - if os == :windows - '"C:\\Program Files\\Datadog\\Datadog Agent\\bin\\agent.exe"' - else - "sudo datadog-agent" - end -end - -def wait_until_service_stopped(service, timeout = 60) - # Check if the service has stopped every second - # Timeout after the given number of seconds - for _ in 1..timeout do - if !is_service_running?(service) - case service - when "datadog-agent" - break if !is_port_bound(5001) - when "datadog-dogstatsd" - break if !is_port_bound(8125) - else - break - end - end - sleep 1 - end -end - -def wait_until_service_started(service, timeout = 30) - # Check if the service has started every second - # Timeout after the given number of seconds - for _ in 1..timeout do - if is_service_running?(service) - case service - when "datadog-agent" - break if is_port_bound(5001) - when "datadog-dogstatsd" - break if is_port_bound(8125) - else - break - end - end - sleep 1 - end -end - -def stop(flavor) - service = get_service_name(flavor) - if os == :windows - # forces the trace agent (and other dependent services) to stop - result = system "net stop /y #{service} 2>&1" - sleep 5 - else - if has_systemctl - result = system "sudo systemctl stop #{service}.service" - elsif has_upstart - result = system "sudo initctl stop #{service}" - else - result = system "sudo /sbin/service #{service} stop" - end - end - wait_until_service_stopped(service) - if result == nil || result == false - log_trace "datadog-agent", "stop" - end - result -end - -def start(flavor) - service = get_service_name(flavor) - if os == :windows - result = system "net start #{service} 2>&1" - sleep 5 - else - if has_systemctl - result = system "sudo systemctl start #{service}.service" - elsif has_upstart - result = system "sudo initctl start #{service}" - else - result = system "sudo /sbin/service #{service} start" - end - end - wait_until_service_started(service) - if result == nil || result == false - log_trace "datadog-agent", "start" - end - result -end - -def restart(flavor) - service = get_service_name(flavor) - if os == :windows - # forces the trace agent (and other dependent services) to stop - if is_service_running?(service) - result = system "net stop /y #{service} 2>&1" - sleep 20 - wait_until_service_stopped(service) - end - result = system "net start #{service} 2>&1" - sleep 20 - wait_until_service_started(service) - else - if has_systemctl - result = system "sudo systemctl restart #{service}.service" - # Worst case: the Agent has already stopped and restarted when we check if the process has been stopped - # and we lose 5 seconds. - wait_until_service_stopped(service, 5) - wait_until_service_started(service, 5) - elsif has_upstart - # initctl can't restart - result = system "(sudo initctl restart #{service} || sudo initctl start #{service})" - wait_until_service_stopped(service, 5) - wait_until_service_started(service, 5) - else - result = system "sudo /sbin/service #{service} restart" - wait_until_service_stopped(service, 5) - wait_until_service_started(service, 5) - end - end - if result == nil || result == false - log_trace "datadog-agent", "restart" - end - result -end - -def log_trace(flavor, action) - service = get_service_name(flavor) - if os == :windows - # Collect events from DatadogAgent and this service, since this service may depend on datadogagent it may be - # that the actual error is coming from datadogagent failing to start. - system "powershell.exe -Command \"Get-EventLog -LogName Application -Newest 10 -Source datadogagent,#{service} | fl\"" - system "powershell.exe -Command \"Get-EventLog -LogName System -Newest 10 -Source \\\"Service Control Manager\\\" | fl\"" - else - if has_systemctl - system "sudo journalctl -u #{service} -xe --no-pager" - elsif has_upstart - system "sudo grep #{service} /var/log/upstart" - else - system "sudo grep #{service} /var/log/message" - end - end -end - -def has_systemctl - system('command -v systemctl 2>&1 > /dev/null') -end - -def has_upstart - system('/sbin/init --version 2>&1 | grep -q upstart >/dev/null') -end - -def has_dpkg - system('command -v dpkg 2>&1 > /dev/null') -end - -def info - `#{agent_command} status 2>&1` -end - -def integration_install(package) - `#{agent_command} integration install -r #{package} 2>&1`.tap do |output| - raise "Failed to install integrations package '#{package}' - #{output}" unless $? == 0 - end -end - -def integration_remove(package) - `#{agent_command} integration remove -r #{package} 2>&1`.tap do |output| - raise "Failed to remove integrations package '#{package}' - #{output}" unless $? == 0 - end -end - -def integration_freeze - `#{agent_command} integration freeze 2>&1`.tap do |output| - raise "Failed to get integrations freeze - #{output}" unless $? == 0 - end -end - -def json_info(command) - tmpfile = Tempfile.new('agent-status') - begin - `#{command} status -j -o #{tmpfile.path}` - info_output = File.read(tmpfile.path) - - JSON.parse(info_output) - rescue Exception => e - puts $! - return {} - ensure - tmpfile.close - tmpfile.unlink - end -end - -def windows_service_status(service) - raise "windows_service_status is only for windows" unless os == :windows - # Language-independent way of getting the service status - res = `powershell -command \"try { (get-service #{service} -ErrorAction Stop).Status } catch { write-host NOTINSTALLED }\"` - return (res).upcase.strip -end - -def is_service_running?(service) - if os == :windows - return windows_service_status(service) == "RUNNING" - else - if has_systemctl - system "sudo systemctl status --no-pager #{service}.service" - elsif has_upstart - status = `sudo initctl status #{service}` - status.include?('start/running') - else - status = `sudo /sbin/service #{service} status` - status.include?('running') - end - end -end - -def is_windows_service_installed(service) - raise "is_windows_service_installed is only for windows" unless os == :windows - return windows_service_status(service) != "NOTINSTALLED" -end - -def is_flavor_running?(flavor) - is_service_running?(get_service_name(flavor)) -end - -def is_process_running?(pname) - if os == :windows - tasklist = `tasklist /fi \"ImageName eq #{pname}\" 2>&1` - if tasklist.include?(pname) - return true - end - else - return true if system("pgrep -f #{pname}") - end - return false -end - -def agent_processes_running? - %w(datadog-agent agent.exe).each do |p| - return true if is_process_running?(p) - end - false -end - -def trace_processes_running? - %w(trace-agent trace-agent.exe).each do |p| - return true if is_process_running?(p) - end - false -end - -def security_agent_running? - %w(security-agent security-agent.exe).each do |p| - return true if is_process_running?(p) - end - false -end - -def system_probe_running? - %w(system-probe system-probe.exe).each do |p| - return true if is_process_running?(p) - end - false -end - -def process_agent_running? - %w(process-agent process-agent.exe).each do |p| - return true if is_process_running?(p) - end - false -end - -def dogstatsd_processes_running? - %w(dogstatsd dogstatsd.exe).each do |p| - return true if is_process_running?(p) - end - false -end - -def deploy_cws? - os != :windows && - get_agent_flavor == 'datadog-agent' && - parse_dna().fetch('dd-agent-rspec').fetch('enable_cws') == true -end - -def read_agent_file(path, commit_hash) - open("https://raw.githubusercontent.com/DataDog/datadog-agent/#{commit_hash}/#{path}").read() -end - -# Hash of the commit the Agent was built from -def agent_git_hash - JSON.parse(IO.read("/opt/datadog-agent/version-manifest.json"))['software']['datadog-agent']['locked_version'] -end - -def trace_agent_git_hash - JSON.parse(IO.read("/opt/datadog-agent/version-manifest.json"))['software']['datadog-trace-agent']['locked_version'] -end - -# From a pip-requirements-formatted string, return a hash of 'dep_name' => 'version' -def read_requirements(file_contents) - reqs = Hash.new - file_contents.lines.reject do |line| - /^#/ === line # reject comment lines - end.collect do |line| - /(.+)==([^\s]+)/.match(line) - end.compact.each do |match| - reqs[match[1].downcase] = match[2] - end - reqs -end - -def is_port_bound(port) - if os == :windows - port_regex = Regexp.new(port.to_s) - port_regex.match(`netstat -n -b -a -p TCP 2>&1`) - else - # If netstat is not found (eg. on SUSE >= 15), use ss to get the list of ports used. - system("sudo netstat -lntp | grep #{port} 1>/dev/null") || system("sudo ss -lntp | grep #{port} 1>/dev/null") - end -end - -def get_conf_file(conf_path) - if os == :windows - return "#{ENV['ProgramData']}\\Datadog\\#{conf_path}" - else - return "/etc/datadog-agent/#{conf_path}" - end -end - -def read_conf_file(conf_path = "") - if conf_path == "" - conf_path = get_conf_file("datadog.yaml") - end - puts "cp is #{conf_path}" - f = File.read(conf_path) - confYaml = YAML.load(f) - confYaml -end - -def fetch_python_version(timeout = 15) - # Fetch the python_version from the Agent status - # Timeout after the given number of seconds - for _ in 1..timeout do - json_info_output = json_info(agent_command()) - if json_info_output.key?('python_version') && - ! json_info_output['python_version'].nil? && # nil is considered a correct version by Gem::Version - Gem::Version.correct?(json_info_output['python_version']) # Check that we do have a version number - return json_info_output['python_version'] - end - sleep 1 - end - return nil -end - -def is_file_signed(fullpath) - puts "checking file #{fullpath}" - expect(File).to exist(fullpath) - - output = `powershell -command "(get-authenticodesignature -FilePath '#{fullpath}').SignerCertificate.Thumbprint"` - signature_hashes = Set[ - ## signature below is for new cert acquired using new hsm-backed signing method - ## Non-EV Valid From: May 2023; To: May 2025 - "B03F29CC07566505A718583E9270A6EE17678742".upcase.strip, - ## EV Valid From: Dec 2023; To: Dec 2025 - "ECAA21456723CB0911183255A683DC01A99392DB".upcase.strip, - ## EV Valid From: Jun 2024; To: Jun 2026 - "59063C826DAA5B628B5CE8A2B32015019F164BF0".upcase.strip, - ] - - return true if signature_hashes.include?(output.upcase.strip) - - puts("Acceptable hashes: #{signature_hashes.keys}, actual hash = #{output.upcase.strip}") - return false -end - -def is_dpkg_package_installed(package) - system("dpkg -l #{package} | grep ii") -end - -shared_examples_for 'Agent install' do - it_behaves_like 'an installed Agent' - it_behaves_like 'an installed Datadog Signing Keys' -end - -shared_examples_for 'Basic Agent behavior' do - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'an Agent with integrations' - it_behaves_like 'an Agent that stops' - it_behaves_like 'an Agent that restarts' - it_behaves_like 'an Agent with Python' -end - -shared_examples_for 'Agent behavior' do - include_examples 'Basic Agent behavior' - it_behaves_like 'a running Agent with APM' - it_behaves_like 'a running Agent with APM manually disabled' - if deploy_cws? - it_behaves_like 'a running Agent with CWS enabled' - end -end - -shared_examples_for 'Agent uninstall' do - it_behaves_like 'an Agent that is removed' -end - -shared_examples_for "an installed Agent" do - wait_until_service_started get_service_name("datadog-agent") - - it 'has an example config file' do - if os != :windows - expect(File).to exist('/etc/datadog-agent/datadog.yaml.example') - end - end - - it 'has a datadog-agent binary in usr/bin' do - if os != :windows - expect(File).to exist('/usr/bin/datadog-agent') - end - end - - # We retrieve the value defined in kitchen.yml because there is no simple way - # to set env variables on the target machine or via parameters in Kitchen/Busser - # See https://github.com/test-kitchen/test-kitchen/issues/662 for reference - let(:skip_windows_signing_check) { - parse_dna().fetch('dd-agent-rspec').fetch('skip_windows_signing_test') - } - - it 'is properly signed' do - puts "skipping windows signing check #{skip_windows_signing_check}" if os == :windows and skip_windows_signing_check - #puts "is an upgrade is #{is_upgrade}" - if os == :windows and !skip_windows_signing_check - # The user in the yaml file is "datadog", however the default test kitchen user is azure. - # This allows either to be used without changing the test. - msi_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\cache\\ddagent-cli.msi" - msi_path_upgrade = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\cache\\ddagent-up.msi" - - # The upgrade file should only be present when doing an upgrade test. Therefore, - # check the file we're upgrading to, not the file we're upgrading from - if File.file?(msi_path_upgrade) - msi_path = msi_path_upgrade - end - - program_files = safe_program_files - verify_signature_files = [ - msi_path, - # TODO: Uncomment this when we start shipping the security agent on Windows - # "#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\security-agent.exe", - "#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\process-agent.exe", - "#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\trace-agent.exe", - "#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\ddtray.exe", - "#{program_files}\\DataDog\\Datadog Agent\\bin\\libdatadog-agent-three.dll", - "#{program_files}\\DataDog\\Datadog Agent\\bin\\agent.exe", - ] - libdatadog_agent_two = "#{program_files}\\DataDog\\Datadog Agent\\bin\\libdatadog-agent-two.dll" - if File.file?(libdatadog_agent_two) - verify_signature_files += [ - libdatadog_agent_two, - "#{program_files}\\DataDog\\Datadog Agent\\embedded2\\python.exe", - "#{program_files}\\DataDog\\Datadog Agent\\embedded2\\pythonw.exe", - "#{program_files}\\DataDog\\Datadog Agent\\embedded2\\python27.dll" - ] - end - - verify_signature_files.each do |vf| - expect(is_file_signed(vf)).to be_truthy - end - end - end -end - -shared_examples_for "an installed Datadog Signing Keys" do - it 'is installed (on Debian-based systems)' do - skip if os == :windows - skip unless has_dpkg - # Only check on Debian-based systems, which have dpkg installed - expect(is_dpkg_package_installed('datadog-signing-keys')).to be_truthy - end -end - -shared_examples_for "a running Agent with no errors" do - it 'has an agent binary' do - if os != :windows - expect(File).to exist('/usr/bin/datadog-agent') - end - end - - it 'is running' do - expect(is_flavor_running? "datadog-agent").to be_truthy - end - - it 'has a config file' do - conf_path = get_conf_file("datadog.yaml") - expect(File).to exist(conf_path) - end - - it 'has running checks' do - result = false - # Wait for the collector to do its first run - # Timeout after 30 seconds - for _ in 1..30 do - json_info_output = json_info(agent_command()) - if json_info_output.key?('runnerStats') && - json_info_output['runnerStats'].key?('Checks') && - !json_info_output['runnerStats']['Checks'].empty? - result = true - break - end - sleep 1 - end - expect(result).to be_truthy - end - - it 'has an info command' do - # On systems that use systemd (on which the `start` script returns immediately) - # sleep a few seconds to let the collector finish its first run - # Windows seems to frequently have this same issue - if os != :windows - system('command -v systemctl 2>&1 > /dev/null && sleep 5') - else - sleep 5 - end - - expect(info).to include "Forwarder" - expect(info).to include "DogStatsD" - expect(info).to include "Host Info" - end - - it 'has no errors in the info command' do - info_output = info - # The api key is invalid. this test ensures there are no other errors - info_output = info_output.gsub "[ERROR] API Key is invalid" "API Key is invalid" - expect(info_output).to_not include 'ERROR' - end -end - -shared_examples_for "a running Agent with APM" do - if os == :windows - it 'has the apm agent running' do - expect(is_process_running?("trace-agent.exe")).to be_truthy - expect(is_service_running?("datadog-trace-agent")).to be_truthy - end - end - it 'is bound to the port that receives traces by default' do - expect(is_port_bound(8126)).to be_truthy - end -end - -shared_examples_for "a running Agent with process enabled" do - it 'has the process agent running' do - expect(is_process_running?("process-agent.exe")).to be_truthy - expect(is_service_running?("datadog-process-agent")).to be_truthy - end -end - -shared_examples_for "a running Agent with APM manually disabled" do - it 'is not bound to the port that receives traces when apm_enabled is set to false' do - conf_path = get_conf_file("datadog.yaml") - - f = File.read(conf_path) - confYaml = YAML.load(f) - if !confYaml.key("apm_config") - confYaml["apm_config"] = {} - end - confYaml["apm_config"]["enabled"] = false - File.write(conf_path, confYaml.to_yaml) - - output = restart "datadog-agent" - if os != :windows - expect(output).to be_truthy - system 'command -v systemctl 2>&1 > /dev/null || sleep 5 || true' - else - sleep 5 - end - expect(is_port_bound(8126)).to be_falsey - end - - it "doesn't say 'not running' in the info command" do - # Until it runs the logs agent by default it will say this - # expect(info).to_not include 'not running' - end -end - -shared_examples_for 'an Agent that stops' do - it 'stops' do - output = stop "datadog-agent" - if os != :windows - expect(output).to be_truthy - end - expect(is_flavor_running? "datadog-agent").to be_falsey - end - - it 'has connection refuse in the info command' do - if os == :windows - expect(info).to include 'No connection could be made' - else - expect(info).to include 'connection refuse' - end - end - - it 'is not running any agent processes' do - expect(agent_processes_running?).to be_falsey - expect(trace_processes_running?).to be_falsey - expect(security_agent_running?).to be_falsey - expect(system_probe_running?).to be_falsey - end - - it 'starts after being stopped' do - output = start "datadog-agent" - if os != :windows - expect(output).to be_truthy - end - expect(is_flavor_running? "datadog-agent").to be_truthy - end -end - -shared_examples_for 'an Agent that restarts' do - it 'restarts when the agent is running' do - if !is_flavor_running? "datadog-agent" - start "datadog-agent" - end - output = restart "datadog-agent" - if os != :windows - expect(output).to be_truthy - end - expect(is_flavor_running? "datadog-agent").to be_truthy - end - - it 'restarts when the agent is not running' do - if is_flavor_running? "datadog-agent" - stop "datadog-agent" - end - output = restart "datadog-agent" - if os != :windows - expect(output).to be_truthy - end - expect(is_flavor_running? "datadog-agent").to be_truthy - end -end - -# Checks that the Agent can run Python 3. -# If running on an Agent 6, also check that it can run Python 2. -shared_examples_for 'an Agent with Python' do - it 'restarts after python_version is set to 3' do - conf_path = get_conf_file("datadog.yaml") - f = File.read(conf_path) - confYaml = YAML.load(f) - confYaml["python_version"] = 3 - File.write(conf_path, confYaml.to_yaml) - - output = restart "datadog-agent" - expect(output).to be_truthy - end - - it 'runs Python 3 after python_version is set to 3' do - result = false - python_version = fetch_python_version - if ! python_version.nil? && Gem::Version.new('3.0.0') <= Gem::Version.new(python_version) - result = true - end - expect(result).to be_truthy - end - - it 'restarts after python_version is set to 2' do - skip if info.include? "v7." - conf_path = get_conf_file("datadog.yaml") - f = File.read(conf_path) - confYaml = YAML.load(f) - confYaml["python_version"] = 2 - File.write(conf_path, confYaml.to_yaml) - - output = restart "datadog-agent" - expect(output).to be_truthy - end - - it 'runs Python 2 after python_version is set to 2' do - skip if info.include? "v7." - result = false - python_version = fetch_python_version - if ! python_version.nil? && Gem::Version.new('3.0.0') > Gem::Version.new(python_version) - result = true - end - expect(result).to be_truthy - end -end - -shared_examples_for 'an Agent with integrations' do - let(:integrations_freeze_file) do - if os == :windows - 'C:\Program Files\Datadog\Datadog Agent\requirements-agent-release.txt' - else - '/opt/datadog-agent/requirements-agent-release.txt' - end - end - - before do - freeze_content = File.read(integrations_freeze_file) - freeze_content.gsub!(/datadog-cilium==.*/, 'datadog-cilium==2.2.1') - File.write(integrations_freeze_file, freeze_content) - - integration_remove('datadog-cilium') - end - - it 'can uninstall an installed package' do - integration_install('datadog-cilium==2.2.1') - - expect do - integration_remove('datadog-cilium') - end.to change { integration_freeze.match?(%r{datadog-cilium==.*}) }.from(true).to(false) - end - - it 'can install a new package' do - integration_remove('datadog-cilium') - - expect do - integration_install('datadog-cilium==2.2.1') - end.to change { integration_freeze.match?(%r{datadog-cilium==2\.2\.1}) }.from(false).to(true) - end - - it 'can upgrade an installed package' do - expect do - integration_install('datadog-cilium==2.3.0') - end.to change { integration_freeze.match?(%r{datadog-cilium==2\.3\.0}) }.from(false).to(true) - end - - it 'can downgrade an installed package' do - integration_remove('datadog-cilium') - integration_install('datadog-cilium==2.3.0') - - expect do - integration_install('datadog-cilium==2.2.1') - end.to change { integration_freeze.match?(%r{datadog-cilium==2\.2\.1}) }.from(false).to(true) - end - - it 'cannot downgrade an installed package to a version older than the one shipped with the agent' do - integration_remove('datadog-cilium') - integration_install('datadog-cilium==2.2.1') - - expect do - integration_install('datadog-cilium==2.2.0') - end.to raise_error(/Failed to install integrations package 'datadog-cilium==2\.2\.0'/) - end -end - -shared_examples_for 'an Agent that is removed' do - it 'should remove the agent' do - if os == :windows - # uninstallcmd = "start /wait msiexec /q /x 'C:\\Users\\azure\\AppData\\Local\\Temp\\kitchen\\cache\\ddagent-cli.msi'" - uninstallcmd='for /f "usebackq" %n IN (`wmic product where "name like \'datadog%\'" get IdentifyingNumber ^| find "{"`) do start /wait msiexec /log c:\\uninst.log /q /x %n' - expect(system(uninstallcmd)).to be_truthy - else - if system('which apt-get &> /dev/null') - expect(system("sudo apt-get -q -y remove #{get_agent_flavor} > /dev/null")).to be_truthy - elsif system('which yum &> /dev/null') - expect(system("sudo yum -y remove #{get_agent_flavor} > /dev/null")).to be_truthy - elsif system('which zypper &> /dev/null') - expect(system("sudo zypper --non-interactive remove #{get_agent_flavor} > /dev/null")).to be_truthy - else - raise 'Unknown package manager' - end - end - end - - it 'should not be running the agent after removal' do - sleep 15 - expect(agent_processes_running?).to be_falsey - expect(trace_processes_running?).to be_falsey - expect(security_agent_running?).to be_falsey - expect(system_probe_running?).to be_falsey - end - - if os == :windows - windows_service_names = [ - 'datadogagent', - 'datadog-process-agent', - 'datadog-trace-agent', - 'datadog-system-probe', - 'datadog-security-agent' - ] - it 'should not have services installed' do - windows_service_names.each do |ws| - expect(is_windows_service_installed(ws)).to be_falsey - end - end - end -if os == :windows - it 'should not make changes to system files' do - exclude = [ - 'C:/Windows/Assembly/Temp/', - 'C:/Windows/Assembly/Tmp/', - 'C:/windows/AppReadiness/', - 'C:/Windows/Temp/', - 'C:/Windows/Prefetch/', - 'C:/Windows/Installer/', - 'C:/Windows/WinSxS/', - 'C:/Windows/Logs/', - 'C:/Windows/servicing/', - 'c:/Windows/System32/catroot2/', - 'c:/windows/System32/config/', - 'C:/Windows/ServiceProfiles/NetworkService/AppData/Local/Microsoft/Windows/DeliveryOptimization/Logs/', - 'C:/Windows/ServiceProfiles/NetworkService/AppData/Local/Microsoft/Windows/DeliveryOptimization/Cache/', - 'C:/Windows/SoftwareDistribution/DataStore/Logs/', - 'C:/Windows/System32/wbem/Performance/', - 'c:/windows/System32/LogFiles/', - 'c:/windows/SoftwareDistribution/', - 'c:/windows/ServiceProfiles/NetworkService/AppData/', - 'c:/windows/System32/Tasks/Microsoft/Windows/UpdateOrchestrator/', - 'c:/windows/System32/Tasks/Microsoft/Windows/Windows Defender/Windows Defender Scheduled Scan' - ].each { |e| e.downcase! } - - # We don't really need to create this file since we consume it right afterwards, but it's useful for debugging - File.open("c:/after-files.txt", "w") do |out| - Find.find('c:/windows/').each { |f| out.puts(f) } - end - - before_files = File.readlines('c:/before-files.txt').reject { |f| f.downcase.start_with?(*exclude) } - after_files = File.readlines('c:/after-files.txt').reject { |f| f.downcase.start_with?(*exclude) } - - missing_files = before_files - after_files - new_files = after_files - before_files - - puts "New files:" - new_files.each { |f| puts(f) } - - puts "Missing files:" - missing_files.each { |f| puts(f) } - - expect(missing_files).to be_empty - end - end - - it 'should remove the installation directory' do - if os == :windows - expect(File).not_to exist("C:\\Program Files\\Datadog\\Datadog Agent\\") - else - remaining_files = [] - if Dir.exists?("/opt/datadog-agent") - Find.find('/opt/datadog-agent').each { |f| remaining_files.push(f) } - end - expect(remaining_files).to be_empty - expect(File).not_to exist("/opt/datadog-agent/") - end - end - - if os != :windows - it 'should remove the agent link from bin' do - expect(File).not_to exist('/usr/bin/datadog-agent') - end - end -end - -shared_examples_for 'an Agent with APM enabled' do - it 'has apm enabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("apm_config") - expect(confYaml["apm_config"]).to have_key("enabled") - expect(confYaml["apm_config"]["enabled"]).to be_truthy - end -end - -shared_examples_for 'an Agent with logs enabled' do - it 'has logs enabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("logs_config") - expect(confYaml).to have_key("logs_enabled") - expect(confYaml["logs_enabled"]).to be_truthy - end -end - -shared_examples_for 'an Agent with process enabled' do - it 'has process enabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("process_config") - expect(confYaml["process_config"]).to have_key("process_collection") - expect(confYaml["process_config"]["process_collection"]).to have_key("enabled") - expect(confYaml["process_config"]["process_collection"]["enabled"]).to be_truthy - end -end - -shared_examples_for 'a running Agent with CWS enabled' do - it 'has CWS enabled' do - enable_cws(get_conf_file("system-probe.yaml"), true) - enable_cws(get_conf_file("security-agent.yaml"), true) - - output = restart "datadog-agent" - expect(output).to be_truthy - end - - it 'has the security agent running' do - expect(security_agent_running?).to be_truthy - expect(is_service_running?("datadog-agent-security")).to be_truthy - end - - it 'has system-probe running' do - expect(system_probe_running?).to be_truthy - expect(is_service_running?("datadog-agent-sysprobe")).to be_truthy - end - - it 'has security-agent and system-probe communicating' do - for _ in 1..20 do - json_info_output = json_info("sudo /opt/datadog-agent/embedded/bin/security-agent") - if json_info_output.key?('runtimeSecurityStatus') && - json_info_output['runtimeSecurityStatus'].key?('connected') && - json_info_output['runtimeSecurityStatus']['connected'] - result = true - break - end - sleep 3 - end - expect(result).to be_truthy - end -end - -shared_examples_for 'an upgraded Agent with the expected version' do - # We retrieve the value defined in kitchen.yml because there is no simple way - # to set env variables on the target machine or via parameters in Kitchen/Busser - # See https://github.com/test-kitchen/test-kitchen/issues/662 for reference - let(:agent_expected_version) { - parse_dna().fetch('dd-agent-upgrade-rspec').fetch('agent_expected_version') - } - - it 'runs with the expected version (based on the `info` command output)' do - agent_short_version = /(\.?\d)+/.match(agent_expected_version)[0] - expect(info).to include "v#{agent_short_version}" - end - - it 'runs with the expected version (based on the version manifest file)' do - if os == :windows - version_manifest_file = "C:/Program Files/Datadog/Datadog Agent/version-manifest.txt" - else - version_manifest_file = '/opt/datadog-agent/version-manifest.txt' - end - expect(File).to exist(version_manifest_file) - # Match the first line of the manifest file - expect(File.open(version_manifest_file) {|f| f.readline.strip}).to match "agent #{agent_expected_version}" - end -end - -def enable_cws(conf_path, state) - begin - f = File.read(conf_path) - confYaml = YAML.load(f) - if !confYaml.key("runtime_security_config") - confYaml["runtime_security_config"] = {} - end - confYaml["runtime_security_config"]["enabled"] = state - rescue - confYaml = {'runtime_security_config' => {'enabled' => state}} - ensure - File.write(conf_path, confYaml.to_yaml) - end -end - -def get_user_sid(uname) - output = `powershell -command "(New-Object System.Security.Principal.NTAccount('#{uname}')).Translate([System.Security.Principal.SecurityIdentifier]).value"`.strip - output -end - -def get_sddl_for_object(name) - cmd = "powershell -command \"get-acl -Path \\\"#{name}\\\" | format-list -Property sddl\"" - outp = `#{cmd}`.gsub("\n", "").gsub(" ", "") - sddl = outp.gsub("/\s+/", "").split(":").drop(1).join(":").strip - sddl -end - -def get_security_settings - fname = "secout.txt" - system "secedit /export /cfg #{fname} /areas USER_RIGHTS" - data = Hash.new - - utext = File.open(fname).read - text = utext.unpack("v*").pack("U*") - text.each_line do |line| - next unless line.include? "=" - kv = line.strip.split("=") - data[kv[0].strip] = kv[1].strip - end - #File::delete(fname) - data -end - -def check_has_security_right(data, k, name) - right = data[k] - unless right - return false - end - rights = right.split(",") - rights.each do |r| - return true if r == name - end - false -end - -def check_is_user_in_group(user, group) - members = `net localgroup "#{group}"` - members.split(/\n+/).each do |line| - return true if line.strip == user - end - false -end - -def get_username_from_tasklist(exename) - # output of tasklist command is - # Image Name PID Session Name Session# Mem Usage Status User Name CPU Time Window Title - output = `tasklist /v /fi "imagename eq #{exename}" /nh`.gsub("\n", "").gsub("NT AUTHORITY", "NT_AUTHORITY") - - # for the above, the system user comes out as "NT AUTHORITY\System", which confuses the split - # below. So special case it, and get rid of the space - - #username is fully qualified \username - uname = output.split(' ')[7].partition('\\').last - uname -end - -if os == :windows - require 'English' - - module SDDLHelper - @@ace_types = { - 'A' => 'Access Allowed', - 'D' => 'Access Denied', - 'OA' => 'Object Access Allowed', - 'OD' => 'Object Access Denied', - 'AU' => 'System Audit', - 'AL' => 'System Alarm', - 'OU' => 'Object System Audit', - 'OL' => 'Object System Alarm' - } - - def self.ace_types - @@ace_types - end - - @@ace_flags = { - 'CI' => 'Container Inherit', - 'OI' => 'Object Inherit', - 'NP' => 'No Propagate', - 'IO' => 'Inheritance Only', - 'ID' => 'Inherited', - 'SA' => 'Successful Access Audit', - 'FA' => 'Failed Access Audit' - } - - def self.ace_flags - @@ace_flags - end - - @@permissions = { - 'GA' => 'Generic All', - 'GR' => 'Generic Read', - 'GW' => 'Generic Write', - 'GX' => 'Generic Execute', - - 'RC' => 'Read Permissions', - 'SD' => 'Delete', - 'WD' => 'Modify Permissions', - 'WO' => 'Modify Owner', - 'RP' => 'Read All Properties', - 'WP' => 'Write All Properties', - 'CC' => 'Create All Child Objects', - 'DC' => 'Delete All Child Objects', - 'LC' => 'List Contents', - 'SW' => 'All Validated Writes', - 'LO' => 'List Object', - 'DT' => 'Delete Subtree', - 'CR' => 'All Extended Rights', - - 'FA' => 'File All Access', - 'FR' => 'File Generic Read', - 'FW' => 'File Generic Write', - 'FX' => 'File Generic Execute', - - 'KA' => 'Key All Access', - 'KR' => 'Key Read', - 'KW' => 'Key Write', - 'KX' => 'Key Execute' - } - - def self.permissions - @@permissions - end - - @@trustee = { - 'AO' => 'Account Operators', - 'RU' => 'Alias to allow previous Windows 2000', - 'AN' => 'Anonymous Logon', - 'AU' => 'Authenticated Users', - 'BA' => 'Built-in Administrators', - 'BG' => 'Built in Guests', - 'BO' => 'Backup Operators', - 'BU' => 'Built-in Users', - 'CA' => 'Certificate Server Administrators', - 'CG' => 'Creator Group', - 'CO' => 'Creator Owner', - 'DA' => 'Domain Administrators', - 'DC' => 'Domain Computers', - 'DD' => 'Domain Controllers', - 'DG' => 'Domain Guests', - 'DU' => 'Domain Users', - 'EA' => 'Enterprise Administrators', - 'ED' => 'Enterprise Domain Controllers', - 'WD' => 'Everyone', - 'PA' => 'Group Policy Administrators', - 'IU' => 'Interactively logged-on user', - 'LA' => 'Local Administrator', - 'LG' => 'Local Guest', - 'LS' => 'Local Service Account', - 'SY' => 'Local System', - 'NU' => 'Network Logon User', - 'NO' => 'Network Configuration Operators', - 'NS' => 'Network Service Account', - 'PO' => 'Printer Operators', - 'PS' => 'Self', - 'PU' => 'Power Users', - 'RS' => 'RAS Servers group', - 'RD' => 'Terminal Server Users', - 'RE' => 'Replicator', - 'RC' => 'Restricted Code', - 'SA' => 'Schema Administrators', - 'SO' => 'Server Operators', - 'SU' => 'Service Logon User' - } - - def self.trustee - @@trustee - end - - def self.lookup_trustee(trustee) - if @@trustee[trustee].nil? - nt_account = `powershell -command "(New-Object System.Security.Principal.SecurityIdentifier('#{trustee}')).Translate([System.Security.Principal.NTAccount]).Value"`.strip - return nt_account if 0 == $CHILD_STATUS - - # Can't lookup, just return value - return trustee - end - - @@trustee[trustee] - end - end - - class SDDL - def initialize(sddl_str) - sddl_str.scan(/(.):(.*?)(?=.:|$)/) do |m| - case m[0] - when 'D' - @dacls = [] - m[1].scan(/(\((?.*?);(?.*?);(?.*?);(?.*?);(?.*?);(?.*?)\))/) do |ace_type, ace_flags, permissions, object_type, inherited_object_type, trustee| - @dacls.append(DACL.new(ace_type, ace_flags, permissions, object_type, inherited_object_type, trustee)) - end - when 'O' - @owner = m[1] - when 'G' - @group = m[1] - end - end - end - - attr_reader :owner, :group, :dacls - - def to_s - str = "Owner: #{SDDLHelper.lookup_trustee(@owner)}\n" - str += "Group: #{SDDLHelper.lookup_trustee(@owner)}\n" - @dacls.each do |dacl| - str += dacl.to_s - end - str - end - - def ==(other_sddl) - return false if - @owner != other_sddl.owner || - @group != other_sddl.group || - @dacls.length != other_sddl.dacls.length - - @dacls.each do |d1| - if other_sddl.dacls.find { |d2| d1 == d2 }.eql? nil - return false - end - end - - other_sddl.dacls.each do |d1| - if @dacls.find { |d2| d1 == d2 }.eql? nil - return false - end - end - end - - def eql?(other_sddl) - self == other_sddl - end - - end - - class DACL - def initialize(ace_type, ace_flags, permissions, object_type, inherited_object_type, trustee) - @ace_type = ace_type - @ace_flags = ace_flags - @permissions = permissions - @object_type = object_type - @inherited_object_type = inherited_object_type - @trustee = trustee - end - - attr_reader :ace_type, :ace_flags, :permissions, :object_type, :inherited_object_type, :trustee - - def ==(other_dacl) - return false if other_dacl.eql? nil - - @ace_type == other_dacl.ace_type && - @ace_flags == other_dacl.ace_flags && - @permissions == other_dacl.permissions && - @object_type == other_dacl.object_type && - @inherited_object_type == other_dacl.inherited_object_type && - @trustee == other_dacl.trustee - end - - def eql?(other_dacl) - self == other_dacl - end - - def to_s - str = " Trustee: #{SDDLHelper.lookup_trustee(@trustee)}\n" - str += " Type: #{SDDLHelper.ace_types[@ace_type]}\n" - str += " Permissions: \n - #{break_flags(@permissions, SDDLHelper.permissions).join("\n - ")}\n" if permissions != '' - str += " Inheritance: \n - #{break_flags(@ace_flags, SDDLHelper.ace_flags).join("\n - ")}\n" if ace_flags != '' - str - end - - private - - def break_flags(flags, lookup_dict) - return [lookup_dict[flags]] if flags.length <= 2 - - idx = 0 - flags_str = '' - flags_list = [] - flags.each_char do |ch| - if idx.positive? && idx.even? - flags_list.append(lookup_dict[flags_str]) - flags_str = '' - end - flags_str += ch - idx += 1 - end - flags_list - end - end - - RSpec::Matchers.define :have_sddl_equal_to do |expected| - def get_difference(actual, expected) - actual_sddl = SDDL.new(actual) - expected_sddl = SDDL.new(expected) - - difference = '' - if expected_sddl.owner != actual_sddl.owner - difference += " => expected owner to be \"#{SDDLHelper.lookup_trustee(expected_sddl.owner)}\" but was \"#{SDDLHelper.lookup_trustee(actual_sddl.owner)}\"\n" - end - if expected_sddl.group != actual_sddl.group - difference += " => expected owner to be \"#{SDDLHelper.lookup_trustee(expected_sddl.owner)}\" but was \"#{SDDLHelper.lookup_trustee(actual_sddl.owner)}\"\n" - end - - expected_sddl.dacls.each do |expected_dacl| - actual_dacl = actual_sddl.dacls.find { |d| expected_dacl == d } - if actual_dacl.eql? nil - difference += " => expected missing DACL\n#{expected_dacl}\n" - end - end - - actual_sddl.dacls.each do |actual_dacl| - expected_dacl = expected_sddl.dacls.find { |d| actual_dacl == d } - if expected_dacl.eql? nil - difference += " => found unexpected DACL\n#{actual_dacl}\n" - end - end - - difference - end - - match do |actual| - actual_sddl = SDDL.new(actual) - expected_sddl = SDDL.new(expected) - return actual_sddl == expected_sddl - end - - failure_message do |actual| - get_difference(actual, expected) - end - end - -end diff --git a/test/kitchen/test/integration/common/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/common/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 100644 index e65a8e2736ae9..0000000000000 --- a/test/kitchen/test/integration/common/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1,103 +0,0 @@ -require 'win32/registry' - -def is_windows_service_disabled(service) - keypath = "SYSTEM\\CurrentControlSet\\Services\\#{service}" - type = 0; - Win32::Registry::HKEY_LOCAL_MACHINE.open(keypath) do |reg| - type = reg['Start'] - end - return true if type == 4 - return false -end -shared_examples_for 'a Windows Agent with NPM driver that can start' do - it 'has system probe service installed' do - expect(is_windows_service_installed("datadog-system-probe")).to be_truthy - end - it 'has Windows NPM driver installed' do - expect(is_windows_service_installed("ddnpm")).to be_truthy - end - it 'has Windows NPM driver files installed' do - program_files = safe_program_files - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddnpm.cat") - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddnpm.sys") - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddnpm.inf") - end - - it 'does not have the driver running on install' do - ## verify that the driver is not started yet - expect(is_service_running?("ddnpm")).to be_falsey - end - - - it 'can successfully start the driver' do - ## start the service - result = system "net start ddnpm 2>&1" - - ## now expect it to be running - expect(is_service_running?("ddnpm")).to be_truthy - end - -end -shared_examples_for 'a Windows Agent with NPM driver disabled' do - it 'has the service disabled' do - expect(is_windows_service_disabled("ddnpm")).to be_truthy - end -end - -shared_examples_for 'a Windows Agent with NPM driver installed' do - it 'has system probe service installed' do - expect(is_windows_service_installed("datadog-system-probe")).to be_truthy - end - it 'has Windows NPM driver installed' do - expect(is_windows_service_installed("ddnpm")).to be_truthy - end - it 'has Windows NPM driver files installed' do - program_files = safe_program_files - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddnpm.cat") - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddnpm.sys") - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddnpm.inf") - end -end - -shared_examples_for 'a Windows Agent with NPM running' do - it 'can start system probe' do - conf_path = "" - if os != :windows - conf_path = "/etc/datadog-agent/datadog.yaml" - else - conf_path = "#{ENV['ProgramData']}\\Datadog\\datadog.yaml" - end - f = File.read(conf_path) - confYaml = YAML.load(f) - if !confYaml.key("process_config") - confYaml["process_config"] = {} - end - confYaml["process_config"]["process_collection"] = { "enabled": true } - File.write(conf_path, confYaml.to_yaml) - - if os != :windows - spconf_path = "/etc/datadog-agent/datadog.yaml" - else - spconf_path = "#{ENV['ProgramData']}\\Datadog\\system-probe.yaml" - end - spf = File.read(spconf_path) - spconfYaml = YAML.load(spf) - if !spconfYaml - spconfYaml = {} - end - if !spconfYaml.key("network_config") - spconfYaml["network_config"] = {} - end - spconfYaml["network_config"]["enabled"] = true - File.write(spconf_path, spconfYaml.to_yaml) - - expect(is_service_running?("datadog-system-probe")).to be_falsey - #restart "datadog-agent" - stop "datadog-agent" - sleep 10 - start "datadog-agent" - sleep 20 - expect(is_service_running?("datadogagent")).to be_truthy - expect(is_service_running?("datadog-system-probe")).to be_truthy - end -end diff --git a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/Gemfile b/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/upgrade-agent5_spec.rb b/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/upgrade-agent5_spec.rb deleted file mode 120000 index 01c4a8f741b40..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent5/rspec_datadog/upgrade-agent5_spec.rb +++ /dev/null @@ -1 +0,0 @@ -../../upgrade/rspec_datadog/upgrade_spec.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/Gemfile b/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/upgrade-agent6_spec.rb b/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/upgrade-agent6_spec.rb deleted file mode 120000 index 01c4a8f741b40..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent6/rspec_datadog/upgrade-agent6_spec.rb +++ /dev/null @@ -1 +0,0 @@ -../../upgrade/rspec_datadog/upgrade_spec.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/Gemfile b/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/upgrade-agent7_spec.rb b/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/upgrade-agent7_spec.rb deleted file mode 120000 index 01c4a8f741b40..0000000000000 --- a/test/kitchen/test/integration/upgrade-agent7/rspec_datadog/upgrade-agent7_spec.rb +++ /dev/null @@ -1 +0,0 @@ -../../upgrade/rspec_datadog/upgrade_spec.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade/rspec_datadog/Gemfile b/test/kitchen/test/integration/upgrade/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/upgrade/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/upgrade/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/upgrade/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/upgrade/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/upgrade/rspec_datadog/upgrade_spec.rb b/test/kitchen/test/integration/upgrade/rspec_datadog/upgrade_spec.rb deleted file mode 100644 index b44751fdbd782..0000000000000 --- a/test/kitchen/test/integration/upgrade/rspec_datadog/upgrade_spec.rb +++ /dev/null @@ -1,7 +0,0 @@ -require 'spec_helper' - -describe 'the upgraded agent' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'an upgraded Agent with the expected version' -end diff --git a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/win-agent-with-cws-option_spec.rb b/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/win-agent-with-cws-option_spec.rb deleted file mode 100644 index ee4063d3e1a1d..0000000000000 --- a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/win-agent-with-cws-option_spec.rb +++ /dev/null @@ -1,81 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' # for is_windows_service_disabled - - -shared_examples_for 'a Windows Agent with CWS driver disabled' do - it 'has the service disabled' do - expect(is_windows_service_disabled("ddprocmon")).to be_truthy - end -end - -shared_examples_for 'a Windows Agent with CWS driver installed' do - it 'has system probe service installed' do - expect(is_windows_service_installed("datadog-system-probe")).to be_truthy - end - - it 'has required services installed' do - expect(is_windows_service_installed("datadog-security-agent")).to be_truthy - expect(is_windows_service_installed("ddprocmon")).to be_truthy - end - it 'has driver files' do - program_files = safe_program_files - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddprocmon.cat") - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddprocmon.sys") - expect(File).to exist("#{program_files}\\DataDog\\Datadog Agent\\bin\\agent\\driver\\ddprocmon.inf") - end - - it 'does not have the driver running on install' do - ## verify that the driver is not started yet - expect(is_service_running?("ddprocmon")).to be_falsey - end - -end - -shared_examples_for 'a Windows Agent with CWS running' do - it 'has cws services not started by default' do - expect(is_service_running?("datadog-system-probe")).to be_falsey - expect(is_service_running?("datadog-security-agent")).to be_falsey - end - - it 'has default config files' do - expect(File).to exist(get_conf_file("system-probe.yaml")) - expect(File).to exist(get_conf_file("security-agent.yaml")) - end - it 'can start security agent' do - - enable_cws(get_conf_file("system-probe.yaml"), true) - enable_cws(get_conf_file("security-agent.yaml"), true) - - stop "datadog-agent" - - start "datadog-agent" - sleep 30 - expect(is_service_running?("datadogagent")).to be_truthy - expect(is_service_running?("datadog-system-probe")).to be_truthy - expect(is_service_running?("datadog-security-agent")).to be_truthy - end - it 'can gracefully shut down security agent' do - stop "datadog-agent" - - ## these tests return false for any state other than running. So "shutting down" - ## will erroneously pass here - expect(is_service_running?("datadogagent")).to be_falsey - expect(is_service_running?("datadog-system-probe")).to be_falsey - expect(is_service_running?("datadog-security-agent")).to be_falsey - - ## so also check that the process is actually gone - expect(security_agent_running?).to be_falsey - expect(system_probe_running?).to be_falsey - - end -end - - -describe 'the agent installed with the cws component' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with CWS driver installed' - it_behaves_like 'a Windows Agent with CWS driver disabled' - it_behaves_like 'a Windows Agent with CWS running' -end - diff --git a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-agent-with-cws-option/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-all-subservices/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-all-subservices/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/win-all-subservices_spec.rb b/test/kitchen/test/integration/win-all-subservices/rspec_datadog/win-all-subservices_spec.rb deleted file mode 100644 index 39618d4d83211..0000000000000 --- a/test/kitchen/test/integration/win-all-subservices/rspec_datadog/win-all-subservices_spec.rb +++ /dev/null @@ -1,12 +0,0 @@ -require_relative 'spec_helper' - -describe 'win-all-subservices' do - include_examples 'Agent install' - include_examples 'Basic Agent behavior' - it_behaves_like 'an Agent with APM enabled' - it_behaves_like 'an Agent with logs enabled' - it_behaves_like 'an Agent with process enabled' - it_behaves_like 'a running Agent with APM' - it_behaves_like 'a running Agent with process enabled' - include_examples 'Agent uninstall' -end diff --git a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-alt-dir/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-alt-dir/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/win-alt-dir_spec.rb b/test/kitchen/test/integration/win-alt-dir/rspec_datadog/win-alt-dir_spec.rb deleted file mode 100644 index a0a74b975bf01..0000000000000 --- a/test/kitchen/test/integration/win-alt-dir/rspec_datadog/win-alt-dir_spec.rb +++ /dev/null @@ -1,126 +0,0 @@ -require 'spec_helper' - - -def check_user_exists(name) - selectstatement = "powershell -command \"get-wmiobject -query \\\"Select * from Win32_UserAccount where Name='#{name}'\\\"\"" - outp = `#{selectstatement} 2>&1` - outp -end - -shared_examples_for 'a correctly created configuration root' do - # We retrieve the value defined in kitchen.yml because there is no simple way - # to set env variables on the target machine or via parameters in Kitchen/Busser - # See https://github.com/test-kitchen/test-kitchen/issues/662 for reference - let(:configuration_path) { - dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" - JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec').fetch('APPLICATIONDATADIRECTORY') - } - it 'has the proper configuration root' do - expect(File).not_to exist("#{ENV['ProgramData']}\\DataDog") - expect(File).to exist("#{configuration_path}") - end -end - -shared_examples_for 'a correctly created binary root' do - # We retrieve the value defined in kitchen.yml because there is no simple way - # to set env variables on the target machine or via parameters in Kitchen/Busser - # See https://github.com/test-kitchen/test-kitchen/issues/662 for reference - let(:binary_path) { - dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" - JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec').fetch('PROJECTLOCATION') - } - it 'has the proper binary root' do - expect(File).not_to exist("#{ENV['ProgramFiles']}\\DataDog\\Datadog Agent") - expect(File).to exist("#{binary_path}") - end -end - -shared_examples_for 'an Agent with valid permissions' do - let(:configuration_path) { - dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" - JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec').fetch('APPLICATIONDATADIRECTORY') - } - let(:binary_path) { - dna_json_path = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\dna.json" - JSON.parse(IO.read(dna_json_path)).fetch('dd-agent-rspec').fetch('PROJECTLOCATION') - } - dd_user_sid = get_user_sid('ddagentuser') - it 'has proper permissions on programdata\datadog' do - expected_sddl = "O:SYG:SYD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;#{dd_user_sid})" - actual_sddl = get_sddl_for_object(configuration_path) - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - end - it 'has proper permissions on datadog.yaml' do - expected_sddl = "O:SYG:SYD:AI(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;FA;;;#{dd_user_sid})" - actual_sddl = get_sddl_for_object("#{configuration_path}\\datadog.yaml") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - end - it 'has proper permissions on the conf.d directory' do - # A,OICI;FA;;;SY = Allows Object Inheritance (OI) container inherit (CI); File All Access to LocalSystem - # A,OICIID;WD;;;BU = Allows OI, CI, this is an inherited ACE (ID), change permissions (WD), to built-in users - # A,OICIID;FA;;;BA = Allow OI, CI, ID, File All Access (FA) to Builtin Administrators - # A,OICIID;FA;;;SY = Inherited right of OI, CI, (FA) to LocalSystem - # A,OICIID;FA;;;dd_user_sid = explicit right assignment of OI, CI, FA to the dd-agent user, inherited from the parent - - expected_sddl = "O:SYG:SYD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;#{dd_user_sid})" - actual_sddl = get_sddl_for_object("#{configuration_path}\\conf.d") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - end - - it 'has the proper permissions on the DataDog registry key' do - # A;;KA;;;SY = Allows KA (KeyAllAccess) to local system - # A;;KA;;;BA = Allows KA (KeyAllAccess) to BA builtin administrators - # A;;KA;; allows KEY_ALL_ACCESS to the dd agent user - # A;OICIIO; Object Inherit AC, container inherit ace, Inherit only ace - # CCDCLCSWRPWPSDRCWDWOGA CC = SDDL Create Child - # DC = SDDL Delete Child - # LC = Listchildrent - # SW = self write - # RP = read property - # WP = write property - # SD = standard delete - # RC = read control - # WD = WRITE DAC - # WO = Write owner - # GA = Generic All - # for dd-agent-user - # A;CIID;KR;;;BU = Allow Container Inherit/inherited ace KeyRead to BU (builtin users) - # A;CIID;KA;;;BA = KeyAllAccess (builtin admins) - # A;CIID;KA;;;SY = Keyallaccess (local system) - # A;CIIOID;KA;;;CO= container inherit, inherit only, inherited ace, keyallAccess, to creator/owner - # A;CIID;KR;;;AC = allow container inherit/inherited ace Key Read to AC () - expected_sddl = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)" - expected_sddl_with_edge = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)(A;CIID;KR;;;S-1-15-3-1024-1065365936-1281604716-3511738428-1654721687-432734479-3232135806-4053264122-3456934681)" - - ## sigh. M$ added a mystery sid some time back, that Edge/IE use for sandboxing, - ## and it's an inherited ace. Allow that one, too - - actual_sddl = get_sddl_for_object("HKLM:Software\\Datadog\\Datadog Agent") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - .or have_sddl_equal_to(expected_sddl_with_edge) - end - - it 'has agent.exe running as ddagentuser' do - expect(get_username_from_tasklist("agent.exe")).to eq("ddagentuser") - end - secdata = get_security_settings - it 'has proper security rights assigned' do - expect(check_has_security_right(secdata, "SeDenyInteractiveLogonRight", "ddagentuser")).to be_truthy - expect(check_has_security_right(secdata, "SeDenyNetworkLogonRight", "ddagentuser")).to be_truthy - expect(check_has_security_right(secdata, "SeDenyRemoteInteractiveLogonRight", "ddagentuser")).to be_truthy - end - it 'is in proper groups' do - expect(check_is_user_in_group("ddagentuser", "Performance Monitor Users")).to be_truthy - end -end - -describe 'dd-agent-install-alternate-dir' do - it_behaves_like 'a correctly created configuration root' - it_behaves_like 'a correctly created binary root' - it_behaves_like 'an Agent with valid permissions' -end - diff --git a/test/kitchen/test/integration/win-install-fail/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-install-fail/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-install-fail/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-install-fail/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-install-fail/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-install-fail/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-install-fail/rspec_datadog/win-install-fail_spec.rb b/test/kitchen/test/integration/win-install-fail/rspec_datadog/win-install-fail_spec.rb deleted file mode 100644 index 5b6279ad760a5..0000000000000 --- a/test/kitchen/test/integration/win-install-fail/rspec_datadog/win-install-fail_spec.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'spec_helper' - -def check_user_exists(name) - selectstatement = "powershell -command \"get-wmiobject -query \\\"Select * from Win32_UserAccount where Name='#{name}'\\\"\"" - outp = `#{selectstatement} 2>&1` - outp -end -shared_examples_for 'a device with no files installed' do - it 'has no DataDog program files directory' do - expect(File).not_to exist("#{ENV['ProgramFiles']}\\DataDog") - end - it 'has no DataDog program data directory' do - expect(File).not_to exist("#{ENV['ProgramData']}\\DataDog\\conf.d") - expect(File).not_to exist("#{ENV['ProgramData']}\\DataDog\\checks.d") - # Do not check that the datadog.yaml file was removed because once it's created - # it's risky to delete it. - # expect(File).not_to exist("#{ENV['ProgramData']}\\DataDog\\datadog.yaml") - expect(File).not_to exist("#{ENV['ProgramData']}\\DataDog\\auth_token") - end -end - -shared_examples_for 'a device with a ddagentuser' do - is_user = check_user_exists('ddagentuser') - it 'has a ddagentuser account' do - expect(is_user).not_to be_empty - end -end - -shared_examples_for 'a device without a ddagentuser' do - is_user = check_user_exists('ddagentuser') - it 'doesn\'t have a ddagentuser account' do - expect(is_user).to be_empty - end -end - -describe 'dd-agent-win-install-fail' do - it_behaves_like 'a device with no files installed' - # The installer no longer deletes the user on uninstall and is transitioning away from managing user accounts. - # Therefore we should instead check that it did create a ddagentuser account for now, and in the future check - # that it did not create a ddagentuser account. - it_behaves_like 'a device with a ddagentuser' -end diff --git a/test/kitchen/test/integration/win-installopts/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-installopts/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-installopts/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-installopts/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-installopts/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-installopts/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-installopts/rspec_datadog/win-installopts_spec.rb b/test/kitchen/test/integration/win-installopts/rspec_datadog/win-installopts_spec.rb deleted file mode 100644 index 6c9ecbbb1d48e..0000000000000 --- a/test/kitchen/test/integration/win-installopts/rspec_datadog/win-installopts_spec.rb +++ /dev/null @@ -1,64 +0,0 @@ -require 'spec_helper' - -shared_examples_for 'an Agent with APM disabled' do - it 'has apm disabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("apm_config") - expect(confYaml["apm_config"]).to have_key("enabled") - expect(confYaml["apm_config"]["enabled"]).to be_falsey - expect(is_port_bound(8126)).to be_falsey - end -end - -shared_examples_for 'a configured Agent' do - confYaml = read_conf_file() - it 'has an API key' do - expect(confYaml).to have_key("api_key") - expect(confYaml["api_key"]).to eql("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") - end - it 'has tags set' do - expect(confYaml).to have_key("tags") - expect(confYaml["tags"]).to include("k1:v1", "k2:v2") - expect(confYaml["tags"]).not_to include("k1:v2") - expect(confYaml["tags"]).not_to include("k2:v1") - end - it 'has CMDPORT set' do - expect(confYaml).to have_key("cmd_port") - expect(confYaml["cmd_port"]).to equal(4999) - expect(is_port_bound(4999)).to be_truthy - expect(is_port_bound(5001)).to be_falsey - end - it 'has proxy settings' do - expect(confYaml).to have_key("proxy") - expect(confYaml["proxy"]).to have_key("https") - expect(URI.parse(confYaml["proxy"]["https"])).to eq(URI.parse("http://puser:ppass@proxy.foo.com:1234")) - end - it 'has site settings' do - expect(confYaml).to have_key("site") - expect(confYaml["site"]).to eq("eu") - - expect(confYaml).to have_key("dd_url") - expect(URI.parse(confYaml["dd_url"])).to eq(URI.parse("https://someurl.datadoghq.com")) - - expect(confYaml).to have_key("logs_config") - expect(confYaml["logs_config"]).to have_key("logs_dd_url") - expect(URI.parse(confYaml["logs_config"]["logs_dd_url"])).to eq(URI.parse("https://logs.someurl.datadoghq.com")) - - expect(confYaml).to have_key("process_config") - expect(confYaml["process_config"]).to have_key("process_dd_url") - expect(URI.parse(confYaml["process_config"]["process_dd_url"])).to eq(URI.parse("https://process.someurl.datadoghq.com")) - - expect(confYaml).to have_key("apm_config") - expect(confYaml["apm_config"]).to have_key("apm_dd_url") - expect(URI.parse(confYaml["apm_config"]["apm_dd_url"])).to eq(URI.parse("https://trace.someurl.datadoghq.com")) - - end -end - - -describe 'win-installopts' do - include_examples 'Agent install' - it_behaves_like 'a configured Agent' - include_examples 'Agent uninstall' -end - diff --git a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-no-subservices/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-no-subservices/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/win-no-subservices_spec.rb b/test/kitchen/test/integration/win-no-subservices/rspec_datadog/win-no-subservices_spec.rb deleted file mode 100644 index 4bdc85bcac06f..0000000000000 --- a/test/kitchen/test/integration/win-no-subservices/rspec_datadog/win-no-subservices_spec.rb +++ /dev/null @@ -1,48 +0,0 @@ -require_relative 'spec_helper' - - -shared_examples_for 'an Agent with APM disabled' do - it 'has apm disabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("apm_config") - expect(confYaml["apm_config"]).to have_key("enabled") - expect(confYaml["apm_config"]["enabled"]).to be_falsey - expect(is_port_bound(8126)).to be_falsey - end - it 'does not have the apm agent running' do - expect(is_process_running?("trace-agent.exe")).to be_falsey - expect(is_service_running?("datadog-trace-agent")).to be_falsey - end -end - -shared_examples_for 'an Agent with logs disabled' do - it 'has logs disabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("logs_config") - expect(confYaml).to have_key("logs_enabled") - expect(confYaml["logs_enabled"]).to be_falsey - end -end - -shared_examples_for 'an Agent with process disabled' do - it 'has process disabled' do - confYaml = read_conf_file() - expect(confYaml).to have_key("process_config") - expect(confYaml["process_config"]).to have_key("process_collection") - expect(confYaml["process_config"]["process_collection"]).to have_key("enabled") - expect(confYaml["process_config"]["process_collection"]["enabled"]).to eq(false) - expect(confYaml["process_config"]["process_discovery"]["enabled"]).to eq(false) - end - it 'does not have the process agent running' do - expect(is_process_running?("process-agent.exe")).to be_falsey - expect(is_service_running?("datadog-process-agent")).to be_falsey - end -end - -describe 'win-no-subservices' do - include_examples 'Agent install' - include_examples 'Basic Agent behavior' - it_behaves_like 'an Agent with APM disabled' - it_behaves_like 'an Agent with logs disabled' - it_behaves_like 'an Agent with process disabled' -end diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/win-npm-beta-upgrade_spec.rb b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/win-npm-beta-upgrade_spec.rb deleted file mode 100644 index 4f29c6702bfd9..0000000000000 --- a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/win-npm-beta-upgrade_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'the agent upgraded from npm beta' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' - it_behaves_like 'an upgraded Agent with the expected version' -end diff --git a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-beta-upgrade/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/win-npm-no-npm-option_spec.rb b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/win-npm-no-npm-option_spec.rb deleted file mode 100644 index 4b1ad54ab4d07..0000000000000 --- a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/win-npm-no-npm-option_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper.rb' - -describe 'the agent installed with no npm options' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM driver disabled' - - end \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-no-npm-option/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/win-npm-reinstall-option_spec.rb b/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/win-npm-reinstall-option_spec.rb deleted file mode 100644 index 649c3ab9a68b1..0000000000000 --- a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/win-npm-reinstall-option_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'the agent installed with no npm options' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' -end diff --git a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-reinstall-option/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/win-npm-upgrade-no-npm_spec.rb b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/win-npm-upgrade-no-npm_spec.rb deleted file mode 100644 index 7759de3e99fab..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/win-npm-upgrade-no-npm_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'the agent installed with no npm options' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM driver disabled' -end \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-no-npm/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/win-npm-upgrade-to-npm-no-csflag_spec.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/win-npm-upgrade-to-npm-no-csflag_spec.rb deleted file mode 100644 index 34d70581c6542..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/win-npm-upgrade-to-npm-no-csflag_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'an agent upgraded with NPM added' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' - it_behaves_like 'an upgraded Agent with the expected version' -end diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm-no-csflag/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/win-npm-upgrade-to-npm_spec.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/win-npm-upgrade-to-npm_spec.rb deleted file mode 100644 index 34d70581c6542..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/win-npm-upgrade-to-npm_spec.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'an agent upgraded with NPM added' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' - it_behaves_like 'an upgraded Agent with the expected version' -end diff --git a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-upgrade-to-npm/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/win-npm-with-addlocal-all_spec.rb b/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/win-npm-with-addlocal-all_spec.rb deleted file mode 100644 index c659e18a27362..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/win-npm-with-addlocal-all_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'an agent upgraded with NPM added' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' -end diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-all/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/win-npm-with-addlocal-npm_spec.rb b/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/win-npm-with-addlocal-npm_spec.rb deleted file mode 100644 index c659e18a27362..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/win-npm-with-addlocal-npm_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'an agent upgraded with NPM added' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' -end diff --git a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-addlocal-npm/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/win-npm-with-cs-option_spec.rb b/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/win-npm-with-cs-option_spec.rb deleted file mode 100644 index 1d7e10d67beec..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/win-npm-with-cs-option_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper.rb' - -describe 'the agent installed with npm options' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' -end diff --git a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-cs-option/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/win-npm-with-npm-option_spec.rb b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/win-npm-with-npm-option_spec.rb deleted file mode 100644 index 52ff3bec79bc3..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/win-npm-with-npm-option_spec.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'spec_helper' -require 'windows_npm_spec_helper' - -describe 'the agent installed with the npm option' do - it_behaves_like 'an installed Agent' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a Windows Agent with NPM driver installed' - it_behaves_like 'a Windows Agent with NPM running' - end \ No newline at end of file diff --git a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-npm-with-npm-option/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-repair/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-repair/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-repair/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-repair/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-repair/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-repair/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-repair/rspec_datadog/win-repair_spec.rb b/test/kitchen/test/integration/win-repair/rspec_datadog/win-repair_spec.rb deleted file mode 100644 index 37c4a4e307b41..0000000000000 --- a/test/kitchen/test/integration/win-repair/rspec_datadog/win-repair_spec.rb +++ /dev/null @@ -1,6 +0,0 @@ -require 'spec_helper' - -describe 'win-repair' do - include_examples 'Agent install' - include_examples 'Basic Agent behavior' -end diff --git a/test/kitchen/test/integration/win-secagent-test/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-secagent-test/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-secagent-test/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-secagent-test/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-secagent-test/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-secagent-test/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-secagent-test/rspec_datadog/win-secagent-test_spec.rb b/test/kitchen/test/integration/win-secagent-test/rspec_datadog/win-secagent-test_spec.rb deleted file mode 100644 index 5be3ff7811b77..0000000000000 --- a/test/kitchen/test/integration/win-secagent-test/rspec_datadog/win-secagent-test_spec.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'spec_helper' -#require 'sysprobe_spec_helper' -#require 'windows_npm_spec_helper' -require 'open3' - -GOLANG_TEST_FAILURE = /FAIL:/ - -def check_output(output, wait_thr) - test_failures = [] - - output.each_line do |line| - puts line - test_failures << line.strip if line =~ GOLANG_TEST_FAILURE - end - - if test_failures.empty? && !wait_thr.value.success? - test_failures << "Test command exited with status (#{wait_thr.value.exitstatus}) but no failures were captured." - end - - test_failures -end - -print `Powershell -C "Get-WmiObject Win32_OperatingSystem | Select Caption, OSArchitecture, Version, BuildNumber | FL"` - -wait_until_service_stopped('datadog-agent-sysprobe') - -root_dir = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\cache\\security-agent\\tests".gsub("\\", File::SEPARATOR) -print "#{root_dir}\n" -print "#{Dir.entries(root_dir)}\n" - -Dir.glob("#{root_dir}/**/testsuite.exe").each do |f| - #pkg = f.delete_prefix(root_dir).delete_suffix('/testsuite.exe') - describe "security-agent tests for #{f}" do - it 'successfully runs' do - Dir.chdir(File.dirname(f)) do - Open3.popen2e(f, "-test.v", "-test.timeout=10m", "-test.count=1") do |_, output, wait_thr| - test_failures = check_output(output, wait_thr) - expect(test_failures).to be_empty, test_failures.join("\n") - end - end - end - end -end diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/sysprobe_spec_helper.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/sysprobe_spec_helper.rb deleted file mode 100644 index f7c183282e725..0000000000000 --- a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/sysprobe_spec_helper.rb +++ /dev/null @@ -1,52 +0,0 @@ -require "rspec/core/formatters/base_text_formatter" - -class CustomFormatter - RSpec::Core::Formatters.register self, :example_passed, :example_failed, :dump_summary, :dump_failures, :example_group_started, :example_group_finished - - def initialize(output) - @output = output - end - - # Remove "."'s from the test execution output - def example_passed(_) - end - - # Remove "F"'s from the test execution output - def example_failed(_) - end - - def example_group_started(notification) - @output << "\nstarted #{notification.group.description}\n" - end - - def example_group_finished(notification) - @output << "finished #{notification.group.description}\n\n" - end - - def dump_summary(notification) - @output << "Finished in #{RSpec::Core::Formatters::Helpers.format_duration(notification.duration)}.\n" - @output << "Platform: #{`Powershell -C \"Get-WmiObject Win32_OperatingSystem | Select Caption, OSArchitecture, Version, BuildNumber | FL\"`}\n\n" - end - - def dump_failures(notification) # ExamplesNotification - if notification.failed_examples.length > 0 - @output << "\n#{RSpec::Core::Formatters::ConsoleCodes.wrap("FAILURES:", :failure)}\n\n" - @output << error_summary(notification) - end - end - - private - - def error_summary(notification) - summary_output = notification.failed_examples.map do |example| - "#{example.full_description}:\n#{example.execution_result.exception.message}\n\n" - end - - summary_output.join - end -end - - -RSpec.configure do |config| - config.formatter = CustomFormatter -end diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/win-sysprobe-test_spec.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/win-sysprobe-test_spec.rb deleted file mode 100644 index 3e1efaac7d850..0000000000000 --- a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/win-sysprobe-test_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -require 'spec_helper' -require 'open3' - -GOLANG_TEST_FAILURE = /FAIL:/ - -def check_output(output, wait_thr) - test_failures = [] - - output.each_line do |line| - puts line - test_failures << line.strip if line =~ GOLANG_TEST_FAILURE - end - - if test_failures.empty? && !wait_thr.value.success? - test_failures << "Test command exited with status (#{wait_thr.value.exitstatus}) but no failures were captured." - end - - test_failures -end - -print `Powershell -C "Get-WmiObject Win32_OperatingSystem | Select Caption, OSArchitecture, Version, BuildNumber | FL"` - -root_dir = "#{ENV['USERPROFILE']}\\AppData\\Local\\Temp\\kitchen\\cache\\system-probe\\tests".gsub("\\", File::SEPARATOR) -print root_dir -print Dir.entries(root_dir) - -Dir.glob("#{root_dir}/**/testsuite.exe").each do |f| - pkg = f.delete_prefix(root_dir).delete_suffix('/testsuite') - describe "system probe tests for #{pkg}" do - it 'successfully runs' do - Dir.chdir(File.dirname(f)) do - Open3.popen2e(f, "-test.v", "-test.timeout=10m", "-test.count=1") do |_, output, wait_thr| - test_failures = check_output(output, wait_thr) - expect(test_failures).to be_empty, test_failures.join("\n") - end - end - end - end -end diff --git a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/windows_npm_spec_helper.rb b/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/windows_npm_spec_helper.rb deleted file mode 120000 index 7a89ca8b118c7..0000000000000 --- a/test/kitchen/test/integration/win-sysprobe-test/rspec_datadog/windows_npm_spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/windows_npm_spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/win-upgrade-rollback_spec.rb b/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/win-upgrade-rollback_spec.rb deleted file mode 100644 index 5b9fecaf2761f..0000000000000 --- a/test/kitchen/test/integration/win-upgrade-rollback/rspec_datadog/win-upgrade-rollback_spec.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'spec_helper' - -describe 'win-upgrade-rollback' do - include_examples 'Agent install' - include_examples 'Basic Agent behavior' - it_behaves_like 'an upgraded Agent with the expected version' - include_examples 'Agent uninstall' -end diff --git a/test/kitchen/test/integration/win-user/rspec_datadog/Gemfile b/test/kitchen/test/integration/win-user/rspec_datadog/Gemfile deleted file mode 100644 index 28ffa17ad1a72..0000000000000 --- a/test/kitchen/test/integration/win-user/rspec_datadog/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -gem "rspec" -gem "rspec_junit_formatter" diff --git a/test/kitchen/test/integration/win-user/rspec_datadog/spec_helper.rb b/test/kitchen/test/integration/win-user/rspec_datadog/spec_helper.rb deleted file mode 120000 index 257bfb51db84c..0000000000000 --- a/test/kitchen/test/integration/win-user/rspec_datadog/spec_helper.rb +++ /dev/null @@ -1 +0,0 @@ -../../common/rspec_datadog/spec_helper.rb \ No newline at end of file diff --git a/test/kitchen/test/integration/win-user/rspec_datadog/win-user_spec.rb b/test/kitchen/test/integration/win-user/rspec_datadog/win-user_spec.rb deleted file mode 100644 index 176f0b78503d1..0000000000000 --- a/test/kitchen/test/integration/win-user/rspec_datadog/win-user_spec.rb +++ /dev/null @@ -1,142 +0,0 @@ -require 'spec_helper' - -=begin -Each SDDL is defined as follows (split across multiple lines here for readability, but they're -all concatenated into one) -O:owner_sid -G:group_sid -D:dacl_flags(string_ace1)(string_ace2)... (string_acen) -S:sacl_flags(string_ace1)(string_ace2)... (string_acen) - -Well known SID strings we're interested in -SY = LOCAL_SYSTEM -BU = Builtin Users -BA = Builtin Administrators - -So, the string O:SYG:SY indicates owner sid is LOCAL_SYSTEM group sid is SYSTEM -Then, D: indicates what comes after is the DACL, which is a list of ACE strings - -Ace strings are defined as -ace_type;ace_flags;rights;object_guid;inherit_object_guid;account_sid;(resource_attribute) - -Ace types include -A = Allowed -D = Denied - -Ace flags -ID = this ace inherited from parent - -rights -GA = Generic All -FA = File All access -FR = File Read -FW = File Write -WD = Write DAC (change permissions) - -Putting it all together, the sddl that we expect for Datadog.yaml is -O:SYG:SYD:(A;;FA;;;SY)(A;ID;WD;;;BU)(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;FA;;;#{dd_user_sid}) - -Owner: Local System -Group: Local System - -A;;FA;;;SY grants File All Access to Local System -A;ID;WD;;;BU grants members of the builtin users group Change Permissions; this ACE is inherited -A;ID;FA;;;BA grants Fila All Access to Builtin Administrators; this ACE was inherited from the parent -A;ID;FA;;;SY grants LocalSystem file AllAccess -A;ID;FA;;;#{dd_user_id} grants the ddagentuser FileAllAccess, this ACE is inherited from the parent -=end - -shared_examples_for 'an Agent with valid permissions' do - dd_user_sid = get_user_sid('ddagentuser') - it 'has proper permissions on programdata\datadog' do - # og+ng installers set protected explicit ACE on the config root - expected_sddl = "O:SYG:SYD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;#{dd_user_sid})" - actual_sddl = get_sddl_for_object("#{ENV['ProgramData']}\\Datadog") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - end - it 'has proper permissions on datadog.yaml' do - # ng installer sets inherited ACE - expected_sddl = "O:SYG:SYD:AI(A;ID;FA;;;SY)(A;ID;FA;;;BA)(A;ID;FA;;;#{dd_user_sid})" - actual_sddl = get_sddl_for_object("#{ENV['ProgramData']}\\Datadog\\datadog.yaml") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - end - it 'has proper permissions on the conf.d directory' do - # A,OICI;FA;;;SY = Allows Object Inheritance (OI) container inherit (CI); File All Access to LocalSystem - # A,OICIID;WD;;;BU = Allows OI, CI, this is an inherited ACE (ID), change permissions (WD), to built-in users - # A,OICIID;FA;;;BA = Allow OI, CI, ID, File All Access (FA) to Builtin Administrators - # A,OICIID;FA;;;SY = Inherited right of OI, CI, (FA) to LocalSystem - # A,OICIID;FA;;;dd_user_sid = explicit right assignment of OI, CI, FA to the dd-agent user, inherited from the parent - - # ng installer sets inherited ACE - expected_sddl = "O:SYG:SYD:AI(A;OICIID;FA;;;SY)(A;OICIID;FA;;;BA)(A;OICIID;FA;;;#{dd_user_sid})" - actual_sddl = get_sddl_for_object("#{ENV['ProgramData']}\\Datadog\\conf.d") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - - end - - it 'has the proper permissions on the DataDog registry key' do - # A;;KA;;;SY = Allows KA (KeyAllAccess) to local system - # A;;KA;;;BA = Allows KA (KeyAllAccess) to BA builtin administrators - # A;;KA;; allows KEY_ALL_ACCESS to the dd agent user - # A;OICIIO; Object Inherit AC, container inherit ace, Inherit only ace - # CCDCLCSWRPWPSDRCWDWOGA CC = SDDL Create Child - # DC = SDDL Delete Child - # LC = Listchildrent - # SW = self write - # RP = read property - # WP = write property - # SD = standard delete - # RC = read control - # WD = WRITE DAC - # WO = Write owner - # GA = Generic All - # for dd-agent-user - # A;CIID;KR;;;BU = Allow Container Inherit/inherited ace KeyRead to BU (builtin users) - # A;CIID;KA;;;BA = KeyAllAccess (builtin admins) - # A;CIID;KA;;;SY = Keyallaccess (local system) - # A;CIIOID;KA;;;CO= container inherit, inherit only, inherited ace, keyallAccess, to creator/owner - # A;CIID;KR;;;AC = allow container inherit/inherited ace Key Read to AC () - expected_sddl = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)" - expected_sddl_with_edge = "O:SYG:SYD:AI(A;;KA;;;SY)(A;;KA;;;BA)(A;;KA;;;#{dd_user_sid})(A;CIID;KR;;;BU)(A;CIID;KA;;;BA)(A;CIID;KA;;;SY)(A;CIIOID;KA;;;CO)(A;CIID;KR;;;AC)(A;CIID;KR;;;S-1-15-3-1024-1065365936-1281604716-3511738428-1654721687-432734479-3232135806-4053264122-3456934681)" - - ## sigh. M$ added a mystery sid some time back, that Edge/IE use for sandboxing, - ## and it's an inherited ace. Allow that one, too - - actual_sddl = get_sddl_for_object("HKLM:Software\\Datadog\\Datadog Agent") - - expect(actual_sddl).to have_sddl_equal_to(expected_sddl) - .or have_sddl_equal_to(expected_sddl_with_edge) - end - - it 'has agent.exe running as ddagentuser' do - expect(get_username_from_tasklist("agent.exe")).to eq("ddagentuser") - end - it 'has trace agent running as ddagentuser' do - expect(get_username_from_tasklist("trace-agent.exe")).to eq("ddagentuser") - end - it 'has process agent running as local_system' do - expect(get_username_from_tasklist("process-agent.exe")).to eq("SYSTEM") - end - secdata = get_security_settings - it 'has proper security rights assigned' do - expect(check_has_security_right(secdata, "SeDenyInteractiveLogonRight", "ddagentuser")).to be_truthy - expect(check_has_security_right(secdata, "SeDenyNetworkLogonRight", "ddagentuser")).to be_truthy - expect(check_has_security_right(secdata, "SeDenyRemoteInteractiveLogonRight", "ddagentuser")).to be_truthy - end - it 'is in proper groups' do - expect(check_is_user_in_group("ddagentuser", "Performance Monitor Users")).to be_truthy - end -end -describe 'dd-agent-win-user' do -# it_behaves_like 'an installed Agent' - it_behaves_like 'an Agent with APM enabled' - it_behaves_like 'an Agent with process enabled' - it_behaves_like 'an Agent with valid permissions' - it_behaves_like 'a running Agent with no errors' - it_behaves_like 'a running Agent with APM' - it_behaves_like 'a running Agent with process enabled' -end - diff --git a/test/kitchen/uservars-example.json b/test/kitchen/uservars-example.json deleted file mode 100644 index 0194b1795bef2..0000000000000 --- a/test/kitchen/uservars-example.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "global" : { - "comment-global" : "Environment variables that will be overridden for every target", - "comment-WINDOWS_AGENT_URL": "Override download target (useful for testing specific build). Must end in '/'", - "WINDOWS_AGENT_URL" : "https://s3.amazonaws.com/ddagent-windows-stable/", - "comment-WINDOWS_AGENT_FILE": "Override download file (must _not_ end in msi)", - "WINDOWS_AGENT_FILE" : "datadog-agent-7-latest.amd64", - "AGENT_VERSION" : "7.27.0", - "DD_AGENT_EXPECTED_VERSION" : "7.27.0" - }, - "hyperv" : { - "comment-hyperv-vars": "Variables specific to the hyper-v driver", - "KITCHEN_HYPERV_SWITCH" : "public-eth", - "KITCHEN_HYPERV_MEM_MIN" : "4GB", - "VM_USERNAME" : "administrator", - "SERVER_PASSWORD" : "" - }, - "ec2" : { - "comment-ec2-vars": "Variables specific to the hyper-v driver", - "comment_SSH_KEY": "path to ssh key used to create instances", - "KITCHEN_EC2_SSH_KEY_PATH" : "", - "comment_SSH_ID": "friendly name in EC2 associated with above ssh key", - "KITCHEN_EC2_SSH_KEY_ID" : "derek-sandbox-2", - "KITCHEN_EC2_TAG_CREATOR" : "db" - }, - "azure" : { - - } -} \ No newline at end of file diff --git a/test/new-e2e/tests/npm/ec2_1host_test.go b/test/new-e2e/tests/npm/ec2_1host_test.go index 3ed2cb8de79e0..ba07540f58ca7 100644 --- a/test/new-e2e/tests/npm/ec2_1host_test.go +++ b/test/new-e2e/tests/npm/ec2_1host_test.go @@ -79,8 +79,8 @@ func TestEC2VMSuite(t *testing.T) { e2eParams := []e2e.SuiteOption{e2e.WithProvisioner(e2e.NewTypedPulumiProvisioner("hostHttpbin", hostDockerHttpbinEnvProvisioner(), nil))} - // Source of our kitchen CI images test/kitchen/platforms.json - // Other VM image can be used, our kitchen CI images test/kitchen/platforms.json + // Source of our E2E CI images test/new-e2e/tests/agent-platform/platforms.json + // Other VM image can be used, our E2E CI images test/new-e2e/tests/agent-platform/platforms.json // ec2params.WithImageName("ami-a4dc46db", os.AMD64Arch, ec2os.AmazonLinuxOS) // ubuntu-16-04-4.4 e2e.Run(t, s, e2eParams...) } diff --git a/test/new-e2e/tests/sysprobe-functional/.gitignore b/test/new-e2e/tests/sysprobe-functional/.gitignore new file mode 100644 index 0000000000000..433a10da9f0e5 --- /dev/null +++ b/test/new-e2e/tests/sysprobe-functional/.gitignore @@ -0,0 +1,7 @@ +# Exclude system-probe test files generated by running inv -e system-probe.kitchen-prepare +artifacts/* +clang-bpf +llc-bpf +gotestsum +test2json +minimized-btfs.tar.xz diff --git a/test/new-e2e/tests/sysprobe-functional/apmtags_test.go b/test/new-e2e/tests/sysprobe-functional/apmtags_test.go index fad68dd02267d..3aff8ab90c5ae 100644 --- a/test/new-e2e/tests/sysprobe-functional/apmtags_test.go +++ b/test/new-e2e/tests/sysprobe-functional/apmtags_test.go @@ -17,13 +17,14 @@ import ( "github.com/DataDog/test-infra-definitions/components/datadog/agentparams" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/DataDog/datadog-agent/test/new-e2e/pkg/components" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/e2e" "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments" awsHostWindows "github.com/DataDog/datadog-agent/test/new-e2e/pkg/environments/aws/host/windows" "github.com/DataDog/datadog-agent/test/new-e2e/tests/windows" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" ) type apmvmSuite struct { @@ -107,9 +108,7 @@ func (v *apmvmSuite) SetupSuite() { currDir, err := os.Getwd() require.NoError(t, err) - reporoot, _ := filepath.Abs(filepath.Join(currDir, "..", "..", "..", "..")) - kitchenDir := filepath.Join(reporoot, "test", "kitchen", "site-cookbooks") - v.testspath = filepath.Join(kitchenDir, "dd-system-probe-check", "files", "default", "tests") + v.testspath = filepath.Join(currDir, "artifacts") // this creates the VM. v.BaseSuite.SetupSuite() diff --git a/test/new-e2e/tests/sysprobe-functional/sysprobe_test.go b/test/new-e2e/tests/sysprobe-functional/sysprobe_test.go index 4e41c685bbd7d..888f9427e4413 100644 --- a/test/new-e2e/tests/sysprobe-functional/sysprobe_test.go +++ b/test/new-e2e/tests/sysprobe-functional/sysprobe_test.go @@ -50,9 +50,7 @@ func (v *vmSuite) SetupSuite() { currDir, err := os.Getwd() require.NoError(t, err) - reporoot, _ := filepath.Abs(filepath.Join(currDir, "..", "..", "..", "..")) - kitchenDir := filepath.Join(reporoot, "test", "kitchen", "site-cookbooks") - v.testspath = filepath.Join(kitchenDir, "dd-system-probe-check", "files", "default", "tests") + v.testspath = filepath.Join(currDir, "artifacts") } func (v *vmSuite) TestSystemProbeNPMSuite() {