11 def create(server_name)
12 resolve_project
13 unless server = client.list_virtual_machines(
14 name: server_name, project_id: options[:project_id], listall: true
15 ).find {|vm| vm["name"] == server_name }
16 error "Server #{server_name} not found."
17 exit 1
18 end
19 ip_addr = nil
20 options[:rules].each do |pf_rule|
21 ip = pf_rule.split(":")[0]
22 unless ip == ''
23 unless ip_addr = client.list_public_ip_addresses(ipaddress: ip, project_id: options[:project_id]).first
24 say "Error: IP #{ip} not found.", :yellow
25 next
26 end
27 else
28 say "Assign a new IP address ", :yellow
29 net_id = client.list_networks(project_id: options[:project_id]).find {|n| n['name'] == options[:network]}['id']
30 say(" OK", :green) if ip_addr = client.associate_ip_address(networkid: net_id)["ipaddress"]
31 end
32 port = pf_rule.split(":")[1]
33 say "Create port forwarding rule #{ip_addr["ipaddress"]}:#{port} for server #{server_name} ", :yellow
34
35 say(" OK", :green) if client.create_port_forwarding_rule(
36 ipaddress_id: ip_addr["id"],
37 public_port: port,
38 private_port: port,
39 virtualmachine_id: server["id"],
40 protocol: "TCP"
41 )
42 end
43 end