From 901f0ee491efb34f9788e11dd6d572928146da91 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?L=C3=A9na=C3=AFc=20Huard?= <lhuard@amadeus.com>
Date: Mon, 20 Apr 2015 14:11:48 +0200
Subject: Implement OpenStack provider

---
 .../tasks/configure_openstack.yml                  | 27 ++++++++++++
 .../openshift-cluster/tasks/launch_instances.yml   | 48 ++++++++++++++++++++++
 2 files changed, 75 insertions(+)
 create mode 100644 playbooks/openstack/openshift-cluster/tasks/configure_openstack.yml
 create mode 100644 playbooks/openstack/openshift-cluster/tasks/launch_instances.yml

(limited to 'playbooks/openstack/openshift-cluster/tasks')

diff --git a/playbooks/openstack/openshift-cluster/tasks/configure_openstack.yml b/playbooks/openstack/openshift-cluster/tasks/configure_openstack.yml
new file mode 100644
index 000000000..2cbdb4805
--- /dev/null
+++ b/playbooks/openstack/openshift-cluster/tasks/configure_openstack.yml
@@ -0,0 +1,27 @@
+---
+- name: Check infra
+  command: 'heat stack-show {{ openstack_network_prefix }}-stack'
+  register: stack_show_result
+  changed_when: false
+  failed_when: stack_show_result.rc != 0 and 'Stack not found' not in stack_show_result.stderr
+
+- name: Create infra
+  command: 'heat stack-create -f {{ openstack_infra_heat_stack }} -P cluster-id={{ cluster_id }} -P network-prefix={{ openstack_network_prefix }} -P dns-nameservers={{ openstack_network_dns | join(",") }} -P cidr={{ openstack_network_cidr }} -P ssh-incoming={{ openstack_ssh_access_from }} {{ openstack_network_prefix }}-stack'
+  when: stack_show_result.rc == 1
+
+- name: Update infra
+  command: 'heat stack-update -f {{ openstack_infra_heat_stack }} -P cluster-id={{ cluster_id }} -P network-prefix={{ openstack_network_prefix }} -P dns-nameservers={{ openstack_network_dns | join(",") }} -P cidr={{ openstack_network_cidr }} -P ssh-incoming={{ openstack_ssh_access_from }} {{ openstack_network_prefix }}-stack'
+  when: stack_show_result.rc == 0
+
+- name: Wait for infra readiness
+  shell: 'heat stack-show {{ openstack_network_prefix }}-stack | awk ''$2 == "stack_status" {print $4}'''
+  register: stack_show_status_result
+  until: stack_show_status_result.stdout not in ['CREATE_IN_PROGRESS', 'UPDATE_IN_PROGRESS']
+  retries: 30
+  delay: 1
+  failed_when: stack_show_status_result.stdout not in ['CREATE_COMPLETE', 'UPDATE_COMPLETE']
+
+- name: Create ssh keypair
+  nova_keypair:
+    name: "{{ openstack_ssh_keypair }}"
+    public_key: "{{ openstack_ssh_public_key }}"
diff --git a/playbooks/openstack/openshift-cluster/tasks/launch_instances.yml b/playbooks/openstack/openshift-cluster/tasks/launch_instances.yml
new file mode 100644
index 000000000..1b9696aac
--- /dev/null
+++ b/playbooks/openstack/openshift-cluster/tasks/launch_instances.yml
@@ -0,0 +1,48 @@
+---
+- name: Get net id
+  shell: 'neutron net-show {{ openstack_network_prefix }}-net | awk "/\\<id\\>/ {print \$4}"'
+  register: net_id_result
+
+- name: Launch instance(s)
+  nova_compute:
+    name: '{{ item }}'
+    image_name:     '{{ deployment_vars[deployment_type].image.name | default(omit, true) }}'
+    image_id:       '{{ deployment_vars[deployment_type].image.id   | default(omit, true) }}'
+    flavor_ram:     '{{ openstack_flavor[k8s_type].ram              | default(omit, true) }}'
+    flavor_id:      '{{ openstack_flavor[k8s_type].id               | default(omit, true) }}'
+    flavor_include: '{{ openstack_flavor[k8s_type].include          | default(omit, true) }}'
+    key_name: '{{ openstack_ssh_keypair }}'
+    security_groups: '{{ openstack_network_prefix }}-{{ k8s_type }}-secgrp'
+    nics:
+      - net-id: '{{ net_id_result.stdout }}'
+    user_data: "{{ lookup('file','files/user-data') }}"
+    meta:
+      env: '{{ cluster }}'
+      host-type: '{{ type }}'
+      env-host-type: '{{ cluster }}-openshift-{{ type }}'
+    floating_ip_pools: '{{ openstack_floating_ip_pools }}'
+  with_items: instances
+  register: nova_compute_result
+
+- name: Add new instances groups and variables
+  add_host:
+    hostname: '{{ item.item }}'
+    ansible_ssh_host: '{{ item.public_ip }}'
+    ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}"
+    ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}"
+    groups: 'tag_env_{{ cluster }}, tag_host-type_{{ type }}, tag_env-host-type_{{ cluster }}-openshift-{{ type }}'
+  with_items: nova_compute_result.results
+
+- name: Wait for ssh
+  wait_for:
+    host: '{{ item.public_ip }}'
+    port: 22
+  with_items: nova_compute_result.results
+
+- name: Wait for user setup
+  command: 'ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o ConnectTimeout=10 -o UserKnownHostsFile=/dev/null {{ hostvars[item.item].ansible_ssh_user }}@{{ item.public_ip }} echo {{ hostvars[item.item].ansible_ssh_user }} user is setup'
+  register: result
+  until: result.rc == 0
+  retries: 30
+  delay: 1
+  with_items: nova_compute_result.results
-- 
cgit v1.2.3