WIP: separate slurm base and docker images

This commit is contained in:
2021-06-17 22:50:23 +02:00
parent 6eb6984d6a
commit 4450c9bb65
7 changed files with 143 additions and 67 deletions

View File

@@ -1,38 +1,11 @@
FROM docker.io/library/centos:7
RUN yum install -y epel-release && \
yum install -y slurm && \
yum clean all && rm -rf /var/cache/yum
RUN yum install -y less iproute bind-utils nmap-ncat net-tools && \
yum clean all && rm -rf /var/cache/yum
# FIXME
COPY entrypoint.sh /usr/local/sbin/entrypoint.sh
RUN chown root:root /usr/local/sbin/entrypoint.sh && \
chmod 755 /usr/local/sbin/entrypoint.sh
ENTRYPOINT [ "/usr/local/sbin/entrypoint.sh" ]
ARG slurmuser=slurm
ENV slurmuser=${slurmuser}
RUN useradd -d /var/lib/slurm -m --no-log-init --system $slurmuser &&\
slurm-setuser -u $slurmuser -g $slurmuser -y
FROM slurm:base
RUN yum install -y slurm-slurmctld && \
yum clean all && rm -rf /var/cache/yum
COPY docker-init /usr/local/sbin/docker-init
RUN mkdir /etc/docker-init.d && chmod 755 /usr/local/sbin/docker-init
# FIXME
COPY start-scripts/10-munge /etc/docker-init.d/
COPY start-scripts/20-slurmctld /etc/docker-init.d/
RUN chmod 755 /etc/docker-init.d/*
COPY start-scripts/20-slurmctld /etc/docker-init.d/20-slurmctld
RUN chmod 755 /etc/docker-init.d/20-slurmctld
ENV SLURMCTLD_LOG_PATH="/var/log/slurm/slurmctld.log"
ENV SLURMD_LOG_PATH="/var/log/slurm/slurmd.log"
ENV SLURM_SCHED_LOG_PATH="/var/log/slurm/slurmsched.log"
CMD /usr/local/sbin/docker-init

View File

@@ -1,38 +1,11 @@
FROM docker.io/library/centos:7
RUN yum install -y epel-release && \
yum install -y slurm && \
yum clean all && rm -rf /var/cache/yum
RUN yum install -y less iproute bind-utils nmap-ncat net-tools && \
yum clean all && rm -rf /var/cache/yum
# FIXME
COPY entrypoint.sh /usr/local/sbin/entrypoint.sh
RUN chown root:root /usr/local/sbin/entrypoint.sh && \
chmod 755 /usr/local/sbin/entrypoint.sh
ENTRYPOINT [ "/usr/local/sbin/entrypoint.sh" ]
ARG slurmuser=slurm
ENV slurmuser=${slurmuser}
RUN useradd -d /var/lib/slurm -m --no-log-init --system $slurmuser &&\
slurm-setuser -u $slurmuser -g $slurmuser -y
FROM slurm:base
RUN yum install -y slurm-slurmd && \
yum clean all && rm -rf /var/cache/yum
COPY docker-init /usr/local/sbin/docker-init
RUN mkdir /etc/docker-init.d && chmod 755 /usr/local/sbin/docker-init
# FIXME
COPY start-scripts/10-munge /etc/docker-init.d/
COPY start-scripts/30-slurmd /etc/docker-init.d/
RUN chmod 755 /etc/docker-init.d/*
COPY start-scripts/30-slurmd /etc/docker-init.d/30-slurmd
RUN chmod 755 /etc/docker-init.d/30-slurmd
ENV SLURMCTLD_LOG_PATH="/var/log/slurm/slurmctld.log"
ENV SLURMD_LOG_PATH="/var/log/slurm/slurmd.log"
ENV SLURM_SCHED_LOG_PATH="/var/log/slurm/slurmsched.log"
CMD /usr/local/sbin/docker-init

View File

@@ -3,19 +3,24 @@
name: [ slurm, slurm-doc ]
state: present
- include_tasks: dockerimage.yml
- include_role:
name: slurm_dockerimage
loop:
- name: slurmctld
start:
- 10-munge
- 20-slurmctld
dockerfile: "{{ lookup('file', 'slurmctld.Dockerfile') }}"
start_scripts:
- name: 20-slurmctld
content: "{{ lookup('file', 'start-scripts/20-slurmctld') }}"
- name: slurmd
start:
- 10-munge
- 30-slurmd
dockerfile: "{{ lookup('file', 'slurmd.Dockerfile') }}"
start_scripts:
- name: 30-slurmd
content: "{{ lookup('file', 'start-scripts/30-slurmd') }}"
loop_control:
loop_var: image
label: "{{ image.name }}"
vars:
build_base: True
- name: generate munge key
shell:
@@ -78,6 +83,10 @@
image: slurm:slurmd
extra_mounts:
- "/home/{{unpriv_user}}/job3/:/mnt/:rw"
# - machine: slurm-cobald
# image: slurm-cobald
# extra_mounts:
# # TODO
tags: [ slurm-config ]
# TODO: reserve some address using docker_network_info and assign as aux

View File

@@ -0,0 +1,29 @@
FROM docker.io/library/centos:7
RUN yum install -y epel-release && \
yum install -y slurm && \
yum clean all && rm -rf /var/cache/yum
RUN yum install -y less iproute bind-utils nmap-ncat net-tools && \
yum clean all && rm -rf /var/cache/yum
# FIXME
COPY entrypoint.sh /usr/local/sbin/entrypoint.sh
RUN chown root:root /usr/local/sbin/entrypoint.sh && \
chmod 755 /usr/local/sbin/entrypoint.sh
ENTRYPOINT [ "/usr/local/sbin/entrypoint.sh" ]
ARG slurmuser=slurm
ENV slurmuser=${slurmuser}
RUN useradd -d /var/lib/slurm -m --no-log-init --system $slurmuser &&\
slurm-setuser -u $slurmuser -g $slurmuser -y
COPY docker-init /usr/local/sbin/docker-init
RUN mkdir /etc/docker-init.d && chmod 755 /usr/local/sbin/docker-init
COPY start-scripts/10-munge /etc/docker-init.d/10-munge
RUN chmod 755 /etc/docker-init.d/10-munge
CMD /usr/local/sbin/docker-init

View File

@@ -0,0 +1,47 @@
- copy:
src: "{{image.name}}.Dockerfile"
dest: "/container/docker-images/slurm/{{image.name}}.Dockerfile"
owner: "{{unpriv_user}}"
group: docker
register: slurm_cp_dockerfile
# TODO: single source of truth:
# dockerfile -> parse for startup files or startup files template in dockerfile
- name: copy startup scripts
copy:
contents: "{{ item.content | default(lookup('file', item.name)) }}"
dest: "/container/docker-images/slurm/start-scripts/{{item.name}}"
owner: root
group: root
mode: u=rwx,g=rx,o=rx
loop: "{{ start_scripts | default([]) }}"
register: slurm_cp_stscrs
- set_fact:
slurm_stscrs_changed: "{{ (slurm_stscrs_changed | default([])) +
(slurm_cp_stscrs.results | selectattr('changed') |
map(attribute='item.name') | list) }}"
- set_fact:
slurm_stscrs_relevant: "{{ slurm_stscrs_changed |
intersect(start_scripts | default([]) | map(attribute='name') | list) |
length > 0 }}"
- debug: msg="{{slurm_cp_dockerfile.changed or
slurm_stscrs_relevant or
slurm_baseimg_build_chg }}"
- docker_image:
name: "slurm"
tag: "{{image.name}}"
# pull: False
build:
pull: False
path: "/container/docker-images/slurm/"
dockerfile: "{{image.name}}.Dockerfile"
# target: "{{image.name}}" # unsupported on old docker-py version as in el7
source: build
force_source: "{{slurm_cp_dockerfile.changed or
slurm_stscrs_relevant or
slurm_baseimg_build_chg }}"
# TODO: force when base image changed!

View File

@@ -0,0 +1,45 @@
- file:
path: "/container/docker-images/slurm/start-scripts"
state: directory
owner: "{{unpriv_user}}"
group: docker
# - name: copy Dockerfile, entrypoint, docker-init and munge startup
- name: copy slurm base image requisite files
copy: # FIXME: swap out
src: "{{item.file}}"
dest: "/container/docker-images/slurm/{{item.file}}"
owner: "{{unpriv_user}}"
group: docker
mode: "{{ item.perms | default('u=rwx,g=rx,o=rx') }}"
loop:
- file: slurm-base.Dockerfile
perms: u=rw,g=r,o=r
- file: entrypoint.sh
- file: docker-init
- file: start-scripts/10-munge
when: not (slurm_baseimg_build_chg | default(False))
register: slurm_baseimg_copy
- name: build base image
docker_image:
name: "slurm"
tag: "base"
# pull: False
build:
pull: False
path: "/container/docker-images/slurm/"
dockerfile: "slurm-base.Dockerfile"
# target: "{{image.name}}" # unsupported on old docker-py version as in el7
source: build
force_source: "{{slurm_baseimg_copy.changed}}"
# when: run only once but keep changed state
when: not (slurm_baseimg_build_chg | default(False))
register: slurm_baseimg_build
- set_fact:
slurm_baseimg_build_chg:
"{{(slurm_baseimg_build_chg | default(False)) or
slurm_baseimg_build.changed}}"
- include_tasks: dockerimage.yml