X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/f3baf5ef16be742f432e5eb0336d5865c76f647c..68b2e98589f7d7d878e1daeeeb2c69d515de6ae5:/Makefile.am diff --git a/Makefile.am b/Makefile.am index efdbd07..88fd007 100644 --- a/Makefile.am +++ b/Makefile.am @@ -31,6 +31,7 @@ DOCPP = $(top_srcdir)/autotools/docpp REPLACE_VARS_SED = autotools/replace_vars.sed CONVERT_CONSTANTS = $(top_srcdir)/autotools/convert-constants BUILD_RPC = $(top_srcdir)/autotools/build-rpc +SHELL_ENV_INIT = autotools/shell-env-init # Note: these are automake-specific variables, and must be named after # the directory + 'dir' suffix @@ -97,6 +98,7 @@ DIRS = \ test/data/ovfdata/other \ htest/data \ htest/data/rapi \ + htest/shelltests \ tools BUILDTIME_DIR_AUTOCREATE = \ @@ -108,6 +110,7 @@ BUILDTIME_DIR_AUTOCREATE = \ $(APIDOC_HS_DIR)/Ganeti/Confd \ $(APIDOC_HS_DIR)/Ganeti/HTools \ $(APIDOC_HS_DIR)/Ganeti/HTools/Program \ + $(APIDOC_HS_DIR)/Ganeti/Query \ $(COVERAGE_DIR) \ $(COVERAGE_PY_DIR) \ $(COVERAGE_HS_DIR) \ @@ -148,15 +151,19 @@ CLEANFILES = \ $(PYTHON_BOOTSTRAP) \ epydoc.conf \ $(REPLACE_VARS_SED) \ + $(SHELL_ENV_INIT) \ daemons/daemon-util \ daemons/ganeti-cleaner \ + daemons/ganeti-master-cleaner \ devel/upload \ $(BUILT_EXAMPLES) \ doc/examples/bash_completion \ + doc/examples/bash_completion-debug \ lib/_generated_rpc.py \ $(man_MANS) \ $(manhtml) \ tools/kvm-ifup \ + tools/vcluster-setup \ stamp-directories \ stamp-srclinks \ $(nodist_pkgpython_PYTHON) \ @@ -170,6 +177,14 @@ GENERATED_FILES = \ $(BUILT_PYTHON_SOURCES) \ $(PYTHON_BOOTSTRAP) +HTOOLS_GENERATED_FILES = +if WANT_HTOOLS +HTOOLS_GENERATED_FILES += $(HS_PROGS) +if HS_CONFD +HTOOLS_GENERATED_FILES += htools/hconfd +endif +endif + built_base_sources = \ stamp-directories \ stamp-srclinks @@ -223,8 +238,10 @@ pkgpython_PYTHON = \ lib/mcpu.py \ lib/netutils.py \ lib/objects.py \ + lib/objectutils.py \ lib/opcodes.py \ lib/ovf.py \ + lib/pathutils.py \ lib/qlang.py \ lib/query.py \ lib/rpc.py \ @@ -235,6 +252,7 @@ pkgpython_PYTHON = \ lib/ssh.py \ lib/storage.py \ lib/uidpool.py \ + lib/vcluster.py \ lib/workerpool.py client_PYTHON = \ @@ -280,6 +298,7 @@ confd_PYTHON = \ masterd_PYTHON = \ lib/masterd/__init__.py \ + lib/masterd/iallocator.py \ lib/masterd/instance.py impexpd_PYTHON = \ @@ -363,6 +382,7 @@ docrst = \ HS_PROGS = htools/htools HS_BIN_ROLES = hbal hscan hspace hinfo hcheck +HS_HTOOLS_PROGS = $(HS_BIN_ROLES) hail HS_ALL_PROGS = $(HS_PROGS) htest/test htest/hpc-htools htools/hconfd HS_PROG_SRCS = $(patsubst %,%.hs,$(HS_ALL_PROGS)) @@ -378,11 +398,12 @@ HPCEXCL = --exclude Main \ --exclude Ganeti.Constants \ --exclude Ganeti.THH \ --exclude Ganeti.HTools.QC \ - --exclude Ganeti.HTools.Version \ + --exclude Ganeti.Version \ --exclude Test.Ganeti.TestCommon \ --exclude Test.Ganeti.TestHTools \ --exclude Test.Ganeti.TestHelper \ - $(patsubst htools.%,--exclude Test.%,$(subst /,.,$(patsubst %.hs,%, $(filter-out htest/%,$(HS_LIB_SRCS))))) + --exclude Test.Ganeti.TestImports \ + $(patsubst htools.%,--exclude Test.%,$(subst /,.,$(patsubst %.hs,%, $(HS_LIB_SRCS)))) HS_LIB_SRCS = \ htools/Ganeti/HTools/CLI.hs \ @@ -396,7 +417,6 @@ HS_LIB_SRCS = \ htools/Ganeti/HTools/Luxi.hs \ htools/Ganeti/HTools/Node.hs \ htools/Ganeti/HTools/PeerMap.hs \ - htools/Ganeti/HTools/QC.hs \ htools/Ganeti/HTools/Rapi.hs \ htools/Ganeti/HTools/Simu.hs \ htools/Ganeti/HTools/Text.hs \ @@ -410,6 +430,7 @@ HS_LIB_SRCS = \ htools/Ganeti/HTools/Program/Hscan.hs \ htools/Ganeti/HTools/Program/Hspace.hs \ htools/Ganeti/BasicTypes.hs \ + htools/Ganeti/Common.hs \ htools/Ganeti/Compat.hs \ htools/Ganeti/Confd.hs \ htools/Ganeti/Confd/Server.hs \ @@ -423,8 +444,10 @@ HS_LIB_SRCS = \ htools/Ganeti/Luxi.hs \ htools/Ganeti/Objects.hs \ htools/Ganeti/OpCodes.hs \ + htools/Ganeti/Path.hs \ htools/Ganeti/Query/Common.hs \ htools/Ganeti/Query/Filter.hs \ + htools/Ganeti/Query/Group.hs \ htools/Ganeti/Query/Language.hs \ htools/Ganeti/Query/Node.hs \ htools/Ganeti/Query/Query.hs \ @@ -433,7 +456,12 @@ HS_LIB_SRCS = \ htools/Ganeti/Rpc.hs \ htools/Ganeti/Runtime.hs \ htools/Ganeti/Ssconf.hs \ - htools/Ganeti/THH.hs \ + htools/Ganeti/THH.hs + +HS_TEST_SRCS = \ + htest/Test/Ganeti/BasicTypes.hs \ + htest/Test/Ganeti/Common.hs \ + htest/Test/Ganeti/Daemon.hs \ htest/Test/Ganeti/Confd/Utils.hs \ htest/Test/Ganeti/HTools/CLI.hs \ htest/Test/Ganeti/HTools/Cluster.hs \ @@ -446,18 +474,26 @@ HS_LIB_SRCS = \ htest/Test/Ganeti/HTools/Text.hs \ htest/Test/Ganeti/HTools/Types.hs \ htest/Test/Ganeti/HTools/Utils.hs \ + htest/Test/Ganeti/JSON.hs \ + htest/Test/Ganeti/Jobs.hs \ htest/Test/Ganeti/Luxi.hs \ htest/Test/Ganeti/Objects.hs \ htest/Test/Ganeti/OpCodes.hs \ + htest/Test/Ganeti/Query/Filter.hs \ htest/Test/Ganeti/Query/Language.hs \ + htest/Test/Ganeti/Query/Query.hs \ htest/Test/Ganeti/Rpc.hs \ htest/Test/Ganeti/Ssconf.hs \ htest/Test/Ganeti/TestCommon.hs \ htest/Test/Ganeti/TestHTools.hs \ htest/Test/Ganeti/TestHelper.hs +HS_LIBTEST_SRCS = $(HS_LIB_SRCS) $(HS_TEST_SRCS) -HS_BUILT_SRCS = htools/Ganeti/HTools/Version.hs htools/Ganeti/Constants.hs +HS_BUILT_SRCS = \ + htest/Test/Ganeti/TestImports.hs \ + htools/Ganeti/Constants.hs \ + htools/Ganeti/Version.hs HS_BUILT_SRCS_IN = $(patsubst %,%.in,$(HS_BUILT_SRCS)) $(RUN_IN_TEMPDIR): | stamp-directories @@ -510,6 +546,7 @@ noinst_DATA = \ doc/html \ $(BUILT_EXAMPLES) \ doc/examples/bash_completion \ + doc/examples/bash_completion-debug \ $(manhtml) gnt_scripts = \ @@ -571,7 +608,7 @@ if HS_CONFD endif endif -$(HS_ALL_PROGS): %: %.hs $(HS_LIB_SRCS) $(HS_BUILT_SRCS) Makefile +$(HS_ALL_PROGS): %: %.hs $(HS_LIBTEST_SRCS) $(HS_BUILT_SRCS) Makefile @if [ -z "$(HTOOLS)" ]; then \ echo "Error: htools compilation disabled at configure time" 1>&2 ;\ exit 1; \ @@ -616,7 +653,8 @@ dist_sbin_SCRIPTS = \ nodist_sbin_SCRIPTS = \ $(PYTHON_BOOTSTRAP_SBIN) \ - daemons/ganeti-cleaner + daemons/ganeti-cleaner \ + daemons/ganeti-master-cleaner if HS_CONFD nodist_sbin_SCRIPTS += htools/hconfd @@ -642,6 +680,9 @@ dist_tools_SCRIPTS = \ tools/xm-console-wrapper \ tools/master-ip-setup +nodist_tools_SCRIPTS = \ + tools/vcluster-setup + pkglib_python_scripts = \ daemons/import-export \ tools/check-cert-expired @@ -680,9 +721,11 @@ EXTRA_DIST = \ $(RUN_IN_TEMPDIR) \ daemons/daemon-util.in \ daemons/ganeti-cleaner.in \ + daemons/ganeti-master-cleaner.in \ $(pkglib_python_scripts) \ devel/upload.in \ tools/kvm-ifup.in \ + tools/vcluster-setup.in \ $(docdot) \ $(docpng) \ $(docrst) \ @@ -705,7 +748,7 @@ EXTRA_DIST = \ $(maninput) \ qa/qa-sample.json \ $(qa_scripts) \ - $(HS_LIB_SRCS) $(HS_BUILT_SRCS_IN) \ + $(HS_LIBTEST_SRCS) $(HS_BUILT_SRCS_IN) \ $(HS_PROG_SRCS) \ htools/lint-hints.hs \ htest/cli-tests-defs.sh \ @@ -714,6 +757,7 @@ EXTRA_DIST = \ man_MANS = \ man/ganeti.7 \ man/ganeti-cleaner.8 \ + man/ganeti-master-cleaner.8 \ man/ganeti-confd.8 \ man/ganeti-listrunner.8 \ man/ganeti-masterd.8 \ @@ -857,10 +901,12 @@ python_tests = \ test/ganeti.jstore_unittest.py \ test/ganeti.locking_unittest.py \ test/ganeti.luxi_unittest.py \ + test/ganeti.masterd.iallocator_unittest.py \ test/ganeti.masterd.instance_unittest.py \ test/ganeti.mcpu_unittest.py \ test/ganeti.netutils_unittest.py \ test/ganeti.objects_unittest.py \ + test/ganeti.objectutils_unittest.py \ test/ganeti.opcodes_unittest.py \ test/ganeti.ovf_unittest.py \ test/ganeti.qlang_unittest.py \ @@ -890,6 +936,7 @@ python_tests = \ test/ganeti.utils.wrapper_unittest.py \ test/ganeti.utils.x509_unittest.py \ test/ganeti.utils_unittest.py \ + test/ganeti.vcluster_unittest.py \ test/ganeti.workerpool_unittest.py \ test/qa.qa_config_unittest.py \ test/cfgupgrade_unittest.py \ @@ -908,6 +955,7 @@ dist_TESTS = \ test/ganeti-cleaner_unittest.bash \ test/import-export_unittest.bash \ test/cli-test.bash \ + test/bash_completion.bash \ $(python_tests) nodist_TESTS = @@ -960,10 +1008,11 @@ srclink_files = \ test/ganeti-cleaner_unittest.bash \ test/import-export_unittest.bash \ test/cli-test.bash \ + test/bash_completion.bash \ htest/offline-test.sh \ htest/cli-tests-defs.sh \ $(all_python_code) \ - $(HS_LIB_SRCS) $(HS_PROG_SRCS) + $(HS_LIBTEST_SRCS) $(HS_PROG_SRCS) check_python_code = \ $(BUILD_BASH_COMPLETION) \ @@ -1002,7 +1051,10 @@ pep8_python_code = \ test/daemon-util_unittest.bash: daemons/daemon-util -test/ganeti-cleaner_unittest.bash: daemons/ganeti-cleaner +test/ganeti-cleaner_unittest.bash: daemons/ganeti-cleaner \ + daemons/ganeti-master-cleaner + +test/bash_completion.bash: doc/examples/bash_completion-debug tools/kvm-ifup: tools/kvm-ifup.in $(REPLACE_VARS_SED) sed -f $(REPLACE_VARS_SED) < $< > $@ @@ -1012,6 +1064,10 @@ devel/upload: devel/upload.in $(REPLACE_VARS_SED) sed -f $(REPLACE_VARS_SED) < $< > $@ chmod u+x $@ +tools/vcluster-setup: tools/vcluster-setup.in $(REPLACE_VARS_SED) + sed -f $(REPLACE_VARS_SED) < $< > $@ + chmod +x $@ + daemons/%:: daemons/%.in $(REPLACE_VARS_SED) sed -f $(REPLACE_VARS_SED) < $< > $@ chmod +x $@ @@ -1019,10 +1075,15 @@ daemons/%:: daemons/%.in $(REPLACE_VARS_SED) doc/examples/%:: doc/examples/%.in $(REPLACE_VARS_SED) sed -f $(REPLACE_VARS_SED) < $< > $@ -doc/examples/bash_completion: $(BUILD_BASH_COMPLETION) $(RUN_IN_TEMPDIR) \ +doc/examples/bash_completion: BC_ARGS = --compact +doc/examples/bash_completion-debug: BC_ARGS = + +doc/examples/bash_completion doc/examples/bash_completion-debug: \ + $(BUILD_BASH_COMPLETION) $(RUN_IN_TEMPDIR) \ lib/cli.py $(gnt_scripts) $(client_PYTHON) tools/burnin \ - $(GENERATED_FILES) - PYTHONPATH=. $(RUN_IN_TEMPDIR) $(CURDIR)/$(BUILD_BASH_COMPLETION) > $@ + $(GENERATED_FILES) $(HTOOLS_GENERATED_FILES) + PYTHONPATH=. $(RUN_IN_TEMPDIR) \ + $(CURDIR)/$(BUILD_BASH_COMPLETION) $(BC_ARGS) > $@ doc/%.png: doc/%.dot @test -n "$(DOT)" || { echo 'dot' not found during configure; exit 1; } @@ -1096,7 +1157,7 @@ regen-vcs-version: $(MAKE) $(AM_MAKEFLAGS) vcs-version; \ fi -htools/Ganeti/HTools/Version.hs: htools/Ganeti/HTools/Version.hs.in \ +htools/Ganeti/Version.hs: htools/Ganeti/Version.hs.in \ vcs-version $(built_base_sources) set -e; \ VCSVER=`cat $(abs_top_srcdir)/vcs-version`; \ @@ -1109,6 +1170,16 @@ htools/Ganeti/Constants.hs: htools/Ganeti/Constants.hs.in \ set -e; \ { cat $< ; PYTHONPATH=. $(CONVERT_CONSTANTS); } > $@ +htest/Test/Ganeti/TestImports.hs: htest/Test/Ganeti/TestImports.hs.in \ + $(built_base_sources) + set -e; \ + { cat $< ; \ + echo ; \ + for name in $(filter-out Ganeti.THH,$(subst /,.,$(patsubst %.hs,%,$(patsubst htools/%,%,$(HS_LIB_SRCS))))) ; do \ + echo "import $$name ()" ; \ + done ; \ + } > $@ + lib/_autoconf.py: Makefile | stamp-directories set -e; \ { echo '# This file is automatically generated, do not edit!'; \ @@ -1135,6 +1206,8 @@ lib/_autoconf.py: Makefile | stamp-directories echo "LOCALSTATEDIR = '$(localstatedir)'"; \ echo "SYSCONFDIR = '$(sysconfdir)'"; \ echo "SSH_CONFIG_DIR = '$(SSH_CONFIG_DIR)'"; \ + echo "SSH_LOGIN_USER = '$(SSH_LOGIN_USER)'"; \ + echo "SSH_CONSOLE_USER = '$(SSH_CONSOLE_USER)'"; \ echo "EXPORT_DIR = '$(EXPORT_DIR)'"; \ echo "OS_SEARCH_PATH = [$(OS_SEARCH_PATH)]"; \ echo "XEN_BOOTLOADER = '$(XEN_BOOTLOADER)'"; \ @@ -1154,6 +1227,7 @@ lib/_autoconf.py: Makefile | stamp-directories echo "LVM_STRIPECOUNT = $(LVM_STRIPECOUNT)"; \ echo "TOOLSDIR = '$(toolsdir)'"; \ echo "GNT_SCRIPTS = [$(foreach i,$(notdir $(gnt_scripts)),'$(i)',)]"; \ + echo "HTOOLS_PROGS = [$(foreach i,$(HS_HTOOLS_PROGS),'$(i)',)]"; \ echo "PKGLIBDIR = '$(pkglibdir)'"; \ echo "DRBD_BARRIERS = '$(DRBD_BARRIERS)'"; \ echo "DRBD_NO_META_FLUSH = $(DRBD_NO_META_FLUSH)"; \ @@ -1206,7 +1280,20 @@ lib/_vcsversion.py: Makefile vcs-version | stamp-directories lib/_generated_rpc.py: lib/rpc_defs.py $(BUILD_RPC) PYTHONPATH=. $(RUN_IN_TEMPDIR) $(CURDIR)/$(BUILD_RPC) lib/rpc_defs.py > $@ -$(REPLACE_VARS_SED): Makefile stamp-directories +$(SHELL_ENV_INIT): Makefile stamp-directories + set -e; \ + { echo '# Allow overriding for tests'; \ + echo 'readonly LOCALSTATEDIR=$${LOCALSTATEDIR:-$${GANETI_ROOTDIR:-}$(localstatedir)}'; \ + echo 'readonly SYSCONFDIR=$${SYSCONFDIR:-$${GANETI_ROOTDIR:-}$(sysconfdir)}'; \ + echo; \ + echo 'readonly PKGLIBDIR=$(pkglibdir)'; \ + echo 'readonly LOG_DIR="$$LOCALSTATEDIR/log/ganeti"'; \ + echo 'readonly RUN_DIR="$$LOCALSTATEDIR/run/ganeti"'; \ + echo 'readonly DATA_DIR="$$LOCALSTATEDIR/lib/ganeti"'; \ + echo 'readonly CONF_DIR="$$SYSCONFDIR/ganeti"'; \ + } > $@ + +$(REPLACE_VARS_SED): $(SHELL_ENV_INIT) Makefile stamp-directories set -e; \ { echo 's#@PREFIX@#$(prefix)#g'; \ echo 's#@SYSCONFDIR@#$(sysconfdir)#g'; \ @@ -1234,6 +1321,11 @@ $(REPLACE_VARS_SED): Makefile stamp-directories echo 's#@CUSTOM_ENABLE_CONFD@#$(ENABLE_CONFD)#g'; \ echo 's#@MODULES@#$(strip $(lint_python_code))#g'; \ echo 's#@ENABLE_SPLIT_QUERY@#$(ENABLE_SPLIT_QUERY)#g'; \ + echo; \ + echo '/^@SHELL_ENV_INIT@$$/ {'; \ + echo ' r $(SHELL_ENV_INIT)'; \ + echo ' d'; \ + echo '}'; \ } > $@ # Using deferred evaluation @@ -1410,7 +1502,7 @@ hlint: $(HS_BUILT_SRCS) htools/lint-hints.hs --ignore "Use &&&" \ --ignore "Use void" \ --hint htools/lint-hints \ - $(filter-out htools/Ganeti/THH.hs,$(HS_LIB_SRCS)) + $(filter-out htools/Ganeti/THH.hs,$(HS_LIBTEST_SRCS)) # a dist hook rule for updating the vcs-version file; this is # hardcoded due to where it needs to build the file... @@ -1513,7 +1605,7 @@ hs-apidoc: $(HS_BUILT_SRCS) if [ "$(HTOOLS_PARALLEL3)" ]; \ then OPTGHC="$$OPTGHC --optghc=$(HTOOLS_PARALLEL3)"; \ fi; \ - RELSRCS="$(HS_LIB_SRCS:htools/%=%) $(HS_BUILT_SRCS:htools/%=%)"; \ + RELSRCS="$(HS_LIB_SRCS:htools/%=%) $(patsubst htools/%,%,$(filter htools/%,$(HS_BUILT_SRCS)))"; \ for file in $$RELSRCS; do \ hfile=`echo $$file|sed 's/\\.hs$$//'`.html; \ $(HSCOLOUR) -css -anchor $$file > ../$(APIDOC_HS_DIR)/$$hfile ; \ @@ -1528,7 +1620,7 @@ hs-apidoc: $(HS_BUILT_SRCS) .PHONY: TAGS TAGS: $(GENERATED_FILES) rm -f TAGS - $(GHC) -e ":etags" -v0 $(HFLAGS) $(HS_LIB_SRCS) + $(GHC) -e ":etags" -v0 $(HFLAGS) $(HS_LIBTEST_SRCS) find . -path './lib/*.py' -o -path './scripts/gnt-*' -o \ -path './daemons/ganeti-*' -o -path './tools/*' -o \ -path './qa/*.py' | \