Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
2c87eaf
Copy files from prp-osgvo-pilot/image
sfiligoi May 12, 2022
2a606c7
Integrate wn/image/image-config.d/02_additional_requirements.sh with …
sfiligoi May 12, 2022
2b208d3
Add scripts/21_advertise_k8s_provisioner.sh
sfiligoi May 12, 2022
1a434ec
Add FORCE_K8SNAMESPACE_MATCHING
sfiligoi May 12, 2022
48843d3
Add scripts/19_set_resources.sh
sfiligoi May 12, 2022
99c17c6
Fix typo
sfiligoi May 12, 2022
e6a3206
Add scripts/01_token.sh
sfiligoi May 13, 2022
044de80
Fix script location
sfiligoi May 13, 2022
f67e725
Fix typo in 22_set_requirements.sh
sfiligoi May 13, 2022
8b07089
Add scripts/01_no_condor_host.sh
sfiligoi May 13, 2022
dc73c23
Add scripts/check_master.sh
sfiligoi May 17, 2022
9a6638f
Fix typo
sfiligoi May 17, 2022
9d90d37
Add 02_validate_singularity.sh
sfiligoi Jun 10, 2022
f87182a
Fix return code
sfiligoi Jun 11, 2022
bc2f7a2
Wrap apptainer, too
sfiligoi Nov 21, 2022
2168067
Test also --nv in singularity
sfiligoi Jun 20, 2023
e779a8f
Merge branch 'main' into ospool_pool_base
sfiligoi Jun 20, 2023
410761f
Test also --nv in apptainer
sfiligoi Jun 20, 2023
5c77a66
Change entrypoint location as per upstream
sfiligoi Feb 22, 2024
30e0480
Switch from osgvo-docker-pilot:3.6-release to osgvo-docker-pilot:23-r…
sfiligoi Mar 15, 2024
e9efb8b
Move from opensciencegrid/osgvo-docker-pilot:23-release to openscienc…
sfiligoi Mar 15, 2024
2881c0d
Fix typo
sfiligoi Mar 15, 2024
ee5a863
Fix python vs python3
sfiligoi Mar 15, 2024
3286dfa
Add IS_GLIDEIN classad
sfiligoi Jul 15, 2024
0247b70
Add kubectl in the image
sfiligoi Oct 1, 2024
7fe8e93
Add 11_set_OSGInstitutionID.sh init script that sets OSG_INSTITUTION_ID
sfiligoi Oct 2, 2024
7b2a55f
Add OpenCL support
sfiligoi Oct 17, 2024
b073ed5
Update base image to hub.opensciencegrid.org/osg-htc/ospool-ep:24-rel…
sfiligoi Dec 19, 2024
bbea903
Replace exact matching with approximate matching
sfiligoi Feb 25, 2025
ad44c50
Fix typo
sfiligoi Feb 25, 2025
2c7cc9f
Make disk range larger
sfiligoi Feb 25, 2025
1b00676
Merge remote-tracking branch 'prp-htcondor-portal/ospool_pool_base_24…
brianhlin Apr 17, 2026
03de498
OSPOOL-158: add OSG 25 NRP ospool-ep builds
brianhlin Apr 17, 2026
f09cdf3
Add support for pushing osg-htc project images
brianhlin Apr 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions .github/workflows/build-containers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:

