##### SUMMARY
Module meta execute every time, even if the action has a different tag specified.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
meta tasks (end_host, end_play)

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```
ansible 2.8.5
  config file = /root/3-ansible-modul/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Jun 20 2019, 20:27:34) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```
CACHE_PLUGIN(/root/3-ansible-modul/ansible.cfg) = jsonfile
CACHE_PLUGIN_CONNECTION(/root/3-ansible-modul/ansible.cfg) = /tmp/facts_cache
CACHE_PLUGIN_TIMEOUT(/root/3-ansible-modul/ansible.cfg) = 7200
DEFAULT_GATHERING(/root/3-ansible-modul/ansible.cfg) = smart
DEFAULT_HOST_LIST(/root/3-ansible-modul/ansible.cfg) = [u'/root/3-ansible-modul/multinode']
```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
vm1_main (ansible host): CentOS Linux release 7.6.1810 (Core)
vm2 and vm3: CentOS Linux release 7.5.1804 (Core)
##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->
Run playbook below with tag "a".
<!--- Paste example playbooks or commands between quotes below -->
```
# cat playbook.yml
---
- hosts: all
  remote_user: root
  gather_facts: yes
  tasks:
  - name: "a1"
    debug:
      msg: "a1"
    tags: a

  - name: "modul"
    debug:
      msg: "modul"
    tags: modul

  - name: "modul - endhost"
    meta: end_host
    tags: modul

  - name: "a2"
    debug:
      msg: "a2"
    tags: a

  - name: "modul2"
    debug:
      msg: "modul2"
    tags: modul
```

<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->
Task "a2" should be also executed, because meta:end_host is under different tag.

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->
No matter what meta task i use, it always execute even if its action is specified within different tag.
<!--- Paste verbatim command output between quotes -->
```
# ansible-playbook playbook.yml -t a -vvv
PLAYBOOK: playbook.yml **********************************************************************************************
1 plays in playbook.yml

PLAY [all] **********************************************************************************************************
META: ran handlers

TASK [a1] ***********************************************************************************************************
task path: /root/3-ansible-modul/playbook.yml:7
ok: [vm1_main] => {
    "msg": "a1"
}
ok: [vm2] => {
    "msg": "a1"
}
ok: [vm3] => {
    "msg": "a1"
}
META: ending play for vm1_main
META: ending play for vm2
META: ending play for vm3

PLAY RECAP **********************************************************************************************************
vm1_main                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
vm2                        : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
vm3                        : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
```

from __future__ import absolute_import, division, print_function
__metaclass__ = type
DOCUMENTATION = r'''
module: meta
short_description: Execute Ansible 'actions'
version_added: '1.2'
description:
    - Meta tasks are a special kind of task which can influence Ansible internal execution or state.
    - Meta tasks can be used anywhere within your playbook.
    - This module is also supported for Windows targets.
options:
  free_form:
    description:
        - This module takes a free form command, as a string. There is not an actual option named "free form".  See the examples!
        - C(flush_handlers) makes Ansible run any handler tasks which have thus far been notified. Ansible inserts these tasks internally at certain
          points to implicitly trigger handler runs (after pre/post tasks, the final role execution, and the main tasks section of your plays).
        - C(refresh_inventory) (added in Ansible 2.0) forces the reload of the inventory, which in the case of dynamic inventory scripts means they will be
          re-executed. If the dynamic inventory script is using a cache, Ansible cannot know this and has no way of refreshing it (you can disable the cache
          or, if available for your specific inventory datasource (e.g. aws), you can use the an inventory plugin instead of an inventory script).
          This is mainly useful when additional hosts are created and users wish to use them instead of using the M(ansible.builtin.add_host) module.
        - C(noop) (added in Ansible 2.0) This literally does 'nothing'. It is mainly used internally and not recommended for general use.