示例#1
0
def test_build_failure(tmpdir):
    target_image_name = "registry.example.com/ab-test-" + random_word(12)
    target_image_tag = "oldest"
    target_image = f"{target_image_name}:{target_image_tag}"
    target_failed_image = target_image + "-failed"
    cmd = ["build", bad_playbook_path, base_image, target_image]
    with pytest.raises(subprocess.CalledProcessError):
        ab(cmd, str(tmpdir))
    out = ab(["get-logs"], str(tmpdir), return_output=True).lstrip()
    assert out.startswith("PLAY [registry")

    p_inspect_data = json.loads(
        subprocess.check_output(
            ["podman", "inspect", "-t", "image", target_failed_image]))[0]
    image_id = p_inspect_data["Id"]

    cmd = ["inspect", "--json"]
    ab_inspect_data = json.loads(ab(cmd, str(tmpdir), return_output=True))
    top_layer_id = ab_inspect_data["layers"][-1]["layer_id"]
    final_image_id = ab_inspect_data["final_layer_id"]

    assert image_id == top_layer_id
    assert image_id == final_image_id
    assert ab_inspect_data["target_image"] == target_failed_image
    buildah("rmi", [target_failed_image])
def test_with_vars_files(tmpdir):
    cmd = ["build", p_w_vars_files_path]
    ab(cmd, str(tmpdir))

    try:
        cmd = ["inspect", "--json"]
        ab_inspect_data = json.loads(ab(cmd, str(tmpdir), return_output=True))

        assert ab_inspect_data[
            "base_image"] == "docker.io/library/python:3-alpine"
        assert ab_inspect_data["build_id"] == "1"
        assert ab_inspect_data['builder_name'] == "buildah"
        assert len(ab_inspect_data['layers']) == 3
        assert ab_inspect_data["metadata"]["labels"] == {"x": "y"}
        assert ab_inspect_data["metadata"]["env_vars"] == {
            "key": "env",
            "path": "/etc/passwd"
        }
        assert ab_inspect_data["playbook_path"] == p_w_vars_files_path
        assert ab_inspect_data["pulled"] is False
        assert ab_inspect_data["target_image"] == "with-vars-files"
    finally:
        try:
            buildah(
                "rmi", ["with-vars-files"]
            )  # FIXME: use builder interface instead for sake of other backends
        except subprocess.CalledProcessError as ex:
            print(ex)
def test_basic(tmpdir):
    cmd = ["build", b_p_w_vars_path]
    ab(cmd, str(tmpdir))

    try:
        cmd = ["inspect", "--json"]
        ab_inspect_data = json.loads(ab(cmd, str(tmpdir), return_output=True))

        assert ab_inspect_data[
            "base_image"] == "docker.io/library/python:3-alpine"
        assert ab_inspect_data["build_id"] == "1"
        assert ab_inspect_data['build_volumes'] == [f'{data_dir}:/src:Z']
        assert ab_inspect_data['builder_name'] == "buildah"
        assert len(ab_inspect_data['layers']) == 3
        assert ab_inspect_data["metadata"]["labels"] == {"x": "y"}
        assert ab_inspect_data["metadata"]["env_vars"] == {"asd": data_dir}
        assert ab_inspect_data["playbook_path"] == b_p_w_vars_path
        assert ab_inspect_data["pulled"] is False
        assert ab_inspect_data["target_image"] == "challet"

        cmd = ["podman", "inspect", "--type", "image", "challet"]
        inspect_data = json.loads(subprocess.check_output(cmd))[0]

        assert inspect_data["Config"]["Labels"] == {"x": "y"}
        assert f"asd={data_dir}" in inspect_data["Config"]["Env"]
        assert inspect_data["Config"]["WorkingDir"] == "/src"
    finally:
        try:
            buildah(
                "rmi", ["challet"]
            )  # FIXME: use builder interface instead for sake of other backends
        except subprocess.CalledProcessError as ex:
            print(ex)
示例#4
0
def test_build_failure(tmpdir):
    target_image_name = "registry.example.com/ab-test-" + random_word(12)
    target_image_tag = "oldest"
    target_image = f"{target_image_name}:{target_image_tag}"
    cmd = ["build", bad_playbook_path, base_image, target_image]
    with pytest.raises(subprocess.CalledProcessError):
        ab(cmd, str(tmpdir))
    out = ab(["get-logs"], str(tmpdir), return_output=True).lstrip()
    assert "PLAY [registry" in out

    # regex string for target image
    image_name_regex = "%s+[-]+[0-9]+[-]+[0-9]+-failed" % (target_image)

    cmd = ["inspect", "--json"]
    ab_inspect_data = json.loads(ab(cmd, str(tmpdir), return_output=True))
    top_layer_id = ab_inspect_data["layers"][-1]["layer_id"]
    final_image_id = ab_inspect_data["final_layer_id"]
    final_image_name = ab_inspect_data["target_image"]

    assert re.match(image_name_regex, final_image_name)

    p_inspect_data = json.loads(
        subprocess.check_output(
            ["podman", "inspect", "-t", "image", final_image_name]))[0]
    image_id = p_inspect_data["Id"]

    assert image_id == top_layer_id
    assert image_id == final_image_id
    buildah("rmi", [final_image_name])
示例#5
0
def test_output(target_image, tmpdir):
    cmd = ["build", basic_playbook_path, base_image, target_image]
    out = ab(cmd, str(tmpdir), return_output=True, debug=False)
    assert f"Image '{target_image}' was built successfully \\o/" in out
    assert 'Getting image source signatures' in out
    assert not re.match(r'ERROR\s+Getting image source signatures', out)
    assert 'Copying ' in out
    assert not re.match(r'ERROR\s+Copying ', out)
    buildah("inspect", ["-t", "image", target_image])
示例#6
0
def target_image():
    im = "registry.example.com/ab-test-" + random_word(12) + ":oldest"
    yield im
    try:
        buildah("rmi", [
            im
        ])  # FIXME: use builder interface instead for sake of other backends
        # FIXME: also remove everything from cache
    except subprocess.CalledProcessError as ex:
        print(ex)