Add support for clustered servers

Certain services are expected to be served by more than one server,
think of git mirrors, zuul workers etc.
While we could define all of them with numbered pattern manually
in the resources.yaml file, this gets unwieldy and boring
if the count is large, repeating on and on the same
server stanzas with just <service_name><$NODE_COUNT>.
This change allows to put a 'node_count' attribute to the server
resource. With it, the role will create as many servers as
'node_count' by numbering the servers as <server_name><$NODE_COUNT>.
e.g.

servers:
  - name: logstash-worker.openstack.org
    image: ubuntu-trusty
    flavor: d1
    node_count: 2

That would make the role to create two server instances named
'logstash-worker01.openstack.org' and 'logstash-worker02.openstack.org'

Change-Id: I220a2786efe56187f60f1eed2f32e661e6d3ed3f
This commit is contained in:
Ricardo Carrillo Cruz 2016-05-30 13:25:04 +00:00
parent 6438dea321
commit 205f4d31de
3 changed files with 44 additions and 1 deletions

View File

@ -5,7 +5,7 @@
- os_server:
cloud: "{{ item_cloud.oscc_cloud|default(item_cloud.name) }}"
state: "{{ item_server.state|default(omit) }}"
name: "{{ item_server.name }}"
name: "{{ item_server.name.partition('.')[0] }}{{ '' if item_server.node_count is not defined else item }}{{ item_server.name.partition('.')[1] + item_server.name.partition('.')[2] }}"
image: "{{ item_server.image }}"
auto_ip: "{{ item_server.auto_ip|default(omit) }}"
boot_from_volume: "{{ item_server.boot_from_volume|default(omit) }}"
@ -28,6 +28,7 @@
userdata: "{{ item_server.userdata|default(omit) }}"
volume_size: "{{ item_server.volume_size|default(omit) }}"
volumes: "{{ item_server.volumes|default(omit) }}"
with_sequence: start=1 end={{ item_server.node_count|default(1) }} format=%02x
register: os_server_result
- add_host: name={{ item.server.name }} groups=cl_servers_just_created ansible_ssh_host={{ item.server.public_v4 }}

View File

@ -29,6 +29,16 @@ clouds:
image: cirros-0.3.4-x86_64-uec
flavor: c1
network: test_network
- name: test_cluster
image: cirros-0.3.4-x86_64-uec
flavor: c1
network: test_network
node_count: 2
- name: test_cluster.testdomain
image: cirros-0.3.4-x86_64-uec
flavor: c1
network: test_network
node_count: 2
networks:
- name: test_network
subnets:

View File

@ -68,3 +68,35 @@
- name: Assert test-network network has been created
assert: { that: result.rc == 0 }
- name: Querying for test_cluster01 server
command: openstack --os-cloud devstack server show test_cluster01
register: result
changed_when: False
- name: Assert test_cluster01 server has been created
assert: { that: result.rc == 0 }
- name: Querying for test_cluster02 server
command: openstack --os-cloud devstack server show test_cluster02
register: result
changed_when: False
- name: Assert test_cluster02 server has been created
assert: { that: result.rc == 0 }
- name: Querying for test_cluster01.testdomain server
command: openstack --os-cloud devstack server show test_cluster01.testdomain
register: result
changed_when: False
- name: Assert test_cluster01.testdomain server has been created
assert: { that: result.rc == 0 }
- name: Querying for test_cluster02.testdomain server
command: openstack --os-cloud devstack server show test_cluster02.testdomain
register: result
changed_when: False
- name: Assert test_cluster02.testdomain server has been created
assert: { that: result.rc == 0 }