- id: image-list
run: |
ORG_DIR=opensciencegrid
ORG_DIR_REGEX="^(opensciencegrid|osg-htc)/"
# Get the list of files changed based on the type of event
# kicking off the GHA:
# 1. For the main branch, diff the previous state of main vs
Expand All @@ -54,7 +54,7 @@ jobs:
images=$(git diff --name-only \
"$BASE" \
"$GITHUB_SHA" |
egrep "^$ORG_DIR/" |
grep -E "$ORG_DIR_REGEX" |
cut -d/ -f -2 |
Comment on lines 33 to 58
Copy link

Copilot AI Apr 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The workflow now includes osg-htc/... images in the build list, but the push job still uses the same Harbor registry (hub.opensciencegrid.org) and robot credentials for all contexts. If context is used as the registry repo name, this will attempt to push into an osg-htc namespace/project that the current robot account may not be authorized for; consider adding per-org registry/credentials routing or excluding osg-htc/* from the push steps until permissions are in place.

Copilot uses AI. Check for mistakes.
sort |
uniq |
Expand All @@ -64,10 +64,11 @@ jobs:
else
# List all image root dirs. Example value:
# "opensciencegrid/vo-frontend opensciencegrid/ospool-cm"
images=$(find $ORG_DIR -mindepth 1 \
-maxdepth 1 \
-type d \
-printf "$ORG_DIR/%P\n")
images=$(find -mindepth 2 \
-maxdepth 2 \
-type d \
-printf "%P\n" |
grep -E "${ORG_DIR_REGEX}")
fi

image_json=$(echo -n "${images:-dummy}" | jq -Rcs '.|split("\n") | map(select(. != ""))')
Comment thread
brianhlin marked this conversation as resolved.
Expand Down Expand Up @@ -124,7 +125,7 @@ jobs:
BASE_OS=$(echo $CONFIG | awk -F'-' '{print $1}')
OSG_SERIES=$(echo $CONFIG | awk -F'-' '{print $2}')
BASE_REPO=$(echo $CONFIG | awk -F'-' '{print $3}')
CONTEXT="opensciencegrid/${{ matrix.name }}"
CONTEXT="${{ matrix.name }}"
echo "BASE_OS=${BASE_OS}" >> $GITHUB_ENV
echo "OSG_SERIES=${OSG_SERIES}" >> $GITHUB_ENV
echo "BASE_REPO=${BASE_REPO}" >> $GITHUB_ENV
Expand Down Expand Up @@ -176,7 +177,7 @@ jobs:
BASE_OS=$(echo $CONFIG | awk -F'-' '{print $1}')
OSG_SERIES=$(echo $CONFIG | awk -F'-' '{print $2}')
BASE_REPO=$(echo $CONFIG | awk -F'-' '{print $3}')
CONTEXT="opensciencegrid/${{ matrix.name }}"
CONTEXT="${{ matrix.name }}"
echo "BASE_OS=${BASE_OS}" >> $GITHUB_ENV
echo "OSG_SERIES=${OSG_SERIES}" >> $GITHUB_ENV
echo "BASE_REPO=${BASE_REPO}" >> $GITHUB_ENV
Expand Down
77 changes: 77 additions & 0 deletions osg-htc/nrp-ospool-ep/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
ARG BASE_OSG_SERIES=25
ARG BASE_YUM_REPO=release

FROM hub.osg-htc.org/osg-htc/ospool-ep:${BASE_OSG_SERIES}-${BASE_YUM_REPO}

# Previous args have gone out of scope
ARG BASE_OSG_SERIES=25
ARG BASE_YUM_REPO=release

# Enable OpenCL
# As suggested by https://github.com/WIPACrepo/pyglidein/blob/master/Dockerfile
RUN mkdir -p /etc/OpenCL/vendors && \
echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd

# Some helper OpenCL tools
RUN yum install -y clinfo && \
yum clean all

# Fix python vs python3
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 10

# Add kubectl, to be able to interact with the k8s cluster
RUN curl -L "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" -o /usr/sbin/kubectl && \
Copy link

Copilot AI Apr 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This downloads kubectl from the internet at build time using the moving stable.txt pointer and without checksum/signature verification. Pin the kubectl version (and verify the SHA256, or install via the distro package manager where possible) to reduce supply-chain risk and make builds reproducible.

Suggested change
RUN curl -L "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" -o /usr/sbin/kubectl && \
ARG KUBECTL_VERSION=v1.30.2
ARG KUBECTL_SHA256=4310270c87a4f80637ef6fa9af9d1f703d8d43b7efd2d7661f7902dc0e05251d
RUN curl -fL "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" -o /usr/sbin/kubectl && \
echo "${KUBECTL_SHA256} /usr/sbin/kubectl" | sha256sum -c - && \

Copilot uses AI. Check for mistakes.
chmod u+x /usr/sbin/kubectl

# Tweaked singularity for container environments
# Remove default singularity from path, too
COPY scripts/singularity_npid.sh /usr/bin/singularity_npid.sh
RUN mv /usr/bin/singularity /usr/bin/singularity.org && \
chmod a+x /usr/bin/singularity_npid.sh && \
ln -s /usr/bin/singularity_npid.sh /usr/bin/singularity

COPY scripts/apptainer_npid.sh /usr/bin/apptainer_npid.sh
RUN mv /usr/bin/apptainer /usr/bin/apptainer.org && \
chmod a+x /usr/bin/apptainer_npid.sh && \
ln -s /usr/bin/apptainer_npid.sh /usr/bin/apptainer

# We want to be able to add system-level changes
# and run without explicit privilege drop
RUN mv /usr/local/sbin/entrypoint.sh /usr/local/sbin/entrypoint.osg.sh
COPY scripts/entrypoint.sh /usr/local/sbin/entrypoint.sh
RUN chmod a+rx /usr/local/sbin/entrypoint.sh

COPY scripts/check_master.sh /bin/check_master.sh
RUN chmod a+rx /bin/check_master.sh

# system level scripts
COPY scripts/01_token.sh /etc/entrypoint/image-config.d/01_token.sh
COPY scripts/01_no_condor_host.sh /etc/entrypoint/image-config.d/01_no_condor_host.sh
COPY scripts/11_set_OSGInstitutionID.sh /etc/entrypoint/image-config.d/11_set_OSGInstitutionID.sh

# pilot level scripts
COPY scripts/02_validate_singularity.sh /etc/osg/image-init.d/02_validate_singularity.sh
COPY scripts/02_validate_apptainer.sh /etc/osg/image-init.d/02_validate_apptainer.sh
COPY scripts/19_set_resources.sh /etc/osg/image-init.d/19_set_resources.sh
COPY scripts/20_advertise_glidein.sh /etc/osg/image-init.d/20_advertise_glidein.sh
COPY scripts/20_advertise_k8s_domain.sh /etc/osg/image-init.d/20_advertise_k8s_domain.sh
COPY scripts/21_advertise_k8s_provisioner.sh /etc/osg/image-init.d/21_advertise_k8s_provisioner.sh
COPY scripts/22_set_requirements.sh /etc/osg/image-init.d/22_set_requirements.sh

# keep default low, as we expect to be running in opportunistic mode
env ACCEPT_JOBS_FOR_HOURS=24

# keep default idle time low, as we may over-provision certain kinds of resources
# but others may be waiting
env ACCEPT_IDLE_MINUTES=20
Comment on lines +62 to +66
Copy link

Copilot AI Apr 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dockerfile uses the instruction env (lowercase) to set environment variables. Dockerfile instructions are case-insensitive in some tooling, but env is not a valid Dockerfile directive in the standard parser; this will fail builds on common builders. Use ENV for these variables so the image builds reliably.

Suggested change
env ACCEPT_JOBS_FOR_HOURS=24
# keep default idle time low, as we may over-provision certain kinds of resources
# but others may be waiting
env ACCEPT_IDLE_MINUTES=20
ENV ACCEPT_JOBS_FOR_HOURS=24
# keep default idle time low, as we may over-provision certain kinds of resources
# but others may be waiting
ENV ACCEPT_IDLE_MINUTES=20

Copilot uses AI. Check for mistakes.

#
# In addition to osgvo-docker-pilot envs,
# it accepts also the following env variables
# NUM_CPUS MEMORY DISK NUM_GPUS
# PHYSICAL_HOSTNAME
# K8S_NAMESPACE K8S_DOMAIN
# K8S_PROVISIONER_NAME K8S_PROVISIONER_TYPE
# FORCE_K8SNAMESPACE_MATCHING ADDITIONAL_REQUIREMENTS
#

7 changes: 7 additions & 0 deletions osg-htc/nrp-ospool-ep/build-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"standard_build": true,
"repo_build": false,
"base_os": ["el9"],
"osg_series": ["24", "25"],
"base_repo": ["release"]
}
9 changes: 9 additions & 0 deletions osg-htc/nrp-ospool-ep/scripts/01_no_condor_host.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash

#
# osgvo pilot does not like is CONDOR_HOST is set
Copy link

Copilot AI Apr 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment typo: "does not like is CONDOR_HOST" should be "does not like if CONDOR_HOST".

Suggested change
# osgvo pilot does not like is CONDOR_HOST is set
# osgvo pilot does not like if CONDOR_HOST is set

Copilot uses AI. Check for mistakes.
#

export CONDOR_HOST=
unset CONDOR_HOST

8 changes: 8 additions & 0 deletions osg-htc/nrp-ospool-ep/scripts/01_token.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/bin/bash

#
# osgvo-pilot expects the token as an env variable
#

export TOKEN=`cat /etc/condor/tokens.d/prp-wn.token`

Comment on lines +7 to +8
Copy link

Copilot AI Apr 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If /etc/condor/tokens.d/prp-wn.token is missing/unreadable, this will silently export an empty TOKEN and continue, which can lead to confusing pilot failures later. Add an explicit existence/readability check and fail fast with a clear error (and prefer $(...) over backticks).

Suggested change
export TOKEN=`cat /etc/condor/tokens.d/prp-wn.token`
token_file=/etc/condor/tokens.d/prp-wn.token
if [ ! -r "$token_file" ]; then
echo "ERROR: required token file '$token_file' is missing or unreadable" >&2
exit 1
fi
export TOKEN=$(cat "$token_file")

Copilot uses AI. Check for mistakes.
25 changes: 25 additions & 0 deletions osg-htc/nrp-ospool-ep/scripts/02_validate_apptainer.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash

# check if we need to test nvidia
nvf=
ls -l /dev/nvidia*
if [ $? -eq 0 ]; then
nvf=--nv
fi

# else do nothing, let Condor figure it out

if [ -f "/usr/bin/apptainer" ]; then
# only test for apptainer functionality if singularity is present
Copy link

Copilot AI Apr 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In 02_validate_apptainer.sh, the comment says "only test for apptainer functionality if singularity is present" but the script checks for /usr/bin/apptainer. Update the comment to avoid confusion during debugging.

Suggested change
# only test for apptainer functionality if singularity is present
# only test for apptainer functionality if apptainer is present

Copilot uses AI. Check for mistakes.
# may not be in all pods

/usr/bin/apptainer exec $nvf --contain --ipc --pid --bind /cvmfs /cvmfs/singularity.opensciencegrid.org/opensciencegrid/osgvo-el7:latest /usr/bin/dc -e "3 5 + p"
rc=$?

if [ $rc -ne 0 ]; then
echo "Apptainer test execution failed!"
sleep 30
exit 1
fi

fi
25 changes: 25 additions & 0 deletions osg-htc/nrp-ospool-ep/scripts/02_validate_singularity.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash

# check if we need to test nvidia
nvf=
ls -l /dev/nvidia*
if [ $? -eq 0 ]; then
nvf=--nv
fi

# else do nothing, let Condor figure it out

if [ -f "/usr/bin/singularity" ]; then
# only test for singularity functionality if singularity is present
# may not be in all pods

/usr/bin/singularity exec $nvf --contain --ipc --pid --bind /cvmfs /cvmfs/singularity.opensciencegrid.org/opensciencegrid/osgvo-el8:latest /usr/bin/dc -e "3 5 + p"
rc=$?

if [ $rc -ne 0 ]; then
echo "Singularity test execution failed!"
sleep 30
exit 1
fi

fi
10 changes: 10 additions & 0 deletions osg-htc/nrp-ospool-ep/scripts/11_set_OSGInstitutionID.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#
# Fetch OSGInstitutionID from k8s and set it as an env variable
# unless it is already set
#
if [ "x${OSG_INSTITUTION_ID}" == "x" ]; then
OSG_INSTITUTION_ID=`/usr/sbin/kubectl get node ${PHYSICAL_HOSTNAME} -L nautilus.io/OSGInstitutionID | tail -1 | awk '{print $6}'`
Copy link

Copilot AI Apr 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kubectl get node ... | awk '{print $6}' relies on a fixed column number in human-readable output, which is brittle (kubectl output columns can change with versions/flags). Prefer a structured output format (e.g., -o jsonpath=... for the label value) so OSGInstitutionID extraction is stable.

Suggested change
OSG_INSTITUTION_ID=`/usr/sbin/kubectl get node ${PHYSICAL_HOSTNAME} -L nautilus.io/OSGInstitutionID | tail -1 | awk '{print $6}'`
OSG_INSTITUTION_ID=`/usr/sbin/kubectl get node ${PHYSICAL_HOSTNAME} -o jsonpath="{.metadata.labels['nautilus\.io/OSGInstitutionID']}"`

Copilot uses AI. Check for mistakes.
if [ "x${OSG_INSTITUTION_ID}" != "x" ]; then
export OSG_INSTITUTION_ID
fi
fi
35 changes: 35 additions & 0 deletions osg-htc/nrp-ospool-ep/scripts/19_set_resources.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#!/bin/bash


#
# Advertise the k8s namespace and physical hostname
#

#
# NUM_CPUS and MEMORY are also handled by the osgvo-pilot
# but we re-set it here
#

full_num_cpus="${NUM_CPUS:-1}"
full_memory="${MEMORY:-1024}"
full_disk="${DISK:-100000}"
full_num_gpus="${NUM_GPUS:-0}"

echo "NUM_CPUS = ${full_num_cpus}" >> "${PILOT_CONFIG_FILE}"
echo "MEMORY = ${full_memory}" >> "${PILOT_CONFIG_FILE}"
echo "DISK = ${full_disk}" >> "${PILOT_CONFIG_FILE}"

# single slot using all the requested resources
echo "NUM_SLOTS_TYPE_1 = 1" >> "${PILOT_CONFIG_FILE}"
echo "SLOT_TYPE_1_PARTITIONABLE = FALSE" >> "${PILOT_CONFIG_FILE}"

if [ "x${full_num_gpus}" != "x0" ]; then
# we cannot really set the number of GPUs, just enable auto-detect
echo "use feature : GPUs" >> "${PILOT_CONFIG_FILE}"
echo "SLOT_TYPE_1 = cpu=${full_num_cpus},mem=${full_memory},disk=auto,swap=auto,gpus=${full_num_gpus}" \
>> "${PILOT_CONFIG_FILE}"
else
echo "SLOT_TYPE_1 = cpu=${full_num_cpus},mem=${full_memory},disk=auto,swap=auto" \
>> "${PILOT_CONFIG_FILE}"
fi

13 changes: 13 additions & 0 deletions osg-htc/nrp-ospool-ep/scripts/20_advertise_glidein.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash


#
# Advertise that this is a glidein
#

if [ "x${ADVERTISE_IS_GLIDEIN}" != "xN" ]; then
echo "IS_GLIDEIN = true" >> "${PILOT_CONFIG_FILE}"
echo 'STARTD_EXPRS = $(STARTD_EXPRS) IS_GLIDEIN' >> "${PILOT_CONFIG_FILE}"
fi


29 changes: 29 additions & 0 deletions osg-htc/nrp-ospool-ep/scripts/20_advertise_k8s_domain.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#!/bin/bash


#
# Advertise the k8s namespace and physical hostname
#

echo "# K8S params" >> "${PILOT_CONFIG_FILE}"

if [ "x${HOSTNAME}" != "x" ]; then
echo "K8SPodName=\"${HOSTNAME}\"" >> "${PILOT_CONFIG_FILE}"
echo 'STARTD_EXPRS = $(STARTD_EXPRS) K8SPodName' >> "${PILOT_CONFIG_FILE}"
fi

if [ "x${K8S_DOMAIN}" != "x" ]; then
echo "K8SDomain=\"${K8S_DOMAIN}\"" >> "${PILOT_CONFIG_FILE}"
echo 'STARTD_EXPRS = $(STARTD_EXPRS) K8SDomain' >> "${PILOT_CONFIG_FILE}"
fi

if [ "x${K8S_NAMESPACE}" != "x" ]; then
echo "K8SNamespace=\"${K8S_NAMESPACE}\"" >> "${PILOT_CONFIG_FILE}"
echo 'STARTD_EXPRS = $(STARTD_EXPRS) K8SNamespace' >> "${PILOT_CONFIG_FILE}"
fi

if [ "x${PHYSICAL_HOSTNAME}" != "x" ]; then
echo "K8SPhysicalHostName=\"${PHYSICAL_HOSTNAME}\"" >> "${PILOT_CONFIG_FILE}"
echo 'STARTD_EXPRS = $(STARTD_EXPRS) K8SPhysicalHostName' >> "${PILOT_CONFIG_FILE}"
fi

17 changes: 17 additions & 0 deletions osg-htc/nrp-ospool-ep/scripts/21_advertise_k8s_provisioner.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash


#
# Advertise the k8s provisioner
#

if [ "x${K8S_PROVISIONER_TYPE}" != "x" ]; then
echo "K8SProvisionerType=\"${K8S_PROVISIONER_TYPE}\"" >> "${PILOT_CONFIG_FILE}"
echo 'STARTD_EXPRS = $(STARTD_EXPRS) K8SProvisionerType' >> "${PILOT_CONFIG_FILE}"
fi

if [ "x${K8S_PROVISIONER_NAME}" != "x" ]; then
echo "K8SProvisionerName=\"${K8S_PROVISIONER_NAME}\"" >> "${PILOT_CONFIG_FILE}"
echo 'STARTD_EXPRS = $(STARTD_EXPRS) K8SProvisionerName' >> "${PILOT_CONFIG_FILE}"
fi

51 changes: 51 additions & 0 deletions osg-htc/nrp-ospool-ep/scripts/22_set_requirements.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/bin/bash

cat >> "${PILOT_CONFIG_FILE}" << EOF
#
# Force matching on K8SNamespace
# unless FORCE_K8SNAMESPACE_MATCHING=="no"
#

FORCE_K8SNAMESPACE_MATCHING = "${FORCE_K8SNAMESPACE_MATCHING:-no}"
STARTD_EXPRS = \$(STARTD_EXPRS) FORCE_K8SNAMESPACE_MATCHING

MATCHING_START = ( (FORCE_K8SNAMESPACE_MATCHING=?="no") || regexp(TARGET.RequestK8SNamespace,K8SNamespace) )

#
# Force matching on provisioned resources
#

PROVISIONING_START = ifthenelse(TARGET.RequestCPUs=!=undefined, CPUs=?=TARGET.RequestCPUs, CPUs=?=1)

# Pretend small memory and disk requests are the equivalent of not set
# Note: 4096 is special in the provisioner
PROVISIONING_START = \$(PROVISIONING_START) && \\
ifthenelse(TARGET.RequestMemory=!=undefined, \\
ifthenelse(TARGET.RequestMemory<4096, \\
Memory=?=4096, \\
((Memory>=TARGET.RequestMemory) && ((TARGET.RequestMemory+1536)>Memory))), \\
Memory=?=4096)

# Note: 8000000 is special in the provisioner
PROVISIONING_START = \$(PROVISIONING_START) && \\
ifthenelse(TARGET.RequestDisk=!=undefined, \\
ifthenelse(TARGET.RequestDisk<8000000, \\
Disk=?=8000000, \\
((Disk>=TARGET.RequestDisk) && ((TARGET.RequestDisk+4500000)>Disk))), \\
Disk=?=8000000)

# GPUs will not be defined if there are no GPUs
PROVISIONING_START = \$(PROVISIONING_START) && \\
ifthenelse(TARGET.RequestGPUs=!=undefined, \\
ifthenelse(GPUs=!=undefined, GPUs=?=TARGET.RequestGPUs, TARGET.RequestGPUs=?=0), \\
(GPUs=?=undefined) || (GPUs=?=0))

START = ( \$(START) ) && ( \$(PROVISIONING_START) ) && ( \$(MATCHING_START) )

EOF


if [ "x${ADDITIONAL_REQUIREMENTS}" != "x" ]; then
echo "# Additional requirements added at runtime " >> "${PILOT_CONFIG_FILE}"
echo "MATCHING_START = ( \$(MATCHING_START) ) && ( ${ADDITIONAL_REQUIREMENTS} )" >> "${PILOT_CONFIG_FILE}"
fi
Loading
Loading