<p dir="auto"><strong>Issue Type:</strong> Bug Report<br>
<strong>Ansible Version:</strong> 2.0.0.2<br>
<strong>Environment:</strong> OSX<br>
<strong>Summary:</strong> Ansible 1x allowed the combination of lists using the <code class="notranslate">+</code> operator. Ansible 2x does not. Is this a wontfix?</p>
<p dir="auto">Here is a playbook that fails in 2x but not 1.9x:</p>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="- hosts: all
  gather_facts: false
  vars:
    fruit:
      - apple
      - pear
    veggie:
      - carrot
      - onion
  tasks:
    - file: src={{item}} state=touch
      delegate_to: localhost
      with_items: fruit + veggie"><pre class="notranslate">- <span class="pl-ent">hosts</span>: <span class="pl-s">all</span>
  <span class="pl-ent">gather_facts</span>: <span class="pl-c1">false</span>
  <span class="pl-ent">vars</span>:
    <span class="pl-ent">fruit</span>:
      - <span class="pl-s">apple</span>
      - <span class="pl-s">pear</span>
    <span class="pl-ent">veggie</span>:
      - <span class="pl-s">carrot</span>
      - <span class="pl-s">onion</span>
  <span class="pl-ent">tasks</span>:
    - <span class="pl-ent">file</span>: <span class="pl-s">src={{item}} state=touch</span>
      <span class="pl-ent">delegate_to</span>: <span class="pl-s">localhost</span>
      <span class="pl-ent">with_items</span>: <span class="pl-s">fruit + veggie</span></pre></div>
<p dir="auto"><strong>Workarounds</strong> (use <code class="notranslate">with_flattened</code> or <code class="notranslate">union</code> filter):</p>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="- hosts: all
  gather_facts: false
  vars:
    fruit:
      - apple
      - pear
    veggie:
      - carrot
      - onion
  tasks:
    - file: path={{item}} state=touch
      delegate_to: localhost
      with_flattened:
       - fruit
       - veggie"><pre class="notranslate">- <span class="pl-ent">hosts</span>: <span class="pl-s">all</span>
  <span class="pl-ent">gather_facts</span>: <span class="pl-c1">false</span>
  <span class="pl-ent">vars</span>:
    <span class="pl-ent">fruit</span>:
      - <span class="pl-s">apple</span>
      - <span class="pl-s">pear</span>
    <span class="pl-ent">veggie</span>:
      - <span class="pl-s">carrot</span>
      - <span class="pl-s">onion</span>
  <span class="pl-ent">tasks</span>:
    - <span class="pl-ent">file</span>: <span class="pl-s">path={{item}} state=touch</span>
      <span class="pl-ent">delegate_to</span>: <span class="pl-s">localhost</span>
      <span class="pl-ent">with_flattened</span>:
       - <span class="pl-s">fruit</span>
       - <span class="pl-s">veggie</span></pre></div>
<div class="highlight highlight-source-yaml notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="- hosts: all
  gather_facts: false
  vars:
    fruit:
      - apple
      - pear
    veggie:
      - carrot
      - onion
  tasks:
    - file: path={{item}} state=touch
      delegate_to: localhost
      with_items: fruit | union(veggie)"><pre class="notranslate">- <span class="pl-ent">hosts</span>: <span class="pl-s">all</span>
  <span class="pl-ent">gather_facts</span>: <span class="pl-c1">false</span>
  <span class="pl-ent">vars</span>:
    <span class="pl-ent">fruit</span>:
      - <span class="pl-s">apple</span>
      - <span class="pl-s">pear</span>
    <span class="pl-ent">veggie</span>:
      - <span class="pl-s">carrot</span>
      - <span class="pl-s">onion</span>
  <span class="pl-ent">tasks</span>:
    - <span class="pl-ent">file</span>: <span class="pl-s">path={{item}} state=touch</span>
      <span class="pl-ent">delegate_to</span>: <span class="pl-s">localhost</span>
      <span class="pl-ent">with_items</span>: <span class="pl-s">fruit | union(veggie)</span></pre></div>
<h2 dir="auto">Enviroment:</h2>
<p dir="auto">Ansible: 2.0.0.2<br>
OS: Ubuntu 14.04.3 LTS<br>
Python: 2.7.6</p>
<h2 dir="auto">Steps To Reproduce:</h2>
<p dir="auto">TASK:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="- name: test_1
  copy: src={{ secure_vault }}/google-authentificator/{{ item['name'] }}/.google_authenticator dest=/home/{{ item['name'] }}/.google_authenticator backup=yes owner={{ item['name'] }} mode=0400
  with_items: administrators + developers"><pre class="notranslate"><code class="notranslate">- name: test_1
  copy: src={{ secure_vault }}/google-authentificator/{{ item['name'] }}/.google_authenticator dest=/home/{{ item['name'] }}/.google_authenticator backup=yes owner={{ item['name'] }} mode=0400
  with_items: administrators + developers
</code></pre></div>
<p dir="auto">VARS:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="administrators:
  - { name: bob.ai, mail: bob_ai@test.com }
  - { name: john, mail: john_pa@test.com }

developers:
  - { name: frank_a, mail: office@test.com }
  - { name: mario_a, mail: office@test.com }"><pre class="notranslate"><code class="notranslate">administrators:
  - { name: bob.ai, mail: bob_ai@test.com }
  - { name: john, mail: john_pa@test.com }

developers:
  - { name: frank_a, mail: office@test.com }
  - { name: mario_a, mail: office@test.com }
</code></pre></div>
<h2 dir="auto">When executing this on Ansible 2.0:</h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="...
TASK [vpn-access-server | test_1] **********
fatal: [vpn03]: FAILED! =&gt; {&quot;failed&quot;: true, &quot;msg&quot;: &quot;ERROR! 'unicode object' has no attribute 'name'&quot;}
..."><pre class="notranslate"><code class="notranslate">...
TASK [vpn-access-server | test_1] **********
fatal: [vpn03]: FAILED! =&gt; {"failed": true, "msg": "ERROR! 'unicode object' has no attribute 'name'"}
...
</code></pre></div>
<h2 dir="auto">When executing this on Ansible 1.9.4:</h2>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="TASK: [vpn-access-server | test_1] ******** 

ok: [vpn03] =&gt; (item={'mail': 'bob_ai@test.com', 'name': 'bob.ai'})

ok: [vpn03] =&gt; (item={'mail': 'john_pa@test.com', 'name': 'john'})

ok: [vpn03] =&gt; (item={'mail': 'office@test.com', 'name': 'frank_a'})

ok: [vpn03] =&gt; (item={'mail': 'office@test.com', 'name': 'mario_a'})"><pre class="notranslate"><code class="notranslate">TASK: [vpn-access-server | test_1] ******** 

ok: [vpn03] =&gt; (item={'mail': 'bob_ai@test.com', 'name': 'bob.ai'})

ok: [vpn03] =&gt; (item={'mail': 'john_pa@test.com', 'name': 'john'})

ok: [vpn03] =&gt; (item={'mail': 'office@test.com', 'name': 'frank_a'})

ok: [vpn03] =&gt; (item={'mail': 'office@test.com', 'name': 'mario_a'})
</code></pre></div>