|
Packit Service |
509fd4 |
#!/usr/bin/python3
|
|
Packit Service |
509fd4 |
import json
|
|
Packit Service |
509fd4 |
import sys
|
|
Packit Service |
509fd4 |
import time
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
import requests
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
# Composer API for Koji uses a slightly different repository format
|
|
Packit Service |
509fd4 |
# that osbuild-composer does in /usr/share/osbuild-composer/repositories.
|
|
Packit Service |
509fd4 |
#
|
|
Packit Service |
509fd4 |
# This function does the conversion.
|
|
Packit Service |
509fd4 |
def composer_repository_to_koji_repository(repository):
|
|
Packit Service |
509fd4 |
koji_repository = {
|
|
Packit Service |
509fd4 |
"baseurl": repository["baseurl"]
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
if repository.get("check_gpg", False):
|
|
Packit Service |
509fd4 |
koji_repository["gpgkey"] = repository["gpgkey"]
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
return koji_repository
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
def compose_request(distro, koji, arch):
|
|
Packit Service |
509fd4 |
with open(f"/usr/share/tests/osbuild-composer/repositories/{distro}.json") as f:
|
|
Packit Service |
509fd4 |
test_repositories = json.load(f)
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
repositories = [composer_repository_to_koji_repository(repo) for repo in test_repositories[arch]]
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
req = {
|
|
Packit Service |
509fd4 |
"name": "name",
|
|
Packit Service |
509fd4 |
"version": "version",
|
|
Packit Service |
509fd4 |
"release": "release",
|
|
Packit Service |
509fd4 |
"distribution": distro,
|
|
Packit Service |
509fd4 |
"koji": {
|
|
Packit Service |
509fd4 |
"server": koji,
|
|
Packit Service |
509fd4 |
"task_id": 1
|
|
Packit Service |
509fd4 |
},
|
|
Packit Service |
509fd4 |
"image_requests": [{
|
|
Packit Service |
509fd4 |
"architecture": "x86_64",
|
|
Packit Service |
509fd4 |
"image_type": "qcow2",
|
|
Packit Service |
509fd4 |
"repositories": repositories
|
|
Packit Service |
509fd4 |
},{
|
|
Packit Service |
509fd4 |
"architecture": "x86_64",
|
|
Packit Service |
509fd4 |
"image_type": "ami",
|
|
Packit Service |
509fd4 |
"repositories": repositories
|
|
Packit Service |
509fd4 |
}]
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
return req
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
def main(distro, arch):
|
|
Packit Service |
509fd4 |
cr = compose_request(distro, "https://localhost:4343/kojihub", arch)
|
|
Packit Service |
509fd4 |
print(json.dumps(cr))
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
r = requests.post("https://localhost/api/composer-koji/v1/compose", json=cr,
|
|
Packit Service |
509fd4 |
cert=("/etc/osbuild-composer/worker-crt.pem", "/etc/osbuild-composer/worker-key.pem"),
|
|
Packit Service |
509fd4 |
verify="/etc/osbuild-composer/ca-crt.pem")
|
|
Packit Service |
509fd4 |
if r.status_code != 201:
|
|
Packit Service |
509fd4 |
print("Failed to create compose")
|
|
Packit Service |
509fd4 |
print(r.text)
|
|
Packit Service |
509fd4 |
sys.exit(1)
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
print(r.text)
|
|
Packit Service |
509fd4 |
compose_id = r.json()["id"]
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
while True:
|
|
Packit Service |
509fd4 |
r = requests.get(f"https://localhost/api/composer-koji/v1/compose/{compose_id}",
|
|
Packit Service |
509fd4 |
cert=("/etc/osbuild-composer/worker-crt.pem", "/etc/osbuild-composer/worker-key.pem"),
|
|
Packit Service |
509fd4 |
verify="/etc/osbuild-composer/ca-crt.pem")
|
|
Packit Service |
509fd4 |
if r.status_code != 200:
|
|
Packit Service |
509fd4 |
print("Failed to get compose status")
|
|
Packit Service |
509fd4 |
print(r.text)
|
|
Packit Service |
509fd4 |
sys.exit(1)
|
|
Packit Service |
509fd4 |
status = r.json()["status"]
|
|
Packit Service |
509fd4 |
print(status)
|
|
Packit Service |
509fd4 |
if status == "success":
|
|
Packit Service |
509fd4 |
print("Compose worked!")
|
|
Packit Service |
509fd4 |
print(r.text)
|
|
Packit Service |
509fd4 |
break
|
|
Packit Service |
509fd4 |
elif status == "failure":
|
|
Packit Service |
509fd4 |
print("compose failed!")
|
|
Packit Service |
509fd4 |
print(r.text)
|
|
Packit Service |
509fd4 |
sys.exit(1)
|
|
Packit Service |
509fd4 |
elif status != "pending" and status != "running":
|
|
Packit Service |
509fd4 |
print(f"unexpected status: {status}")
|
|
Packit Service |
509fd4 |
print(r.text)
|
|
Packit Service |
509fd4 |
sys.exit(1)
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
time.sleep(10)
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
r = requests.get(f"https://localhost/api/composer-koji/v1/compose/{compose_id}/logs",
|
|
Packit Service |
509fd4 |
cert=("/etc/osbuild-composer/worker-crt.pem", "/etc/osbuild-composer/worker-key.pem"),
|
|
Packit Service |
509fd4 |
verify="/etc/osbuild-composer/ca-crt.pem")
|
|
Packit Service |
509fd4 |
logs = r.json()
|
|
Packit Service |
509fd4 |
assert "image_logs" in logs
|
|
Packit Service |
509fd4 |
assert type(logs["image_logs"]) == list
|
|
Packit Service |
509fd4 |
assert len(logs["image_logs"]) == len(cr["image_requests"])
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
if __name__ == "__main__":
|
|
Packit Service |
509fd4 |
if len(sys.argv) != 3:
|
|
Packit Service |
509fd4 |
print(f"usage: {sys.argv[0]} DISTRO ARCH", file=sys.stderr)
|
|
Packit Service |
509fd4 |
sys.exit(1)
|
|
Packit Service |
509fd4 |
main(sys.argv[1], sys.argv[2])
|