On 22/03/19 5:34 AM, [email protected] wrote:
The following playbook worked for me, but I just started with Ansible and I'm wondering if I went about this wrong? I feel like I may have missed an easier way to say: do something only after a package has finished installing ... tasks: - name: Install python3 with a specific command and register stdout to a var command: sudo yum -y install python3 python3-pip register: varname - name: Create a directory only after python3 has been installed file: path: /home/ec2-user/newdirectory state: directory when: varname.stdout.find("Complete!") != -1









Avoid using the command module when there are specific Ansible modules available for the task. To install packages via yum, there's the yum module.

https://docs.ansible.com/ansible/latest/modules/yum_module.html

And use `become` to escalate privilege.

Your playbook can be rewritten like :

tasks:
  - name: Install python3
    yum:
     name:
      - python3
      - python3-pip
    become: true

  - name: Create a directory
    file:
      path: /home/ec2-user/newdirectory
      state: directory

The first task in the playbook will ensure that the packages are installed via yum. If there are any problems, Ansible will report it. The second task, ie, creating directory will run only if the first task succeeds. In general, playbook execution stops if any task fails. There is no need to check for the status of the first task.

-

Sudheer S

On Thursday, March 21, 2019 at 2:24:58 PM UTC-7, [email protected] wrote:

    Hello,

    I have two tasks in a playbook. The first task installs software
    with the command module. The second creates a file. I don’t want
    the second task to run until the software has finished installing.
    I’m pretty sure I need to use “when”, but I’m not sure what to
    evaluate to determine that the software has finished installing.

    I’m thinking that I could use the stdout of this yum command? The
    last line output to the screen is “Complete!” would it be possible
    to base the “when” on the existence of that text string in stdout?
    something like:

    - name: Install python3 with a specific command and register
    stdout to a var
      command: sudo yum -y install python3 python3-pip
      register: stdout

    - name: Create a directory after python3 has been installed

        file:

          path: /home/newdirectory

          state: directory

          when: [a line of text in stdout] == "Complete!"


    Does this logic even make sense? I assumed that "register" would
    put all of stdout into an array of lines of strings, but I don't
    if that's how it works or not or how to search stdout for the
    string "Complete!"?


    Thanks much for any help

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected] <mailto:[email protected]>. To post to this group, send email to [email protected] <mailto:[email protected]>. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/cdc8e599-deb7-4c7c-b94f-a2494feef196%40googlegroups.com <https://groups.google.com/d/msgid/ansible-project/cdc8e599-deb7-4c7c-b94f-a2494feef196%40googlegroups.com?utm_medium=email&utm_source=footer>.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Ansible 
Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/220dd471-b234-2049-8479-05b9dfb27a96%40techchorus.net.
For more options, visit https://groups.google.com/d/optout.

Reply via email to