Esempio n. 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))
Esempio n. 2
0
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()
Esempio n. 3
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))
Esempio n. 4
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)