module Sitefull::Provider::Azure
Constants
- IMAGES
- NETWORK_CIDR_BLOCK
- NETWORK_NAME
- PUBLIC_IP_NAME
- REQUIRED_OPTIONS
- RESOURCE_GROUP
- SECURITY_GROUP
- SUBNET_CIDR_BLOCK
- SUBNET_NAME
- SUCCESS_PROVISIONING_STATE
- WAIT
Public Instance Methods
connection()
click to toggle source
# File lib/sitefull-cloud/provider/azure.rb, line 38 def connection return @connection unless @connection.nil? connections = { arm: ::Azure::ARM::Resources::ResourceManagementClient.new(credentials), compute: ::Azure::ARM::Compute::ComputeManagementClient.new(credentials), network: ::Azure::ARM::Network::NetworkManagementClient.new(credentials), storage: ::Azure::ARM::Storage::StorageManagementClient.new(credentials) } connections.each { |_, v| v.subscription_id = options[:subscription_id] } @connection = OpenStruct.new(connections) end
create_firewall_rules()
click to toggle source
# File lib/sitefull-cloud/provider/azure.rb, line 74 def create_firewall_rules inbound_firewall_rule 'ssh', '22', 100 inbound_firewall_rule 'http', '80', 101 inbound_firewall_rule 'https', '443', 102 end
create_instance(name, machine_type, image, network_id, key)
click to toggle source
# File lib/sitefull-cloud/provider/azure.rb, line 84 def create_instance(name, machine_type, image, network_id, key) subnet = connection.network.subnets.get(resource_group_name, NETWORK_NAME, network_id) security_group = connection.network.network_security_groups.get(resource_group_name, SECURITY_GROUP) public_ip = public_ip_setup(name).value!.body network_interface = network_interface_setup(subnet, security_group, public_ip, name).value!.body storage_setup(name) sleep WAIT unless storage_account(name).properties.provisioning_state == SUCCESS_PROVISIONING_STATE storage = storage_account(name) instance_data = {machine_type: machine_type, image: image, name: name, key: key} instance_id = instance_setup(storage, network_interface, instance_data).value!.body.name sleep WAIT unless instance(instance_id).properties.provisioning_state == SUCCESS_PROVISIONING_STATE instance_id end
create_key(_)
click to toggle source
# File lib/sitefull-cloud/provider/azure.rb, line 80 def create_key(_) OpenStruct.new(key_data) end
create_network()
click to toggle source
# File lib/sitefull-cloud/provider/azure.rb, line 67 def create_network resource_group = resource_group_setup security_group = security_group_setup.value!.body network = network_setup(resource_group, security_group).value!.body network.properties.subnets.last.name end
images(os)
click to toggle source
# File lib/sitefull-cloud/provider/azure.rb, line 59 def images(os) @images unless @images.nil? search = IMAGES[os.to_sym] image_skus = connection.compute.virtual_machine_images.list_skus(options[:region], search[:publisher], search[:offer]) @images = image_skus.map { |sku| OpenStruct.new(id: "#{search[:publisher]}:#{search[:offer]}:#{sku.name}", name: "#{search[:offer]} #{sku.name}") } end
instance_data(instance_id)
click to toggle source
# File lib/sitefull-cloud/provider/azure.rb, line 100 def instance_data(instance_id) OpenStruct.new(id: instance_id, public_ip: public_ip(instance_id)) end
machine_types(region)
click to toggle source
# File lib/sitefull-cloud/provider/azure.rb, line 55 def machine_types(region) @machine_types ||= connection.compute.virtual_machine_sizes.list(region).value.map { |mt| OpenStruct.new(id: mt.name, name: mt.name) } end
regions()
click to toggle source
# File lib/sitefull-cloud/provider/azure.rb, line 51 def regions @regions ||= connection.arm.providers.get('Microsoft.Compute').resource_types.find { |rt| rt.resource_type == 'virtualMachines' }.locations.map { |l| OpenStruct.new(id: l.downcase.gsub(/\s/, ''), name: l) } end
valid?()
click to toggle source
# File lib/sitefull-cloud/provider/azure.rb, line 104 def valid? !options[:subscription_id].empty? && !connection.empty? && !regions.empty? rescue MsRestAzure::AzureOperationError => e raise StandardError.new JSON.parse(e.response.body)['error']['message'] end
Private Instance Methods
resource_group_name()
click to toggle source
# File lib/sitefull-cloud/provider/azure.rb, line 112 def resource_group_name "#{RESOURCE_GROUP}-#{options[:region]}" end
resource_group_setup()
click to toggle source
# File lib/sitefull-cloud/provider/azure.rb, line 116 def resource_group_setup resource_group = ResourceGroup.new resource_group.location = options[:region] connection.arm.resource_groups.create_or_update(resource_group_name, resource_group) end