WIP: separate slurm base and docker images
This commit is contained in:
@@ -1,38 +1,11 @@
|
|||||||
FROM docker.io/library/centos:7
|
FROM slurm:base
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
RUN yum install -y slurm-slurmctld && \
|
RUN yum install -y slurm-slurmctld && \
|
||||||
yum clean all && rm -rf /var/cache/yum
|
yum clean all && rm -rf /var/cache/yum
|
||||||
|
|
||||||
COPY docker-init /usr/local/sbin/docker-init
|
COPY start-scripts/20-slurmctld /etc/docker-init.d/20-slurmctld
|
||||||
RUN mkdir /etc/docker-init.d && chmod 755 /usr/local/sbin/docker-init
|
RUN chmod 755 /etc/docker-init.d/20-slurmctld
|
||||||
# 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/*
|
|
||||||
|
|
||||||
ENV SLURMCTLD_LOG_PATH="/var/log/slurm/slurmctld.log"
|
ENV SLURMCTLD_LOG_PATH="/var/log/slurm/slurmctld.log"
|
||||||
ENV SLURMD_LOG_PATH="/var/log/slurm/slurmd.log"
|
ENV SLURMD_LOG_PATH="/var/log/slurm/slurmd.log"
|
||||||
ENV SLURM_SCHED_LOG_PATH="/var/log/slurm/slurmsched.log"
|
ENV SLURM_SCHED_LOG_PATH="/var/log/slurm/slurmsched.log"
|
||||||
|
|
||||||
CMD /usr/local/sbin/docker-init
|
|
||||||
|
@@ -1,38 +1,11 @@
|
|||||||
FROM docker.io/library/centos:7
|
FROM slurm:base
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
RUN yum install -y slurm-slurmd && \
|
RUN yum install -y slurm-slurmd && \
|
||||||
yum clean all && rm -rf /var/cache/yum
|
yum clean all && rm -rf /var/cache/yum
|
||||||
|
|
||||||
COPY docker-init /usr/local/sbin/docker-init
|
COPY start-scripts/30-slurmd /etc/docker-init.d/30-slurmd
|
||||||
RUN mkdir /etc/docker-init.d && chmod 755 /usr/local/sbin/docker-init
|
RUN chmod 755 /etc/docker-init.d/30-slurmd
|
||||||
# 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/*
|
|
||||||
|
|
||||||
ENV SLURMCTLD_LOG_PATH="/var/log/slurm/slurmctld.log"
|
ENV SLURMCTLD_LOG_PATH="/var/log/slurm/slurmctld.log"
|
||||||
ENV SLURMD_LOG_PATH="/var/log/slurm/slurmd.log"
|
ENV SLURMD_LOG_PATH="/var/log/slurm/slurmd.log"
|
||||||
ENV SLURM_SCHED_LOG_PATH="/var/log/slurm/slurmsched.log"
|
ENV SLURM_SCHED_LOG_PATH="/var/log/slurm/slurmsched.log"
|
||||||
|
|
||||||
CMD /usr/local/sbin/docker-init
|
|
||||||
|
@@ -3,19 +3,24 @@
|
|||||||
name: [ slurm, slurm-doc ]
|
name: [ slurm, slurm-doc ]
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- include_tasks: dockerimage.yml
|
- include_role:
|
||||||
|
name: slurm_dockerimage
|
||||||
loop:
|
loop:
|
||||||
- name: slurmctld
|
- name: slurmctld
|
||||||
start:
|
dockerfile: "{{ lookup('file', 'slurmctld.Dockerfile') }}"
|
||||||
- 10-munge
|
start_scripts:
|
||||||
- 20-slurmctld
|
- name: 20-slurmctld
|
||||||
|
content: "{{ lookup('file', 'start-scripts/20-slurmctld') }}"
|
||||||
- name: slurmd
|
- name: slurmd
|
||||||
start:
|
dockerfile: "{{ lookup('file', 'slurmd.Dockerfile') }}"
|
||||||
- 10-munge
|
start_scripts:
|
||||||
- 30-slurmd
|
- name: 30-slurmd
|
||||||
|
content: "{{ lookup('file', 'start-scripts/30-slurmd') }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
loop_var: image
|
loop_var: image
|
||||||
label: "{{ image.name }}"
|
label: "{{ image.name }}"
|
||||||
|
vars:
|
||||||
|
build_base: True
|
||||||
|
|
||||||
- name: generate munge key
|
- name: generate munge key
|
||||||
shell:
|
shell:
|
||||||
@@ -78,6 +83,10 @@
|
|||||||
image: slurm:slurmd
|
image: slurm:slurmd
|
||||||
extra_mounts:
|
extra_mounts:
|
||||||
- "/home/{{unpriv_user}}/job3/:/mnt/:rw"
|
- "/home/{{unpriv_user}}/job3/:/mnt/:rw"
|
||||||
|
# - machine: slurm-cobald
|
||||||
|
# image: slurm-cobald
|
||||||
|
# extra_mounts:
|
||||||
|
# # TODO
|
||||||
tags: [ slurm-config ]
|
tags: [ slurm-config ]
|
||||||
|
|
||||||
# TODO: reserve some address using docker_network_info and assign as aux
|
# TODO: reserve some address using docker_network_info and assign as aux
|
||||||
|
29
roles/slurm_dockerimage/files/slurm-base.Dockerfile
Normal file
29
roles/slurm_dockerimage/files/slurm-base.Dockerfile
Normal 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
|
47
roles/slurm_dockerimage/tasks/dockerimage.yml
Normal file
47
roles/slurm_dockerimage/tasks/dockerimage.yml
Normal 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!
|
45
roles/slurm_dockerimage/tasks/main.yml
Normal file
45
roles/slurm_dockerimage/tasks/main.yml
Normal 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
|
Reference in New Issue
Block a user