def _test_package_upgrade(base_image, package_path, init_system): with run_init_system_image(base_image, with_socat=False) as [cont, backend]: _, package_ext = os.path.splitext(package_path) copy_file_into_container(package_path, cont, "/opt/signalfx-agent%s" % package_ext) install_deps(cont, base_image) if "opensuse" in base_image: install_cmd = f"bash -ec 'wget -nv {OLD_SUSE_RPM_URL} && rpm -ivh --nodeps {OLD_SUSE_RPM_NAME}'" upgrade_cmd = "rpm -Uvh --nodeps /opt/signalfx-agent.rpm" else: install_cmd = OLD_INSTALL_COMMAND[package_ext] upgrade_cmd = UPGRADE_COMMAND[package_ext] _test_install_package(cont, install_cmd) cont.exec_run("bash -ec 'echo -n testing123 > /etc/signalfx/token'") old_agent_yaml = update_agent_yaml(cont, backend, hostname="test-" + base_image) _, _ = cont.exec_run("cp -f %s %s.orig" % (AGENT_YAML_PATH, AGENT_YAML_PATH)) code, output = cont.exec_run(upgrade_cmd) print("Output of package upgrade:") print_lines(output) assert code == 0, "Package could not be upgraded!" _test_package_verify(cont, package_ext, base_image) if init_system == INIT_SYSTEMD: assert not path_exists_in_container(cont, "/etc/init.d/signalfx-agent") else: assert path_exists_in_container(cont, "/etc/init.d/signalfx-agent") new_agent_yaml = get_container_file_content(cont, AGENT_YAML_PATH) diff = get_agent_yaml_diff(old_agent_yaml, new_agent_yaml) assert not diff, "%s different after upgrade!\n%s" % (AGENT_YAML_PATH, diff) try: _test_service_list(cont, init_system) _test_service_restart(cont, init_system, backend) _test_service_status(cont, init_system, "active") _test_service_stop(cont, init_system, backend) _test_service_status(cont, init_system, "inactive") _test_service_start(cont, init_system, backend) _test_service_status(cont, init_system, "active") _test_service_stop(cont, init_system, backend) _test_system_restart(cont, init_system, backend) if init_system == INIT_SYSTEMD: _test_service_status_redirect(cont) _test_agent_status(cont) _test_service_override(cont, init_system, backend) finally: cont.reload() if cont.status.lower() == "running": print("Agent service status:") print_lines(cont.exec_run(INIT_STATUS_COMMAND[init_system]).output) print("Agent log:") print_lines(get_agent_logs(cont, init_system))
def verify_override_files(cont, init_system, user, group=None): if not group: group = user if init_system == INIT_SYSTEMD: tmpfile_path = "/etc/tmpfiles.d/signalfx-agent.conf" expected = f"D /run/signalfx-agent 0755 {user} {group} - -" assert expected == get_container_file_content(cont, tmpfile_path).strip() override_path = "/etc/systemd/system/signalfx-agent.service.d/service-owner.conf" expected = f"[Service]\nUser={user}\nGroup={group}" assert expected == get_container_file_content(cont, override_path).strip() else: override_path = "/etc/default/signalfx-agent" expected = f"user={user}\ngroup={group}" assert expected == get_container_file_content(cont, override_path).strip()
def _test_package_upgrade(base_image, package_path, init_system): with run_init_system_image(base_image, with_socat=False) as [cont, backend]: _, package_ext = os.path.splitext(package_path) copy_file_into_container(package_path, cont, "/opt/signalfx-agent%s" % package_ext) code, output = cont.exec_run(OLD_INSTALL_COMMAND[package_ext]) print("Output of old package install:") print_lines(output) assert code == 0, "Old package could not be installed!" cont.exec_run("bash -ec 'echo -n testing123 > /etc/signalfx/token'") old_agent_yaml = update_agent_yaml(cont, backend, hostname="test-" + base_image) _, _ = cont.exec_run("cp -f %s %s.orig" % (AGENT_YAML_PATH, AGENT_YAML_PATH)) code, output = cont.exec_run(UPGRADE_COMMAND[package_ext]) print("Output of package upgrade:") print_lines(output) assert code == 0, "Package could not be upgraded!" if init_system == INIT_SYSTEMD: assert not path_exists_in_container(cont, "/etc/init.d/signalfx-agent") else: assert path_exists_in_container(cont, "/etc/init.d/signalfx-agent") new_agent_yaml = get_container_file_content(cont, AGENT_YAML_PATH) diff = get_agent_yaml_diff(old_agent_yaml, new_agent_yaml) assert not diff, "%s different after upgrade!\n%s" % (AGENT_YAML_PATH, diff) try: _test_service_list(cont, init_system) _test_service_restart(cont, init_system, backend) _test_service_status(cont, init_system, "active") _test_service_stop(cont, init_system, backend) _test_service_status(cont, init_system, "inactive") _test_service_start(cont, init_system, backend) _test_service_status(cont, init_system, "active") _test_service_stop(cont, init_system, backend) _test_system_restart(cont, init_system, backend) if init_system == INIT_SYSTEMD: _test_service_status_redirect(cont) _test_agent_status(cont) finally: cont.reload() if cont.status.lower() == "running": print("Agent log:") print_lines(get_agent_logs(cont, init_system))
def update_agent_yaml(container, backend, hostname="test-hostname"): def set_option(name, value): code, _ = container.exec_run("grep '^%s:' %s" % (name, AGENT_YAML_PATH)) if code == 0: _, _ = container.exec_run("sed -i 's|^%s:.*|%s: %s|' %s" % (name, name, value, AGENT_YAML_PATH)) else: _, _ = container.exec_run("bash -ec 'echo >> %s'" % AGENT_YAML_PATH) _, _ = container.exec_run("bash -ec 'echo \"%s: %s\" >> %s'" % (name, value, AGENT_YAML_PATH)) assert path_exists_in_container(container, AGENT_YAML_PATH), "File %s does not exist!" % AGENT_YAML_PATH if hostname: set_option("hostname", hostname) ingest_url = "http://%s:%d" % (backend.ingest_host, backend.ingest_port) set_option("ingestUrl", ingest_url) api_url = "http://%s:%d" % (backend.api_host, backend.api_port) set_option("apiUrl", api_url) return get_container_file_content(container, AGENT_YAML_PATH)