Skip to content

Commit

Permalink
PP-1016, PP-1043: choose components of pbs to launch in docker contai…
Browse files Browse the repository at this point in the history
…ner using env variables
  • Loading branch information
minghui-liu committed Jan 22, 2018
1 parent 2316429 commit 9f5472f
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 2 deletions.
5 changes: 4 additions & 1 deletion docker/centos7/Dockerfile.build
Expand Up @@ -10,7 +10,10 @@ RUN git clone https://github.com/pbspro/pbspro.git /src/pbspro && \
FROM centos:7
LABEL maintainer="mliu@altair.com"
LABEL description="PBS Professional Open Source"
# copy rpm from builder
# copy rpm and entrypoint script from builder
COPY --from=builder /root/rpmbuild/RPMS/x86_64/pbspro-server-*.rpm .
COPY --from=builder /src/pbspro/docker/centos7/entrypoint.sh /
# install pbspro
RUN yum install -y pbspro-server-*.rpm
# run entrypoint script
ENTRYPOINT ["bash", "/entrypoint.sh"]
16 changes: 16 additions & 0 deletions docker/centos7/entrypoint.sh
@@ -0,0 +1,16 @@
#!/bin/sh
pbs_conf_file=/etc/pbs.conf
mom_conf_file=/var/spool/pbs/mom_priv/config
hostname=$(hostname)

# replace hostname in pbs.conf and mom_priv/config
sed -i "s/PBS_SERVER=.*/PBS_SERVER=$hostname/" $pbs_conf_file
sed -i "s/\$clienthost .*/\$clienthost $hostname/" $mom_conf_file

# start PBS Pro
/etc/init.d/pbs start

# create default non-root user
adduser pbsuser && su - pbsuser

exec "$@"
8 changes: 7 additions & 1 deletion src/cmds/scripts/pbs_init.d.in
Expand Up @@ -831,10 +831,16 @@ pre_start_pbs()
}

: main code
conf=${PBS_CONF_FILE:-/etc/pbs.conf}
# save env variables in a temp file
env_save="/tmp/$$_`date +'%s'`_env_save"
declare -x > "${env_save}"

conf=${PBS_CONF_FILE:-/etc/pbs.conf}
[ -r "${conf}" ] && . "${conf}"

# re-apply saved env variables
. "${env_save}"

if [ -z "${PBS_EXEC}" ] ; then
echo "PBS_EXEC is undefined." >&2
exit 1
Expand Down
65 changes: 65 additions & 0 deletions test/tests/functional/pbs_init_script.py
@@ -0,0 +1,65 @@
# coding: utf-8

# Copyright (C) 1994-2017 Altair Engineering, Inc.
# For more information, contact Altair at www.altair.com.
#
# This file is part of the PBS Professional ("PBS Pro") software.
#
# Open Source License Information:
#
# PBS Pro is free software. You can redistribute it and/or modify it under the
# terms of the GNU Affero General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option) any
# later version.
#
# PBS Pro is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Commercial License Information:
#
# The PBS Pro software is licensed under the terms of the GNU Affero General
# Public License agreement ("AGPL"), except where a separate commercial license
# agreement for PBS Pro version 14 or later has been executed in writing with
# Altair.
#
# Altair’s dual-license business model allows companies, individuals, and
# organizations to create proprietary derivative works of PBS Pro and
# distribute them - whether embedded or bundled with other software - under
# a commercial license agreement.
#
# Use of Altair’s trademarks, including but not limited to "PBS™",
# "PBS Professional®", and "PBS Pro™" and Altair’s logos is subject to Altair's
# trademark licensing policies.

from tests.functional import *


class TestPbsInitScript(TestFunctional):
"""
Testing PBS Pro init script
"""
def test_env_vars_precede_pbs_conf_file(self):
"""
Test PBS_START environment variables overrides values in pbs.conf file
"""
self.du.run_cmd(cmd=['/etc/init.d/pbs', 'stop'])

conf = {'PBS_START_SERVER': '1', 'PBS_START_SCHED': '1',
'PBS_START_COMM': '1', 'PBS_START_MOM': '0'}
self.du.set_pbs_config(confs=conf)

env = {'PBS_START_SERVER': '0', 'PBS_START_SCHED': '0',
'PBS_START_COMM': '0', 'PBS_START_MOM': '1'}

rc = self.du.run_cmd(cmd=['/etc/init.d/pbs', 'start'], env=env)
output = rc['out']

self.assertFalse("PBS server" in output)
self.assertFalse("PBS sched" in output)
self.assertFalse("PBS comm" in output)
self.assertTrue("PBS mom" in output)

0 comments on commit 9f5472f

Please sign in to comment.