0

I am getting troubles to execute a python script using ansible.

I have the next ansible structure:

python_project
  roles
    prueba
      files
        prueba.py
      tasks
        prueba.yaml

My yaml is the following one:

- name: prueba script python playbook
  hosts: localhost
  tasks:
    - name: run prueba.py
      script: prueba.py

I execute it like this: ansible-playbook prueba.yaml and I get the following error:

fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find or
access 'prueba.py'\n
Searched in:\n\t/root/python_project/roles/prueba/tasks/files/pr                                                                             ueba.py\n\t/root/python_project/roles/prueba/tasks/prueba.py\n\t/root/python_pro                                                                 ject/roles/prueba/tasks/files/prueba.py\n\t/root/python_project/roles/prueba/tas                                                                             ks/prueba.py on the Ansible Controller.\nIf you are using a module and expect th                                                                             e file to exist on the remote, see the remote_src option"}

Any suggestion?

0

1 Answer 1

2

I think you have an issue in the definition in your role. Is that a role and you want it to work as an ansible role? If thats the case you should change a few things. You should have a separate playbook to invoque this role and move this role to your role folder. If thats not a role. Indeed you have to specify the path to the python script:

    - name: prueba script python playbook
      hosts: localhost
      tasks:
        - name: run prueba.py
          script: /root/python_project/roles/prueba/files/prueba.py

I think you want to work with roles. To make it as a role you need to change few things. tasks/main.yml (This is your task directory you can create the yml with the name you want not necesary main.yml)

- name: run prueba.py
  script: prueba.py

As you can see on a role, the tasks/main.yml dont need to have the hosts, neither the tasks section the file itself its a task section. The logic of the hosts will be moved to the play that invoque the role.

Create this file on any path you want: example_role_invoque.yml

  - hosts: localhost
    tasks:
      - name: invocar rol
        include_role: prueba

I let you a reference link: ROLES

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.