htools/Ganeti \
htools/Ganeti/Confd \
htools/Ganeti/HTools \
+ htools/Ganeti/HTools/Backend \
htools/Ganeti/HTools/Program \
htools/Ganeti/Query \
htest \
htest/Test/Ganeti \
htest/Test/Ganeti/Confd \
htest/Test/Ganeti/HTools \
+ htest/Test/Ganeti/HTools/Backend \
htest/Test/Ganeti/Query
DIRS = \
$(APIDOC_HS_DIR)/Ganeti \
$(APIDOC_HS_DIR)/Ganeti/Confd \
$(APIDOC_HS_DIR)/Ganeti/HTools \
+ $(APIDOC_HS_DIR)/Ganeti/HTools/Backend \
$(APIDOC_HS_DIR)/Ganeti/HTools/Program \
$(APIDOC_HS_DIR)/Ganeti/Query \
$(APIDOC_PY_DIR) \
$(SHELL_ENV_INIT) \
daemons/daemon-util \
daemons/ganeti-cleaner \
- devel/upload \
$(BUILT_EXAMPLES) \
doc/examples/bash_completion \
doc/examples/bash_completion-debug \
doc/examples/ganeti-kvm-poweroff.initd \
doc/examples/ganeti.cron \
doc/examples/ganeti.initd \
+ doc/examples/ganeti-master-role.ocf \
+ doc/examples/ganeti-node-role.ocf \
doc/examples/gnt-config-backup \
doc/examples/hooks/ipsec
pytools_PYTHON = \
lib/tools/__init__.py \
- lib/tools/ensure_dirs.py
+ lib/tools/ensure_dirs.py \
+ lib/tools/prepare_node_join.py
utils_PYTHON = \
lib/utils/__init__.py \
doc/design-http-server.rst \
doc/design-impexp2.rst \
doc/design-lu-generated-jobs.rst \
+ doc/design-linuxha.rst \
doc/design-multi-reloc.rst \
doc/design-network.rst \
- doc/design-node-state-cache.rst \
doc/design-oob.rst \
doc/design-ovf-support.rst \
doc/design-partitioned.rst \
doc/design-query-splitting.rst \
doc/design-query2.rst \
+ doc/design-remote-commands.rst \
doc/design-resource-model.rst \
doc/design-shared-storage.rst \
+ doc/design-ssh-setup.rst \
+ doc/design-monitoring-agent.rst \
doc/design-virtual-clusters.rst \
doc/design-x509-ca.rst \
doc/devnotes.rst \
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_ALL_PROGS = \
+ $(HS_PROGS) \
+ htest/hpc-htools \
+ htest/test \
+ htools/hconfd \
+ htools/rpc-test
+
HS_PROG_SRCS = $(patsubst %,%.hs,$(HS_ALL_PROGS))
HS_BUILT_TEST_HELPERS = $(HS_BIN_ROLES:%=htest/%) htest/hail
-HFLAGS = -O -Wall -Werror -fwarn-monomorphism-restriction -fwarn-tabs -ihtools
+HFLAGS = \
+ -O -Wall -Werror -ihtools \
+ -fwarn-monomorphism-restriction \
+ -fwarn-tabs \
+ $(GHC_BYVERSION_FLAGS)
+
# extra flags that can be overriden on the command line (e.g. -Wwarn, etc.)
HEXTRA =
# internal extra flags (used for htest/test mainly)
htools/Ganeti/BasicTypes.hs \
htools/Ganeti/Common.hs \
htools/Ganeti/Compat.hs \
- htools/Ganeti/Confd.hs \
htools/Ganeti/Confd/Server.hs \
+ htools/Ganeti/Confd/Types.hs \
htools/Ganeti/Confd/Utils.hs \
htools/Ganeti/Config.hs \
htools/Ganeti/Daemon.hs \
+ htools/Ganeti/Errors.hs \
+ htools/Ganeti/HTools/Backend/IAlloc.hs \
+ htools/Ganeti/HTools/Backend/Luxi.hs \
+ htools/Ganeti/HTools/Backend/Rapi.hs \
+ htools/Ganeti/HTools/Backend/Simu.hs \
+ htools/Ganeti/HTools/Backend/Text.hs \
htools/Ganeti/HTools/CLI.hs \
htools/Ganeti/HTools/Cluster.hs \
htools/Ganeti/HTools/Container.hs \
htools/Ganeti/HTools/ExtLoader.hs \
htools/Ganeti/HTools/Group.hs \
- htools/Ganeti/HTools/IAlloc.hs \
htools/Ganeti/HTools/Instance.hs \
htools/Ganeti/HTools/Loader.hs \
- htools/Ganeti/HTools/Luxi.hs \
htools/Ganeti/HTools/Node.hs \
htools/Ganeti/HTools/PeerMap.hs \
htools/Ganeti/HTools/Program.hs \
htools/Ganeti/HTools/Program/Hinfo.hs \
htools/Ganeti/HTools/Program/Hscan.hs \
htools/Ganeti/HTools/Program/Hspace.hs \
- htools/Ganeti/HTools/Rapi.hs \
- htools/Ganeti/HTools/Simu.hs \
- htools/Ganeti/HTools/Text.hs \
htools/Ganeti/HTools/Types.hs \
htools/Ganeti/Hash.hs \
htools/Ganeti/JSON.hs \
htools/Ganeti/Utils.hs
HS_TEST_SRCS = \
+ htest/Test/Ganeti/Attoparsec.hs \
htest/Test/Ganeti/BasicTypes.hs \
htest/Test/Ganeti/Common.hs \
htest/Test/Ganeti/Confd/Utils.hs \
htest/Test/Ganeti/Daemon.hs \
+ htest/Test/Ganeti/Errors.hs \
+ htest/Test/Ganeti/HTools/Backend/Simu.hs \
+ htest/Test/Ganeti/HTools/Backend/Text.hs \
htest/Test/Ganeti/HTools/CLI.hs \
htest/Test/Ganeti/HTools/Cluster.hs \
htest/Test/Ganeti/HTools/Container.hs \
htest/Test/Ganeti/HTools/Loader.hs \
htest/Test/Ganeti/HTools/Node.hs \
htest/Test/Ganeti/HTools/PeerMap.hs \
- htest/Test/Ganeti/HTools/Simu.hs \
- htest/Test/Ganeti/HTools/Text.hs \
htest/Test/Ganeti/HTools/Types.hs \
htest/Test/Ganeti/JSON.hs \
htest/Test/Ganeti/Jobs.hs \
htest/Test/Ganeti/Query/Query.hs \
htest/Test/Ganeti/Rpc.hs \
htest/Test/Ganeti/Ssconf.hs \
+ htest/Test/Ganeti/THH.hs \
htest/Test/Ganeti/TestCommon.hs \
htest/Test/Ganeti/TestHTools.hs \
htest/Test/Ganeti/TestHelper.hs \
# Things to build but not to install (add it to EXTRA_DIST if it should be
# distributed)
noinst_DATA = \
- devel/upload \
doc/html \
$(BUILT_EXAMPLES) \
doc/examples/bash_completion \
PYTHON_BOOTSTRAP = \
$(PYTHON_BOOTSTRAP_SBIN) \
- tools/ensure-dirs
+ tools/ensure-dirs \
+ tools/prepare-node-join
qa_scripts = \
qa/__init__.py \
tools/lvmstrap \
tools/move-instance \
tools/ovfconverter \
- tools/sanitize-config \
- tools/setup-ssh
+ tools/sanitize-config
dist_tools_SCRIPTS = \
$(python_scripts) \
tools/kvm-console-wrapper \
tools/master-ip-setup \
- tools/xm-console-wrapper
+ tools/xen-console-wrapper
nodist_tools_SCRIPTS = \
tools/vcluster-setup
tools/check-cert-expired
nodist_pkglib_python_scripts = \
- tools/ensure-dirs
+ tools/ensure-dirs \
+ tools/prepare-node-join
myexeclib_SCRIPTS = \
daemons/daemon-util \
daemons/daemon-util.in \
daemons/ganeti-cleaner.in \
$(pkglib_python_scripts) \
- devel/upload.in \
+ devel/upload \
tools/kvm-ifup.in \
tools/vcluster-setup.in \
$(docdot) \
$(HS_PROG_SRCS) \
htools/lint-hints.hs \
htest/cli-tests-defs.sh \
- htest/offline-test.sh
+ htest/offline-test.sh \
+ .ghci
man_MANS = \
man/ganeti-cleaner.8 \
htest/data/hail-invalid-reloc.json \
htest/data/hail-node-evac.json \
htest/data/hail-reloc-drbd.json \
+ htest/data/hbal-excl-tags.data \
htest/data/hbal-split-insts.data \
htest/data/invalid-node.data \
htest/data/missing-resources.data \
test/data/bdev-drbd-net-ip4.txt \
test/data/bdev-drbd-net-ip6.txt \
test/data/cert1.pem \
+ test/data/cert2.pem \
test/data/ip-addr-show-dummy0.txt \
test/data/ip-addr-show-lo-ipv4.txt \
test/data/ip-addr-show-lo-ipv6.txt \
test/ganeti.cli_unittest.py \
test/ganeti.client.gnt_cluster_unittest.py \
test/ganeti.client.gnt_instance_unittest.py \
+ test/ganeti.client.gnt_job_unittest.py \
test/ganeti.cmdlib_unittest.py \
test/ganeti.compat_unittest.py \
test/ganeti.confd.client_unittest.py \
test/ganeti.rpc_unittest.py \
test/ganeti.runtime_unittest.py \
test/ganeti.serializer_unittest.py \
+ test/ganeti.server.rapi_unittest.py \
test/ganeti.ssh_unittest.py \
test/ganeti.storage_unittest.py \
test/ganeti.tools.ensure_dirs_unittest.py \
+ test/ganeti.tools.prepare_node_join_unittest.py \
test/ganeti.uidpool_unittest.py \
test/ganeti.utils.algo_unittest.py \
test/ganeti.utils.filelock_unittest.py \
sed -f $(REPLACE_VARS_SED) < $< > $@
chmod +x $@
-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 $@
.PHONY: regen-vcs-version
regen-vcs-version:
- set -e; \
+ @set -e; \
cd $(srcdir); \
if test -d .git; then \
- $(MAKE) $(AM_MAKEFLAGS) clean-vcs-version; \
- $(MAKE) $(AM_MAKEFLAGS) vcs-version; \
+ T=`mktemp` ; trap 'rm -f $$T' EXIT; \
+ git describe > $$T; \
+ if ! cmp --quiet $$T vcs-version; then \
+ mv $$T vcs-version; \
+ fi; \
fi
htools/Ganeti/Version.hs: htools/Ganeti/Version.hs.in \
echo "ENABLE_CONFD = $(ENABLE_CONFD)"; \
echo "XEN_CMD = '$(XEN_CMD)'"; \
echo "ENABLE_SPLIT_QUERY = $(ENABLE_SPLIT_QUERY)"; \
+ echo "ENABLE_REMOTE_COMMANDS = $(ENABLE_REMOTE_COMMANDS)"; \
} > $@
lib/_vcsversion.py: Makefile vcs-version | stamp-directories
echo 's#@LOCALSTATEDIR@#$(localstatedir)#g'; \
echo 's#@BINDIR@#$(bindir)#g'; \
echo 's#@SBINDIR@#$(sbindir)#g'; \
+ echo 's#@LIBDIR@#$(libdir)#g'; \
echo 's#@GANETI_VERSION@#$(PACKAGE_VERSION)#g'; \
echo 's#@CUSTOM_XEN_BOOTLOADER@#$(XEN_BOOTLOADER)#g'; \
echo 's#@CUSTOM_XEN_KERNEL@#$(XEN_KERNEL)#g'; \
daemons/ganeti-watcher: MODULE = ganeti.watcher
scripts/%: MODULE = ganeti.client.$(subst -,_,$(notdir $@))
tools/ensure-dirs: MODULE = ganeti.tools.ensure_dirs
+tools/prepare-node-join: MODULE = ganeti.tools.prepare_node_join
$(HS_BUILT_TEST_HELPERS): TESTROLE = $(patsubst htest/%,%,$@)
$(PYTHON_BOOTSTRAP): Makefile | stamp-directories
echo "Incorrect version in README, expected $$expver"; \
exit 1; \
fi; \
- for file in doc/iallocator.rst doc/hooks.rst doc/virtual-cluster.rst; do \
+ for file in doc/iallocator.rst doc/hooks.rst doc/virtual-cluster.rst \
+ doc/security.rst; do \
if test "`sed -ne '4 p' $(top_srcdir)/$$file`" != \
"Documents Ganeti version $$expver"; then \
echo "Incorrect version in $$file, expected $$expver"; \
exit 1; \
fi; \
- done
+ done; \
+ if ! test -f $(top_srcdir)/doc/design-$$expver.rst; then \
+ echo "File $(top_srcdir)/doc/design-$$expver.rst not found"; \
+ exit 1; \
+ fi
.PHONY: hs-check
hs-check: htest/test htest/hpc-htools $(HS_BUILT_TEST_HELPERS)
--ignore "Use &&&" \
--ignore "Use void" \
--hint htools/lint-hints \
- $(filter-out htools/Ganeti/THH.hs,$(HS_LIBTEST_SRCS))
+ $(filter-out htools/Ganeti/THH.hs,$(HS_LIBTEST_SRCS) $(HS_PROG_SRCS))
# a dist hook rule for updating the vcs-version file; this is
# hardcoded due to where it needs to build the file...
@test -n "$(HADDOCK)" || \
{ echo 'haddock' not found during configure; exit 1; }
rm -rf $(APIDOC_HS_DIR)/*
+ @mkdir_p@ $(APIDOC_HS_DIR)/Ganeti/HTools/Backend
@mkdir_p@ $(APIDOC_HS_DIR)/Ganeti/HTools/Program
@mkdir_p@ $(APIDOC_HS_DIR)/Ganeti/Confd
@mkdir_p@ $(APIDOC_HS_DIR)/Ganeti/Query
.PHONY: py-coverage
py-coverage: $(GENERATED_FILES) $(python_tests)
+ @test -n "$(PYCOVERAGE)" || \
+ { echo 'python-coverage' not found during configure; exit 1; }
set -e; \
+ COVERAGE=$(PYCOVERAGE) \
COVERAGE_FILE=$(CURDIR)/$(COVERAGE_PY_DIR)/data \
TEXT_COVERAGE=$(CURDIR)/$(COVERAGE_PY_DIR)/report.txt \
HTML_COVERAGE=$(CURDIR)/$(COVERAGE_PY_DIR) \
exit 1; \
fi
+# Target that builds all binaries (including those that are not
+# rebuilt except when running the tests)
+.PHONY: really-all
+really-all: all $(check_SCRIPTS) $(haskell_tests)
+
# we don't need the ancient implicit rules:
%: %,v
%: RCS/%,v