Module: Sitefull::Provider::Google
- Defined in:
- lib/sitefull-cloud/provider/google.rb
Constant Summary collapse
- REQUIRED_OPTIONS =
%w(project_name).freeze
- WAIT =
2.freeze
- INSTANCE_RUNNING_STATE =
'RUNNING'.freeze
Instance Method Summary collapse
- #connection ⇒ Object
- #create_firewall_rules ⇒ Object
- #create_instance(name, machine_type, image, network_id, key) ⇒ Object
- #create_key(_) ⇒ Object
- #create_network ⇒ Object
- #images(os) ⇒ Object
- #instance_data(instance_id) ⇒ Object
- #machine_types(zone) ⇒ Object
- #project_name ⇒ Object
- #regions ⇒ Object
- #valid? ⇒ Boolean
Instance Method Details
#connection ⇒ Object
12 13 14 15 16 17 18 |
# File 'lib/sitefull-cloud/provider/google.rb', line 12 def connection return @connection unless @connection.nil? connection = ::Google::Apis::ComputeV1::ComputeService.new connection. = credentials @connection = connection end |
#create_firewall_rules ⇒ Object
45 46 47 48 49 |
# File 'lib/sitefull-cloud/provider/google.rb', line 45 def create_firewall_rules create_firewall_rule(network_id, 'sitefull-ssh', '22') create_firewall_rule(network_id, 'sitefull-http', '80') create_firewall_rule(network_id, 'sitefull-https', '443') end |
#create_instance(name, machine_type, image, network_id, key) ⇒ Object
55 56 57 58 59 60 61 62 63 |
# File 'lib/sitefull-cloud/provider/google.rb', line 55 def create_instance(name, machine_type, image, network_id, key) instance = ::Google::Apis::ComputeV1::Instance.new(name: name, machine_type: machine_type, disks: [{ boot: true, autoDelete: true, initialize_params: { source_image: image } }], network_interfaces: [{ network: network_id, access_configs: [{ name: 'default' }] }], metadata: { items: [{ key: 'ssh-keys', value: "#{key.ssh_user}:ssh-rsa #{key.public_key} #{key.ssh_user}"}] }) connection.insert_instance(project_name, [:region], instance).target_link sleep WAIT unless instance(name).status == INSTANCE_RUNNING_STATE name end |
#create_key(_) ⇒ Object
51 52 53 |
# File 'lib/sitefull-cloud/provider/google.rb', line 51 def create_key(_) OpenStruct.new(key_data) end |
#create_network ⇒ Object
38 39 40 41 42 43 |
# File 'lib/sitefull-cloud/provider/google.rb', line 38 def create_network return network_id unless network_id.nil? network = ::Google::Apis::ComputeV1::Network.new(name: 'sitefull-cloud', i_pv4_range: '172.16.0.0/16') connection.insert_network(project_name, network).target_link end |
#images(os) ⇒ Object
34 35 36 |
# File 'lib/sitefull-cloud/provider/google.rb', line 34 def images(os) @images ||= (project_images(project_name) + project_images("#{os}-cloud")).map { |i| OpenStruct.new(id: i.self_link, name: i.name) } end |
#instance_data(instance_id) ⇒ Object
65 66 67 |
# File 'lib/sitefull-cloud/provider/google.rb', line 65 def instance_data(instance_id) OpenStruct.new(id: instance_id, public_ip: instance(instance_id).network_interfaces.first.access_configs.first.nat_ip) end |
#machine_types(zone) ⇒ Object
28 29 30 31 32 |
# File 'lib/sitefull-cloud/provider/google.rb', line 28 def machine_types(zone) @machine_types ||= connection.list_machine_types(project_name, zone).items.map { |m| OpenStruct.new(id: m.self_link, name: m.name) } rescue ::Google::Apis::ClientError [] end |
#project_name ⇒ Object
20 21 22 |
# File 'lib/sitefull-cloud/provider/google.rb', line 20 def project_name @project_name ||= [:project_name] end |
#regions ⇒ Object
24 25 26 |
# File 'lib/sitefull-cloud/provider/google.rb', line 24 def regions @regions ||= connection.list_zones(project_name).items.map { |r| OpenStruct.new(id: r.name, name: r.name) } end |
#valid? ⇒ Boolean
69 70 71 |
# File 'lib/sitefull-cloud/provider/google.rb', line 69 def valid? regions.any? end |