rax module creates new server every time

70 views
Skip to first unread message

David Neudorfer

unread,
May 2, 2014, 10:29:07 AM5/2/14
to ansible...@googlegroups.com
When using the rax module everytime I run it it creates a new server with the same name. Shouldn't it just say "ok" if the server name already exists?

- name: Server build request
  rax:
    credentials: "{{ bamboo_build_working_directory }}/.rackconnect"
    name: "q-helios-test-{{ item.name }}"
    flavor: performance1-1
    image: ubuntu-1204-lts-precise-pangolin
    wait: yes
    state: present
    auto_increment: False
    wait_timeout: 600
    networks:
      - private
      - public
    group: "{{ item.groups }}"
  with_items:
    - { name: 'web01', groups: 'web' }
    - { name: 'web02', groups: 'web' }

If this is how its supposed to work how can I change my task so it only creates the server if it hasn't already been created?

Matt Martz

unread,
May 2, 2014, 10:54:21 AM5/2/14
to ansible...@googlegroups.com, David Neudorfer
Unless, you specify an 'exact_count: yes' when using 'group', this is the expected behavior.

If you omit 'group', it will not continue creating new servers.

Also, the way that I would recommend using the module for what you are attempting is:

- name: Server build request
  rax:
    credentials: "{{ bamboo_build_working_directory }}/.rackconnect"
    name: "q-helios-test-web%02d"
    flavor: performance1-1
    image: ubuntu-1204-lts-precise-pangolin
    wait: yes
    state: present
    wait_timeout: 600
    networks:
      - private
      - public
    group: web
    exact_count: yes
    count: 2

This will create 2 servers, named q-helios-test-web01 and q-helios-test-web02, with group=web.  It will always ensure a count of 2.

This will also be faster to build than your previous method, as it creates the servers in parallel, instead of serially.  It also utilizes printf style formatting to define the name of the servers, which alleviates you having to manually increment the number in the host name.

Also, if you are indeed utilizing rackconnect, you may want to look at my example playbooks, that appropriately wait for RackConnect and Managed Cloud automation to complete before configuring the servers:


Those examples will be added to the Rackspace Guide in the Ansible docs in the near future.

-- 
Matt Martz
ma...@sivel.net
--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/9e9e0d96-c7b2-4f84-bc3e-b20afccb58cb%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

David Neudorfer

unread,
May 2, 2014, 10:58:17 AM5/2/14
to ansible...@googlegroups.com, David Neudorfer
Thanks Matt! That wasn't clear in the module documentation. Also thank you for the samples.

I would much rather spin the servers up in parallel. Is there a way I can spin up different server names like the list below in parallel? Or do I need different tasks for each group?

    - { name: 'web01', groups: 'web' }
    - { name: 'web02', groups: 'web' }
    - { name: 'app01', groups: 'app' }
    - { name: 'app02', groups: 'app' }
    - { name: 'app03', groups: 'app' }
    - { name: 'pgm01', groups: 'pgm' }
    - { name: 'pgm02', groups: 'pgm' }
    - { name: 'pgm03', groups: 'pgm' }
    - { name: 'services01', groups: 'services' }

Matt Martz

unread,
May 2, 2014, 11:07:20 AM5/2/14
to ansible...@googlegroups.com, David Neudorfer, David Neudorfer
You will have to spin up servers in groups.  Each group will happen in parallel.  There is no existing functionality to spin up servers of different groups/names in parallel currently.

So you will have to do 'web', 'app', 'pgm' and 'services' as 4 different 'rax' invocations.
-- 
Matt Martz
ma...@sivel.net
Reply all
Reply to author
Forward
0 new messages