Skip to content

Commit 26fbb06

Browse files
authoredJul 22, 2020
Merge pull request #160 from hpc/sts-dev
#18 programmatically compile Vagrantfile & cluster-internal from virtualization provider
2 parents 33a41d9 + 49ac419 commit 26fbb06

File tree

122 files changed

+1283
-367
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

122 files changed

+1283
-367
lines changed
 

‎README.md

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ This project provides provisioned HPC cluster models using underlying virtualiza
44

55
The purpose of this project is to provide a common baseline for repeatable HPC experiments. This has been used for education, distributed collaboration, tool development colaboration, failure signature discovery, local HPC debugging and cluster configuration comparisons, enabled by construction and use of short-lived and common baseline hpc cluster models. In short, extend the "systems as cattle not pets" <A HREF="http://www.pass.org/eventdownload.aspx?suid=1902">[1]</A> <A HREF="http://cloudscaling.com/blog/cloud-computing/the-history-of-pets-vs-cattle/">[2]</A> analogy into the realm of "clusters as cattle, not pets."
66

7-
The initial release requires local enablers: gmake, vagrant and virtualbox. Lighterweight and multi-node mechanisms, such as containers, jails and pods, are planned.
7+
The initial release requires local enablers: gmake, vagrant and virtualbox and/or libvirt. Lighterweight and multi-node mechanisms, such as containers, jails and pods, are planned. Virtualbox is slower than libvirt provisioning by 50%, although
8+
<A HREF="https://github.com/hpc/hpc-collab/issues/158">more consistent</A> and
9+
<A HREF="https://github.com/hpc/hpc-collab/issues/159">reliable</A>.
810

911
Two representative HPC cluster recipes are provided. Cluster recipes are in the <EM>clusters</EM> directory. Presently, recipes generate clusters local to the installation host.
1012

‎clusters/common/Makefile

+36-14
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,11 @@ MAKEFILE_DIR = $(CURDIR)
2525
BASE_DIR = $(realpath $(MAKEFILE_DIR)/../..)
2626
CLUSTERS_DIR = $(BASE_DIR)/clusters
2727

28+
ifeq ($(WHERE_INVOKED),clusters)
29+
VIRTUALCLUSTER = vc
30+
else
2831
VIRTUALCLUSTER ?= $(IAM)
32+
endif
2933
export VC ?= $(VIRTUALCLUSTER)
3034

3135
CFG = cfg
@@ -157,6 +161,7 @@ MARK_PROVISIONED = markprovisioned.sh
157161
VERIFY_LOCALENV = verifylocalenv.sh
158162
SAVE_LOGSDB = savelogsdb.sh
159163
COMPILE_VAGRANTFILE = compilevagrantfile.sh
164+
GENERATE_PROVIDER_FILES = generateproviderfiles.sh
160165

161166
# match entries in the directories defined by $(STATE_D)/<state>
162167
STATE_LIST = nonexistent poweroff running provisioned
@@ -176,6 +181,9 @@ NODES_POWEROFF = $(foreach n,$(NODES),$(POWEROFF_D)/$(n))
176181
NODES_NONEXISTENT = $(foreach n,$(NODES),$(NONEXISTENT_D)/$(n))
177182
NODES_UNPROVISION = $(foreach n,$(NODES),$(n)_UNPROVISION)
178183

184+
SRC_PROVIDER_FILES = $(shell find $(CLUSTERS_DIR)/$(VC) -name \*%\*% -type f)
185+
TARGET_PROVIDER_FILES = $(foreach f,$(SRC_PROVIDER_FILES),$(basename $(f)))
186+
179187
QUICK_HUMANFRIENDLY_FLAG_NAMES = quick quick-flag flag-quick flags-quick flag-quicker \
180188
flags-quicker flags-faster flag-faster provision-flags-quick
181189
NORMAL_HUMANFRIENDLY_FLAG_NAMES = normal normal-flag flag-normal flags-normal provision-flags-normal
@@ -187,16 +195,17 @@ HUMANFRIENDLY_FLAGS = $(QUICK_HUMANFRIENDLY_FLAG_NAMES) \
187195

188196
SAVELOGS_TARGETS = savelogs save-logs savelog save-log collectlogs collect-logs collectlog collect-log
189197

190-
HUMANFRIENDLY_TARGETS = clean clean-state compare-vc-cksum compilevagrantfile copyright \
191-
doc help \
192-
ingest-state scopyright how show-state show-vars status \
193-
todo verifylocalenv \
198+
HUMANFRIENDLY_TARGETS = clean clean-state compare-vc-cksum compilevagrantfile generateproviderfiles \
199+
doc help \
200+
ingest-state copyright show show-state show-vars status \
201+
todo verifylocalenv \
194202
$(SAVELOGS_TARGETS)
195203

