Modify XML Configuration if Condition is Met - Ansible
Hi I am new to ansible and I have to write a script for deployment where an artifact will be dropped in a folder and it's package is referenced from an XML config file. I am able to do the first part and it works just fine but the second part is challenging me where I have to edit the conf file and add a child element there. It is written like this:
- name: Configure Artifact Properties
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
add_children:
- NewArtifact
ArtifactName: HelloWorld
ArtifactPackage: org.HelloWorld
Now this will work fine the first time but when I am going to rerun it in the next deployment cycle, its going to add the child element again which should not be happening. Does anybody have a clue how can we modify the task so that the configuration is added only if it does not exist?
xpath ansible
add a comment |
Hi I am new to ansible and I have to write a script for deployment where an artifact will be dropped in a folder and it's package is referenced from an XML config file. I am able to do the first part and it works just fine but the second part is challenging me where I have to edit the conf file and add a child element there. It is written like this:
- name: Configure Artifact Properties
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
add_children:
- NewArtifact
ArtifactName: HelloWorld
ArtifactPackage: org.HelloWorld
Now this will work fine the first time but when I am going to rerun it in the next deployment cycle, its going to add the child element again which should not be happening. Does anybody have a clue how can we modify the task so that the configuration is added only if it does not exist?
xpath ansible
"its going to add the child element again" - why?
– techraf
Jul 5 '18 at 10:00
add a comment |
Hi I am new to ansible and I have to write a script for deployment where an artifact will be dropped in a folder and it's package is referenced from an XML config file. I am able to do the first part and it works just fine but the second part is challenging me where I have to edit the conf file and add a child element there. It is written like this:
- name: Configure Artifact Properties
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
add_children:
- NewArtifact
ArtifactName: HelloWorld
ArtifactPackage: org.HelloWorld
Now this will work fine the first time but when I am going to rerun it in the next deployment cycle, its going to add the child element again which should not be happening. Does anybody have a clue how can we modify the task so that the configuration is added only if it does not exist?
xpath ansible
Hi I am new to ansible and I have to write a script for deployment where an artifact will be dropped in a folder and it's package is referenced from an XML config file. I am able to do the first part and it works just fine but the second part is challenging me where I have to edit the conf file and add a child element there. It is written like this:
- name: Configure Artifact Properties
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
add_children:
- NewArtifact
ArtifactName: HelloWorld
ArtifactPackage: org.HelloWorld
Now this will work fine the first time but when I am going to rerun it in the next deployment cycle, its going to add the child element again which should not be happening. Does anybody have a clue how can we modify the task so that the configuration is added only if it does not exist?
xpath ansible
xpath ansible
asked Jul 5 '18 at 9:41
Amna TariqAmna Tariq
457
457
"its going to add the child element again" - why?
– techraf
Jul 5 '18 at 10:00
add a comment |
"its going to add the child element again" - why?
– techraf
Jul 5 '18 at 10:00
"its going to add the child element again" - why?
– techraf
Jul 5 '18 at 10:00
"its going to add the child element again" - why?
– techraf
Jul 5 '18 at 10:00
add a comment |
1 Answer
1
active
oldest
votes
According to the Ansible XML documentation, you can perform a count against xpath matches. Try doing a count of the xpath first and register the result. Make your task execute when the count is less than 1.
- name: Check for existing artifacts in SupportedArtifactTypes
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
count: yes
register: hits
- name: Configure Artifact Properties
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
add_children:
- NewArtifact
ArtifactName: HelloWorld
ArtifactPackage: org.HelloWorld
when: hits.count < 1
Give this a try and see if it helps!
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f51188062%2fmodify-xml-configuration-if-condition-is-met-ansible%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
According to the Ansible XML documentation, you can perform a count against xpath matches. Try doing a count of the xpath first and register the result. Make your task execute when the count is less than 1.
- name: Check for existing artifacts in SupportedArtifactTypes
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
count: yes
register: hits
- name: Configure Artifact Properties
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
add_children:
- NewArtifact
ArtifactName: HelloWorld
ArtifactPackage: org.HelloWorld
when: hits.count < 1
Give this a try and see if it helps!
add a comment |
According to the Ansible XML documentation, you can perform a count against xpath matches. Try doing a count of the xpath first and register the result. Make your task execute when the count is less than 1.
- name: Check for existing artifacts in SupportedArtifactTypes
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
count: yes
register: hits
- name: Configure Artifact Properties
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
add_children:
- NewArtifact
ArtifactName: HelloWorld
ArtifactPackage: org.HelloWorld
when: hits.count < 1
Give this a try and see if it helps!
add a comment |
According to the Ansible XML documentation, you can perform a count against xpath matches. Try doing a count of the xpath first and register the result. Make your task execute when the count is less than 1.
- name: Check for existing artifacts in SupportedArtifactTypes
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
count: yes
register: hits
- name: Configure Artifact Properties
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
add_children:
- NewArtifact
ArtifactName: HelloWorld
ArtifactPackage: org.HelloWorld
when: hits.count < 1
Give this a try and see if it helps!
According to the Ansible XML documentation, you can perform a count against xpath matches. Try doing a count of the xpath first and register the result. Make your task execute when the count is less than 1.
- name: Check for existing artifacts in SupportedArtifactTypes
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
count: yes
register: hits
- name: Configure Artifact Properties
- xml:
path: '{{ server_home }}/conf.xml'
xpath: /Server/SupportedArtifactTypes
add_children:
- NewArtifact
ArtifactName: HelloWorld
ArtifactPackage: org.HelloWorld
when: hits.count < 1
Give this a try and see if it helps!
edited Nov 20 '18 at 23:32
syss
207515
207515
answered Jul 5 '18 at 16:05
markybb41markybb41
374
374
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f51188062%2fmodify-xml-configuration-if-condition-is-met-ansible%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
"its going to add the child element again" - why?
– techraf
Jul 5 '18 at 10:00