Add rpm_install tasks

This patch adds a new rpm_install tasks which can be used
to build a new container layer from a set of local RPMs.
This is useful for building contains locally with no network
connectivity.

As part of the change the existing Yum update Dockerfile.j2 was
renamed to Dockerfile-yum.j2 to make it more specific.

Change-Id: I951c976ebb84c28cecefd2f5753a8232f46ad4aa
This commit is contained in:
Dan Prince 2018-07-17 10:15:42 -04:00
parent 68703e732d
commit 7178d84867
6 changed files with 94 additions and 2 deletions

View File

@ -75,7 +75,7 @@ the modification, for example:
The following playbook will produce a modified image with the tag The following playbook will produce a modified image with the tag
`:latest-updated` which will do a yum update using the host's /etc/yum.repos.d. `:latest-updated` which will do a yum update using the host's /etc/yum.repos.d.
The yum update will only occur if there are differences between host and image The yum update will only occur if there are differences between host and image
package versions. In this playbook the tasks_from is set as a variable instead package versions. In this playbook the tasks\_from is set as a variable instead
of an `import_role` parameter. of an `import_role` parameter.
- hosts: localhost - hosts: localhost
@ -90,6 +90,25 @@ of an `import_role` parameter.
yum_repos_dir_path: /etc/yum.repos.d yum_repos_dir_path: /etc/yum.repos.d
modified_append_tag: updated modified_append_tag: updated
### RPM install ###
The following playbook will produce a modified image with RPMs from the
specified rpms\_path on the local filesystem installed as a new layer
for the container. The new container tag is appened with the '-hotfix'
suffix. Useful for creating adhoc hotfix containers with local RPMs with no
network connectivity.
- hosts: localhost
tasks:
- name: include tripleo-modify-image
import_role:
name: tripleo-modify-image
vars:
tasks_from: rpm_install.yml
source_image: docker.io/tripleomaster/centos-binary-nova-api:latest
rpms_path: /foo/bar
modified_append_tag: -hotfix
## License ## ## License ##
Apache 2.0 Apache 2.0

7
files/rpm_install.sh Executable file
View File

@ -0,0 +1,7 @@
#!/bin/sh
set -ex
rpm -Uvh /tmp/*.rpm
rm -f /tmp/*.rpm
rm -f /tmp/rpm_install.sh

53
tasks/rpm_install.yml Normal file
View File

@ -0,0 +1,53 @@
- import_tasks: precheck.yml
tags:
- always
- name: Inspect image
docker_image_facts:
name: "{{ source_image }}"
register: source_image_facts
- name: Set original_user
set_fact:
original_user: "{{ source_image_facts.images[0].Config.User }}"
- name: Create image build context directory
tempfile:
state: directory
prefix: tripleo-modify-image
register: context_dir
- name: Set modify_dir_path
set_fact:
modify_dir_path: "{{ context_dir.path }}"
- name: List RPMs
find:
paths: "{{ rpms_path }}"
patterns: "^.*?\\.rpm$"
use_regex: yes
when: rpms_path is defined
register: context_rpms
- name: Set rpms_list
set_fact:
rpms_list: "{{ context_rpms.files|json_query('[*].path') }}"
- name: Copy RPMs to context dir
copy:
src: "{{ item }}"
dest: "{{ modify_dir_path }}"
loop: "{{ rpms_list }}"
- name: Write Dockerfile to {{ modify_dir_path }}
template:
src: Dockerfile-rpm.j2
dest: "{{ modify_dir_path }}/Dockerfile"
- name: Write rpm_install.sh
copy:
src: rpm_install.sh
dest: "{{ modify_dir_path }}/rpm_install.sh"
mode: '0555'
- include_tasks: modify_image.yml

View File

@ -65,7 +65,7 @@
- name: Write Dockerfile to {{ modify_dir_path }} - name: Write Dockerfile to {{ modify_dir_path }}
template: template:
src: Dockerfile.j2 src: Dockerfile-yum.j2
dest: "{{ modify_dir_path }}/Dockerfile" dest: "{{ modify_dir_path }}/Dockerfile"
- name: Write yum_update.sh - name: Write yum_update.sh

View File

@ -0,0 +1,13 @@
FROM {{ source_image }}
LABEL modified_append_tag={{ modified_append_tag }}
USER root
{% for rpm in rpms_list %}
COPY {{ rpm | basename }} /tmp/
{% endfor %}
COPY rpm_install.sh /tmp/
RUN /tmp/rpm_install.sh
USER "{{ original_user }}"