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 _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 _test_package_install(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 = "rpm -ivh --nodeps /opt/signalfx-agent.rpm" else: install_cmd = INSTALL_COMMAND[package_ext] _test_install_package(cont, install_cmd) _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") cont.exec_run("bash -ec 'echo -n testing123 > /etc/signalfx/token'") update_agent_yaml(cont, backend, hostname="test-" + base_image) 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 _test_package_install(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) if "opensuse" in base_image: # suse-specific installation (this will usually be handled by the installer script) code, output = cont.exec_run( "zypper install -y -l libcap2 libcap-progs libpcap1 shadow") assert code == 0, "Failed to install dependencies:\n%s" % output.decode( "utf-8") install_cmd = "rpm -ivh --nodeps /opt/signalfx-agent.rpm" else: install_cmd = INSTALL_COMMAND[package_ext] code, output = cont.exec_run(install_cmd) print("Output of package install:") print_lines(output) assert code == 0, "Package could not be installed!" 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") cont.exec_run("bash -ec 'echo -n testing123 > /etc/signalfx/token'") update_agent_yaml(cont, backend, hostname="test-" + base_image) 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 _test_service_stop(container, init_system, backend): code, output = container.exec_run(INIT_STOP_COMMAND[init_system]) print("%s stop command output:" % init_system) print_lines(output) assert code == 0, "Agent could not be stop" assert wait_for( lambda: not get_agent_pid(container), timeout_seconds=INIT_STOP_TIMEOUT ), "Timed out waiting for agent process to stop" if init_system in [INIT_SYSV, INIT_UPSTART]: assert not path_exists_in_container(container, PIDFILE_PATH), "%s exists when agent is stopped" % PIDFILE_PATH backend.reset_datapoints()
def _test_package_install(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(INSTALL_COMMAND[package_ext]) print("Output of package install:") print_lines(output) assert code == 0, "Package could not be installed!" 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") cont.exec_run("bash -ec 'echo -n testing123 > /etc/signalfx/token'") update_agent_yaml(cont, backend, hostname="test-" + base_image) 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) 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)