build cobald image from slurm role, separated tags
This commit is contained in:
34
roles/cobald/tasks/dockerimage-generic.yml
Normal file
34
roles/cobald/tasks/dockerimage-generic.yml
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
- file:
|
||||||
|
path: "/container/docker-images/cobald.{{cobald_image_tag|default('latest')}}/"
|
||||||
|
state: directory
|
||||||
|
owner: "{{unpriv_user}}"
|
||||||
|
group: docker
|
||||||
|
|
||||||
|
- template:
|
||||||
|
src: cobald.Dockerfile
|
||||||
|
dest: "/container/docker-images/cobald.{{cobald_image_tag|default('latest')}}/Dockerfile"
|
||||||
|
owner: "{{unpriv_user}}"
|
||||||
|
group: docker
|
||||||
|
register: cobald_cp_dockerfile
|
||||||
|
|
||||||
|
- copy:
|
||||||
|
src: "{{item}}"
|
||||||
|
dest: "/container/docker-images/cobald.{{cobald_image_tag|default('latest')}}/{{item}}"
|
||||||
|
owner: "{{unpriv_user}}"
|
||||||
|
group: docker
|
||||||
|
mode: 0755
|
||||||
|
with_items:
|
||||||
|
- cobald-entrypoint.sh
|
||||||
|
- init-cobaldmodules.sh
|
||||||
|
register: cobald_cp_files
|
||||||
|
|
||||||
|
- docker_image:
|
||||||
|
name: "cobald"
|
||||||
|
tag: "{{cobald_image_tag|default('latest')}}"
|
||||||
|
# pull: False
|
||||||
|
build:
|
||||||
|
pull: False
|
||||||
|
path: "/container/docker-images/cobald.{{cobald_image_tag|default('latest')}}/"
|
||||||
|
source: build
|
||||||
|
force_source: "{{cobald_cp_dockerfile.changed or cobald_cp_files.changed}}"
|
||||||
|
|
@@ -1,46 +1,29 @@
|
|||||||
- include_vars: cobald-slurm.yml
|
- include_vars: cobald-slurm.yml
|
||||||
when: cobald_slurm | default(False)
|
when: cobald_slurm | default(False)
|
||||||
|
|
||||||
# FIXME: replace below by
|
- include_role:
|
||||||
# - include_role: slurm
|
name: slurm
|
||||||
# tasks_from: dockerimage
|
tasks_from: dockerimage
|
||||||
- file:
|
vars:
|
||||||
path: "/container/{{item.name}}/cobald{{item.pfx|default('')}}/"
|
slurm_image_prefix: cobald
|
||||||
|
image_name: "{{cobald_image_tag}}"
|
||||||
|
dockerfile: "{{ lookup('template', 'cobald.Dockerfile') }}"
|
||||||
|
files:
|
||||||
|
- dest: cobald-entrypoint.sh
|
||||||
|
content: "{{ lookup('file', 'cobald-entrypoint.sh') }}"
|
||||||
|
- dest: init-cobaldmodules.sh
|
||||||
|
content: "{{ lookup('file', 'init-cobaldmodules.sh') }}"
|
||||||
|
when: cobald_slurm | default(False)
|
||||||
|
|
||||||
|
- include_tasks: dockerimage-generic.yml
|
||||||
|
when: not (cobald_slurm | default(False))
|
||||||
|
|
||||||
|
- name: make cobald data volume
|
||||||
|
file:
|
||||||
|
path: "/container/volumes/cobald/"
|
||||||
state: directory
|
state: directory
|
||||||
owner: "{{unpriv_user}}"
|
owner: "{{unpriv_user}}"
|
||||||
group: docker
|
group: docker
|
||||||
loop:
|
|
||||||
- name: docker-images
|
|
||||||
pfx: ".{{cobald_image_tag|default('latest')}}"
|
|
||||||
- name: volumes
|
|
||||||
|
|
||||||
- template:
|
|
||||||
src: cobald.Dockerfile
|
|
||||||
dest: "/container/docker-images/cobald.{{cobald_image_tag|default('latest')}}/Dockerfile"
|
|
||||||
owner: "{{unpriv_user}}"
|
|
||||||
group: docker
|
|
||||||
register: cobald_cp_dockerfile
|
|
||||||
|
|
||||||
- copy:
|
|
||||||
src: "{{item}}"
|
|
||||||
dest: "/container/docker-images/cobald.{{cobald_image_tag|default('latest')}}/{{item}}"
|
|
||||||
owner: "{{unpriv_user}}"
|
|
||||||
group: docker
|
|
||||||
mode: 0755
|
|
||||||
with_items:
|
|
||||||
- cobald-entrypoint.sh
|
|
||||||
- init-cobaldmodules.sh
|
|
||||||
register: cobald_cp_files
|
|
||||||
|
|
||||||
- docker_image:
|
|
||||||
name: "cobald"
|
|
||||||
tag: "{{cobald_image_tag|default('latest')}}"
|
|
||||||
# pull: False
|
|
||||||
build:
|
|
||||||
pull: False
|
|
||||||
path: "/container/docker-images/cobald.{{cobald_image_tag|default('latest')}}/"
|
|
||||||
source: build
|
|
||||||
force_source: "{{cobald_cp_dockerfile.changed or cobald_cp_files.changed}}"
|
|
||||||
|
|
||||||
- copy:
|
- copy:
|
||||||
src: cobald-config/
|
src: cobald-config/
|
||||||
|
@@ -1,8 +1,9 @@
|
|||||||
container_privileged: False
|
|
||||||
slurm_user: slurm
|
slurm_user: slurm
|
||||||
slurm_log_path_ctld: /var/log/slurm/slurmctld.log
|
slurm_log_path_ctld: /var/log/slurm/slurmctld.log
|
||||||
slurm_log_path_d: /var/log/slurm/slurmd.log
|
slurm_log_path_d: /var/log/slurm/slurmd.log
|
||||||
slurm_log_path_sched: /var/log/slurm/slurmsched.log
|
slurm_log_path_sched: /var/log/slurm/slurmsched.log
|
||||||
slurm_prefix: slurm
|
slurm_prefix: slurm
|
||||||
slurm_domain: slurm.local
|
slurm_domain: slurm.local
|
||||||
|
container_privileged: False
|
||||||
docker_network: slurm
|
docker_network: slurm
|
||||||
|
slurm_image_prefix: slurm
|
||||||
|
@@ -1,8 +1,9 @@
|
|||||||
- name: build slurm base docker image
|
- name: build slurm base docker image
|
||||||
include_tasks: dockerimage_build.yml
|
include_tasks: dockerimage_build.yml
|
||||||
vars:
|
vars:
|
||||||
|
slurm_image_prefix: "{{slurm_base_image_prefix | default('slurm') }}"
|
||||||
image_name: base
|
image_name: base
|
||||||
dockerfile: slurm-base.Dockerfile
|
dockerfile: "{{lookup('file', 'slurm-base.Dockerfile')}}"
|
||||||
files:
|
files:
|
||||||
- dest: entrypoint.sh
|
- dest: entrypoint.sh
|
||||||
content: "{{ lookup('file', 'entrypoint.sh') }}"
|
content: "{{ lookup('file', 'entrypoint.sh') }}"
|
||||||
@@ -20,5 +21,5 @@
|
|||||||
"{{(slurm_baseimg_build_chg | default(False)) or
|
"{{(slurm_baseimg_build_chg | default(False)) or
|
||||||
slurm_baseimg_build.changed}}"
|
slurm_baseimg_build.changed}}"
|
||||||
|
|
||||||
- name: "build slurm base docker image {{name}}"
|
- name: "build slurm base docker image {{image_name}}"
|
||||||
include_tasks: dockerimage_build.yml
|
include_tasks: dockerimage_build.yml
|
||||||
|
@@ -1,16 +1,16 @@
|
|||||||
- name: create directories for docker image build
|
- name: create directories for docker image build
|
||||||
file:
|
file:
|
||||||
path: "/container/docker-images/slurm-{{image_name}}/{{item}}"
|
path: "/container/docker-images/{{slurm_image_prefix}}-{{image_name}}/{{item}}"
|
||||||
state: directory
|
state: directory
|
||||||
owner: "{{unpriv_user}}"
|
owner: "{{unpriv_user}}"
|
||||||
group: docker
|
group: docker
|
||||||
loop: "{{ [''] + (files | map(attribute='dest') | map('dirname') |
|
loop: "{{ [''] + (files | map(attribute='dest') | map('dirname') |
|
||||||
unique | select | list) }}"
|
unique | select | list) }}"
|
||||||
|
|
||||||
- name: copy Dockerfile
|
- name: "copy Dockerfile {{slurm_image_prefix}}:{{image_name}}"
|
||||||
copy:
|
copy:
|
||||||
src: "{{image_name}}.Dockerfile"
|
content: "{{dockerfile}}"
|
||||||
dest: "/container/docker-images/slurm-{{image_name}}/Dockerfile"
|
dest: "/container/docker-images/{{slurm_image_prefix}}-{{image_name}}/Dockerfile"
|
||||||
owner: "{{unpriv_user}}"
|
owner: "{{unpriv_user}}"
|
||||||
group: docker
|
group: docker
|
||||||
register: slurm_cp_dockerfile
|
register: slurm_cp_dockerfile
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
- name: copy requisite files
|
- name: copy requisite files
|
||||||
copy:
|
copy:
|
||||||
content: "{{ item.content }}"
|
content: "{{ item.content }}"
|
||||||
dest: "/container/docker-images/slurm-{{image_name}}/{{item.dest}}"
|
dest: "/container/docker-images/{{slurm_image_prefix}}-{{image_name}}/{{item.dest}}"
|
||||||
owner: root
|
owner: root
|
||||||
group: root
|
group: root
|
||||||
mode: u=rwx,g=rx,o=rx
|
mode: u=rwx,g=rx,o=rx
|
||||||
@@ -27,13 +27,14 @@
|
|||||||
label: "{{ item.dest }}"
|
label: "{{ item.dest }}"
|
||||||
register: slurm_cp_files
|
register: slurm_cp_files
|
||||||
|
|
||||||
- docker_image:
|
- name: "build docker image {{slurm_image_prefix}}:{{image_name}}"
|
||||||
name: "slurm"
|
docker_image:
|
||||||
|
name: "{{slurm_image_prefix}}"
|
||||||
tag: "{{image_name}}"
|
tag: "{{image_name}}"
|
||||||
# pull: False
|
# pull: False
|
||||||
build:
|
build:
|
||||||
pull: False
|
pull: False
|
||||||
path: "/container/docker-images/slurm-{{image_name}}/"
|
path: "/container/docker-images/{{slurm_image_prefix}}-{{image_name}}/"
|
||||||
source: build
|
source: build
|
||||||
force_source: "{{slurm_cp_dockerfile.changed or
|
force_source: "{{slurm_cp_dockerfile.changed or
|
||||||
slurm_cp_files.changed or
|
slurm_cp_files.changed or
|
||||||
|
@@ -3,7 +3,8 @@
|
|||||||
name: [ slurm, slurm-doc ]
|
name: [ slurm, slurm-doc ]
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- include_tasks:
|
- name: build docker images for slurm
|
||||||
|
include_tasks:
|
||||||
file: dockerimage.yml
|
file: dockerimage.yml
|
||||||
loop:
|
loop:
|
||||||
- name: slurmctld
|
- name: slurmctld
|
||||||
@@ -36,7 +37,8 @@
|
|||||||
group: munge
|
group: munge
|
||||||
mode: u=rw,g=,o=
|
mode: u=rw,g=,o=
|
||||||
|
|
||||||
- file:
|
- name: create munge key directory for containers
|
||||||
|
file:
|
||||||
path: /container/volumes/munge
|
path: /container/volumes/munge
|
||||||
state: directory
|
state: directory
|
||||||
owner: munge
|
owner: munge
|
||||||
@@ -51,7 +53,8 @@
|
|||||||
src: /etc/munge/munge.key
|
src: /etc/munge/munge.key
|
||||||
dest: /container/volumes/munge/munge.key
|
dest: /container/volumes/munge/munge.key
|
||||||
|
|
||||||
- file:
|
- name: make slurm directory
|
||||||
|
file:
|
||||||
path: /container/volumes/slurm/
|
path: /container/volumes/slurm/
|
||||||
state: directory
|
state: directory
|
||||||
|
|
||||||
@@ -78,29 +81,6 @@
|
|||||||
name: slurm-shared
|
name: slurm-shared
|
||||||
state: present
|
state: present
|
||||||
|
|
||||||
- set_fact:
|
|
||||||
slurm_nodes_std: # default nodes: controller and submit machine
|
|
||||||
- machine: ctl
|
|
||||||
image: slurm:slurmctld
|
|
||||||
exposed_ports: [ "6817:6817/tcp" ]
|
|
||||||
- machine: submit1
|
|
||||||
image: slurm:slurmd
|
|
||||||
extra_mounts:
|
|
||||||
- "/home/{{unpriv_user}}/job3/:/mnt/:rw"
|
|
||||||
slurm_nodes_exec: | # extend range to execute nodes list
|
|
||||||
{% set slurm_nodes_exec = slurm_nodes_exec | default([]) %}
|
|
||||||
{% for i in range(1, num_nodes+1) -%}
|
|
||||||
{% set _ = slurm_nodes_exec.extend([
|
|
||||||
{'machine':'exec%s'|format(i), 'image': 'slurm:slurmd'}]) -%}
|
|
||||||
{%- endfor %}
|
|
||||||
{{ slurm_nodes_exec }}
|
|
||||||
slurm_default_mounts:
|
|
||||||
- /container/volumes/slurm/:/etc/slurm/:rw
|
|
||||||
- /container/volumes/munge/munge.key:/etc/munge/munge.key:rw
|
|
||||||
- slurm-shared:/shared/:rw
|
|
||||||
slurm_network: "{{docker_network}}"
|
|
||||||
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
|
||||||
# address to enable slurmctld to get a static address in order to be
|
# address to enable slurmctld to get a static address in order to be
|
||||||
# reachable from slurm running on docker host to enable submitting jobs.
|
# reachable from slurm running on docker host to enable submitting jobs.
|
||||||
@@ -113,7 +93,7 @@
|
|||||||
volumes: "{{ slurm_default_mounts + ( item.extra_mounts | default([]) ) }}"
|
volumes: "{{ slurm_default_mounts + ( item.extra_mounts | default([]) ) }}"
|
||||||
ports: "{{ item.exposed_ports | default([]) }}"
|
ports: "{{ item.exposed_ports | default([]) }}"
|
||||||
networks:
|
networks:
|
||||||
- name: "{{ slurm_network }}"
|
- name: "{{ docker_network }}"
|
||||||
env:
|
env:
|
||||||
slurmuser: "{{ slurm_user }}"
|
slurmuser: "{{ slurm_user }}"
|
||||||
image: "{{ item.image }}"
|
image: "{{ item.image }}"
|
||||||
@@ -123,14 +103,14 @@
|
|||||||
privileged: "{{ container_privileged | bool }}"
|
privileged: "{{ container_privileged | bool }}"
|
||||||
networks_cli_compatible: True
|
networks_cli_compatible: True
|
||||||
interactive: True
|
interactive: True
|
||||||
vars:
|
vars: # see vars/main.yml
|
||||||
slurm_nodes_all: "{{ slurm_nodes_exec + slurm_nodes_std }}"
|
slurm_nodes_all: "{{ slurm_nodes_exec + slurm_nodes_std }}"
|
||||||
loop: "{{ slurm_nodes_all }}"
|
loop: "{{ slurm_nodes_all }}"
|
||||||
loop_control:
|
loop_control:
|
||||||
label: "{{slurm_prefix}}-{{ item.machine }}"
|
label: "{{slurm_prefix}}-{{ item.machine }}"
|
||||||
tags: [ slurm-config ]
|
tags: [ slurm-config ]
|
||||||
|
|
||||||
- name: set facts to be used by other modules
|
- name: export facts about slurm cluster to be used by other modules
|
||||||
set_fact:
|
set_fact:
|
||||||
slurm:
|
slurm:
|
||||||
user: "{{slurm_user}}"
|
user: "{{slurm_user}}"
|
||||||
@@ -138,3 +118,4 @@
|
|||||||
base_image: "slurm:base"
|
base_image: "slurm:base"
|
||||||
mounts: "{{slurm_default_mounts}}"
|
mounts: "{{slurm_default_mounts}}"
|
||||||
network: "{{docker_network}}"
|
network: "{{docker_network}}"
|
||||||
|
tags: always
|
||||||
|
20
roles/slurm/vars/main.yml
Normal file
20
roles/slurm/vars/main.yml
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
slurm_nodes_std: # default nodes: controller and submit machine
|
||||||
|
- machine: ctl
|
||||||
|
image: slurm:slurmctld
|
||||||
|
exposed_ports: [ "6817:6817/tcp" ]
|
||||||
|
- machine: submit1
|
||||||
|
image: slurm:slurmd
|
||||||
|
extra_mounts:
|
||||||
|
- "/home/{{unpriv_user}}/job3/:/mnt/:rw"
|
||||||
|
slurm_nodes_exec: | # extend range to execute nodes list
|
||||||
|
{% set slurm_nodes_exec = [] %}
|
||||||
|
{% for i in range(1, num_nodes+1) -%}
|
||||||
|
{% set _ = slurm_nodes_exec.extend([
|
||||||
|
{'machine':'exec%s'|format(i), 'image': 'slurm:slurmd'}]) -%}
|
||||||
|
{%- endfor %}
|
||||||
|
{{ slurm_nodes_exec }}
|
||||||
|
slurm_default_mounts:
|
||||||
|
- /container/volumes/slurm/:/etc/slurm/:rw
|
||||||
|
- /container/volumes/munge/munge.key:/etc/munge/munge.key:rw
|
||||||
|
- slurm-shared:/shared/:rw
|
||||||
|
|
Reference in New Issue
Block a user