diff options
Diffstat (limited to 'roles')
| -rw-r--r-- | roles/openstack-stack/defaults/main.yml | 2 | ||||
| -rw-r--r-- | roles/openstack-stack/tasks/main.yml | 9 | ||||
| -rw-r--r-- | roles/openstack-stack/templates/heat_stack.yaml.j2 | 25 | ||||
| -rw-r--r-- | roles/openstack-stack/templates/heat_stack_server_nofloating.yaml.j2 | 149 | ||||
| -rw-r--r-- | roles/static_inventory/tasks/openstack.yml | 7 | ||||
| -rw-r--r-- | roles/static_inventory/templates/inventory.j2 | 5 | 
6 files changed, 187 insertions, 10 deletions
diff --git a/roles/openstack-stack/defaults/main.yml b/roles/openstack-stack/defaults/main.yml index 4831d6bc4..803a96389 100644 --- a/roles/openstack-stack/defaults/main.yml +++ b/roles/openstack-stack/defaults/main.yml @@ -4,6 +4,7 @@ ssh_ingress_cidr: 0.0.0.0/0  node_ingress_cidr: 0.0.0.0/0  master_ingress_cidr: 0.0.0.0/0  lb_ingress_cidr: 0.0.0.0/0 +bastion_ingress_cidr: 0.0.0.0/0  num_etcd: 0  num_masters: 1  num_nodes: 1 @@ -11,3 +12,4 @@ num_dns: 1  num_infra: 1  nodes_to_remove: []  etcd_volume_size: 2 +use_bastion: False diff --git a/roles/openstack-stack/tasks/main.yml b/roles/openstack-stack/tasks/main.yml index a53e6350b..9b4855294 100644 --- a/roles/openstack-stack/tasks/main.yml +++ b/roles/openstack-stack/tasks/main.yml @@ -8,7 +8,6 @@  - name: set template paths    set_fact:      stack_template_path: "{{ stack_template_pre.path }}/stack.yaml" -    server_template_path: "{{ stack_template_pre.path }}/server.yaml"      user_data_template_path: "{{ stack_template_pre.path }}/user-data"  - name: generate HOT stack template from jinja2 template @@ -19,7 +18,13 @@  - name: generate HOT server template from jinja2 template    template:      src: heat_stack_server.yaml.j2 -    dest: "{{ server_template_path }}" +    dest: "{{ stack_template_pre.path }}/server.yaml" + +- name: generate HOT server w/o floating IPs template from jinja2 template +  template: +    src: heat_stack_server_nofloating.yaml.j2 +    dest: "{{ stack_template_pre.path }}/server_nofloating.yaml" +  when: use_bastion|bool  - name: generate user_data from jinja2 template    template: diff --git a/roles/openstack-stack/templates/heat_stack.yaml.j2 b/roles/openstack-stack/templates/heat_stack.yaml.j2 index 54941db06..524f466ff 100644 --- a/roles/openstack-stack/templates/heat_stack.yaml.j2 +++ b/roles/openstack-stack/templates/heat_stack.yaml.j2 @@ -156,6 +156,13 @@ resources:            port_range_min: 22            port_range_max: 22            remote_ip_prefix: {{ ssh_ingress_cidr }} +{% if use_bastion|bool %} +        - direction: ingress +          protocol: tcp +          port_range_min: 22 +          port_range_max: 22 +          remote_ip_prefix: {{ bastion_ingress_cidr }} +{% endif %}          - direction: ingress            protocol: icmp            remote_ip_prefix: {{ ssh_ingress_cidr }} @@ -458,7 +465,11 @@ resources:      properties:        count: {{ num_etcd }}        resource_def: +{% if use_bastion|bool %} +        type: server_nofloating.yaml +{% else %}          type: server.yaml +{% endif %}          properties:            name:              str_replace: @@ -483,7 +494,9 @@ resources:            secgrp:              - { get_resource: {% if openstack_flat_secgrp|default(False)|bool %}flat-secgrp{% else %}etcd-secgrp{% endif %} }              - { get_resource: common-secgrp } +{% if not use_bastion|bool %}            floating_network: {{ external_network }} +{% endif %}            net_name:              str_replace:                template: openshift-ansible-cluster_id-net @@ -540,7 +553,11 @@ resources:      properties:        count: {{ num_masters }}        resource_def: +{% if use_bastion|bool %} +        type: server_nofloating.yaml +{% else %}          type: server.yaml +{% endif %}          properties:            name:              str_replace: @@ -573,7 +590,9 @@ resources:  {% endif %}  {% endif %}              - { get_resource: common-secgrp } +{% if not use_bastion|bool %}            floating_network: {{ external_network }} +{% endif %}            net_name:              str_replace:                template: openshift-ansible-cluster_id-net @@ -590,7 +609,11 @@ resources:        removal_policies:        - resource_list: {{ nodes_to_remove }}        resource_def: +{% if use_bastion|bool %} +        type: server_nofloating.yaml +{% else %}          type: server.yaml +{% endif %}          properties:            name:              str_replace: @@ -621,7 +644,9 @@ resources:            secgrp:              - { get_resource: {% if openstack_flat_secgrp|default(False)|bool %}flat-secgrp{% else %}node-secgrp{% endif %} }              - { get_resource: common-secgrp } +{% if not use_bastion|bool %}            floating_network: {{ external_network }} +{% endif %}            net_name:              str_replace:                template: openshift-ansible-cluster_id-net diff --git a/roles/openstack-stack/templates/heat_stack_server_nofloating.yaml.j2 b/roles/openstack-stack/templates/heat_stack_server_nofloating.yaml.j2 new file mode 100644 index 000000000..792a8b90c --- /dev/null +++ b/roles/openstack-stack/templates/heat_stack_server_nofloating.yaml.j2 @@ -0,0 +1,149 @@ +heat_template_version: 2016-10-14 + +description: OpenShift cluster server w/o floating IP + +parameters: + +  name: +    type: string +    label: Name +    description: Name + +  group: +    type: string +    label: Host Group +    description: The Primary Ansible Host Group +    default: host + +  cluster_env: +    type: string +    label: Cluster environment +    description: Environment of the cluster + +  cluster_id: +    type: string +    label: Cluster ID +    description: Identifier of the cluster + +  type: +    type: string +    label: Type +    description: Type master or node + +  subtype: +    type: string +    label: Sub-type +    description: Sub-type compute or infra for nodes, default otherwise +    default: default + +  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 + +  availability_zone: +    type: string +    description: The Availability Zone to launch the instance. +    default: nova + +  volume_size: +    type: number +    description: Size of the volume to be created. +    default: 1 +    constraints: +      - range: { min: 1, max: 1024 } +        description: must be between 1 and 1024 Gb. + +  node_labels: +    type: json +    description: OpenShift Node Labels +    default: {"region": "default" } + +outputs: + +  name: +    description: Name of the server +    value: { get_attr: [ server_nofloating, name ] } + +  private_ip: +    description: Private IP of the server +    value: +      get_attr: +        - server_nofloating +        - addresses +        - { get_param: net_name } +        - 0 +        - addr + +resources: + +  server_nofloating: +    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: +        group: { get_param: group } +        environment: { get_param: cluster_env } +        clusterid: { get_param: cluster_id } +        host-type: { get_param: type } +        sub-host-type:    { get_param: subtype } +        node_labels: { get_param: node_labels } + +  port: +    type: OS::Neutron::Port +    properties: +      network: { get_param: net } +      fixed_ips: +        - subnet: { get_param: subnet } +      security_groups: { get_param: secgrp } + +  cinder_volume: +    type: OS::Cinder::Volume +    properties: +      size: { get_param: volume_size } +      availability_zone: { get_param: availability_zone } + +  volume_attachment: +    type: OS::Cinder::VolumeAttachment +    properties: +      volume_id: { get_resource: cinder_volume } +      instance_uuid: { get_resource: server_nofloating } +      mountpoint: /dev/sdb diff --git a/roles/static_inventory/tasks/openstack.yml b/roles/static_inventory/tasks/openstack.yml index 95d0d172f..499adf08c 100644 --- a/roles/static_inventory/tasks/openstack.yml +++ b/roles/static_inventory/tasks/openstack.yml @@ -23,11 +23,9 @@          q2: "[] | [?metadata.clusterid=='{{stack_name}}'] | [?public_v4!='']"        when:          - refresh_inventory|bool -        - use_bastion|bool      - name: Add cluster nodes w/o floating IPs to inventory -      with_items: "{{ registered_nodes }}" -      when: not item in registered_nodes_floating +      with_items: "{{ registered_nodes|difference(registered_nodes_floating) }}"        add_host:          name: '{{ item.name }}'          groups: '{{ item.metadata.group }}' @@ -40,11 +38,10 @@      - name: Add cluster nodes with floating IPs to inventory        with_items: "{{ registered_nodes_floating }}" -      when: item in registered_nodes_floating        add_host:          name: '{{ item.name }}'          groups: '{{ item.metadata.group }}' -        ansible_host: "{% if use_bastion|bool %}{{ item.name }}{% else %}{{ item.private_v4 }}{% endif %}" +        ansible_host: "{% if use_bastion|bool %}{{ item.name }}{% else %}{{ item.public_v4 }}{% endif %}"          ansible_fqdn: '{{ item.name }}'          ansible_user: '{{ ssh_user }}'          ansible_private_key_file: '{{ private_ssh_key }}' diff --git a/roles/static_inventory/templates/inventory.j2 b/roles/static_inventory/templates/inventory.j2 index ac74db35c..24dc9d4a8 100644 --- a/roles/static_inventory/templates/inventory.j2 +++ b/roles/static_inventory/templates/inventory.j2 @@ -14,9 +14,8 @@  %} ansible_user={{ hostvars[host]['ansible_user'] }}{% endif %}  {% if 'ansible_private_key_file' in hostvars[host]  %} ansible_private_key_file={{ hostvars[host]['ansible_private_key_file'] }}{% endif %} -{% if 'ansible_ssh_extra_args' in hostvars[host] -%} ansible_ssh_extra_args={{ hostvars[host]['ansible_ssh_extra_args']|quote }}{% endif %} - openshift_hostname={{ host }} +{% if use_bastion|bool and 'ansible_ssh_extra_args' in hostvars[host] +%} ansible_ssh_extra_args={{ hostvars[host]['ansible_ssh_extra_args']|quote }}{% endif %} openshift_hostname={{ host }}  {% endif %}  {% endfor %}  | 
