Ansible check if inventory_hostname is in list











up vote
0
down vote

favorite












I am trying to check if inventory_hostname is in a list into an imported variable.



vars/users.yml file:
---
users:

- username: user1
comment: "User 1"
group: admin
password: "sha password"
keys:
active:
- "ssh-rsa etc"
admin: yes

- username: user2
comment: "User 2"
group: users
groups: deployer
keys:
active:
- "ssh-rsa etc"
hosts:
user:
- host1
- host2
deployer:
- host3


I want to execute a task only if inventory_hostname is into any of hosts lists (user, deployer, others ...).



I tried this:



- name: Create users
user:
name: "{{ item.username }}"
comment: "{{ item.comment | default('User {{item.username}}') }}"
password: "{{ item.password | default('!') }}"
state: "{{ item.state | default('present') }}"
shell: "{{ item.shell | default('/bin/bash') }}"
group: "{{ item.group | default('users') }}"
with_items: '{{ users }}'
when: item.username is defined and ((item.admin is defined and item.admin == True) or (item.hosts is defined and item.hosts.user is defined and inventory_hostname in item.hosts.user)


It works for user1 (which have admin enabled) but not for user2 (if this play is executed on host1 which is included into user2's hosts.user list).










share|improve this question


























    up vote
    0
    down vote

    favorite












    I am trying to check if inventory_hostname is in a list into an imported variable.



    vars/users.yml file:
    ---
    users:

    - username: user1
    comment: "User 1"
    group: admin
    password: "sha password"
    keys:
    active:
    - "ssh-rsa etc"
    admin: yes

    - username: user2
    comment: "User 2"
    group: users
    groups: deployer
    keys:
    active:
    - "ssh-rsa etc"
    hosts:
    user:
    - host1
    - host2
    deployer:
    - host3


    I want to execute a task only if inventory_hostname is into any of hosts lists (user, deployer, others ...).



    I tried this:



    - name: Create users
    user:
    name: "{{ item.username }}"
    comment: "{{ item.comment | default('User {{item.username}}') }}"
    password: "{{ item.password | default('!') }}"
    state: "{{ item.state | default('present') }}"
    shell: "{{ item.shell | default('/bin/bash') }}"
    group: "{{ item.group | default('users') }}"
    with_items: '{{ users }}'
    when: item.username is defined and ((item.admin is defined and item.admin == True) or (item.hosts is defined and item.hosts.user is defined and inventory_hostname in item.hosts.user)


    It works for user1 (which have admin enabled) but not for user2 (if this play is executed on host1 which is included into user2's hosts.user list).










    share|improve this question
























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I am trying to check if inventory_hostname is in a list into an imported variable.



      vars/users.yml file:
      ---
      users:

      - username: user1
      comment: "User 1"
      group: admin
      password: "sha password"
      keys:
      active:
      - "ssh-rsa etc"
      admin: yes

      - username: user2
      comment: "User 2"
      group: users
      groups: deployer
      keys:
      active:
      - "ssh-rsa etc"
      hosts:
      user:
      - host1
      - host2
      deployer:
      - host3


      I want to execute a task only if inventory_hostname is into any of hosts lists (user, deployer, others ...).



      I tried this:



      - name: Create users
      user:
      name: "{{ item.username }}"
      comment: "{{ item.comment | default('User {{item.username}}') }}"
      password: "{{ item.password | default('!') }}"
      state: "{{ item.state | default('present') }}"
      shell: "{{ item.shell | default('/bin/bash') }}"
      group: "{{ item.group | default('users') }}"
      with_items: '{{ users }}'
      when: item.username is defined and ((item.admin is defined and item.admin == True) or (item.hosts is defined and item.hosts.user is defined and inventory_hostname in item.hosts.user)


      It works for user1 (which have admin enabled) but not for user2 (if this play is executed on host1 which is included into user2's hosts.user list).










      share|improve this question













      I am trying to check if inventory_hostname is in a list into an imported variable.



      vars/users.yml file:
      ---
      users:

      - username: user1
      comment: "User 1"
      group: admin
      password: "sha password"
      keys:
      active:
      - "ssh-rsa etc"
      admin: yes

      - username: user2
      comment: "User 2"
      group: users
      groups: deployer
      keys:
      active:
      - "ssh-rsa etc"
      hosts:
      user:
      - host1
      - host2
      deployer:
      - host3


      I want to execute a task only if inventory_hostname is into any of hosts lists (user, deployer, others ...).



      I tried this:



      - name: Create users
      user:
      name: "{{ item.username }}"
      comment: "{{ item.comment | default('User {{item.username}}') }}"
      password: "{{ item.password | default('!') }}"
      state: "{{ item.state | default('present') }}"
      shell: "{{ item.shell | default('/bin/bash') }}"
      group: "{{ item.group | default('users') }}"
      with_items: '{{ users }}'
      when: item.username is defined and ((item.admin is defined and item.admin == True) or (item.hosts is defined and item.hosts.user is defined and inventory_hostname in item.hosts.user)


      It works for user1 (which have admin enabled) but not for user2 (if this play is executed on host1 which is included into user2's hosts.user list).







      ansible






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 10 at 8:48









      Mat

      169113




      169113
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          1
          down vote



          accepted










          Well .. I tried your code snippet and it works well for both users. Only thing which can make it fail is that hostnames in item.host.user are not matching the inventory_hostname. You can try to debug the inventory_hostname before this task to see what are the inventory hostnames read by ansible and whether you have specified them correctly in item.host.user list.



          - debug: var=inventory_hostname





          share|improve this answer





















          • Thanks Kanwar! I am happy that my snippet was working, in effect I was missing the domain name into item.host.user! :-( One more question: how do you think it would be possible to check if inventory_hostname is into one of the subkeys of item.host (item.host.user or item.host.deployer) without checking one by one? Thanks!
            – Mat
            Nov 12 at 11:22











          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
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53237393%2fansible-check-if-inventory-hostname-is-in-list%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








          up vote
          1
          down vote



          accepted










          Well .. I tried your code snippet and it works well for both users. Only thing which can make it fail is that hostnames in item.host.user are not matching the inventory_hostname. You can try to debug the inventory_hostname before this task to see what are the inventory hostnames read by ansible and whether you have specified them correctly in item.host.user list.



          - debug: var=inventory_hostname





          share|improve this answer





















          • Thanks Kanwar! I am happy that my snippet was working, in effect I was missing the domain name into item.host.user! :-( One more question: how do you think it would be possible to check if inventory_hostname is into one of the subkeys of item.host (item.host.user or item.host.deployer) without checking one by one? Thanks!
            – Mat
            Nov 12 at 11:22















          up vote
          1
          down vote



          accepted










          Well .. I tried your code snippet and it works well for both users. Only thing which can make it fail is that hostnames in item.host.user are not matching the inventory_hostname. You can try to debug the inventory_hostname before this task to see what are the inventory hostnames read by ansible and whether you have specified them correctly in item.host.user list.



          - debug: var=inventory_hostname





          share|improve this answer





















          • Thanks Kanwar! I am happy that my snippet was working, in effect I was missing the domain name into item.host.user! :-( One more question: how do you think it would be possible to check if inventory_hostname is into one of the subkeys of item.host (item.host.user or item.host.deployer) without checking one by one? Thanks!
            – Mat
            Nov 12 at 11:22













          up vote
          1
          down vote



          accepted







          up vote
          1
          down vote



          accepted






          Well .. I tried your code snippet and it works well for both users. Only thing which can make it fail is that hostnames in item.host.user are not matching the inventory_hostname. You can try to debug the inventory_hostname before this task to see what are the inventory hostnames read by ansible and whether you have specified them correctly in item.host.user list.



          - debug: var=inventory_hostname





          share|improve this answer












          Well .. I tried your code snippet and it works well for both users. Only thing which can make it fail is that hostnames in item.host.user are not matching the inventory_hostname. You can try to debug the inventory_hostname before this task to see what are the inventory hostnames read by ansible and whether you have specified them correctly in item.host.user list.



          - debug: var=inventory_hostname






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 12 at 9:10









          Kanwar Saad

          99811122




          99811122












          • Thanks Kanwar! I am happy that my snippet was working, in effect I was missing the domain name into item.host.user! :-( One more question: how do you think it would be possible to check if inventory_hostname is into one of the subkeys of item.host (item.host.user or item.host.deployer) without checking one by one? Thanks!
            – Mat
            Nov 12 at 11:22


















          • Thanks Kanwar! I am happy that my snippet was working, in effect I was missing the domain name into item.host.user! :-( One more question: how do you think it would be possible to check if inventory_hostname is into one of the subkeys of item.host (item.host.user or item.host.deployer) without checking one by one? Thanks!
            – Mat
            Nov 12 at 11:22
















          Thanks Kanwar! I am happy that my snippet was working, in effect I was missing the domain name into item.host.user! :-( One more question: how do you think it would be possible to check if inventory_hostname is into one of the subkeys of item.host (item.host.user or item.host.deployer) without checking one by one? Thanks!
          – Mat
          Nov 12 at 11:22




          Thanks Kanwar! I am happy that my snippet was working, in effect I was missing the domain name into item.host.user! :-( One more question: how do you think it would be possible to check if inventory_hostname is into one of the subkeys of item.host (item.host.user or item.host.deployer) without checking one by one? Thanks!
          – Mat
          Nov 12 at 11:22


















          draft saved

          draft discarded




















































          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.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • 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.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53237393%2fansible-check-if-inventory-hostname-is-in-list%23new-answer', 'question_page');
          }
          );

          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







          這個網誌中的熱門文章

          Xamarin.form Move up view when keyboard appear

          Post-Redirect-Get with Spring WebFlux and Thymeleaf

          Anylogic : not able to use stopDelay()