Question about source files in an Ansible Collection

103 views
Skip to first unread message

lift...@gmail.com

unread,
Jun 7, 2023, 2:16:36 PM6/7/23
to Ansible Project
I have a collection that I've built with numerous roles in it.  Under one of the roles, I have a files folder with some files in it used during the role execution.  However, I have a situation where 2 of these files keep erroring out saying that the source isn't found.

For example, I have one file that I use the unarchive module to extract it, and it works:

- name: Branding | Extract the jar file
  ansible.builtin.unarchive:
    src: files/tsose.jar
    dest: /var/tmp/guacbranding

But when I try to install an RPM that is located in the same files folder, I get an error stating that the source file is not found:

    - name: Install Latest RHEL 7 MySQL Connector
      ansible.builtin.yum:
        name: files/mysql-connector-j-8.0.33-1.el7.noarch.rpm
        state: present
        disable_gpg_check: true

I even tried to copy the file locally using the copy module with the remote_src flag set to true, but I get the same "file not found" error.  And when I check the tar file that is created and I upload to our automation hub, the files are there under files.

Any ideas?

Thanks,
Harry

Vladimir Botka

unread,
Jun 7, 2023, 8:10:42 PM6/7/23
to lift...@gmail.com, ansible...@googlegroups.com
On Wed, 7 Jun 2023 11:16:35 -0700 (PDT)
"lift...@gmail.com" <lift...@gmail.com> wrote:

> - ansible.builtin.yum:
> name: files/mysql-connector-j-8.0.33-1.el7.noarch.rpm
>
> I even tried to copy the file locally using the copy module with the
> remote_src flag set to true, but I get the same "file not found" error.

Absolute path on the remote host is required

if spec.endswith('.rpm') or '://' in spec:
if '://' not in spec and not os.path.exists(spec):
res['msg'] += "No RPM file matching '%s' found on system" % spec

https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/yum.py#L1040


--
Vladimir Botka

lift...@gmail.com

unread,
Jun 8, 2023, 7:42:48 AM6/8/23
to Ansible Project
Fair enough.  Then why wouldn't the following work (trying to copy the RPM to the host, then running the yum module from that path)?:

- name: Config | Handle RHEL 7 MySQL Connector
  when: (guacamole_mysql_auth) and (ansible_distribution_major_version == '7')
  block:
    - name: Copy the RPM locally
      ansible.builtin.copy:
        src: files/mysql-connector-j-8.0.33-1.el7.noarch.rpm
        dest: /var/tmp/
        owner: root
        group: root
        mode: 0644
        remote_src: true

    - name: Install Latest RHEL 7 MySQL Connector
      ansible.builtin.yum:
        name: /var/tmp/mysql-connector-j-8.0.33-1.el7.noarch.rpm
        state: present
        disable_gpg_check: true
    - name: Remove local RPM file
      ansible.builtin.file:
        path: /var/tmp/mysql-connector-j-8.0.33-1.el7.noarch.rpm
        state: absent

Thanks,
Harry

Vladimir Botka

unread,
Jun 8, 2023, 8:53:11 AM6/8/23
to lift...@gmail.com, ansible...@googlegroups.com
On Thu, 8 Jun 2023 04:42:48 -0700 (PDT)
"lift...@gmail.com" <lift...@gmail.com> wrote:

> ...
> - name: Copy the RPM locally
> ansible.builtin.copy:
> src: files/mysql-connector-j-8.0.33-1.el7.noarch.rpm
> dest: /var/tmp/
> owner: root
> group: root
> mode: 0644
> remote_src: true

This copy is rather confusing. You said the directory *files* is in a
role, i.e. on the controller. Now you set *remote_src: true* which
takes the source from the remote host.

To isolate the problem. You should verify each step you make. In this
case, before you run *yum*, verify the file
*/var/tmp/mysql-connector-j-8.0.33-1.el7.noarch.rpm* is present and
readable.

--
Vladimir Botka

lift...@gmail.com

unread,
Jun 8, 2023, 1:29:51 PM6/8/23
to Ansible Project
The remote_src ended up being the issue with the copy.  Once i removed that, I was able to copy the RPM file, then give the absolute path to the yum/dnf module, and install as expected.  Thanks for the assistance!

Thanks,
Harry
Reply all
Reply to author
Forward
0 new messages