cookbook 'xmledit', '= 1.1.0'
xmledit
(20) Versions
1.1.0
-
Follow1
Provides a resource and provider for incremental editing of XML files
cookbook 'xmledit', '= 1.1.0', :supermarket
knife supermarket install xmledit
knife supermarket download xmledit
xmledit-cookbook
This cookbook allows incremental editing of XML files. You must include the
default recipe to ensure nokogiri and its dependencies are installed using the
upstream community xml cookbook.
Specifically, this library cookbooks offers a resource and provider that can be
called by the name xml_edit
. This resource accepts XPath expressions and will
perform the expected action on the very first node found.
Important notes
If no XML nodes match the XPath expression, no actions will be performed. If a file cannot be found, this provider will raise an error by virtue of
::File
raising an error.This cookbook attempts to sidestep resource cloning issues by forcing the resource name to be something other than a path to a file to edit. This allows you to perform multiple edits to the same file by giving the resources unique names and providing the same path attribute value.
Including an XPath expression that is a match against the node's value that you want to replace (e.g. matching against
[text=()=\'false\']
if you want to replace false with true) means that the underlying file resource will no longer be defined, vs. having a file resource that was defined but idempotently 'up to date'. Both styles are possible using this cookbook, depending on the XPath expressions you provide.
Supported actions
name | description |
---|---|
replace | replaces a target node (and all children) with a new fragment |
append | appends a new XML fragment to a parent target node |
append_if_missing | if target is found, replace with fragment, otherwise append fragment |
remove | remove gets rid of a target node |
Supported attributes
These have no default values, and will cause a no-op if they are not specified or don't match a valid file or target.
name | description |
---|---|
path | path to the XML file to edit |
target | an xpath expression for the target node (see action replace and append_if_missing above) |
parent | an xpath expression for the parent of the target node (see actions append and append_if_missing above) |
fragment | a string that will be parsed into an XML fragment, for actions that add or update |
Checkout nokogiri's documentation on XPath and search to understand the syntax behind target
and parent
attributes.
Examples
Replace false
with true
in a file at /etc/application.xml
containing <config><foo>false</foo></config>
.
xml_edit 'set foo to true' do
path '/etc/application.xml'
target '/config/foo[text()=\'false\']'
fragment 'true '
action :replace
end
TODO
- Add an attribute for forcing an error when an xpath expr doesn't match
License
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
1.1.0
- Load namespace in Nokogiri calls (#7)
1.0.7
- Normalize the output of modified XML. Nokogiri seems to be better at parsing files into normalized XML than just writing it out, so we added a very unfortunate temporary file workaround.
1.0.6
- Remove metadata that breaks chef 11 (source and issue url metadata, specifically)
- Add more unit tests and integration tests
- Update logic so that xml_edit resource truly reflects the state of the file resource being updated
1.0.5
- Do not parse a fragment or try to pass :remove action the fragment
1.0.1
- Add the ability to replace or append (action append_if_missing)
- Attempt to strip/format whitespace better when editing
1.0.0
- Rename actions to map better to nokogiri operations
- Implement remove and append actions
- Add missing xml cookbook dependency
0.1.0
- Initial release.
Foodcritic Metric
1.1.0 failed this metric
FC031: Cookbook without metadata file: /tmp/cook/e85ff45a47e90c7942b5cdd5/xmledit/metadata.rb:1
FC045: Consider setting cookbook name in metadata: /tmp/cook/e85ff45a47e90c7942b5cdd5/xmledit/metadata.rb:1
1.1.0 failed this metric
FC045: Consider setting cookbook name in metadata: /tmp/cook/e85ff45a47e90c7942b5cdd5/xmledit/metadata.rb:1