diff --git a/cts/cli/regression.cibadmin.exp b/cts/cli/regression.cibadmin.exp index 81b38a02d5..75c6b2c9bf 100644 --- a/cts/cli/regression.cibadmin.exp +++ b/cts/cli/regression.cibadmin.exp @@ -1,89 +1,89 @@ =#=#=#= Begin test: Validate CIB =#=#=#= =#=#=#= Current cib after: Validate CIB =#=#=#= =#=#=#= End test: Validate CIB - OK (0) =#=#=#= * Passed: cibadmin - Validate CIB =#=#=#= Begin test: Digest calculation =#=#=#= -Digest: 01560bbfb91f23e402b8ce399b2e7e32 +Digest: 5bfd0f70973217c2a4735960dfafbb55 =#=#=#= End test: Digest calculation - OK (0) =#=#=#= * Passed: cibadmin - Digest calculation =#=#=#= Begin test: Require --force for CIB erasure =#=#=#= cibadmin: The supplied command is considered dangerous. To prevent accidental destruction of the cluster, the --force flag is required in order to proceed. =#=#=#= Current cib after: Require --force for CIB erasure =#=#=#= =#=#=#= End test: Require --force for CIB erasure - Operation not safe (107) =#=#=#= * Passed: cibadmin - Require --force for CIB erasure =#=#=#= Begin test: Allow CIB erasure with --force =#=#=#= =#=#=#= End test: Allow CIB erasure with --force - OK (0) =#=#=#= * Passed: cibadmin - Allow CIB erasure with --force =#=#=#= Begin test: Query CIB =#=#=#= =#=#=#= Current cib after: Query CIB =#=#=#= =#=#=#= End test: Query CIB - OK (0) =#=#=#= * Passed: cibadmin - Query CIB diff --git a/cts/cli/regression.upgrade.exp b/cts/cli/regression.upgrade.exp index be33f0d578..937c4d3074 100644 --- a/cts/cli/regression.upgrade.exp +++ b/cts/cli/regression.upgrade.exp @@ -1,142 +1,143 @@ =#=#=#= Begin test: Set stonith-enabled=false =#=#=#= =#=#=#= Current cib after: Set stonith-enabled=false =#=#=#= =#=#=#= End test: Set stonith-enabled=false - OK (0) =#=#=#= * Passed: crm_attribute - Set stonith-enabled=false =#=#=#= Begin test: Configure the initial resource =#=#=#= =#=#=#= Current cib after: Configure the initial resource =#=#=#= =#=#=#= End test: Configure the initial resource - OK (0) =#=#=#= * Passed: cibadmin - Configure the initial resource =#=#=#= Begin test: Upgrade to latest CIB schema (trigger 2.10.xsl + the wrapping) =#=#=#= pcmk__update_schema debug: Schema pacemaker-2.10 validates apply_upgrade debug: Upgrading schema from pacemaker-2.10 to pacemaker-3.0: applying XSL transform upgrade-2.10-0.xsl apply_upgrade debug: Upgrading schema from pacemaker-2.10 to pacemaker-3.0: applying XSL transform upgrade-2.10-1.xsl INFO: Resources-operation instance_attributes: mySmartFuse-monitor-inputpower (rsc=mySmartFuse, meta=mySmartFuse-inputpower-instanceparams): dropping requires INFO: Resources-operation instance_attributes: ... only start/promote operation taken into account INFO: Resources-operation instance_attributes: mySmartFuse-monitor-outputpower (rsc=mySmartFuse, meta=mySmartFuse-outputpower-instanceparams): dropping requires INFO: Resources-operation instance_attributes: ... only start/promote operation taken into account apply_upgrade debug: Upgrading schema from pacemaker-2.10 to pacemaker-3.0: applying XSL transform upgrade-2.10-2.xsl DEBUG: instance_attributes: original element pointed to with @id-ref (mySmartFuse-outputpower-instanceparams) disappeared during upgrade apply_upgrade info: Schema upgrade from pacemaker-2.10 to pacemaker-3.0 succeeded pcmk__update_schema debug: Schema pacemaker-3.0 validates pcmk__update_schema debug: Schema pacemaker-3.1 validates pcmk__update_schema debug: Schema pacemaker-3.2 validates pcmk__update_schema debug: Schema pacemaker-3.3 validates pcmk__update_schema debug: Schema pacemaker-3.4 validates pcmk__update_schema debug: Schema pacemaker-3.5 validates pcmk__update_schema debug: Schema pacemaker-3.6 validates pcmk__update_schema debug: Schema pacemaker-3.7 validates pcmk__update_schema debug: Schema pacemaker-3.8 validates pcmk__update_schema debug: Schema pacemaker-3.9 validates pcmk__update_schema debug: Schema pacemaker-3.10 validates -pcmk__update_schema info: Transformed the configuration schema to pacemaker-3.10 +pcmk__update_schema debug: Schema pacemaker-4.0 validates +pcmk__update_schema info: Transformed the configuration schema to pacemaker-4.0 =#=#=#= Current cib after: Upgrade to latest CIB schema (trigger 2.10.xsl + the wrapping) =#=#=#= =#=#=#= End test: Upgrade to latest CIB schema (trigger 2.10.xsl + the wrapping) - OK (0) =#=#=#= * Passed: cibadmin - Upgrade to latest CIB schema (trigger 2.10.xsl + the wrapping) =#=#=#= Begin test: Query a resource instance attribute (shall survive) =#=#=#= outputpower =#=#=#= Current cib after: Query a resource instance attribute (shall survive) =#=#=#= =#=#=#= End test: Query a resource instance attribute (shall survive) - OK (0) =#=#=#= * Passed: crm_resource - Query a resource instance attribute (shall survive) diff --git a/cts/cli/regression.validity.exp b/cts/cli/regression.validity.exp index 6b20b06adc..6bd8eb58e3 100644 --- a/cts/cli/regression.validity.exp +++ b/cts/cli/regression.validity.exp @@ -1,421 +1,431 @@ =#=#=#= Begin test: Try to make resulting CIB invalid (enum violation) =#=#=#= Call failed: Update does not conform to the configured schema =#=#=#= Current cib after: Try to make resulting CIB invalid (enum violation) =#=#=#= =#=#=#= End test: Try to make resulting CIB invalid (enum violation) - Invalid configuration (78) =#=#=#= * Passed: cibadmin - Try to make resulting CIB invalid (enum violation) =#=#=#= Begin test: Run crm_simulate with invalid CIB (enum violation) =#=#=#= element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-1.2 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-1.3 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-2.0 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-2.1 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-2.2 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-2.3 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-2.4 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-2.5 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-2.6 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-2.7 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-2.8 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-2.9 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-2.10 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-3.0 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-3.1 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-3.2 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-3.3 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-3.4 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-3.5 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-3.6 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-3.7 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-3.8 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-3.9 does not validate element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order pcmk__update_schema debug: Schema pacemaker-3.10 does not validate -Cannot upgrade configuration (claiming pacemaker-1.2 schema) to at least pacemaker-3.0 because it does not validate with any schema from pacemaker-1.2 to the latest +element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order +element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order +pcmk__update_schema debug: Schema pacemaker-4.0 does not validate +Cannot upgrade configuration (claiming pacemaker-1.2 schema) to at least pacemaker-4.0 because it does not validate with any schema from pacemaker-1.2 to the latest =#=#=#= End test: Run crm_simulate with invalid CIB (enum violation) - Invalid configuration (78) =#=#=#= * Passed: crm_simulate - Run crm_simulate with invalid CIB (enum violation) =#=#=#= Begin test: Try to make resulting CIB invalid (unrecognized validate-with) =#=#=#= Call failed: Update does not conform to the configured schema =#=#=#= Current cib after: Try to make resulting CIB invalid (unrecognized validate-with) =#=#=#= =#=#=#= End test: Try to make resulting CIB invalid (unrecognized validate-with) - Invalid configuration (78) =#=#=#= * Passed: cibadmin - Try to make resulting CIB invalid (unrecognized validate-with) =#=#=#= Begin test: Run crm_simulate with invalid CIB (unrecognized validate-with) =#=#=#= element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-1.0 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-1.2 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-1.3 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-2.0 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-2.1 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-2.2 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-2.3 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-2.4 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-2.5 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-2.6 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-2.7 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-2.8 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-2.9 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-2.10 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-3.0 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-3.1 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-3.2 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-3.3 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-3.4 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-3.5 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-3.6 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-3.7 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-3.8 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-3.9 does not validate element cib: Relax-NG validity error : Invalid attribute validate-with for element cib pcmk__update_schema debug: Schema pacemaker-3.10 does not validate -Cannot upgrade configuration (claiming pacemaker-9999.0 schema) to at least pacemaker-3.0 because it does not validate with any schema from the first to the latest +element cib: Relax-NG validity error : Invalid attribute validate-with for element cib +pcmk__update_schema debug: Schema pacemaker-4.0 does not validate +Cannot upgrade configuration (claiming pacemaker-9999.0 schema) to at least pacemaker-4.0 because it does not validate with any schema from the first to the latest =#=#=#= End test: Run crm_simulate with invalid CIB (unrecognized validate-with) - Invalid configuration (78) =#=#=#= * Passed: crm_simulate - Run crm_simulate with invalid CIB (unrecognized validate-with) =#=#=#= Begin test: Try to make resulting CIB invalid, but possibly recoverable (valid with X.Y+1) =#=#=#= Call failed: Update does not conform to the configured schema =#=#=#= Current cib after: Try to make resulting CIB invalid, but possibly recoverable (valid with X.Y+1) =#=#=#= =#=#=#= End test: Try to make resulting CIB invalid, but possibly recoverable (valid with X.Y+1) - Invalid configuration (78) =#=#=#= * Passed: cibadmin - Try to make resulting CIB invalid, but possibly recoverable (valid with X.Y+1) =#=#=#= Begin test: Run crm_simulate with invalid, but possibly recoverable CIB (valid with X.Y+1) =#=#=#= element tags: Relax-NG validity error : Element configuration has extra content: tags pcmk__update_schema debug: Schema pacemaker-1.2 does not validate pcmk__update_schema debug: Schema pacemaker-1.3 validates pcmk__update_schema debug: Schema pacemaker-2.0 validates pcmk__update_schema debug: Schema pacemaker-2.1 validates pcmk__update_schema debug: Schema pacemaker-2.2 validates pcmk__update_schema debug: Schema pacemaker-2.3 validates pcmk__update_schema debug: Schema pacemaker-2.4 validates pcmk__update_schema debug: Schema pacemaker-2.5 validates pcmk__update_schema debug: Schema pacemaker-2.6 validates pcmk__update_schema debug: Schema pacemaker-2.7 validates pcmk__update_schema debug: Schema pacemaker-2.8 validates pcmk__update_schema debug: Schema pacemaker-2.9 validates pcmk__update_schema debug: Schema pacemaker-2.10 validates pcmk__update_schema debug: Schema pacemaker-3.0 validates pcmk__update_schema debug: Schema pacemaker-3.1 validates pcmk__update_schema debug: Schema pacemaker-3.2 validates pcmk__update_schema debug: Schema pacemaker-3.3 validates pcmk__update_schema debug: Schema pacemaker-3.4 validates pcmk__update_schema debug: Schema pacemaker-3.5 validates pcmk__update_schema debug: Schema pacemaker-3.6 validates pcmk__update_schema debug: Schema pacemaker-3.7 validates pcmk__update_schema debug: Schema pacemaker-3.8 validates pcmk__update_schema debug: Schema pacemaker-3.9 validates pcmk__update_schema debug: Schema pacemaker-3.10 validates -pcmk__update_schema info: Transformed the configuration schema to pacemaker-3.10 +pcmk__update_schema debug: Schema pacemaker-4.0 validates +pcmk__update_schema info: Transformed the configuration schema to pacemaker-4.0 unpack_resources error: Resource start-up disabled since no STONITH resources have been defined unpack_resources error: Either configure some or disable STONITH with the stonith-enabled option unpack_resources error: NOTE: Clusters with shared data need STONITH to ensure data integrity unpack_resources error: Resource start-up disabled since no STONITH resources have been defined unpack_resources error: Either configure some or disable STONITH with the stonith-enabled option unpack_resources error: NOTE: Clusters with shared data need STONITH to ensure data integrity Current cluster status: * Full List of Resources: * dummy1 (ocf:pacemaker:Dummy): Stopped * dummy2 (ocf:pacemaker:Dummy): Stopped Transition Summary: Executing Cluster Transition: Revised Cluster Status: * Full List of Resources: * dummy1 (ocf:pacemaker:Dummy): Stopped * dummy2 (ocf:pacemaker:Dummy): Stopped =#=#=#= End test: Run crm_simulate with invalid, but possibly recoverable CIB (valid with X.Y+1) - OK (0) =#=#=#= * Passed: crm_simulate - Run crm_simulate with invalid, but possibly recoverable CIB (valid with X.Y+1) =#=#=#= Begin test: Make resulting CIB valid, although without validate-with attribute =#=#=#= =#=#=#= Current cib after: Make resulting CIB valid, although without validate-with attribute =#=#=#= =#=#=#= End test: Make resulting CIB valid, although without validate-with attribute - OK (0) =#=#=#= * Passed: cibadmin - Make resulting CIB valid, although without validate-with attribute =#=#=#= Begin test: Run crm_simulate with valid CIB, but without validate-with attribute =#=#=#= Schema validation of configuration is disabled (support for validate-with set to "none" is deprecated and will be removed in a future release) unpack_resources error: Resource start-up disabled since no STONITH resources have been defined unpack_resources error: Either configure some or disable STONITH with the stonith-enabled option unpack_resources error: NOTE: Clusters with shared data need STONITH to ensure data integrity unpack_resources error: Resource start-up disabled since no STONITH resources have been defined unpack_resources error: Either configure some or disable STONITH with the stonith-enabled option unpack_resources error: NOTE: Clusters with shared data need STONITH to ensure data integrity Current cluster status: * Full List of Resources: * dummy1 (ocf:pacemaker:Dummy): Stopped * dummy2 (ocf:pacemaker:Dummy): Stopped Transition Summary: Executing Cluster Transition: Revised Cluster Status: * Full List of Resources: * dummy1 (ocf:pacemaker:Dummy): Stopped * dummy2 (ocf:pacemaker:Dummy): Stopped =#=#=#= End test: Run crm_simulate with valid CIB, but without validate-with attribute - OK (0) =#=#=#= * Passed: crm_simulate - Run crm_simulate with valid CIB, but without validate-with attribute =#=#=#= Begin test: Make resulting CIB invalid, and without validate-with attribute =#=#=#= element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order +element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order +element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order =#=#=#= Current cib after: Make resulting CIB invalid, and without validate-with attribute =#=#=#= =#=#=#= End test: Make resulting CIB invalid, and without validate-with attribute - OK (0) =#=#=#= * Passed: cibadmin - Make resulting CIB invalid, and without validate-with attribute =#=#=#= Begin test: Run crm_simulate with invalid CIB, also without validate-with attribute =#=#=#= Schema validation of configuration is disabled (support for validate-with set to "none" is deprecated and will be removed in a future release) element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order +element rsc_order: Relax-NG validity error : Invalid attribute first-action for element rsc_order +element rsc_order: Relax-NG validity error : Element constraints has extra content: rsc_order unpack_resources error: Resource start-up disabled since no STONITH resources have been defined unpack_resources error: Either configure some or disable STONITH with the stonith-enabled option unpack_resources error: NOTE: Clusters with shared data need STONITH to ensure data integrity unpack_resources error: Resource start-up disabled since no STONITH resources have been defined unpack_resources error: Either configure some or disable STONITH with the stonith-enabled option unpack_resources error: NOTE: Clusters with shared data need STONITH to ensure data integrity Current cluster status: * Full List of Resources: * dummy1 (ocf:pacemaker:Dummy): Stopped * dummy2 (ocf:pacemaker:Dummy): Stopped Transition Summary: Executing Cluster Transition: Revised Cluster Status: * Full List of Resources: * dummy1 (ocf:pacemaker:Dummy): Stopped * dummy2 (ocf:pacemaker:Dummy): Stopped =#=#=#= End test: Run crm_simulate with invalid CIB, also without validate-with attribute - OK (0) =#=#=#= * Passed: crm_simulate - Run crm_simulate with invalid CIB, also without validate-with attribute diff --git a/cts/cts-schemas.in b/cts/cts-schemas.in index f72fbe02ef..009116041a 100755 --- a/cts/cts-schemas.in +++ b/cts/cts-schemas.in @@ -1,531 +1,573 @@ #!@BASH_PATH@ # # Copyright 2018-2024 the Pacemaker project contributors # # The version control history for this file may have further details. # # This source code is licensed under the GNU General Public License version 2 # or later (GPLv2+) WITHOUT ANY WARRANTY. # Note on portable usage of sed: GNU/POSIX/*BSD sed have a limited subset of # compatible functionality. Do not use the -i option, alternation (\|), # \0, or character sequences such as \n or \s. # Exit immediately if a command fails, with some exceptions (for example, when # part of an if or while condition). Treat unset variables as errors during # expansion. See bash(1) man page for details. set -eu # If readlink supports -e, use it readlink -e / >/dev/null 2>/dev/null if [ $? -eq 0 ]; then test_home=$(dirname "$(readlink -e "$0")") else test_home=$(dirname "$0") fi suites_dir="$test_home/schemas" src_dir=$(dirname "$test_home") if [ -d "$src_dir/xml" ]; then export PCMK_schema_directory="$src_dir/xml" echo "Using local schemas from: $PCMK_schema_directory" else export PCMK_schema_directory=@CRM_SCHEMA_DIRECTORY@ fi DIFF="diff -u" DIFF_PAGER="less -LRX" RNG_VALIDATOR="xmllint --noout --relaxng" XSLT_PROCESSOR="xsltproc --nonet" # Available test suites -tests="test2to3" +tests="test2to3 test3to4" # # commons # emit_result() { - _er_howmany=${1:?} # how many errors (0/anything else incl. strings) - _er_subject=${2:?} - _er_prefix=${3-} + local howmany=${1:?} # how many errors (0/anything else incl. strings) + local subject=${2:?} + local prefix=${3-} - if [ -n "$_er_prefix" ]; then - _er_prefix="${_er_prefix}: " + if [ -n "$prefix" ]; then + prefix="$prefix: " fi - if [ "$_er_howmany" = "0" ]; then - printf "%s%s finished OK\n" "${_er_prefix}" "${_er_subject}" + if [ "$howmany" = "0" ]; then + printf "%s%s finished OK\n" "$prefix" "$subject" else - printf "%s%s encountered ${_er_howmany} errors\n" \ - "${_er_prefix}" "${_er_subject}" + printf "%s%s encountered $howmany errors\n" "$prefix" "$subject" fi } emit_error() { - _ee_msg=${1:?} - printf "%s\n" "${_ee_msg}" >&2 + local msg=${1:?} + printf "%s\n" "$msg" >&2 } -# returns 1 + floor of base 2 logaritm for _lo0r_i in 1...255, -# or 0 for _lo0r_i = 0 +# @TODO We can probably drop the log functions. It's unclear why they're needed. + +# returns 1 + floor of base 2 logarithm if the argument is between 1 and 255, or +# 0 the argument is 0 log2_or_0_return() { - _lo0r_i=${1:?} - return $(((!(_lo0r_i >> 1) && _lo0r_i) * 1 \ - + (!(_lo0r_i >> 2) && _lo0r_i & (1 << 1)) * 2 \ - + (!(_lo0r_i >> 3) && _lo0r_i & (1 << 2)) * 3 \ - + (!(_lo0r_i >> 4) && _lo0r_i & (1 << 3)) * 4 \ - + (!(_lo0r_i >> 5) && _lo0r_i & (1 << 4)) * 5 \ - + (!(_lo0r_i >> 6) && _lo0r_i & (1 << 5)) * 6 \ - + (!(_lo0r_i >> 7) && _lo0r_i & (1 << 6)) * 7 \ - + !!(_lo0r_i >> 7) * 7 )) + local i=${1:?} + + return $(((!(i >> 1) && i) * 1 \ + + (!(i >> 2) && i & (1 << 1)) * 2 \ + + (!(i >> 3) && i & (1 << 2)) * 3 \ + + (!(i >> 4) && i & (1 << 3)) * 4 \ + + (!(i >> 5) && i & (1 << 4)) * 5 \ + + (!(i >> 6) && i & (1 << 5)) * 6 \ + + (!(i >> 7) && i & (1 << 6)) * 7 \ + + !!(i >> 7) * 7 )) } # rough addition of two base 2 logarithms log2_or_0_add() { - _lo0a_op1=${1:?} - _lo0a_op2=${2:?} - - if [ "$_lo0a_op1" -gt "$_lo0a_op2" ]; then - return ${_lo0a_op1} - elif [ "$_lo0a_op2" -gt "$_lo0a_op1" ]; then - return ${_lo0a_op2} - elif [ "$_lo0a_op1" -gt 0 ]; then - return $((_lo0a_op1 + 1)) + local op1=${1:?} + local op2=${2:?} + + if [ "$op1" -gt "$op2" ]; then + return $op1 + elif [ "$op2" -gt "$op1" ]; then + return $op2 + elif [ "$op1" -gt 0 ]; then + return $((op1 + 1)) else - return ${_lo0a_op1} + return $op1 fi } # # test phases # # stdin: input file per line test_cleaner() { - while read _tc_source; do - _tc_source_basename=$(basename "$_tc_source") + local source="" + local source_basename="" + local source_dir="" + local ref_dir="" + local ref_err_dir="" + + while read source; do + source_basename=$(basename "$source") - _tc_source_dir=$(dirname "$_tc_source") - _tc_ref_dir="${_tc_source_dir/%xml/ref}" - _tc_ref_err_dir="${_tc_source_dir/%xml/ref.err}" + source_dir=$(dirname "$source") + ref_dir="${source_dir/%xml/ref}" + ref_err_dir="${source_dir/%xml/ref.err}" - rm -f "$_tc_ref_dir/${_tc_source_basename%.*}-*.up" \ - "_tc_ref_err_dir/${_tc_source_basename%.*}-*.up.err" + rm -f "$ref_dir/${source_basename%.*}".up* \ + "$ref_err_dir/${source_basename%.*}".up.err* done } test_explanation() { - _tsc_template= + local template="" while [ $# -gt 0 ]; do case "$1" in - -o=*) _tsc_template="$PCMK_schema_directory/upgrade-${1#-o=}.xsl";; + -o=*) template="$PCMK_schema_directory/upgrade-${1#-o=}.xsl";; esac shift done - $XSLT_PROCESSOR "$PCMK_schema_directory/upgrade-detail.xsl" "$_tsc_template" + $XSLT_PROCESSOR "$PCMK_schema_directory/upgrade-detail.xsl" "$template" } cleanup_module_error() { # Work around a libxml2 bug. At least as of libxslt-1.1.41 and # libxml2-2.10.4, if the stylesheet contains a user-defined top-level # element (that is, one with a namespace other than the XSL namespace), # libxslt tries to load the namespace URI as an XML module. If this fails, # libxml2 logs a "module error: failed to open ..." message. # # This appears to be fixed in libxml2 v2.13 with commit ecb4c9fb. sed "/module error/d" "$1" > "$1.new" mv -- "$1.new" "$1" } test_runner_upgrade_one() { - _truo_source=${1:?} - _truo_input=${2:?} - _truo_transform=${3:?} - _truo_mode=${4:?} # extra modes wrt. "referential" outcome, see below + local source=${1:?} + local input=${2:?} + local transform=${3:?} + local mode=${4:?} # extra modes wrt. "referential" outcome, see below - _truo_transform_num="${_truo_transform##*-}" - _truo_transform_num="${_truo_transform_num%.xsl}" + local transform_num="${transform##*-}" + transform_num="${transform_num%.xsl}" - _truo_source_dir=$(dirname "$_truo_source") - _truo_ref_dir="${_truo_source_dir/%xml/ref}" - _truo_ref_err_dir="${_truo_source_dir/%xml/ref.err}" + local source_dir=$(dirname "$source") + local ref_dir="${source_dir/%xml/ref}" + local ref_err_dir="${source_dir/%xml/ref.err}" - _truo_source_basename=$(basename "$_truo_source") - _truo_ref_basename="${_truo_source_basename%.*}.ref-${_truo_transform_num}" - _truo_ref_err_basename="${_truo_source_basename%.*}.ref.err-${_truo_transform_num}" + local source_basename=$(basename "$source") + local ref_basename="${source_basename%.*}.ref-$transform_num" + local ref_err_basename="${source_basename%.*}.ref.err-$transform_num" - _truo_ref="$_truo_ref_dir/$_truo_ref_basename" - _truo_ref_err="$_truo_ref_err_dir/$_truo_ref_err_basename" + local ref="$ref_dir/$ref_basename" + local ref_err="$ref_err_dir/$ref_err_basename" - _truo_target="${_truo_ref/.ref/.up}" - _truo_target_err="${_truo_ref_err/.ref.err/.up.err}" + local target="${ref/.ref/.up}" + local target_err="${ref_err/.ref.err/.up.err}" - _truo_proc_rc=0 - _truo_diff_rc=0 + local proc_rc=0 + local diff_rc=0 - if ! [ "$((_truo_mode & (1 << 0)))" -ne 0 ] \ - && ! [ -f "${_truo_ref_err}" ]; then + local answer="" - _truo_ref_err=/dev/null + if ! [ "$((mode & (1 << 0)))" -ne 0 ] && ! [ -f "$ref_err" ]; then + ref_err="/dev/null" fi - $XSLT_PROCESSOR "$_truo_transform" "$_truo_input" \ - > "$_truo_target" 2> "$_truo_target_err" \ - || _truo_proc_rc=$? + $XSLT_PROCESSOR "$transform" "$input" > "$target" 2> "$target_err" \ + || proc_rc=$? - cleanup_module_error "$_truo_target_err" + cleanup_module_error "$target_err" - if [ "$_truo_proc_rc" -ne 0 ]; then - echo "$_truo_target_err" - return "$_truo_proc_rc" + if [ "$proc_rc" -ne 0 ]; then + echo "$target_err" + return "$proc_rc" fi - if [ "$_truo_mode" -ne 0 ]; then - if [ "$((_truo_mode & (1 << 0)))" -ne 0 ]; then - cp -a "${_truo_target}" "${_truo_ref}" - cp -a "${_truo_target_err}" "${_truo_ref_err}" + if [ "$mode" -ne 0 ]; then + if [ "$((mode & (1 << 0)))" -ne 0 ]; then + cp -a "$target" "$ref" + cp -a "$target_err" "$ref_err" fi - if [ "$((_truo_mode & (1 << 1)))" -ne 0 ]; then - { ${DIFF} "${_truo_input}" "${_truo_ref}" \ - && printf '\n(files match)\n'; } | ${DIFF_PAGER} >&2 + if [ "$((mode & (1 << 1)))" -ne 0 ]; then + { $DIFF "$input" "$ref" && printf '\n(files match)\n'; } \ + | $DIFF_PAGER >&2 + if [ $? -ne 0 ]; then printf "\npager failure\n" >&2 return 1 fi printf '\nIs comparison OK? ' >&2 - if read _truo_answer &2; return 1;; esac else return 1 fi fi - elif [ -f "$_truo_ref" ] && [ -e "$_truo_ref_err" ]; then - _output=$(cat "$_truo_ref") + elif [ -f "$ref" ] && [ -e "$ref_err" ]; then + _output=$(cat "$ref") - echo "$_output" | $DIFF - "$_truo_target" >&2 || _truo_diff_rc=$? - if [ "$_truo_diff_rc" -eq 0 ]; then - $DIFF "$_truo_ref_err" "$_truo_target_err" >&2 || _truo_diff_rc=$? + echo "$_output" | $DIFF - "$target" >&2 || diff_rc=$? + if [ "$diff_rc" -eq 0 ]; then + $DIFF "$ref_err" "$target_err" >&2 || diff_rc=$? fi - if [ "$_truo_diff_rc" -ne 0 ]; then + if [ "$diff_rc" -ne 0 ]; then emit_error "Outputs differ from referential ones" echo "/dev/null" return 1 fi else - emit_error "Referential file(s) missing: ${_truo_ref}" + emit_error "Referential file(s) missing: $ref" echo "/dev/null" return 1 fi - echo "$_truo_target" + echo "$target" } # stdout: filename of the transformed file test_runner_upgrade() { - _tru_template=${1:?} - _tru_source=${2:?} # filename - _tru_mode=${3:?} # extra modes wrt. "referential" outcome, see below + local template=${1:?} + local source=${2:?} # filename + local mode=${3:?} # extra modes wrt. "referential" outcome, see below - _tru_target= - _tru_rc=0 + local target="" + local transform="" + local rc=0 - _tru_transforms=$(ls "$PCMK_schema_directory"/upgrade-$_tru_template-*.xsl \ - | sort -n) - _tru_input=$(mktemp) + local transforms=$(ls "$PCMK_schema_directory"/upgrade-$template-*.xsl \ + | grep -v "upgrade-$template-common" | sort -n) + local input=$(mktemp) - cp "$_tru_source" "$_tru_input" + cp "$source" "$input" - for transform in $_tru_transforms; do - _tru_target=$(test_runner_upgrade_one "$_tru_source" "$_tru_input" \ - "$transform" "$_tru_mode") - _tru_rc=$? + for transform in $transforms; do + target=$(test_runner_upgrade_one "$source" "$input" "$transform" \ + "$mode") + rc=$? - if [ $_tru_rc -ne 0 ]; then + if [ "$rc" -ne 0 ]; then break; fi - cp "$_tru_target" "$_tru_input" + cp "$target" "$input" done - rm -f "$_tru_input" + rm -f "$input" - echo "${_tru_target}" - return "$_tru_rc" + echo "$target" + return "$rc" } test_runner_validate() { - _trv_schema=${1:?} - _trv_target=${2:?} # filename + local schema=${1:?} + local target=${2:?} # filename - if ! ${RNG_VALIDATOR} "${_trv_schema}" "${_trv_target}" \ - 2>/dev/null; then - ${RNG_VALIDATOR} "${_trv_schema}" "${_trv_target}" + if ! $RNG_VALIDATOR "$schema" "$target" 2>/dev/null; then + $RNG_VALIDATOR "$schema" "$target" fi } # -o= ... which conventional version to deem as the transform origin # -t= ... which conventional version to deem as the transform target # -D # -G ... see usage # stdin: input file per line test_runner() { - _tr_mode=0 - _tr_ret=0 - _tr_schema_o= - _tr_schema_t= - _tr_target= - _tr_template= + local template="" + local schema_o="" + local schema_t="" + local mode=0 + local ret=0 + local origin="" + local target="" while [ $# -gt 0 ]; do case "$1" in - -o=*) _tr_template="${1#-o=}" - _tr_schema_o="$PCMK_schema_directory/pacemaker-${1#-o=}.rng";; - -t=*) _tr_schema_t="$PCMK_schema_directory/pacemaker-${1#-t=}.rng";; - -G) _tr_mode=$((_tr_mode | (1 << 0)));; - -D) _tr_mode=$((_tr_mode | (1 << 1)));; + -o=*) template="${1#-o=}" + schema_o="$PCMK_schema_directory/pacemaker-${1#-o=}.rng";; + -t=*) schema_t="$PCMK_schema_directory/pacemaker-${1#-t=}.rng";; + -G) mode=$((mode | (1 << 0)));; + -D) mode=$((mode | (1 << 1)));; esac shift done - if [ ! -f "${_tr_schema_o:?}" ] || [ ! -f "${_tr_schema_t:?}" ]; then + if [ ! -f "${schema_o:?}" ] || [ ! -f "${schema_t:?}" ]; then emit_error "Origin and/or target schema missing, rerun make" return 1 fi - while read _tr_origin; do - printf '%-60s' "${_tr_origin}... " + while read origin; do + printf '%-60s' "$origin... " # pre-validate - if ! test_runner_validate "${_tr_schema_o}" "${_tr_origin}"; then - _tr_ret=$((_tr_ret + 1)); echo "E:pre-validate"; continue + if ! test_runner_validate "$schema_o" "$origin"; then + ret=$((ret + 1)); echo "E:pre-validate"; continue fi # upgrade - if ! _tr_target=$(test_runner_upgrade "${_tr_template}" \ - "${_tr_origin}" "${_tr_mode}"); then - _tr_ret=$((_tr_ret + 1)); - if [ -z "$_tr_target" ]; then + if ! target=$(test_runner_upgrade "$template" "$origin" "$mode"); then + ret=$((ret + 1)); + if [ -z "$target" ]; then break fi echo "E:upgrade" - if [ -s "$_tr_target" ]; then + if [ -s "$target" ]; then echo --- - cat "$_tr_target" || : + cat "$target" || : echo --- fi continue fi # post-validate - if ! test_runner_validate "${_tr_schema_t}" "${_tr_target}"; then - _tr_ret=$((_tr_ret + 1)); echo "E:post-validate"; continue + if ! test_runner_validate "$schema_t" "$target"; then + ret=$((ret + 1)); echo "E:post-validate"; continue fi echo "OK" - echo "$_tr_origin" | test_cleaner + echo "$origin" | test_cleaner done - log2_or_0_return ${_tr_ret} + log2_or_0_return "$ret" } # # particular test variations # -C # -X # stdin: granular test specification(s) if any # test2to3() { - _t23_pattern= + local spec="" + local pattern="" - while read _t23_spec; do - _t23_spec=${_t23_spec%.xml} - _t23_spec=${_t23_spec%\*} - _t23_pattern="${_t23_pattern} -name ${_t23_spec}*.xml -o" + while read spec; do + spec=${spec%.xml} + spec=${spec%\*} + pattern="$pattern -name ${spec}*.xml -o" done - if [ -n "$_t23_pattern" ]; then - _t23_pattern="( ${_t23_pattern%-o} )" + if [ -n "$pattern" ]; then + pattern="( ${pattern%-o} )" fi find "$suites_dir/test-2/xml" -name xml -o -type d -prune \ - -o -name '*.xml' ${_t23_pattern} -print \ + -o -name '*.xml' $pattern -print \ | env LC_ALL=C sort \ | { case " $* " in *\ -C\ *) test_cleaner;; *\ -X\ *) test_explanation -o=2.10;; *) test_runner -o=2.10 -t=3.0 "$@" || return $?;; esac; } } +# +# -C +# -X +# stdin: granular test specification(s) if any +# + +test3to4() { + local spec="" + local pattern="" + + while read spec; do + spec=${spec%.xml} + spec=${spec%\*} + pattern="$pattern -name ${spec}*.xml -o" + done + + if [ -n "$pattern" ]; then + pattern="( ${pattern%-o} )" + fi + + find "$suites_dir/test-3/xml" -name xml -o -type d -prune \ + -o -name '*.xml' $pattern -print \ + | env LC_ALL=C sort \ + | { case " $* " in + *\ -C\ *) test_cleaner;; + *\ -X\ *) test_explanation -o=3.10;; + *) test_runner -o=3.10 -t=4.0 "$@" || return $?;; + esac; } +} + # # "framework" # # option-likes ... options to be passed down # argument-likes ... drives a test selection test_suite() { - _ts_pass= - _ts_select= - _ts_select_full= - _ts_test_specs= - _ts_global_ret=0 - _ts_ret=0 + local pass="" + local select="" + local select_full="" + local spec="" + local _test="" + local global_ret=0 + local ret=0 + + local test_spec="" + local test_specs="" + + local test_full="" while [ $# -gt 0 ]; do case "$1" in -) printf '%s\n' 'waiting for tests specified at stdin...'; - while read _ts_spec; do - _ts_select="${_ts_spec}@$1" + while read spec; do + select="${spec}@$1" done;; - -*) _ts_pass="${_ts_pass} $1";; - *) _ts_select_full="${_ts_select_full}@$1" - _ts_select="${_ts_select}@${1%%/*}";; + -*) pass="$pass $1";; + *) select_full="${select_full}@$1" + select="${select}@${1%%/*}";; esac shift done - # _ts_select contains a '@'-delimited list of test suite names from CLI - _ts_select="${_ts_select}@" - - # _ts_select_full contains a '@'-delimited list of test names - _ts_select_full="${_ts_select_full}@" + # select contains a '@'-delimited list of test suite names from CLI + select="${select}@" - for _ts_test in ${tests}; do + # select_full contains a '@'-delimited list of test names + select_full="${select_full}@" - _ts_test_specs= + for _test in ${tests}; do while true; do - case "${_ts_select}" in - *@${_ts_test}@*) - # A known test suite _ts_test was found in the list of - # requested test suites _ts_select. Strip it out of - # _ts_select. + case "$select" in + *@${_test}@*) + # A known test suite _test was found in the list of + # requested test suites select. Strip it out of select. # # The purpose of this seems to be to prevent the later - # _ts_select_full loop from selecting specific tests from - # this suite, if the user also requested the entire suite. + # select_full loop from selecting specific tests from this + # suite, if the user also requested the entire suite. - _ts_test_specs="${_ts_select%%@${_ts_test}@*}"\ -"@${_ts_select#*@${_ts_test}@}" + test_specs="${select%%@${_test}@*}@${select#*@${_test}@}" - if [ "$_ts_test_specs" = "@" ]; then - _ts_select= # nothing left + if [ "$test_specs" = "@" ]; then + select= # nothing left else - _ts_select="$_ts_test_specs" + select="$test_specs" fi continue ;; @) - case "${_ts_test}" in test*) break;; esac # filter + case "$_test" in + test*) break;; + esac # filter ;; esac - if [ -n "$_ts_test_specs" ]; then + if [ -n "$test_specs" ]; then break fi continue 2 # move on to matching with next local test done - _ts_test_specs= + test_specs= while true; do - case "${_ts_select_full}" in - *@${_ts_test}/*) + case "$select_full" in + *@${_test}/*) # A test was requested from a known test suite. This does # not mean the requested test actually exists, but rather # that it was requested as the form "/...". # Strip extraneous data from test path - _ts_test_full="${_ts_test}/${_ts_select_full#*@${_ts_test}/}" - _ts_test_full="${_ts_test_full%%@*}" + test_full="${_test}/${select_full#*@${_test}/}" + test_full="${test_full%%@*}" - # Strip the requested test out of _ts_select_full - _ts_select_full="${_ts_select_full%%@${_ts_test_full}@*}"\ -"@${_ts_select_full#*@${_ts_test_full}@}" + # Strip the requested test out of select_full + select_full="${select_full%%@${test_full}@*}"\ +"@${select_full#*@${test_full}@}" # Strip the test suite name and slash from the test spec - _ts_test_specs="${_ts_test_specs} ${_ts_test_full#*/}" + test_specs="$test_specs ${test_full#*/}" ;; *) break ;; esac done # Feed the test specs (if any) as stdin to the respective test suite - # function _ts_test() - for _ts_test_spec in ${_ts_test_specs}; do - printf '%s\n' "${_ts_test_spec}" - done | "${_ts_test}" ${_ts_pass} || _ts_ret=$? + # function _test() + for test_spec in $test_specs; do + printf '%s\n' "$test_spec" + done | "$_test" $pass || ret=$? - if [ "$_ts_ret" = 0 ]; then - emit_result "$_ts_ret" "$_ts_test" + if [ "$ret" = 0 ]; then + emit_result "$ret" "$_test" else - emit_result "at least 2^$((_ts_ret - 1))" "$_ts_test" + emit_result "at least 2^$((ret - 1))" "$_test" fi - log2_or_0_add ${_ts_global_ret} ${_ts_ret} - _ts_global_ret=$? + log2_or_0_add "$global_ret" "$ret" + global_ret=$? done - if [ -n "${_ts_select#@}" ]; then - emit_error "Non-existing test(s):$(echo "${_ts_select}" \ - | tr '@' ' ')" - log2_or_0_add ${_ts_global_ret} 1 || _ts_global_ret=$? + if [ -n "${select#@}" ]; then + emit_error "Non-existing test(s):$(echo "${select}" | tr '@' ' ')" + log2_or_0_add "$global_ret" 1 || global_ret=$? fi - return ${_ts_global_ret} + return "$global_ret" } # NOTE: big letters are dedicated for per-test-set behaviour, # small ones for generic/global behaviour usage() { printf \ '%s\n%s\n %s\n %s\n %s\n %s\n %s\n %s\n %s\n %s\n' \ "usage: $0 [-{C,D,G,X}]* \\" \ " [-|{${tests## }}*]" \ "- when no suites (arguments) provided, \"test*\" ones get used" \ "- with '-' suite specification the actual ones grabbed on stdin" \ "- use '-C' to only cleanup ephemeral byproducts" \ "- use '-D' to review originals vs. \"referential\" outcomes" \ "- use '-G' to generate \"referential\" outcomes" \ "- use '-X' to show explanatory details about the upgrade" \ "- test specification can be granular, e.g. 'test2to3/022'" } main() { - _main_pass= - _main_bailout=0 - _main_ret=0 + local pass="" + local bailout=0 + local ret=0 while [ $# -gt 0 ]; do case "$1" in -h) usage; exit;; - -C|-G|-X) _main_bailout=1;; + -C|-G|-X) bailout=1;; esac - _main_pass="${_main_pass} $1" + pass="$pass $1" shift done - test_suite ${_main_pass} || _main_ret=$? + test_suite $pass || ret=$? - if [ "$_main_bailout" -eq 0 ]; then - test_suite -C $_main_pass >/dev/null || true + if [ "$bailout" -eq 0 ]; then + test_suite -C $pass >/dev/null || true fi - if [ "$_main_ret" = 0 ]; then - emit_result "$_main_ret" "Overall suite" + if [ "$ret" = 0 ]; then + emit_result "$ret" "Overall suite" else - emit_result "at least 2^$((_main_ret - 1))" "Overall suite" + emit_result "at least 2^$((ret - 1))" "Overall suite" fi - return ${_main_ret} + return "$ret" } main "$@" diff --git a/xml/Makefile.am b/xml/Makefile.am index 4fb09ac924..65914cb63b 100644 --- a/xml/Makefile.am +++ b/xml/Makefile.am @@ -1,276 +1,278 @@ # # Copyright 2004-2024 the Pacemaker project contributors # # The version control history for this file may have further details. # # This source code is licensed under the GNU General Public License version 2 # or later (GPLv2+) WITHOUT ANY WARRANTY. # include $(top_srcdir)/mk/common.mk noarch_pkgconfig_DATA = $(builddir)/pacemaker-schemas.pc # Pacemaker has 3 schemas: the CIB schema, the API schema (for command-line # tool XML output), and a legacy schema for crm_mon --as-xml. # # See README.md for details on updating CIB schema files (API is similar) # The CIB and crm_mon schemas are installed directly in CRM_SCHEMA_DIRECTORY # for historical reasons, while the API schema is installed in a subdirectory. APIdir = $(CRM_SCHEMA_DIRECTORY)/api CIBdir = $(CRM_SCHEMA_DIRECTORY) MONdir = $(CRM_SCHEMA_DIRECTORY) basexsltdir = $(CRM_SCHEMA_DIRECTORY)/base dist_basexslt_DATA = $(srcdir)/base/access-render-2.xsl # Extract a sorted list of available numeric schema versions # 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) # @COMPAT: pacemaker-next is deprecated since 2.1.5 version_pairs = $(join \ $(1),$(addprefix \ -,$(wordlist \ 2,$(words $(1)),$(1) \ ) next \ ) \ ) version_pairs_last = $(wordlist \ $(words \ $(wordlist \ 2,$(1),$(2) \ ) \ ),$(1),$(2) \ ) # NOTE: All files in API_request_base, CIB_cfg_base, API_base, and CIB_base # need to start with a unique prefix. These variables all get iterated over # and globbed, and two files starting with the same prefix will cause # problems. # Names of API schemas that form the choices for pacemaker-result content API_request_base = command-output \ crm_attribute \ crm_error \ crm_mon \ crm_node \ crm_resource \ crm_rule \ crm_shadow \ crm_simulate \ crm_ticket \ crmadmin \ digests \ iso8601 \ pacemakerd \ stonith_admin \ version # Names of CIB schemas that form the choices for cib/configuration content CIB_cfg_base = options \ nodes \ resources \ constraints \ fencing \ acls \ tags \ alerts # Names of all schemas (including top level and those included by others) API_base = $(API_request_base) \ any-element \ failure \ fence-event \ generic-list \ instruction \ item \ node-attrs \ node-history \ nodes \ ocf-ra \ options \ patchset \ resources \ status \ subprocess-output \ ticket CIB_base = cib \ $(CIB_cfg_base) \ status \ score \ rule \ nvset # Static schema files and transforms (only CIB has transforms) # # This is more complicated than it should be due to the need to support # VPATH builds and "make distcheck". We need the absolute paths for reliable # substitution back and forth, and relative paths for distributed files. API_abs_files = $(foreach base,$(API_base),$(wildcard $(abs_srcdir)/api/$(base)-*.rng)) CIB_abs_files = $(foreach base,$(CIB_base),$(wildcard $(abs_srcdir)/$(base).rng $(abs_srcdir)/$(base)-*.rng)) CIB_abs_xsl = $(abs_srcdir)/upgrade-1.3-0.xsl \ - $(wildcard $(abs_srcdir)/upgrade-2.10-[0-2].xsl) + $(wildcard $(abs_srcdir)/upgrade-2.10-[0-2].xsl) \ + $(wildcard $(abs_srcdir)/upgrade-3.10-*.xsl) MON_abs_files = $(abs_srcdir)/crm_mon.rng API_files = $(foreach base,$(API_base),$(wildcard $(srcdir)/api/$(base)-*.rng)) CIB_files = $(foreach base,$(CIB_base),$(wildcard $(srcdir)/$(base).rng $(srcdir)/$(base)-*.rng)) CIB_xsl = $(srcdir)/upgrade-1.3-0.xsl \ - $(wildcard $(srcdir)/upgrade-2.10-[0-2].xsl) + $(wildcard $(srcdir)/upgrade-2.10-[0-2].xsl) \ + $(wildcard $(srcdir)/upgrade-3.10-*.xsl) MON_files = $(srcdir)/crm_mon.rng # Sorted lists of all numeric schema versions API_numeric_versions = $(call numeric_versions,${API_files}) CIB_numeric_versions = $(call numeric_versions,${CIB_files}) MON_numeric_versions = $(call numeric_versions,$(wildcard $(srcdir)/api/crm_mon*.rng)) # The highest numeric schema version API_max ?= $(lastword $(API_numeric_versions)) CIB_max ?= $(lastword $(CIB_numeric_versions)) MON_max ?= $(lastword $(MON_numeric_versions)) # Sorted lists of all schema versions (including "next") # @COMPAT: pacemaker-next is deprecated since 2.1.5 API_versions = next $(API_numeric_versions) CIB_versions = next $(CIB_numeric_versions) # Build tree locations of static schema files and transforms (for VPATH builds) API_build_copies = $(foreach f,$(API_abs_files),$(subst $(abs_srcdir),$(abs_builddir),$(f))) CIB_build_copies = $(foreach f,$(CIB_abs_files) $(CIB_abs_xsl),$(subst $(abs_srcdir),$(abs_builddir),$(f))) MON_build_copies = $(foreach f,$(MON_abs_files),$(subst $(abs_srcdir),$(abs_builddir),$(f))) # Dynamically generated schema files API_generated = api/api-result.rng $(foreach base,$(API_versions),api/api-result-$(base).rng) CIB_generated = pacemaker.rng \ $(foreach base,$(CIB_versions),pacemaker-$(base).rng) \ versions.rng MON_generated = crm_mon.rng CIB_version_pairs = $(call version_pairs,${CIB_numeric_versions}) CIB_version_pairs_cnt = $(words ${CIB_version_pairs}) CIB_version_pairs_last = $(call version_pairs_last,${CIB_version_pairs_cnt},${CIB_version_pairs}) dist_API_DATA = $(API_files) dist_CIB_DATA = $(CIB_files) \ $(CIB_xsl) nodist_API_DATA = $(API_generated) nodist_CIB_DATA = $(CIB_generated) nodist_MON_DATA = $(MON_generated) EXTRA_DIST = README.md \ cibtr-2.rng \ context-of.xsl \ rng-helper \ ocf-meta2man.xsl \ upgrade-detail.xsl \ xslt_cibtr-2.rng .PHONY: cib-versions cib-versions: @echo "Max: $(CIB_max)" @echo "Available: $(CIB_versions)" .PHONY: api-versions api-versions: @echo "Max: $(API_max)" @echo "Available: $(API_versions)" # Dynamically generated top-level API schema api/api-result.rng: api/api-result-$(API_max).rng $(AM_V_at)$(MKDIR_P) api # might not exist in VPATH build $(AM_V_SCHEMA)cp $(top_builddir)/xml/$< $@ api/api-result-%.rng: $(API_build_copies) rng-helper Makefile.am $(AM_V_SCHEMA)$(builddir)/rng-helper build_api_rng "$@" "$*" \ $(API_request_base) crm_mon.rng: api/crm_mon-$(MON_max).rng $(AM_V_at)echo '' > $@ $(AM_V_at)echo '> $@ $(AM_V_at)echo ' datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_SCHEMA)echo '' >> $@ # Dynamically generated top-level CIB schema pacemaker.rng: pacemaker-$(CIB_max).rng $(AM_V_SCHEMA)cp $(top_builddir)/xml/$< $@ pacemaker-%.rng: $(CIB_build_copies) rng-helper Makefile.am $(AM_V_SCHEMA)$(builddir)/rng-helper build_cib_rng "$@" "$*" \ $(CIB_cfg_base) # Dynamically generated CIB schema listing all pacemaker versions # # @COMPAT none, pacemaker-0.6, pacemaker-0.7, pacemaker-1.1, and # transitional-0.6 are deprecated since 2.1.8, as is validate-with being # optional versions.rng: pacemaker-$(CIB_max).rng Makefile.am $(AM_V_at)echo '' > $@ $(AM_V_at)echo '' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' none' >> $@ $(AM_V_at)echo ' pacemaker-0.6' >> $@ $(AM_V_at)echo ' transitional-0.6' >> $@ $(AM_V_at)echo ' pacemaker-0.7' >> $@ $(AM_V_at)echo ' pacemaker-1.1' >> $@ $(AM_V_at)for rng in $(CIB_versions); do echo " pacemaker-$$rng" >> $@; done $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_at)echo ' ' >> $@ $(AM_V_SCHEMA)echo '' >> $@ .PHONY: diff diff: rng-helper @echo "# Comparing changes in + since $(CIB_max)" @$(builddir)/rng-helper diff ${CIB_version_pairs_last} .PHONY: fulldiff fulldiff: rng-helper @echo "# Comparing all changes across all the subsequent increments" @$(builddir)/rng-helper diff ${CIB_version_pairs} CLEANFILES = $(API_generated) \ $(CIB_generated) \ $(MON_generated) # Remove pacemaker schema files generated by *any* source version. This allows # "make -C xml clean" to have the desired effect when checking out an earlier # revision in a source tree. .PHONY: clean-local clean-local: if [ "x$(srcdir)" != "x$(builddir)" ]; then \ rm -f $(API_build_copies) $(CIB_build_copies) $(MON_build_copies); \ fi rm -f $(builddir)/pacemaker-[0-9]*.[0-9]*.rng # Enable ability to use $@ in prerequisite .SECONDEXPANSION: # For VPATH builds, copy the static schema files into the build tree $(API_build_copies) $(CIB_build_copies) $(MON_build_copies): $$(subst $(abs_builddir),$(srcdir),$$(@)) $(AM_V_GEN)if [ "x$(srcdir)" != "x$(builddir)" ]; then \ $(MKDIR_P) "$(dir $(@))"; \ cp "$(<)" "$(@)"; \ fi diff --git a/xml/alerts-4.0.rng b/xml/alerts-4.0.rng new file mode 100644 index 0000000000..f0b07d8867 --- /dev/null +++ b/xml/alerts-4.0.rng @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xml/constraints-next.rng b/xml/constraints-4.0.rng similarity index 91% copy from xml/constraints-next.rng copy to xml/constraints-4.0.rng index 241b053e63..cab0d089e2 100644 --- a/xml/constraints-next.rng +++ b/xml/constraints-4.0.rng @@ -1,289 +1,287 @@ - + - + + + + group listed + + + - - - - - - + + + - - - - - - stop demote fence freeze always never exclusive start promote demote stop Stopped Started Promoted Unpromoted Master Slave Optional Mandatory Serialize + diff --git a/xml/constraints-next.rng b/xml/constraints-next.rng index 241b053e63..3b36f8edd9 100644 --- a/xml/constraints-next.rng +++ b/xml/constraints-next.rng @@ -1,289 +1,289 @@ - + group listed stop demote fence freeze always never exclusive start promote demote stop Stopped Started Promoted Unpromoted Master Slave Optional Mandatory Serialize - + diff --git a/xml/nodes-4.0.rng b/xml/nodes-4.0.rng new file mode 100644 index 0000000000..4c32bb873b --- /dev/null +++ b/xml/nodes-4.0.rng @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + member + remote + + + ping + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xml/nvset-4.0.rng b/xml/nvset-4.0.rng new file mode 100644 index 0000000000..d259c78496 --- /dev/null +++ b/xml/nvset-4.0.rng @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xml/options-4.0.rng b/xml/options-4.0.rng new file mode 100644 index 0000000000..ee91252d81 --- /dev/null +++ b/xml/options-4.0.rng @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xml/resources-4.0.rng b/xml/resources-4.0.rng new file mode 100644 index 0000000000..5816d25286 --- /dev/null +++ b/xml/resources-4.0.rng @@ -0,0 +1,406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ([0-9\-]+) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Stopped + Started + Promoted + Unpromoted + Slave + Master + + + + + + + ignore + block + demote + stop + restart + standby + fence + restart-container + + + + + + + + + + + + + + ocf + + + + + lsb + heartbeat + stonith + service + systemd + + + upstart + + + nagios + + + + + + + + + + + + + + + + + diff --git a/xml/rule-4.0.rng b/xml/rule-4.0.rng new file mode 100644 index 0000000000..9c5f8c534f --- /dev/null +++ b/xml/rule-4.0.rng @@ -0,0 +1,433 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + or + and + + + + + + + + + + + + + + + + + + + literal + + param + meta + + + + + + + + + + + + + + literal + param + meta + + + + + + + + + + + + + + + defined + not_defined + + + + + + + + + + + lt + gt + lte + gte + eq + ne + + + + + + + + + + + + string + integer + number + version + + + + + + + + + + + in_range + + + + + + + + + + + + + + gt + + + + lt + + + + date_spec + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/xml/upgrade-3.10-0.xsl b/xml/upgrade-3.10-0.xsl new file mode 100644 index 0000000000..ed33f031c8 --- /dev/null +++ b/xml/upgrade-3.10-0.xsl @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + diff --git a/xml/upgrade-3.10-common.xsl b/xml/upgrade-3.10-common.xsl new file mode 100644 index 0000000000..63ae2a7120 --- /dev/null +++ b/xml/upgrade-3.10-common.xsl @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + +