diff --git a/templates/packer/ansible/inventory/rhel-8-aarch64/group_vars/all.yml b/templates/packer/ansible/inventory/rhel-8-aarch64/group_vars/all.yml new file mode 100644 index 000000000..04147ed09 --- /dev/null +++ b/templates/packer/ansible/inventory/rhel-8-aarch64/group_vars/all.yml @@ -0,0 +1,5 @@ +--- +# this is just a template! +# the actual content is generated by build/appsre-build-worker-packer.sh +rpmrepo_distribution: distro +osbuild_commit: abcdef diff --git a/templates/packer/ansible/roles/common/tasks/packages.yml b/templates/packer/ansible/roles/common/tasks/packages.yml index 3b33eb645..57a0157d0 100644 --- a/templates/packer/ansible/roles/common/tasks/packages.yml +++ b/templates/packer/ansible/roles/common/tasks/packages.yml @@ -96,7 +96,7 @@ - rpmcopy ansible.posix.synchronize: mode: push - src: "{{ playbook_dir }}/roles/common/files/rpmbuild/RPMS" + src: "{{ playbook_dir }}/roles/common/files/rpmbuild/{{ ansible_architecture }}/RPMS" dest: /tmp/rpmbuild - name: Add repo config diff --git a/templates/packer/worker.pkr.hcl b/templates/packer/worker.pkr.hcl index a85b4afb6..9243e1ef0 100644 --- a/templates/packer/worker.pkr.hcl +++ b/templates/packer/worker.pkr.hcl @@ -55,6 +55,36 @@ build { } } + source "amazon-ebs.image_builder" { + name = "rhel-8-aarch64" + + # Use a static RHEL 8.6 Cloud Access Image. + source_ami = "ami-0c84d76d81209a0e2" + ssh_username = "ec2-user" + instance_type = "c6g.large" + + # Set a name for the resulting AMI. + ami_name = "${var.image_name}" + + # Apply tags to the resulting AMI/EBS snapshot. + tags = { + AppCode = "IMGB-001" + Name = "${var.image_name}" + composer_commit = "${var.composer_commit}" + os = "rhel" + os_version = "8" + arch = "aarch64" + } + + # Ensure that the EBS snapshot used for the AMI meets our requirements. + launch_block_device_mappings { + delete_on_termination = "true" + device_name = "/dev/sda1" + volume_size = 10 + volume_type = "gp2" + } + } + source "amazon-ebs.image_builder" { name = "fedora-35-x86_64" diff --git a/tools/appsre-ansible/rpmbuild.yml b/tools/appsre-ansible/rpmbuild.yml index 7cd2dd8d3..fe3f4643f 100644 --- a/tools/appsre-ansible/rpmbuild.yml +++ b/tools/appsre-ansible/rpmbuild.yml @@ -3,8 +3,17 @@ become: yes remote_user: ec2-user hosts: rpmbuilder + gather_facts: no tasks: + - name: Wait for hosts to be reachable + ansible.builtin.wait_for_connection: + delay: 60 + timeout: 400 + + - name: Gather facts + ansible.builtin.setup: + - name: Add EPEL dnf: name: https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm @@ -72,7 +81,7 @@ - name: Mockbuild osbuild shell: >- mock - -r "rhel-8-x86_64" + -r "rhel-8-{{ ansible_architecture }}" --rebuild --define "commit {{ OSBUILD_COMMIT }}" --define "_rpmfilename %%{NAME}.rpm" @@ -91,7 +100,7 @@ - name: Mockbuild osbuild-composer shell: >- mock - -r "rhel-8-x86_64" + -r "rhel-8-{{ ansible_architecture }}" --rebuild --define "commit {{ COMPOSER_COMMIT }}" --define "_rpmfilename %%{NAME}.rpm" @@ -105,4 +114,4 @@ ansible.posix.synchronize: mode: pull src: /home/ec2-user/rpmbuild/RPMS - dest: /osbuild-composer/templates/packer/ansible/roles/common/files/rpmbuild + dest: /osbuild-composer/templates/packer/ansible/roles/common/files/rpmbuild/{{ ansible_architecture }} diff --git a/tools/appsre-build-worker-packer.sh b/tools/appsre-build-worker-packer.sh index f1c471403..c0d6bcc3c 100755 --- a/tools/appsre-build-worker-packer.sh +++ b/tools/appsre-build-worker-packer.sh @@ -7,6 +7,7 @@ COMMIT_SHA=$(git rev-parse HEAD) COMMIT_BRANCH=$(git rev-parse --abbrev-ref HEAD) ON_JENKINS=true SKIP_CREATE_AMI=false +BUILD_RPMS=false # Use gitlab CI variables if available if [ -n "$CI_COMMIT_SHA" ]; then @@ -49,91 +50,20 @@ function cleanup { } trap cleanup EXIT -# What we will cp and exec -cat > worker-packer.sh<<'EOF' -#!/bin/bash -set -exv -EOF -chmod +x worker-packer.sh - -# warning: this is RHEL 8 x86_64 specific! -function ec2_rpm_build { - cat >> worker-packer.sh <<'EOF' -function cleanup { - set +e - if [ "$ON_JENKINS" = true ]; then - if [ -n "$AWS_INSTANCE_ID" ]; then - aws ec2 terminate-instances --instance-ids "$AWS_INSTANCE_ID" - fi - if [ -n "$KEY_NAME" ]; then - aws ec2 delete-key-pair --key-name "$KEY_NAME" - fi - fi -} -trap cleanup EXIT - -KEY_NAME=$(uuidgen) -RPMBUILD_DIR="/osbuild-composer/templates/packer/ansible/roles/common/files/rpmbuild/RPMS" -mkdir -p "$RPMBUILD_DIR" - -aws ec2 create-key-pair --key-name "$KEY_NAME" --query 'KeyMaterial' --output text > /osbuild-composer/keypair.pem -chmod 600 /osbuild-composer/keypair.pem -# rhel 8.5 AMI -aws ec2 run-instances --image-id ami-03debf3ebf61b20cd --instance-type c5.large --key-name "$KEY_NAME" \ - --tag-specifications "ResourceType=instance,Tags=[{Key=commit,Value=$COMMIT_SHA},{Key=name,Value=rpm-builder-$COMMIT_SHA}]" \ - > ./rpminstance.json -AWS_INSTANCE_ID=$(jq -r '.Instances[].InstanceId' "rpminstance.json") -aws ec2 wait instance-running --instance-ids "$AWS_INSTANCE_ID" - -aws ec2 describe-instances --instance-ids "$AWS_INSTANCE_ID" > "instances.json" -RPMBUILDER_HOST=$(jq -r '.Reservations[].Instances[].PublicIpAddress' "instances.json") -for LOOP_COUNTER in {0..30}; do - if ssh -i /osbuild-composer/keypair.pem -o ConnectTimeout=5 -o StrictHostKeyChecking=no "ec2-user@$RPMBUILDER_HOST" true; then - break - fi - sleep 5 - echo "sleeping, try #$LOOP_COUNTER" -done - -cat > /osbuild-composer/tools/appsre-ansible/inventory <> worker-packer.sh <<'EOF' -cat > /osbuild-composer/templates/packer/share.auto.pkrvars.hcl < /osbuild-composer/templates/packer/share.auto.pkrvars.hcl <