diff --git a/xml/Makefile.am b/xml/Makefile.am index 88edbda4ec..49542a3104 100644 --- a/xml/Makefile.am +++ b/xml/Makefile.am @@ -1,223 +1,224 @@ # -# Copyright 2004-2018 the Pacemaker project contributors +# Copyright 2004-2019 the Pacemaker project contributors # # The version control history for this file may have further details. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program 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 General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # MAINTAINERCLEANFILES = Makefile.in APIdir = $(CRM_SCHEMA_DIRECTORY)/api RNGdir = $(CRM_SCHEMA_DIRECTORY) xsltdir = $(RNGdir) dist_xslt_DATA = $(top_srcdir)/xml/upgrade-1.3.xsl \ $(top_srcdir)/xml/upgrade-2.10.xsl \ $(top_srcdir)/xml/upgrade-*enter.xsl \ $(top_srcdir)/xml/upgrade-*leave.xsl noinst_DATA = context-of.xsl # See Readme.md for details on updating schema files # Sorted list of available numeric RNG versions, # extracted from filenames like NAME-MAJOR[.MINOR][.MINOR-MINOR].rng numeric_versions = $(shell ls -1 $(1) \ | sed -n -e 's/^.*-\([0-9][0-9.]*\).rng$$/\1/p' \ | sort -u -t. -k 1,1n -k 2,2n -k 3,3n) version_pairs = $(join \ $(1),$(addprefix \ -,$(wordlist \ 2,$(words $(1)),$(1) \ ) next \ ) \ ) version_pairs_last = $(wordlist \ $(words \ $(wordlist \ 2,$(1),$(2) \ ) \ ),$(1),$(2) \ ) API_numeric_versions = $(call numeric_versions,${API_files}) RNG_numeric_versions = $(call numeric_versions,${RNG_files}) # The highest numeric version API_max ?= $(lastword $(API_numeric_versions)) RNG_max ?= $(lastword $(RNG_numeric_versions)) # A sorted list of all API and RNG versions (numeric and "next") API_versions = next $(API_numeric_versions) -API_base = command-output stonith_admin -API_files = $(foreach base,$(API_base),$(wildcard api/$(base)*.rng)) +API_request_base = command-output stonith_admin +API_base = $(API_request_base) item +API_files = $(foreach base,$(API_base),$(wildcard api/$(base)*.rng)) RNG_versions = next $(RNG_numeric_versions) RNG_version_pairs = $(call version_pairs,${RNG_numeric_versions}) RNG_version_pairs_cnt = $(words ${RNG_version_pairs}) RNG_version_pairs_last = $(call version_pairs_last,${RNG_version_pairs_cnt},${RNG_version_pairs}) API_generated = api/api-result.rng $(foreach base,$(API_versions),api/api-result-$(base).rng) RNG_generated = pacemaker.rng $(foreach base,$(RNG_versions),pacemaker-$(base).rng) versions.rng RNG_cfg_base = options nodes resources constraints fencing acls tags alerts RNG_base = cib $(RNG_cfg_base) status score rule nvset RNG_files = $(foreach base,$(RNG_base),$(wildcard $(base).rng $(base)-*.rng)) # List of non-Pacemaker RNGs RNG_extra = crm_mon.rng dist_API_DATA = $(API_files) dist_RNG_DATA = $(RNG_files) $(RNG_extra) nodist_API_DATA = $(API_generated) nodist_RNG_DATA = $(RNG_generated) EXTRA_DIST = best-match.sh versions: echo "Max: $(RNG_max)" echo "Available: $(RNG_versions)" api-versions: echo "Max: $(API_max)" echo "Available: $(API_versions)" versions.rng: Makefile.am echo " RNG $@" echo '<?xml version="1.0" encoding="UTF-8"?>' > $@ echo '<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">' >> $@ echo ' <start>' >> $@ echo ' <interleave>' >> $@ echo ' <optional>' >> $@ echo ' <attribute name="validate-with">' >> $@ echo ' <choice>' >> $@ echo ' <value>none</value>' >> $@ echo ' <value>pacemaker-0.6</value>' >> $@ echo ' <value>transitional-0.6</value>' >> $@ echo ' <value>pacemaker-0.7</value>' >> $@ echo ' <value>pacemaker-1.1</value>' >> $@ for rng in $(RNG_versions); do echo " <value>pacemaker-$$rng</value>" >> $@; done echo ' </choice>' >> $@ echo ' </attribute>' >> $@ echo ' </optional>' >> $@ echo ' <attribute name="admin_epoch"><data type="nonNegativeInteger"/></attribute>' >> $@ echo ' <attribute name="epoch"><data type="nonNegativeInteger"/></attribute>' >> $@ echo ' <attribute name="num_updates"><data type="nonNegativeInteger"/></attribute>' >> $@ echo ' </interleave>' >> $@ echo ' </start>' >> $@ echo '</grammar>' >> $@ api/api-result.rng: api/api-result-$(API_max).rng echo " RNG $@" cp $(top_builddir)/xml/$< $@ pacemaker.rng: pacemaker-$(RNG_max).rng echo " RNG $@" cp $(top_builddir)/xml/$< $@ api/api-result-%.rng: $(API_files) Makefile.am echo " RNG $@" echo '<?xml version="1.0" encoding="UTF-8"?>' > $@ echo '<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">' >> $@ echo ' <start>' >> $@ echo ' <element name="pacemaker-result">' >> $@ echo ' <attribute name="api-version"> <text /> </attribute>' >> $@ echo ' <attribute name="request"> <text /> </attribute>' >> $@ echo ' <optional>' >> $@ echo ' <choice>' >> $@ - for rng in $(API_base); do $(top_srcdir)/xml/best-match.sh api/$$rng $(*) $(@) " " || :; done + for rng in $(API_request_base); do $(top_srcdir)/xml/best-match.sh api/$$rng $(*) $(@) " " || :; done echo ' </choice>' >> $@ echo ' </optional>' >> $@ echo ' <element name="status">' >> $@ echo ' <attribute name="code"> <data type="integer" /> </attribute>' >> $@ echo ' <text />' >> $@ echo ' </element>' >> $@ echo ' </element>' >> $@ echo ' </start>' >> $@ echo '</grammar>' >> $@ pacemaker-%.rng: $(RNG_files) best-match.sh Makefile.am echo " RNG $@" echo '<?xml version="1.0" encoding="UTF-8"?>' > $@ echo '<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">' >> $@ echo ' <start>' >> $@ echo ' <element name="cib">' >> $@ $(top_srcdir)/xml/best-match.sh cib $(*) $(@) " " echo ' <element name="configuration">' >> $@ echo ' <interleave>' >> $@ for rng in $(RNG_cfg_base); do $(top_srcdir)/xml/best-match.sh $$rng $(*) $(@) " " || :; done echo ' </interleave>' >> $@ echo ' </element>' >> $@ echo ' <optional>' >> $@ echo ' <element name="status">' >> $@ $(top_srcdir)/xml/best-match.sh status $(*) $(@) " " echo ' </element>' >> $@ echo ' </optional>' >> $@ echo ' </element>' >> $@ echo ' </start>' >> $@ echo '</grammar>' >> $@ # diff fails with ec=2 if no predecessor is found; # this uses '=' GNU extension to sed, if that's not available, # one can use: hline=`echo "$${p}" | grep -Fn "$${hunk}" | cut -d: -f1`; # XXX: use line information from hunk to avoid "not detected" for ambiguity version_diff = \ @for p in $(1); do \ set `echo "$${p}" | tr '-' ' '`; \ echo "\#\#\# *-$$2.rng vs. predecessor"; \ for v in *-$$2.rng; do \ echo "\#\#\#\# $${v} vs. predecessor"; b=`echo "$${v}" | cut -d- -f1`; \ old=`./best-match.sh $${b} $$1`; \ p=`diff -u "$${old}" "$${v}" 2>/dev/null`; \ case $$? in \ 1) echo "$${p}" | sed -n -e '/^@@ /!d;=;p' \ -e ':l;n;/^\([- ]\|+.*<[^ />]\+\([^/>]\+="ID\|>$$\)\)/bl;s/^[+ ]\(.*\)/\1/p' \ | while read hline; do \ read h && read i || break; \ iline=`grep -Fn "$${i}" "$${v}" | cut -d: -f1`; \ ctxt="(not detected)"; \ if test `echo "$${iline}" | wc -l` -eq 1; then \ ctxt=`{ sed -n -e "1,$$(($${iline}-1))p" "$${v}"; \ echo "<inject id=\"GOAL\"/>$${i}"; \ sed -n -e "$$(($${iline}+1)),$$ p" "$${v}"; \ } | $(XSLTPROC) --param skip 1 context-of.xsl -`; \ fi; \ echo "$${p}" | sed -n -e "$$(($${hline}-2)),$${hline}!d" \ -e '/^\(+++\|---\)/p'; \ echo "$${h} context: $${ctxt}"; \ echo "$${p}" | sed -n -e "1,$${hline}d" \ -e '/^\(---\|@@ \)/be;p;d;:e;n;be'; \ done; \ ;; \ 2) echo "\#\#\#\#\# $${v} has no predecessor";; \ esac; \ done; \ done diff: best-match.sh @echo "# Comparing changes in + since $(RNG_max)" $(call version_diff,${RNG_version_pairs_last}) fulldiff: best-match.sh @echo "# Comparing all changes across all the subsequent increments" $(call version_diff,${RNG_version_pairs}) sync: git rm -f $(wildcard *-next.rng) make pacemaker-next.rng CLEANFILES = $(API_generated) $(RNG_generated) diff --git a/xml/api/item-1.1.rng b/xml/api/item-1.1.rng new file mode 100644 index 0000000000..1a065ca232 --- /dev/null +++ b/xml/api/item-1.1.rng @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<grammar xmlns="http://relaxng.org/ns/structure/1.0" + datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"> + + <!-- list_item() method --> + <start> + <ref name="element-item"/> + </start> + + <define name="element-item"> + <element name="item"> + <optional> + <attribute name="name"> <text /> </attribute> + </optional> + <data type="string"/> + </element> + </define> + +</grammar>