[mythtv] Proposed Ansible Changes, Getting ready for ansible 2.11

David Hampton mythtv at love2code.net
Wed Aug 15 05:24:50 UTC 2018


On Tue, 2018-08-14 at 22:15 -0500, Bill Meek wrote:
> Hi all,
> 
> In Ansible 2.5, the 'loop' keyword is now preferred over the
> 'with_item' keyword.
> Mythbuntu 16.04 uses 2.0.0.2, Ubuntu 18.04 uses 2.5.1
> 
> But, both loop and with_* are no longer the keywords of choice for
> things like apt/yum...
> 
> The stimulus for doing this is the following, found when running
> Ansible 2.7:
> 
>    [DEPRECATION WARNING]: Invoking "apt" only once while using a loop
> via squash_actions is
>    deprecated. Instead of using a loop to supply multiple items and
> specifying `name: {{ item }}`,
>    please use `name: [u'git', u'g++', u'make', u'build-essential',
> u'yasm', u'automake', u'libtool',
>    u'ccache', u'pkg-config']` and remove the loop. *This feature will
> be removed in version 2.11.*
>    Deprecation warnings can be disabled by setting
> deprecation_warnings=False in ansible.cfg.
> 
> Comment from: 
> https://docs.ansible.com/ansible/devel/user_guide/playbooks_loops.html
> 
>    - name: optimal yum
>      yum:
>        name: "{{list_of_packages}}"
>        state: present
> 
>    - name: non optimal yum, not only slower but might cause issues
> with interdependencies
>      yum:
>        name: "{{item}}"
>        state: present
>      loop: "{{list_of_packages}}"
> 
> So here's my proposal, just a few lines from the mythtv-deb tasks'
> directory:
> 
> bill at ofc0:~/source/mythtv-ansible$ cat roles/mythtv-
> deb/tasks/main.yml
> 
> # EXISTING:
> - name: install compilers and build essentials
>    apt:  name={{ item }} state=present
>    with_items:
>      - git
>      - g++
>      - make
>      - build-essential
>      - yasm
>      - automake
>      - libtool
>      - ccache
>      - pkg-config
> 
> # NEW:
> - name: add compilers and build essentials
>    set_fact:
>      deb_pkg_lst:
>      - git
>      - g++
>      - make
>      - build-essential
>      - yasm
>      - automake
>      - libtool
>      - ccache
>      - pkg-config
> 
> # EXISTING:
> - name: install compilers and build essentials 2 (ubuntu)
>    apt:  name={{ item }} state=present
>    when: ansible_distribution == "Ubuntu" and
> ansible_lsb.major_release|int >= 15
>    with_items:
>      - libtool-bin
> 
> # NEW (simple case, just one package. Max. is 16):
> - name: add compilers and build essentials 2 (ubuntu)
>    set_fact:
>      deb_pkg_lst:
>        - '{{ deb_pkg_lst }}'
>        - libtool-bin
>    when: ansible_distribution == "Ubuntu" and
> ansible_lsb.major_release|int >= 15
> 
> ...
> 
> # NEW single apt: does all packages (in this main.yml) at once:
> - name: install mythtv-deb packages
>    apt:  name={{ lookup('flattened', deb_pkg_lst ) }} state=present
> 
> 
> Any comments? I'm willing to convert playbooks, starting with mythtv-
> deb.
> That's the only thing I've tested (Mythbuntu 16.04 and Ubuntu 18.04.)
> 
> I've also done another solution by giving names to each set of
> packages
> and putting that list in the vars directory alongside of the tasks
> directory.
> I think the above is easier to implement and maintain though.

Seems reasonable.  What's the "max is 16" comment about?

I have a bunch of VMs for various distros and would be willing to help
with the testing.  Probably the oldest release that you need to support
is 2.0.0 which is used by Ubuntu 16.04.  If Debian Jessie is still a
supported release, its back at 1.7.2.  Ubuntu 14.04 is even further
back at 1.5.4, but I believe its no longer officially supported now
that 18.04 is out.

David




More information about the mythtv-dev mailing list