set_fact is not a valid attribute for a Play

5,475 views
Skip to first unread message

darknight

unread,
Apr 18, 2016, 1:14:49 PM4/18/16
to Ansible Project
Hi Everyone,

I am a newbie using ansible and trying to  write a playbook. I was encountering an issue with using set_fact variable in my play and not sure where i am going wrong . could any one correct me on this error. Thanks for your time


Error:

ERROR! 'set_fact' is not a valid attribute for a Play

The offending line appears to be:

---
- name: Debian | Set newrelic_loaded_os_family
  ^ here


while i was trying to set a variable for Debian installation of newrelic.
---
- name: Debian | Set newrelic_loaded_os_family
  set_fact:
    newrelic_loaded_os_family: "{{ ansible_os_family }}"


I have referred to http://docs.ansible.com/ansible/set_fact_module.html


J Hawkesworth

unread,
Apr 19, 2016, 3:55:24 AM4/19/16
to Ansible Project
Hi,

Can you share the whole of your playbook?

You probably need to specify some hosts that you want the playbook to apply to (something like this - not tested):


---
hosts: all
tasks:

  - name: Debian | Set newrelic_loaded_os_family
    set_fact:
      newrelic_loaded_os_family: "{{ ansible_os_family }}"


darknight

unread,
Apr 19, 2016, 9:03:50 AM4/19/16
to Ansible Project
Hi J,

thanks for taking time to look into this.I was using kitchen-vagrant to do testing by launching debian in virtualbox. My hosts file,kitchen.yml, including  main.yml and debian.yml files that i have so far in my play book are attached below. I am also curios if i can call tasks directly through the playbook or i need to mention their absolute path during the path. when i tried just the name of the task, it failed with the message "Error: not found".

Kitchen.yml

---
driver:
  name: vagrant

provisioner:
  name: ansible-playbook
  hosts: localhost
  remote_user: root
  roles_path: roles
  playbook: main.yml
  ansible_verbose: true


platforms:
  - name: debian-8.2
    driver_plugin:  vagrant
    driver_config:
      box: debian-8.2
      box_url: https://atlas.hashicorp.com/puppetlabs/boxes/debian-8.2-64-nocm
      network:
      - ['forwarded_port', {guest: 8080, host: 8080} ]
      - ['private_network', { ip: '192.168.33.11' } ]



main.yml
---
- include: "roles/tasks/debian.yml"
  when: ansible_os_family == 'Debian'

roles/tasks/debian.yml


---
   - name: Debian | Set newrelic_loaded_os_family
    set_fact:
      newrelic_loaded_os_family: "{{ ansible_os_family }}"
      when: ansible_os_family == 'Debian'


hosts

testserver
ansible_connection=ssh
ansible_port=2222
ansible_user=vagrant


Commands

1. ansible-playbook -i hosts newrelic-test/main.yml
2. ansible-playbook -i hosts newrelic-test/main.yml --syntax-check

Thanks

Brian Coca

unread,
Apr 19, 2016, 12:15:23 PM4/19/16
to ansible...@googlegroups.com
main.yml (after include) is not a playbook, its a task list, hence the message as it is trying to read the Task as a Play.


----------
Brian Coca
Reply all
Reply to author
Forward
0 new messages