Ansible: playbook name and task step index on variables











up vote
0
down vote

favorite












In my playbook I have several shell task per playbook, like ten or more. I want to use creates shell arg to avoid executing them over and over.



Currently I have this:



- name: Download sonar-runner
get_url:
url: http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar- runner-dist/2.4/sonar-runner-dist-2.4.zip
dest: /tmp
mode: 0755

- name: Unarchive
unarchive:
src: /tmp/sonar-runner-dist-2.4.zip
dest: /opt/tools/sonar-runner-2.4

- name: Sym link
shell: ln -s sonar-runner-2.4 sonar-runner
args:
creates: ~/.ansible/sonar-runner.task/step.3

- name: Configure profile
shell: |
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/' > /etc/profile.d/maven.sh
echo 'export M2_HOME=/opt/maven/apache-maven-3.5.3' >> /etc/profile.d/maven.sh
echo 'export PATH=${M2_HOME}/bin:${PATH}' >> /etc/profile.d/maven.sh
args:
creates: ~/.ansible/sonar-runner.task/step.4


Is there any way to achieve this using variables. I'm thinking something like this:



- name: Sym link
shell: ln -s sonar-runner-2.4 sonar-runner
args:
creates: ~/.ansible/{{playbook_name}}/{{task_index}}

- name: Configure profile
shell: |
echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/' > /etc/profile.d/maven.sh
echo 'export M2_HOME=/opt/maven/apache-maven-3.5.3' >> /etc/profile.d/maven.sh
echo 'export PATH=${M2_HOME}/bin:${PATH}' >> /etc/profile.d/maven.sh
args:
creates: ~/.ansible/{{playbook_name}}/{{task_index}}


Is there any way to do this? Am I missing something? Or isn't that the way Ansible works?










