WIP: separate slurm base and docker images
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
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