Tim Andersson has proposed merging ~andersson123/autopkgtest-cloud:proposed-package-images into autopkgtest-cloud:master.
Requested reviews: Canonical's Ubuntu QA (canonical-ubuntu-qa) For more details, see: https://code.launchpad.net/~andersson123/autopkgtest-cloud/+git/autopkgtest-cloud/+merge/465334 -- Your team Canonical's Ubuntu QA is requested to review the proposed merge of ~andersson123/autopkgtest-cloud:proposed-package-images into autopkgtest-cloud:master.
diff --git a/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/create-nova-image-with-proposed-package b/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/create-nova-image-with-proposed-package index e48f3f4..1ac3554 100755 --- a/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/create-nova-image-with-proposed-package +++ b/charms/focal/autopkgtest-cloud-worker/autopkgtest-cloud/tools/create-nova-image-with-proposed-package @@ -27,18 +27,29 @@ from glanceclient.common import utils def get_glance(): """Return glance client object""" - loader = keystoneauth1.loading.get_plugin_loader("password") - auth = loader.load_from_options( - auth_url=os.environ["OS_AUTH_URL"], - username=os.environ["OS_USERNAME"], - password=os.environ["OS_PASSWORD"], - tenant_name=os.environ["OS_TENANT_NAME"], - ) + if os.environ.get("OS_IDENTITY_API_VERSION") == "3": + auth = loader.load_from_options( + auth_url=os.environ["OS_AUTH_URL"], + username=os.environ["OS_USERNAME"], + password=os.environ["OS_PASSWORD"], + tenant_name=os.environ["OS_TENANT_NAME"], + project_name=os.environ["OS_PROJECT_NAME"], + user_domain_name=os.environ["OS_USER_DOMAIN_NAME"], + project_domain_name=os.environ["OS_PROJECT_DOMAIN_NAME"], + ) + else: + auth = loader.load_from_options( + auth_url=os.environ["OS_AUTH_URL"], + username=os.environ["OS_USERNAME"], + password=os.environ["OS_PASSWORD"], + tenant_name=os.environ["OS_TENANT_NAME"], + ) session = keystoneauth1.session.Session(auth=auth) - return glanceclient.Client( - "2", session=session, region_name=os.environ["NOVA_REGION"] + os_region = os.environ.get( + "NOVA_REGION", os.environ.get("OS_REGION_NAME", "") ) + return glanceclient.Client("2", session=session, region_name=os_region) def find_latest_image(img_re): @@ -55,7 +66,7 @@ def find_latest_image(img_re): return latest -def setup_image(image_path, source): +def setup_image(image_path, source, release): # get a chroot shell into the image img_shell = subprocess.Popen( [ @@ -67,7 +78,7 @@ def setup_image(image_path, source): image_path, "chroot", "_MOUNTPOINT_", - "/bin/sh", + "/bin/bash", ], stdin=subprocess.PIPE, ) @@ -76,30 +87,37 @@ def setup_image(image_path, source): # pylint: disable=line-too-long img_shell.stdin.write( ( - """ + f""" set -e echo '* Creating policy-rc.d' printf '#!/bin/sh\\nexit 101\\n' > /usr/sbin/policy-rc.d chmod 755 /usr/sbin/policy-rc.d echo '* Generating apt sources for -proposed:' -sed -rn 's/^(deb|deb-src) +(\[.*\] *)?([^ ]*(ubuntu.com|debian.org|ftpmaster)[^ ]*) +([^ -]+) +(.*)$/\\1 \\2\\3 \\5-proposed \\6/p' /etc/apt/sources.list `ls /etc/apt/sources.list.d/*.list 2>/dev/null|| true` > /etc/apt/sources.list.d/proposed.list + +touch /etc/apt/sources.list.d/proposed.list +echo "deb http://ftpmaster.internal/ubuntu/ {release}-proposed main restricted universe multiverse" > /etc/apt/sources.list.d/proposed.list +echo "deb-src http://ftpmaster.internal/ubuntu/ {release}-proposed main restricted universe multiverse" >> /etc/apt/sources.list.d/proposed.list + cat /etc/apt/sources.list.d/proposed.list echo '* apt-get update' -apt-get update +apt -o "Dir::Etc::sourcelist=/etc/apt/sources.list.d/proposed.list" update -echo '* Determining which binaries of source %(src)s are installed and have a new version...' -SRCS=$(python3 -c 'import sys, apt; src=sys.argv[1]; [print(pkg.name) for pkg in apt.Cache() if pkg.installed and pkg.candidate.source_name == src and pkg.candidate.version > pkg.installed.version]' %(src)s) -echo "$SRCS" +#echo '* Determining which binaries of source {source} are installed and have a new version...' +#SRCS=$(python3 -c 'import sys, apt; src=sys.argv[1]; [print(pkg.name) for pkg in apt.Cache() if pkg.installed and pkg.candidate.source_name == src and pkg.candidate.version > pkg.installed.version]' %(src)s) +#echo "$SRCS" echo '* Install the above packages' -DEBIAN_FRONTEND=noninteractive apt-get install -y $SRCS +DEBIAN_FRONTEND=noninteractive apt-get install -y {source} -echo '* Cleaning up' +echo '*Cleaning up apt' +rm /etc/apt/sources.list.d/proposed.list +apt update apt-get clean + +echo '* Cleaning up' rm -f /etc/machine-id /usr/sbin/policy-rc.d """ - % {"src": source} ).encode() ) @@ -111,14 +129,16 @@ rm -f /etc/machine-id /usr/sbin/policy-rc.d # main # -if len(sys.argv) != 3: +if len(sys.argv) != 4: sys.stderr.write( - "Usage: %s <image RE> <proposed source package name>\n" % sys.argv[0] + "Usage: %s <image RE> <proposed source package name> <release-codename>\n" + % sys.argv[0] ) sys.exit(1) image_re = re.compile(sys.argv[1]) source = sys.argv[2] +release = sys.argv[3] glance = get_glance() latest = find_latest_image(image_re) @@ -129,8 +149,9 @@ workdir = tempfile.TemporaryDirectory( img = os.path.join(workdir.name, "image") utils.save_image(glance.images.data(latest.id), img) -setup_image(img, source) - +print("* Image %s has been downloaded - now setting up") +setup_image(img, source, release) +print("* Image has been set up! Creating image via glance API") newimg_name = "proposed-%s/%s" % (source, os.path.basename(latest.name)) newimg = glance.images.create( name=newimg_name, @@ -140,3 +161,4 @@ newimg = glance.images.create( print("* Uploading new image %s (UUID: %s)..." % (newimg.name, newimg.id)) with open(img, "rb") as f: glance.images.upload(newimg.id, f) +print("* Image uploaded! All done.") diff --git a/charms/focal/autopkgtest-cloud-worker/layer.yaml b/charms/focal/autopkgtest-cloud-worker/layer.yaml index 70be935..a150607 100644 --- a/charms/focal/autopkgtest-cloud-worker/layer.yaml +++ b/charms/focal/autopkgtest-cloud-worker/layer.yaml @@ -30,4 +30,6 @@ options: - python3-swiftclient - ssmtp - vim + - qemu-user-static + - binfmt-support include_system_packages: true
-- Mailing list: https://launchpad.net/~canonical-ubuntu-qa Post to : canonical-ubuntu-qa@lists.launchpad.net Unsubscribe : https://launchpad.net/~canonical-ubuntu-qa More help : https://help.launchpad.net/ListHelp