# step-1 instance_names = ["all-in-one","app-worker-1", "app-worker-2", "app-controller"] conn.servers.select {|instance| instance_names.include?(instance.name)}.each do |instance| puts "Destroying Instance: #{instance.name}" instance.destroy end security_group_names = ["control", "worker", "api", "services"] conn.security_groups.select {|security_group| security_group_names.include?(security_group.name)}.each do |security_group| puts "Deleting security group: #{security_group.name}" security_group.destroy end # step-2 api_group = conn.security_groups.create name: "api", description: "for API services only" worker_group = conn.security_groups.create name: "worker", description: "for services that run on a worker node" services_group = conn.security_groups.create name: "services", description: "for DB and AMQP services only" rules = [ { parent_group_id: api_group.id, ip_protocol: "tcp", from_port: 80, to_port: 80 }, { parent_group_id: api_group.id, ip_protocol: "tcp", from_port: 22, to_port: 22 }, { parent_group_id: worker_group.id, ip_protocol: "tcp", from_port: 22, to_port: 22 }, { parent_group_id: services_group.id, ip_protocol: "tcp", from_port: 22, to_port: 22 }, { parent_group_id: services_group.id, ip_protocol: "tcp", from_port: 3306, to_port: 3306, group: api_group.id }, { parent_group_id: services_group.id, ip_protocol: "tcp", from_port: 5672, to_port: 5672, group: worker_group.id }, { parent_group_id: services_group.id, ip_protocol: "tcp", from_port: 5672, to_port: 5672, group: api_group.id } ] rules.each {|rule| conn.security_group_rules.create rule } # step-3 def get_floating_ip_address(conn) unless unused_floating_ip_address = conn.addresses.find {|address| address.instance_id.nil?} pool_name = conn.addresses.get_address_pools[0]["name"] puts "Allocating new Floating IP from pool: #{pool_name}" unused_floating_ip_address = conn.addresses.create pool: pool_name end unused_floating_ip_address end # step-4 user_data = <