Example #1
0
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))
Example #2
0
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))
Example #3
0
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))
Example #4
0
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))
Example #5
0
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()
Example #6
0
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))
Example #7
0
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)