diff options
| author | Thomas Wiest <twiest@users.noreply.github.com> | 2015-07-16 14:00:52 -0400 | 
|---|---|---|
| committer | Thomas Wiest <twiest@users.noreply.github.com> | 2015-07-16 14:00:52 -0400 | 
| commit | e0211ca67ce18fc9f74d0a9c82cf14a28f395e4d (patch) | |
| tree | 1f349f91d3c20baab4b29b7b3207ca29e0801816 /playbooks | |
| parent | adce78d68470b341b761372a70d06b5aec88de06 (diff) | |
| parent | 4b439253e7b4486947d201714d4f52a4a7e0fc01 (diff) | |
| download | openshift-e0211ca67ce18fc9f74d0a9c82cf14a28f395e4d.tar.gz openshift-e0211ca67ce18fc9f74d0a9c82cf14a28f395e4d.tar.bz2 openshift-e0211ca67ce18fc9f74d0a9c82cf14a28f395e4d.tar.xz openshift-e0211ca67ce18fc9f74d0a9c82cf14a28f395e4d.zip | |
Merge pull request #315 from lhuard1A/all_os_in_heat
Make all the OpenStack resources be managed by a Heat Stack
Diffstat (limited to 'playbooks')
7 files changed, 518 insertions, 264 deletions
| diff --git a/playbooks/openstack/openshift-cluster/files/heat_stack.yaml b/playbooks/openstack/openshift-cluster/files/heat_stack.yaml new file mode 100644 index 000000000..a15ec749c --- /dev/null +++ b/playbooks/openstack/openshift-cluster/files/heat_stack.yaml @@ -0,0 +1,279 @@ +heat_template_version: 2014-10-16 + +description: OpenShift cluster + +parameters: + +  cluster_id: +    type: string +    label: Cluster ID +    description: Identifier of the cluster + +  num_masters: +    type: number +    label: Number of masters +    description: Number of masters + +  num_nodes: +    type: number +    label: Number of nodes +    description: Number of nodes + +  cidr: +    type: string +    label: CIDR +    description: CIDR of the network of the cluster + +  dns_nameservers: +    type: comma_delimited_list +    label: DNS nameservers list +    description: List of DNS nameservers + +  external_net: +    type: string +    label: External network +    description: Name of the external network +    default: external + +  ssh_public_key: +    type: string +    label: SSH public key +    description: SSH public key +    hidden: true + +  ssh_incoming: +    type: string +    label: Source of ssh connections +    description: Source of legitimate ssh connections +    default: 0.0.0.0/0 + +  master_image: +    type: string +    label: Master image +    description: Name of the image for the master servers + +  node_image: +    type: string +    label: Node image +    description: Name of the image for the node servers + +  master_flavor: +    type: string +    label: Master flavor +    description: Flavor of the master servers + +  node_flavor: +    type: string +    label: Node flavor +    description: Flavor of the node servers + +outputs: + +  master_names: +    description: Name of the masters +    value: { get_attr: [ masters, name ] } + +  master_ips: +    description: IPs of the masters +    value: { get_attr: [ masters, private_ip ] } + +  master_floating_ips: +    description: Floating IPs of the masters +    value: { get_attr: [ masters, floating_ip ] } + +  node_names: +    description: Name of the nodes +    value: { get_attr: [ nodes, name ] } + +  node_ips: +    description: IPs of the nodes +    value: { get_attr: [ nodes, private_ip ] } + +  node_floating_ips: +    description: Floating IPs of the nodes +    value: { get_attr: [ nodes, floating_ip ] } + +resources: + +  net: +    type: OS::Neutron::Net +    properties: +      name: +        str_replace: +          template: openshift-ansible-cluster_id-net +          params: +            cluster_id: { get_param: cluster_id } + +  subnet: +    type: OS::Neutron::Subnet +    properties: +      name: +        str_replace: +          template: openshift-ansible-cluster_id-subnet +          params: +            cluster_id: { get_param: cluster_id } +      network: { get_resource: net } +      cidr: { get_param: cidr } +      dns_nameservers: { get_param: dns_nameservers } + +  router: +    type: OS::Neutron::Router +    properties: +      name: +        str_replace: +          template: openshift-ansible-cluster_id-router +          params: +            cluster_id: { get_param: cluster_id } +      external_gateway_info: +        network: { get_param: external_net } + +  interface: +    type: OS::Neutron::RouterInterface +    properties: +      router_id: { get_resource: router } +      subnet_id: { get_resource: subnet } + +  keypair: +    type: OS::Nova::KeyPair +    properties: +      name: +        str_replace: +          template: openshift-ansible-cluster_id-keypair +          params: +            cluster_id: { get_param: cluster_id } +      public_key: { get_param: ssh_public_key } + +  master-secgrp: +    type: OS::Neutron::SecurityGroup +    properties: +      name: +        str_replace: +          template: openshift-ansible-cluster_id-master-secgrp +          params: +            cluster_id: { get_param: cluster_id } +      description: +        str_replace: +          template: Security group for cluster_id OpenShift cluster master +          params: +            cluster_id: { get_param: cluster_id } +      rules: +        - direction: ingress +          protocol: tcp +          port_range_min: 22 +          port_range_max: 22 +          remote_ip_prefix: { get_param: ssh_incoming } +        - direction: ingress +          protocol: tcp +          port_range_min: 4001 +          port_range_max: 4001 +        - direction: ingress +          protocol: tcp +          port_range_min: 8443 +          port_range_max: 8443 +        - direction: ingress +          protocol: tcp +          port_range_min: 53 +          port_range_max: 53 +        - direction: ingress +          protocol: udp +          port_range_min: 53 +          port_range_max: 53 +        - direction: ingress +          protocol: tcp +          port_range_min: 24224 +          port_range_max: 24224 +        - direction: ingress +          protocol: udp +          port_range_min: 24224 +          port_range_max: 24224 + +  node-secgrp: +    type: OS::Neutron::SecurityGroup +    properties: +      name: +        str_replace: +          template: openshift-ansible-cluster_id-node-secgrp +          params: +            cluster_id: { get_param: cluster_id } +      description: +        str_replace: +          template: Security group for cluster_id OpenShift cluster nodes +          params: +            cluster_id: { get_param: cluster_id } +      rules: +        - direction: ingress +          protocol: tcp +          port_range_min: 22 +          port_range_max: 22 +          remote_ip_prefix: { get_param: ssh_incoming } +        - direction: ingress +          protocol: udp +          port_range_min: 4789 +          port_range_max: 4789 +          remote_mode: remote_group_id +        - direction: ingress +          protocol: tcp +          port_range_min: 10250 +          port_range_max: 10250 +          remote_mode: remote_group_id +          remote_group_id: { get_resource: master-secgrp } + +  masters: +    type: OS::Heat::ResourceGroup +    properties: +      count: { get_param: num_masters } +      resource_def: +        type: heat_stack_server.yaml +        properties: +          name: +            str_replace: +              template: cluster_id-k8s_type-%index% +              params: +                cluster_id: { get_param: cluster_id } +                k8s_type: master +          cluster_id: { get_param: cluster_id } +          type:       master +          image:      { get_param: master_image } +          flavor:     { get_param: master_flavor } +          key_name:   { get_resource: keypair } +          net:        { get_resource: net } +          subnet:     { get_resource: subnet } +          secgrp: +            - { get_resource: master-secgrp } +          floating_network: { get_param: external_net } +          net_name: +            str_replace: +              template: openshift-ansible-cluster_id-net +              params: +                cluster_id: { get_param: cluster_id } +    depends_on: interface + +  nodes: +    type: OS::Heat::ResourceGroup +    properties: +      count: { get_param: num_nodes } +      resource_def: +        type: heat_stack_server.yaml +        properties: +          name: +            str_replace: +              template: cluster_id-k8s_type-%index% +              params: +                cluster_id: { get_param: cluster_id } +                k8s_type: node +          cluster_id: { get_param: cluster_id } +          type:       node +          image:      { get_param: node_image } +          flavor:     { get_param: node_flavor } +          key_name:   { get_resource: keypair } +          net:        { get_resource: net } +          subnet:     { get_resource: subnet } +          secgrp: +            - { get_resource: node-secgrp } +          floating_network: { get_param: external_net } +          net_name: +            str_replace: +              template: openshift-ansible-cluster_id-net +              params: +                cluster_id: { get_param: cluster_id } +    depends_on: interface diff --git a/playbooks/openstack/openshift-cluster/files/heat_stack.yml b/playbooks/openstack/openshift-cluster/files/heat_stack.yml deleted file mode 100644 index c5f95d87d..000000000 --- a/playbooks/openstack/openshift-cluster/files/heat_stack.yml +++ /dev/null @@ -1,149 +0,0 @@ -heat_template_version: 2014-10-16 - -description: OpenShift cluster - -parameters: -  cluster-id: -    type: string -    label: Cluster ID -    description: Identifier of the cluster - -  network-prefix: -    type: string -    label: Network prefix -    description: Prefix of the network objects - -  cidr: -    type: string -    label: CIDR -    description: CIDR of the network of the cluster - -  dns-nameservers: -    type: comma_delimited_list -    label: DNS nameservers list -    description: List of DNS nameservers - -  external-net: -    type: string -    label: External network -    description: Name of the external network -    default: external - -  ssh-incoming: -    type: string -    label: Source of ssh connections -    description: Source of legitimate ssh connections - -resources: -  net: -    type: OS::Neutron::Net -    properties: -      name: -        str_replace: -          template: network-prefix-net -          params: -            network-prefix: { get_param: network-prefix } - -  subnet: -    type: OS::Neutron::Subnet -    properties: -      name: -        str_replace: -          template: network-prefix-subnet -          params: -            network-prefix: { get_param: network-prefix } -      network: { get_resource: net } -      cidr: { get_param: cidr } -      dns_nameservers: { get_param: dns-nameservers } - -  router: -    type: OS::Neutron::Router -    properties: -      name: -        str_replace: -          template: network-prefix-router -          params: -            network-prefix: { get_param: network-prefix } -      external_gateway_info: -        network: { get_param: external-net } - -  interface: -    type: OS::Neutron::RouterInterface -    properties: -      router_id: { get_resource: router } -      subnet_id: { get_resource: subnet } - -  node-secgrp: -    type: OS::Neutron::SecurityGroup -    properties: -      name: -        str_replace: -          template: network-prefix-node-secgrp -          params: -            network-prefix: { get_param: network-prefix } -      description: -        str_replace: -          template: Security group for cluster-id OpenShift cluster nodes -          params: -            cluster-id: { get_param: cluster-id } -      rules: -        - direction: ingress -          protocol: tcp -          port_range_min: 22 -          port_range_max: 22 -          remote_ip_prefix: { get_param: ssh-incoming } -        - direction: ingress -          protocol: udp -          port_range_min: 4789 -          port_range_max: 4789 -          remote_mode: remote_group_id -        - direction: ingress -          protocol: tcp -          port_range_min: 10250 -          port_range_max: 10250 -          remote_mode: remote_group_id -          remote_group_id: { get_resource: master-secgrp } - -  master-secgrp: -    type: OS::Neutron::SecurityGroup -    properties: -      name: -        str_replace: -          template: network-prefix-master-secgrp -          params: -            network-prefix: { get_param: network-prefix } -      description: -        str_replace: -          template: Security group for cluster-id OpenShift cluster master -          params: -            cluster-id: { get_param: cluster-id } -      rules: -        - direction: ingress -          protocol: tcp -          port_range_min: 22 -          port_range_max: 22 -          remote_ip_prefix: { get_param: ssh-incoming } -        - direction: ingress -          protocol: tcp -          port_range_min: 4001 -          port_range_max: 4001 -        - direction: ingress -          protocol: tcp -          port_range_min: 8443 -          port_range_max: 8443 -        - direction: ingress -          protocol: tcp -          port_range_min: 53 -          port_range_max: 53 -        - direction: ingress -          protocol: udp -          port_range_min: 53 -          port_range_max: 53 -        - direction: ingress -          protocol: tcp -          port_range_min: 24224 -          port_range_max: 24224 -        - direction: ingress -          protocol: udp -          port_range_min: 24224 -          port_range_max: 24224 diff --git a/playbooks/openstack/openshift-cluster/files/heat_stack_server.yaml b/playbooks/openstack/openshift-cluster/files/heat_stack_server.yaml new file mode 100644 index 000000000..55f64211a --- /dev/null +++ b/playbooks/openstack/openshift-cluster/files/heat_stack_server.yaml @@ -0,0 +1,123 @@ +heat_template_version: 2014-10-16 + +description: OpenShift cluster server + +parameters: + +  name: +    type: string +    label: Name +    description: Name + +  cluster_id: +    type: string +    label: Cluster ID +    description: Identifier of the cluster + +  type: +    type: string +    label: Type +    description: Type master or node + +  key_name: +    type: string +    label: Key name +    description: Key name of keypair + +  image: +    type: string +    label: Image +    description: Name of the image + +  flavor: +    type: string +    label: Flavor +    description: Name of the flavor + +  net: +    type: string +    label: Net ID +    description: Net resource + +  net_name: +    type: string +    label: Net name +    description: Net name + +  subnet: +    type: string +    label: Subnet ID +    description: Subnet resource + +  secgrp: +    type: comma_delimited_list +    label: Security groups +    description: Security group resources + +  floating_network: +    type: string +    label: Floating network +    description: Network to allocate floating IP from + +outputs: + +  name: +    description: Name of the server +    value: { get_attr: [ server, name ] } + +  private_ip: +    description: Private IP of the server +    value: +      get_attr: +        - server +        - addresses +        - { get_param: net_name } +        - 0 +        - addr + +  floating_ip: +    description: Floating IP of the server +    value: +      get_attr: +        - server +        - addresses +        - { get_param: net_name } +        - 1 +        - addr + +resources: + +  server: +    type: OS::Nova::Server +    properties: +      name:      { get_param: name } +      key_name:  { get_param: key_name } +      image:     { get_param: image } +      flavor:    { get_param: flavor } +      networks: +        - port:  { get_resource: port } +      user_data: { get_file: user-data } +      user_data_format: RAW +      metadata: +        env: { get_param: cluster_id } +        host-type: { get_param: type } +        env-host-type: +          str_template: +            template: cluster_id-openshift-type +            params: +              cluster_id: { get_param: cluster_id } +              type:       { get_param: type } + +  port: +    type: OS::Neutron::Port +    properties: +      network: { get_param: net } +      fixed_ips: +        - subnet: { get_param: subnet } +      security_groups: { get_param: secgrp } + +  floating-ip: +    type: OS::Neutron::FloatingIP +    properties: +      floating_network: { get_param: floating_network } +      port_id: { get_resource: port } diff --git a/playbooks/openstack/openshift-cluster/launch.yml b/playbooks/openstack/openshift-cluster/launch.yml index 5c86ade3f..3cdd2ae4d 100644 --- a/playbooks/openstack/openshift-cluster/launch.yml +++ b/playbooks/openstack/openshift-cluster/launch.yml @@ -8,23 +8,105 @@    tasks:    - fail:        msg: "Deployment type not supported for OpenStack provider yet" -    when: deployment_type in ['online', 'enterprise'] - -  - include: tasks/configure_openstack.yml - -  - include: ../../common/openshift-cluster/set_master_launch_facts_tasks.yml -  - include: tasks/launch_instances.yml -    vars: -      instances: "{{ master_names }}" -      cluster: "{{ cluster_id }}" -      type: "{{ k8s_type }}" - -  - include: ../../common/openshift-cluster/set_node_launch_facts_tasks.yml -  - include: tasks/launch_instances.yml -    vars: -      instances: "{{ node_names }}" -      cluster: "{{ cluster_id }}" -      type: "{{ k8s_type }}" +    when: deployment_type == 'online' + +  # TODO: Write an Ansible module for dealing with HEAT stacks +  #       Dealing with the outputs is currently terrible + +  - name: Check OpenStack stack +    command: 'heat stack-show openshift-ansible-{{ cluster_id }}-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 OpenStack Stack +    command: 'heat stack-create -f {{ openstack_infra_heat_stack }} +             -P cluster_id={{ cluster_id }} +             -P dns_nameservers={{ openstack_network_dns | join(",") }} +             -P cidr={{ openstack_network_cidr }} +             -P ssh_incoming={{ openstack_ssh_access_from }} +             -P num_masters={{ num_masters }} +             -P num_nodes={{ num_nodes }} +             -P master_image={{ deployment_vars[deployment_type].image }} +             -P node_image={{ deployment_vars[deployment_type].image }} +             -P master_flavor={{ openstack_flavor["master"] }} +             -P node_flavor={{ openstack_flavor["node"] }} +             -P ssh_public_key="{{ openstack_ssh_public_key }}" +             openshift-ansible-{{ cluster_id }}-stack' +    when: stack_show_result.rc == 1 + +  - name: Update OpenStack Stack +    command: 'heat stack-update -f {{ openstack_infra_heat_stack }} +             -P cluster_id={{ cluster_id }} +             -P dns_nameservers={{ openstack_network_dns | join(",") }} +             -P cidr={{ openstack_network_cidr }} +             -P ssh_incoming={{ openstack_ssh_access_from }} +             -P num_masters={{ num_masters }} +             -P num_nodes={{ num_nodes }} +             -P master_image={{ deployment_vars[deployment_type].image }} +             -P node_image={{ deployment_vars[deployment_type].image }} +             -P master_flavor={{ openstack_flavor["master"] }} +             -P node_flavor={{ openstack_flavor["node"] }} +             -P ssh_public_key="{{ openstack_ssh_public_key }}" +             openshift-ansible-{{ cluster_id }}-stack' +    when: stack_show_result.rc == 0 + +  - name: Wait for OpenStack Stack readiness +    shell: 'heat stack-show openshift-ansible-{{ cluster_id }}-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: Read OpenStack Stack outputs +    command: 'heat stack-show openshift-ansible-{{ cluster_id }}-stack' +    register: stack_show_result + +  - set_fact: +      parsed_outputs: "{{ stack_show_result | oo_parse_heat_stack_outputs }}" + +  - name: Add new master instances groups and variables +    add_host: +      hostname: '{{ item[0] }}' +      ansible_ssh_host: '{{ item[2] }}' +      ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}" +      ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}" +      groups: 'tag_env_{{ cluster_id }}, tag_host-type_master, tag_env-host-type_{{ cluster_id }}-openshift-master' +    with_together: +      - parsed_outputs.master_names +      - parsed_outputs.master_ips +      - parsed_outputs.master_floating_ips + +  - name: Add new node instances groups and variables +    add_host: +      hostname: '{{ item[0] }}' +      ansible_ssh_host: '{{ item[2] }}' +      ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}" +      ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}" +      groups: 'tag_env_{{ cluster_id }}, tag_host-type_node, tag_env-host-type_{{ cluster_id }}-openshift-node' +    with_together: +      - parsed_outputs.node_names +      - parsed_outputs.node_ips +      - parsed_outputs.node_floating_ips + +  - name: Wait for ssh +    wait_for: +      host: '{{ item }}' +      port: 22 +    with_flattened: +      - parsed_outputs.master_floating_ips +      - parsed_outputs.node_floating_ips + +  - name: Wait for user setup +    command: 'ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o ConnectTimeout=10 -o UserKnownHostsFile=/dev/null {{ deployment_vars[deployment_type].ssh_user }}@{{ item }} echo {{ deployment_vars[deployment_type].ssh_user }} user is setup' +    register: result +    until: result.rc == 0 +    retries: 30 +    delay: 1 +    with_flattened: +      - parsed_outputs.master_floating_ips +      - parsed_outputs.node_floating_ips  - include: update.yml diff --git a/playbooks/openstack/openshift-cluster/tasks/launch_instances.yml b/playbooks/openstack/openshift-cluster/tasks/launch_instances.yml deleted file mode 100644 index 1b9696aac..000000000 --- a/playbooks/openstack/openshift-cluster/tasks/launch_instances.yml +++ /dev/null @@ -1,48 +0,0 @@ ---- -- 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 diff --git a/playbooks/openstack/openshift-cluster/terminate.yml b/playbooks/openstack/openshift-cluster/terminate.yml index 2f05f0992..fc4ec3c88 100644 --- a/playbooks/openstack/openshift-cluster/terminate.yml +++ b/playbooks/openstack/openshift-cluster/terminate.yml @@ -5,39 +5,18 @@    vars_files:    - vars.yml    tasks: -  - set_fact: cluster_group=tag_env_{{ cluster_id }} -  - add_host: -      name: "{{ item }}" -      groups: oo_hosts_to_terminate -      ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}" -      ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}" -    with_items: groups[cluster_group] | default([]) - -- hosts: oo_hosts_to_terminate - -- hosts: localhost -  connection: local -  gather_facts: no -  vars_files: -  - vars.yml -  tasks: -  - name: Retrieve the floating IPs -    shell: "neutron floatingip-list | awk '/{{ hostvars[item].ansible_default_ipv4.address }}/ {print $2}'" -    with_items: groups['oo_hosts_to_terminate'] | default([]) -    register: floating_ips_to_delete - -  - name: Terminate instance(s) -    nova_compute: -      name: "{{ hostvars[item].os_name }}" -      state: absent -    with_items: groups['oo_hosts_to_terminate'] | default([]) - -  - name: Delete floating IPs -    command: "neutron floatingip-delete {{ item.stdout }}" -    with_items: floating_ips_to_delete.results | default([]) - -  - name: Destroy the network -    command: "heat stack-delete {{ openstack_network_prefix }}-stack" +  - name: Delete the OpenStack Stack +    command: 'heat stack-delete openshift-ansible-{{ cluster_id }}-stack'      register: stack_delete_result      changed_when: stack_delete_result.rc == 0      failed_when: stack_delete_result.rc != 0 and 'could not be found' not in stack_delete_result.stdout + +  - name: Wait for the completion of the OpenStack Stack deletion +    shell: 'heat stack-show openshift-ansible-{{ cluster_id }}-stack | awk ''$2 == "stack_status" {print $4}''' +    when: stack_delete_result.changed +    register: stack_show_result +    until: stack_show_result.stdout != 'DELETE_IN_PROGRESS' +    retries: 60 +    delay: 1 +    failed_when: '"Stack not found" not in stack_show_result.stderr and +                   stack_show_result.stdout != "DELETE_COMPLETE"' diff --git a/playbooks/openstack/openshift-cluster/vars.yml b/playbooks/openstack/openshift-cluster/vars.yml index 1ae7c17d2..d077a6ced 100644 --- a/playbooks/openstack/openshift-cluster/vars.yml +++ b/playbooks/openstack/openshift-cluster/vars.yml @@ -1,6 +1,6 @@  ---  openstack_infra_heat_stack:     "{{ lookup('oo_option', 'infra_heat_stack' ) | -                                    default('files/heat_stack.yml',          True) }}" +                                    default('files/heat_stack.yaml',         True) }}"  openstack_network_prefix:       "{{ lookup('oo_option', 'network_prefix'   ) |                                      default('openshift-ansible-'+cluster_id, True) }}"  openstack_network_cidr:         "{{ lookup('oo_option', 'net_cidr'         ) | @@ -18,31 +18,19 @@ openstack_ssh_public_key:       "{{ lookup('file', lookup('oo_option', 'public_k  openstack_ssh_access_from:      "{{ lookup('oo_option', 'ssh_from')          |                                      default('0.0.0.0/0',                     True) }}"  openstack_flavor: -  master: -    ram:     "{{ lookup('oo_option', 'master_flavor_ram'    ) | default(2048, True) }}" -    id:      "{{ lookup('oo_option', 'master_flavor_id'     ) | default(True) }}" -    include: "{{ lookup('oo_option', 'master_flavor_include') | default(True) }}" -  node: -    ram:     "{{ lookup('oo_option', 'node_flavor_ram'      ) | default(4096, True) }}" -    id:      "{{ lookup('oo_option', 'node_flavor_id'       ) | default(True) }}" -    include: "{{ lookup('oo_option', 'node_flavor_include'  ) | default(True) }}" +  master: "{{ lookup('oo_option', 'master_flavor'    ) | default('m1.small',  True) }}" +  node:   "{{ lookup('oo_option', 'node_flavor'      ) | default('m1.medium', True) }}"  deployment_vars:    origin: -    image: -      name: "{{ lookup('oo_option', 'image_name') | default('centos-70-raw', True) }}" -      id: +    image: "{{ lookup('oo_option', 'image_name') | default('centos-70-raw', True) }}"      ssh_user: openshift      sudo: yes    online:      image: -      name: -      id:      ssh_user: root      sudo: no    enterprise: -    image: -      name: "{{ lookup('oo_option', 'image_name') | default('rhel-guest-image-7.1-20150224.0.x86_64', True) }}" -      id: +    image: "{{ lookup('oo_option', 'image_name') | default('rhel-guest-image-7.1-20150224.0.x86_64', True) }}"      ssh_user: openshift      sudo: yes | 
