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