rax module creates new server every time

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?

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:

https://github.com/sivel/ansible-samples/tree/master/rackconnect

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

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’ }

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.