share|improve this question


























    up vote
    0
    down vote

    favorite












    In my playbook I have several shell task per playbook, like ten or more. I want to use creates shell arg to avoid executing them over and over.



    Currently I have this:



    - name: Download sonar-runner
    get_url:
    url: http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar- runner-dist/2.4/sonar-runner-dist-2.4.zip
    dest: /tmp
    mode: 0755

    - name: Unarchive
    unarchive:
    src: /tmp/sonar-runner-dist-2.4.zip
    dest: /opt/tools/sonar-runner-2.4

    - name: Sym link
    shell: ln -s sonar-runner-2.4 sonar-runner
    args:
    creates: ~/.ansible/sonar-runner.task/step.3

    - name: Configure profile
    shell: |
    echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/' > /etc/profile.d/maven.sh
    echo 'export M2_HOME=/opt/maven/apache-maven-3.5.3' >> /etc/profile.d/maven.sh
    echo 'export PATH=${M2_HOME}/bin:${PATH}' >> /etc/profile.d/maven.sh
    args:
    creates: ~/.ansible/sonar-runner.task/step.4


    Is there any way to achieve this using variables. I'm thinking something like this:



    - name: Sym link
    shell: ln -s sonar-runner-2.4 sonar-runner
    args:
    creates: ~/.ansible/{{playbook_name}}/{{task_index}}

    - name: Configure profile
    shell: |
    echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/' > /etc/profile.d/maven.sh
    echo 'export M2_HOME=/opt/maven/apache-maven-3.5.3' >> /etc/profile.d/maven.sh
    echo 'export PATH=${M2_HOME}/bin:${PATH}' >> /etc/profile.d/maven.sh
    args:
    creates: ~/.ansible/{{playbook_name}}/{{task_index}}


    Is there any way to do this? Am I missing something? Or isn't that the way Ansible works?










    share|improve this question
























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      In my playbook I have several shell task per playbook, like ten or more. I want to use creates shell arg to avoid executing them over and over.



      Currently I have this:



      - name: Download sonar-runner
      get_url:
      url: http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar- runner-dist/2.4/sonar-runner-dist-2.4.zip
      dest: /tmp
      mode: 0755

      - name: Unarchive
      unarchive:
      src: /tmp/sonar-runner-dist-2.4.zip
      dest: /opt/tools/sonar-runner-2.4

      - name: Sym link
      shell: ln -s sonar-runner-2.4 sonar-runner
      args:
      creates: ~/.ansible/sonar-runner.task/step.3

      - name: Configure profile
      shell: |
      echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/' > /etc/profile.d/maven.sh
      echo 'export M2_HOME=/opt/maven/apache-maven-3.5.3' >> /etc/profile.d/maven.sh
      echo 'export PATH=${M2_HOME}/bin:${PATH}' >> /etc/profile.d/maven.sh
      args:
      creates: ~/.ansible/sonar-runner.task/step.4


      Is there any way to achieve this using variables. I'm thinking something like this:



      - name: Sym link
      shell: ln -s sonar-runner-2.4 sonar-runner
      args:
      creates: ~/.ansible/{{playbook_name}}/{{task_index}}

      - name: Configure profile
      shell: |
      echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/' > /etc/profile.d/maven.sh
      echo 'export M2_HOME=/opt/maven/apache-maven-3.5.3' >> /etc/profile.d/maven.sh
      echo 'export PATH=${M2_HOME}/bin:${PATH}' >> /etc/profile.d/maven.sh
      args:
      creates: ~/.ansible/{{playbook_name}}/{{task_index}}


      Is there any way to do this? Am I missing something? Or isn't that the way Ansible works?










      share|improve this question













      In my playbook I have several shell task per playbook, like ten or more. I want to use creates shell arg to avoid executing them over and over.



      Currently I have this:



      - name: Download sonar-runner
      get_url:
      url: http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar- runner-dist/2.4/sonar-runner-dist-2.4.zip
      dest: /tmp
      mode: 0755

      - name: Unarchive
      unarchive:
      src: /tmp/sonar-runner-dist-2.4.zip
      dest: /opt/tools/sonar-runner-2.4

      - name: Sym link
      shell: ln -s sonar-runner-2.4 sonar-runner
      args:
      creates: ~/.ansible/sonar-runner.task/step.3

      - name: Configure profile
      shell: |
      echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/' > /etc/profile.d/maven.sh
      echo 'export M2_HOME=/opt/maven/apache-maven-3.5.3' >> /etc/profile.d/maven.sh
      echo 'export PATH=${M2_HOME}/bin:${PATH}' >> /etc/profile.d/maven.sh
      args:
      creates: ~/.ansible/sonar-runner.task/step.4


      Is there any way to achieve this using variables. I'm thinking something like this:



      - name: Sym link
      shell: ln -s sonar-runner-2.4 sonar-runner
      args:
      creates: ~/.ansible/{{playbook_name}}/{{task_index}}

      - name: Configure profile
      shell: |
      echo 'export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/' > /etc/profile.d/maven.sh
      echo 'export M2_HOME=/opt/maven/apache-maven-3.5.3' >> /etc/profile.d/maven.sh
      echo 'export PATH=${M2_HOME}/bin:${PATH}' >> /etc/profile.d/maven.sh
      args:
      creates: ~/.ansible/{{playbook_name}}/{{task_index}}


      Is there any way to do this? Am I missing something? Or isn't that the way Ansible works?







      ansible






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 22 at 15:22









      Jose Juan Calderon Viedma

      105




      105
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote














          Is there any way to do this? Am I missing something? Or isn't that the way Ansible works?




          Yes, yes, and no :-)




          Is there any way to do this?




          The shell: and command: support inline creates= declarations, so you can keep all of that together in one block (and thus it is a candidate for being a variable, or a yaml anchor):



          - shell: |
          creates=/etc/profile.d/maven.sh
          echo 'hello' > /etc/profile.d/maven.sh
          - command: |
          creates=/etc/profile.d/maven.sh
          cp /something /etc/profile.d/maven.sh


          However, I just told you that for your information, and for the circumstances where these next set of steps won't work because ...




          Am I missing something?




          You want to use the built-in idempotency whenever possible, to get you out of the business of having to do manual "has this task run" bookkeeping. Thus:



          - file:
          src: sonar-runner-2.4
          dest: sonar-runner
          state: link
          - copy:
          dest: /etc/profile.d/maven.sh
          content: |
          export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
          export M2_HOME=/opt/maven/apache-maven-3.5.3
          export PATH=${M2_HOME}/bin:${PATH}


          I'm genuinely surprised ansible didn't whine when you tried to use ln manually, as it knows about common shell commands and will nudge you to switch to the built-in module file:






          share|improve this answer





















          • The playbook posted was a section of a larger one. I guess some of the shell calls could be replaced with ansible modules but not all of them. I was looking for a way to make things easier when the bookkeping is unavoidable.
            – Jose Juan Calderon Viedma
            Nov 23 at 13:01











          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',
          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%2f53434037%2fansible-playbook-name-and-task-step-index-on-variables%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
          0
          down vote














          Is there any way to do this? Am I missing something? Or isn't that the way Ansible works?




          Yes, yes, and no :-)




          Is there any way to do this?




          The shell: and command: support inline creates= declarations, so you can keep all of that together in one block (and thus it is a candidate for being a variable, or a yaml anchor):



          - shell: |
          creates=/etc/profile.d/maven.sh
          echo 'hello' > /etc/profile.d/maven.sh
          - command: |
          creates=/etc/profile.d/maven.sh
          cp /something /etc/profile.d/maven.sh


          However, I just told you that for your information, and for the circumstances where these next set of steps won't work because ...




          Am I missing something?




          You want to use the built-in idempotency whenever possible, to get you out of the business of having to do manual "has this task run" bookkeeping. Thus:



          - file:
          src: sonar-runner-2.4
          dest: sonar-runner
          state: link
          - copy:
          dest: /etc/profile.d/maven.sh
          content: |
          export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
          export M2_HOME=/opt/maven/apache-maven-3.5.3
          export PATH=${M2_HOME}/bin:${PATH}


          I'm genuinely surprised ansible didn't whine when you tried to use ln manually, as it knows about common shell commands and will nudge you to switch to the built-in module file:






          share|improve this answer





















          • The playbook posted was a section of a larger one. I guess some of the shell calls could be replaced with ansible modules but not all of them. I was looking for a way to make things easier when the bookkeping is unavoidable.
            – Jose Juan Calderon Viedma
            Nov 23 at 13:01















          up vote
          0
          down vote














          Is there any way to do this? Am I missing something? Or isn't that the way Ansible works?




          Yes, yes, and no :-)




          Is there any way to do this?




          The shell: and command: support inline creates= declarations, so you can keep all of that together in one block (and thus it is a candidate for being a variable, or a yaml anchor):



          - shell: |
          creates=/etc/profile.d/maven.sh
          echo 'hello' > /etc/profile.d/maven.sh
          - command: |
          creates=/etc/profile.d/maven.sh
          cp /something /etc/profile.d/maven.sh


          However, I just told you that for your information, and for the circumstances where these next set of steps won't work because ...




          Am I missing something?




          You want to use the built-in idempotency whenever possible, to get you out of the business of having to do manual "has this task run" bookkeeping. Thus:



          - file:
          src: sonar-runner-2.4
          dest: sonar-runner
          state: link
          - copy:
          dest: /etc/profile.d/maven.sh
          content: |
          export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
          export M2_HOME=/opt/maven/apache-maven-3.5.3
          export PATH=${M2_HOME}/bin:${PATH}


          I'm genuinely surprised ansible didn't whine when you tried to use ln manually, as it knows about common shell commands and will nudge you to switch to the built-in module file:






          share|improve this answer





















          • The playbook posted was a section of a larger one. I guess some of the shell calls could be replaced with ansible modules but not all of them. I was looking for a way to make things easier when the bookkeping is unavoidable.
            – Jose Juan Calderon Viedma
            Nov 23 at 13:01













          up vote
          0
          down vote










          up vote
          0
          down vote










          Is there any way to do this? Am I missing something? Or isn't that the way Ansible works?




          Yes, yes, and no :-)




          Is there any way to do this?




          The shell: and command: support inline creates= declarations, so you can keep all of that together in one block (and thus it is a candidate for being a variable, or a yaml anchor):



          - shell: |
          creates=/etc/profile.d/maven.sh
          echo 'hello' > /etc/profile.d/maven.sh
          - command: |
          creates=/etc/profile.d/maven.sh
          cp /something /etc/profile.d/maven.sh


          However, I just told you that for your information, and for the circumstances where these next set of steps won't work because ...




          Am I missing something?




          You want to use the built-in idempotency whenever possible, to get you out of the business of having to do manual "has this task run" bookkeeping. Thus:



          - file:
          src: sonar-runner-2.4
          dest: sonar-runner
          state: link
          - copy:
          dest: /etc/profile.d/maven.sh
          content: |
          export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
          export M2_HOME=/opt/maven/apache-maven-3.5.3
          export PATH=${M2_HOME}/bin:${PATH}


          I'm genuinely surprised ansible didn't whine when you tried to use ln manually, as it knows about common shell commands and will nudge you to switch to the built-in module file:






          share|improve this answer













          Is there any way to do this? Am I missing something? Or isn't that the way Ansible works?




          Yes, yes, and no :-)




          Is there any way to do this?




          The shell: and command: support inline creates= declarations, so you can keep all of that together in one block (and thus it is a candidate for being a variable, or a yaml anchor):



          - shell: |
          creates=/etc/profile.d/maven.sh
          echo 'hello' > /etc/profile.d/maven.sh
          - command: |
          creates=/etc/profile.d/maven.sh
          cp /something /etc/profile.d/maven.sh


          However, I just told you that for your information, and for the circumstances where these next set of steps won't work because ...




          Am I missing something?




          You want to use the built-in idempotency whenever possible, to get you out of the business of having to do manual "has this task run" bookkeeping. Thus:



          - file:
          src: sonar-runner-2.4
          dest: sonar-runner
          state: link
          - copy:
          dest: /etc/profile.d/maven.sh
          content: |
          export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
          export M2_HOME=/opt/maven/apache-maven-3.5.3
          export PATH=${M2_HOME}/bin:${PATH}


          I'm genuinely surprised ansible didn't whine when you tried to use ln manually, as it knows about common shell commands and will nudge you to switch to the built-in module file:







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 22 at 17:54









          Matthew L Daniel

          7,00112326




          7,00112326












          • The playbook posted was a section of a larger one. I guess some of the shell calls could be replaced with ansible modules but not all of them. I was looking for a way to make things easier when the bookkeping is unavoidable.
            – Jose Juan Calderon Viedma
            Nov 23 at 13:01


















          • The playbook posted was a section of a larger one. I guess some of the shell calls could be replaced with ansible modules but not all of them. I was looking for a way to make things easier when the bookkeping is unavoidable.
            – Jose Juan Calderon Viedma
            Nov 23 at 13:01
















          The playbook posted was a section of a larger one. I guess some of the shell calls could be replaced with ansible modules but not all of them. I was looking for a way to make things easier when the bookkeping is unavoidable.
          – Jose Juan Calderon Viedma
          Nov 23 at 13:01




          The playbook posted was a section of a larger one. I guess some of the shell calls could be replaced with ansible modules but not all of them. I was looking for a way to make things easier when the bookkeping is unavoidable.
          – Jose Juan Calderon Viedma
          Nov 23 at 13:01


















          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%2f53434037%2fansible-playbook-name-and-task-step-index-on-variables%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







          Popular posts from this blog

          What visual should I use to simply compare current year value vs last year in Power BI desktop

          Alexandru Averescu

          Trompette piccolo