Creating a package module like the yum module

9 views
Skip to first unread message

Peter Burns

unread,
Nov 28, 2016, 7:05:30 PM11/28/16
to Ansible Project
Hi there,

I'm trying to create an ansible module to install packages using a custom package management system. I want it to function like the core yum module says it does when used in a loop, i.e. "Instead of calling the module with a single package each time through the loop, ansible calls the module once with all of the package names from the loop"

How would I replicate this in my own module?

I couldn't see anything special in the source for the yum module that would enable this behaviour.

I tried just specifying the input as type list, simplified below:

module = AnsibleModule(
    argument_spec = dict(
        name=dict(type="list", required=True),
    ),
    supports_check_mode = True
)
cmd = [ 'pkg_agent', '-X', ','.join(module.params'name']) ]
rc, out, err = module.run_command(cmd)

But when I used my module in a playbook, it didn't work:
  tasks:
    - name: "Install packages"
      pkg_install:
        name: "{{ item }}"
      become: True
      with_items:
        - 'common-tests'
        - 'ops-libs'

Both the debug output and the resulting behaviour was it running the install on each package individually, and not bundling them together.

The expected result was that it would run `pkg_agent -X common-tests,ops-libs` but what in fact happened is it ran `pkg_agent -X common-tests` and then `pkg_agent -X ops-libs`

This was using Ansible 2.2 on Ubuntu

Any help in where I've gone wrong with this would be much appreciated.

- Peter
Reply all
Reply to author
Forward
0 new messages