196204
PHONY = $(HUMANFRIENDLY_TARGETS) $(HUMANFRIENDLY_FLAGS)
197205

198206
.PHONY: $(PHONY)
199207

208+
#.DELETE_ON_ERROR: $(NODES_STATE) $(GENERATED_PROVIDERFILES_TARGETS)
200209
.DELETE_ON_ERROR: $(NODES_STATE)
201210

202211
all: show
@@ -213,6 +222,7 @@ clean: $(NONEXISTENT_FLAGS)
213222
$(HUSH)$(DISABLE_RM) rm -f $(VAGRANTFILE) $(VAGRANTFILE)~
214223
$(HUSH)$(DISABLE_RM) rm -f $(DOXYGEN_OUT)
215224
$(HUSH)$(DISABLE_RM) rm -f $(PROVISIONED_D)/*
225+
$(HUSH)$(DISABLED_RM) rm -f $(GENERATED_PROVIDERFILES_TARGETS)
216226
#$(HUSH)find . -name ._\* -type f -exec $(DISABLE_RM) rm -f \{\} \;
217227

218228
show show-state status: compilevagrantfile $(STATE_DIRS_ALL) ingest-state
@@ -235,16 +245,21 @@ todo:
235245

236246
show-vars:
237247
$(HUSH)$(info )
238-
$(HUSH)$(info NODES_WITH_REQUIRED_PROVISIONED_NODE_TARGETS: $(NODES_WITH_REQUIRED_PROVISIONED_NODE_TARGETS))
239-
$(HUSH)$(info PATH: $(PATH))
240-
$(HUSH)$(info PATH: $${PATH})
241248
$(HUSH)$(info )
242-
$(HUSH)$(info FLAGS: $(FLAGS))
243-
$(HUSH)$(info FLAGS_OFF: $(FLAGS_OFF))
244-
$(HUSH)$(info FLAGS_ON: $(FLAGS_ON))
245-
$(HUSH)$(info FLAGS_QUICK: $(FLAGS_QUICK))
246-
$(HUSH)$(info FLAGS_COMPLETE: $(FLAGS_COMPLETE))
249+
$(HUSH)$(info SRC_PROVIDER_FILES: $(SRC_PROVIDER_FILES))
250+
$(HUSH)$(info TARGET_PROVIDER_FILES: $(TARGET_PROVIDER_FILES))
251+
$(HUSH)$(info GENERATED_PROVIDER_FILES: $(GENERATED_PROVIDER_FILES))
247252
$(HUSH)$(info )
253+
# $(HUSH)$(info NODES_WITH_REQUIRED_PROVISIONED_NODE_TARGETS: $(NODES_WITH_REQUIRED_PROVISIONED_NODE_TARGETS))
254+
# $(HUSH)$(info PATH: $(PATH))
255+
# $(HUSH)$(info PATH: $${PATH})
256+
# $(HUSH)$(info )
257+
# $(HUSH)$(info FLAGS: $(FLAGS))
258+
# $(HUSH)$(info FLAGS_OFF: $(FLAGS_OFF))
259+
# $(HUSH)$(info FLAGS_ON: $(FLAGS_ON))
260+
# $(HUSH)$(info FLAGS_QUICK: $(FLAGS_QUICK))
261+
# $(HUSH)$(info FLAGS_COMPLETE: $(FLAGS_COMPLETE))
262+
# $(HUSH)$(info )
248263

249264
## @todo use graphviz on Makefile to self-generate this
250265
help: Makefile
@@ -331,12 +346,19 @@ flags flag: | $(PROVISION_FLAG_D)
331346

332347
###
333348

349+
### XXX use $(VC)
350+
351+
generateproviderfiles: $(TARGET_PROVIDER_FILES)
352+
353+
$(TARGET_PROVIDER_FILES): $(SRC_PROVIDER_FILES)
354+
cd $(CLUSTERS_DIR)/vc ; env VC=vc $(GENERATE_PROVIDER_FILES)
355+
334356
compilevagrantfile: $(VAGRANTFILE_PREREQ)
357+
358+
$(VAGRANTFILE): $(VAGRANTFILE_PREREQ) $(TARGET_PROVIDER_FILES)
335359
env VC=$(VC) $(COMPILE_VAGRANTFILE)
336360
vagrant validate >/dev/null 2>&1
337361

338-
$(VAGRANTFILE): compilevagrantfile
339-
340362
ingest-state: clean-state
341363
$(HUSH)env VC=$(VC) $(INGEST_STATE)
342364

0 commit comments

Comments
 (0)