Coder Social home page Coder Social logo

Comments (2)

tbielawa avatar tbielawa commented on September 3, 2024 3

That could be interpreted as expected behavior. Ansible knows not of your true intentions, nor of your XML Schema (which may state that only one instance of any element type may be a child in a given scope). It only knows that you said to add a child element to a parent.

I understand your frustration with this. There's no clear and obvious way to add a child element if it doesn't already exist.

I could see this going in several ways. Maybe even a merge of some of their ideas. Here's one:

  • An option could be added to the add_children command that allows you to specify the behavior of addition.

I can think of three common ways people approach this

  • Default behavior, just add the element where you say to, this may mean a parent adding another sibling of the same type within it's scope
  • Update behavior, if the element exists already, and does not look like what we say it should, then update the element to look as defined
  • No-replace behavior, if the element exists in the given scope -- in any form -- then skip the operation

It becomes more challenging when we consider that a variety of things may be contained in any given parent's scope. What if we have an element foo defined several times in a parent element, but each instance of foo has different attribute (values) or element text values. For example:

<funwords>
    <foo>with words!</foo>
    <foo awesome="1" />
    <foo title="The best">Mega Frobber</foo>
</funwords>

I guess you'd want to do a kind of "does it exist already?" task and register the result, and then an only_if on the subsequent add.

Or modify your playbook approach. If you're adding an element to an xml file, are you only doing that once to configure a service? Maybe split your playbook up more.

Maybe you've got a set of defined items you need to have as children somewhere, you can use yaml for variables to ensure the children of a parent are exactly defined as you say in the yaml.

This surely is an interesting issue.

from ansible-xml.

cmprescott avatar cmprescott commented on September 3, 2024

I concur with @tbielawa; definitely an interesting issue. You are correct that add_children is not idempotent. However, it's counterintuitive having a command with the word "add" be idempotent.

I think the best way to handle this scenario is at the playbook level and use add_children conditionally. Depending on your need, sometimes it would make sense to use set_children in place of add_children.

I'm going to close this issue without a fix, but I am open to changing my position on how add_children should work in the future, or if it should be depreciated.

from ansible-xml.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.