#!/usr/bin/env ansible-playbook --- - name: Deploy a cloud instance hosts: localhost vars: number_of_servers: 2 # Required variables # change if required or override at runtime using --extra-vars ssh_public_key: "{{ lookup('env', 'HOME') }}/.ssh/id_rsa.pub" # Attributes used for launching the compute instance (required) # dig lookup requires dnspython ssh_remote_cidr: "{{ lookup('dig', 'myip.opendns.com', '@resolver1.opendns.com') + '/32' | default('0.0.0.0/0', true) }}" web_remote_cidr: 0.0.0.0/0 image: ubuntu-14.04-x86_64 private_net: example-net key_name: example-key instance_name_prefix: example-instance flavor: c1.c1r1 subnet_first_octets: 10.0.0 router_name: example-router private_subnet: example-subnet security_group_name: example-sg region: "{{ lookup('env','OS_REGION_NAME') }}" nameservers: nz-por-1: [202.78.247.197, 202.78.247.198, 202.78.247.199] nz_wlg_2: [202.78.240.213, 202.78.240.214, 202.78.240.215] nz-hlz-1: [202.78.244.85, 202.78.244.86, 202.78.244.87] tasks: - name: Connect to the Catalyst Cloud os_auth: - name: Create a network os_network: state: present name: "{{ private_net }}" - name: Create a subnet os_subnet: state: present name: "{{ private_subnet }}" network_name: "{{ private_net }}" cidr: "{{ subnet_first_octets }}.0/24" dns_nameservers: "{{ nameservers[region] }}" allocation_pool_start: "{{ subnet_first_octets }}.10" allocation_pool_end: "{{ subnet_first_octets }}.200" - name: Create a router os_router: state: present name: "{{ router_name }}" network: public-net interfaces: - "{{ private_subnet }}" - name: "Create the {{ security_group_name }} security group" os_security_group: state: present name: "{{ security_group_name }}" description: Network access for the example instance. - name: Create a security group rule for SSH access os_security_group_rule: state: present security_group: "{{ security_group_name }}" protocol: tcp port_range_min: 22 port_range_max: 22 remote_ip_prefix: "{{ ssh_remote_cidr }}" - name: Create a security group rule for HTTP access os_security_group_rule: state: present security_group: "{{ security_group_name }}" protocol: tcp port_range_min: 80 port_range_max: 80 remote_ip_prefix: "{{ web_remote_cidr }}" - name: Import an SSH keypair os_keypair: state: present name: "{{ key_name }}" public_key_file: "{{ ssh_public_key }}" - name: Create compute instances os_server: state: present name: "{{ instance_name_prefix }}-{{ item }}" image: "{{ image }}" key_name: "{{ key_name }}" flavor: "{{ flavor }}" meta: "group=group{{ item }},example=foobar" nics: - net-name: "{{ private_net }}" security_groups: "default,{{ security_group_name }}" with_sequence: "start=1 end={{ number_of_servers }} format=%02x" - name: Assign a floating IP os_floating_ip: server: "{{ instance_name_prefix }}-{{ item }}" with_sequence: "start=1 end={{ number_of_servers }} format=%02x" register: floating_ip_info - name: Output floating IP debug: msg: "{{ item.floating_ip.floating_ip_address }}" with_items: "{{floating_ip_info.results}}" - name: Remove floating ip from known hosts known_hosts: name: "{{ item.floating_ip.floating_ip_address }}" state: absent with_items: "{{ floating_ip_info.results }}"