On Thu, Jul 6, 2017 at 8:59 AM, Jeff Li <
jaf...@gmail.com> wrote:
> Hope it is clear.
>
> The directory structure looks like this
>
>
> playbook.yml
> vars/main.yml
> roles/my-roles/handlers/main.yml
> roles/my-roles/handlers/ocata.yml
> roles/my-roles/handlers/kilo.yml
>
>
>
> The roles/my-roles/handlers/main.yml looks like this
>
> ---
> - include: "{{ codename }}".yml
>
>
> The variable codename is defined in vars/main.yml
>
>
> codename: ocata
>
That looks very similar to what I am doing (test.yml is my playbook):
raub@desktop:~/dev/ansible$ cat test.yml
---
# file: test.yml
#
- hosts:
- test
roles:
- test
raub@desktop:~/dev/ansible$ cat group_vars/test
---
handlerpath: duck.yml
raub@desktop:~/dev/ansible$ cat roles/test/tasks/main.yml
---
- name: First we need to know the path for the handler file
debug:
msg: "Hander Path: {{ handlerpath }}"
- name: So which handler file are we using today?
shell: "echo Handler path {{ handlerpath }} "
notify: which handler
raub@desktop:~/dev/ansible$ cat roles/test/handlers/main.yml
---
# test/handlers/main.yml
- include: "{{ handlerpath }}"
# - name: which handler
# debug:
# msg: "Hander Path: {{ handlerpath }}"
raub@desktop:~/dev/ansible$ cat roles/test/handlers/duck.yml
---
- name: which handler
debug:
msg: "Path = {{ handlerpath }}"
raub@desktop:~/dev/ansible$
The commented debug line is in both the main handler and task files
for me to test whether the variable I created gets there. So if I go
to the main handler file and comment the include statement and
uncomment the debug stuff, I get
raub@desktop:~/dev/ansible$ ansible-playbook -i hosts test.yml
PLAY [test] ********************************************************************
TASK [Gathering Facts] *********************************************************
ok: [ansibletest]
TASK [test : First we need to know the path for the handler file] **************
ok: [ansibletest] => {
"changed": false,
"msg": "Hander Path: duck.yml"
}
TASK [test : So which handler file are we using today?] ************************
changed: [ansibletest]
RUNNING HANDLER [test : which handler] *****************************************
ok: [ansibletest] => {
"changed": false,
"msg": "Hander Path: duck.yml"
}
PLAY RECAP *********************************************************************
ansibletest : ok=4 changed=1 unreachable=0 failed=0
raub@desktop:~/dev/ansible$
But if I run as shown above, it does not seem to be able to include my duck:
[....]
TASK [Gathering Facts] *********************************************************
ok: [ansibletest]
TASK [test : First we need to know the path for the handler file] **************
ok: [ansibletest] => {
"changed": false,
"msg": "Hander Path: duck.yml"
}
TASK [test : So which handler file are we using today?] ************************
ERROR! The requested handler 'which handler' was not found in either
the main handlers list nor in the listening handlers list
raub@desktop:~/dev/ansible$
First thing I did was to check if there was no extra blank spaces
around 'which handler'in duck.yml. BTW, just to be on the safe side, I
did then try moving group_vars/test to roles/test/vars/main.yml to see
if it makes any difference (and be closer to your setup). Outcome was
the same. And I am running ansible 2.3.0.0.
>
https://groups.google.com/d/msgid/ansible-project/580fbe81-65c7-432c-86b8-a7ffb532c193%40googlegroups.com.