/**
* @test
* @functional
*/
public function testAzureFunctional()
{
$region = 'westus';
$containerName = 'vhds';
$osDiskName = 'osdisk1';
$providers = $this->azure->getProvidersList($this->subscriptionId);
$this->assertNotEmpty($providers);
foreach ($providers as $provider) {
/* @var $provider ProviderData */
$this->assertNotEmpty($provider->namespace);
$this->assertNotEmpty($provider->registrationState);
}
$provider = $this->azure->getLocationsList(ProviderData::RESOURCE_PROVIDER_COMPUTE);
$this->assertNotEmpty($provider->namespace);
$this->deleteAllTestObjects();
$createResGroup = $this->azure->resourceManager->resourceGroup->create($this->subscriptionId, $this->resourceGroupName, $region);
$this->assertNotEmpty($createResGroup);
$request = new CreateAvailabilitySet($this->availabilitySetName, $region);
$request->tags = ['key' => 'value'];
$request->setProperties(['platformUpdateDomainCount' => 5, 'platformFaultDomainCount' => 3]);
$createAs = $this->azure->compute->availabilitySet->create($this->subscriptionId, $this->resourceGroupName, $request);
$this->assertNotEmpty($createAs);
$virtualNetworkProperties = new VirtualNetworkProperties([['name' => 'mysubnet1', 'properties' => ["addressPrefix" => "10.1.0.0/24"]]]);
$virtualNetworkProperties->addressSpace = ["addressPrefixes" => ["10.1.0.0/16", "10.2.0.0/16"]];
$createVirtualNetwork = new CreateVirtualNetwork($this->vnName, $region, $virtualNetworkProperties);
$vnResponse = $this->azure->network->virtualNetwork->create($this->subscriptionId, $this->resourceGroupName, $createVirtualNetwork);
$this->assertNotEmpty($vnResponse);
$createPublicIpAddress = new CreatePublicIpAddress($region, ["publicIPAllocationMethod" => 'Dynamic', 'settings' => ['domainNameLabel' => 'scalrtestlabel67']]);
$nicIpAddressResponse = $this->azure->network->publicIPAddress->create($this->subscriptionId, $this->resourceGroupName, $this->publicIpName, $createPublicIpAddress);
$this->assertNotEmpty($nicIpAddressResponse);
$ipConfigProperties = new IpConfigurationProperties(["id" => "/subscriptions/" . $this->subscriptionId . "/resourceGroups/" . $this->resourceGroupName . "/providers/Microsoft.Network/virtualNetworks/" . $this->vnName . "/subnets/mysubnet1"], "Dynamic");
$ipConfigProperties->publicIPAddress = ["id" => "/subscriptions/" . $this->subscriptionId . "/resourceGroups/" . $this->resourceGroupName . "/providers/Microsoft.Network/publicIPAddresses/" . $this->publicIpName];
$nicProperties = new InterfaceProperties([new InterfaceIpConfigurationsData('ipconfig1', $ipConfigProperties)]);
$createSecurityRule = new CreateSecurityRule('Tcp', '23-45', '46-56', '*', '*', 'Allow', 123, 'Inbound');
$ruleData = new SecurityRuleData();
$ruleData->name = 'rule_name';
$ruleData->setProperties($createSecurityRule);
$securityGroupProperties = new SecurityGroupProperties();
$securityGroupProperties->setSecurityRules([$ruleData]);
$createSecurityGroup = new CreateSecurityGroup($region);
$createSecurityGroup->setProperties($securityGroupProperties);
$sgResponse = $this->azure->network->securityGroup->create($this->subscriptionId, $this->resourceGroupName, $this->sgName, $createSecurityGroup);
$this->assertNotEmpty($sgResponse);
$secGroupId = "/subscriptions/" . $this->subscriptionId . "/resourceGroups/" . $this->resourceGroupName . "/providers/Microsoft.Network/networkSecurityGroups/" . $this->sgName;
$nicProperties->setNetworkSecurityGroup(['id' => $secGroupId]);
$createNic = new CreateInterface($region, $nicProperties);
$nicResponse = $this->azure->network->interface->create($this->subscriptionId, $this->resourceGroupName, $this->nicName, $createNic);
$this->assertNotEmpty($nicResponse);
$nicInfo = $this->azure->network->interface->getInfo($this->subscriptionId, $this->resourceGroupName, $this->nicName);
$this->assertNotEmpty($nicInfo);
$disassociate = $this->azure->network->publicIPAddress->disassociate($this->subscriptionId, $this->resourceGroupName, $this->nicName, $this->publicIpName);
$this->assertTrue($disassociate);
$associate = $this->azure->network->publicIPAddress->associate($this->subscriptionId, $this->resourceGroupName, $this->nicName, $this->publicIpName);
$this->assertTrue($associate);
$createStorage = new AccountData($region, ['accountType' => 'Standard_LRS']);
$storageResponse = $this->azure->storage->account->create($this->subscriptionId, $this->resourceGroupName, $this->storageName, $createStorage);
$this->assertNotEmpty($storageResponse);
$networkProfile = ["networkInterfaces" => [["id" => "/subscriptions/" . $this->subscriptionId . "/resourceGroups/" . $this->resourceGroupName . "/providers/Microsoft.Network/networkInterfaces/" . $this->nicName]]];
$osProfile = new OsProfile('vladtest34', 'Tex6-HBU*7');
$osProfile->computerName = 'testscalr';
$vhd = ['uri' => 'https://' . $this->storageName . '.blob.core.windows.net/' . $containerName . '/' . $osDiskName . '.vhd'];
$storageProfile = new StorageProfile(new OsDisk($osDiskName, $vhd, 'FromImage'));
$publishers = $this->azure->compute->location->getPublishersList($this->subscriptionId, $region);
$this->assertNotEmpty($publishers);
$offers = null;
foreach ($publishers as $publisher) {
$this->assertObjectHasAttribute('name', $publisher);
$offers = $this->azure->compute->location->getOffersList($this->subscriptionId, $region, $publisher->name);
if (!empty($offers)) {
break;
}
}
$this->assertNotNull($offers);
$offer = reset($offers);
$this->assertObjectHasAttribute('name', $offer);
$skus = $this->azure->compute->location->getSkusList($this->subscriptionId, $region, $publisher->name, $offer->name);
$this->assertNotEmpty($skus);
$sku = reset($skus);
$this->assertObjectHasAttribute('name', $sku);
$versions = $this->azure->compute->location->getVersionsList($this->subscriptionId, $region, $publisher->name, $offer->name, $sku->name);
$this->assertNotEmpty($versions);
$version = reset($versions);
$this->assertObjectHasAttribute('name', $version);
$storageProfile->setImageReference(['publisher' => 'Canonical', 'offer' => 'UbuntuServer', 'sku' => '14.04.2-LTS', 'version' => 'latest']);
$vmProperties = new VirtualMachineProperties(["vmSize" => "Standard_A0"], $networkProfile, $storageProfile, $osProfile);
//$this->azure->getClient()->setDebug();
$vmRequest = new CreateVirtualMachine($this->vmName, $region, $vmProperties);
$createVm = $this->azure->compute->virtualMachine->create($this->subscriptionId, $this->resourceGroupName, $vmRequest);
$this->assertNotEmpty($createVm);
$modelInfo = $this->azure->compute->virtualMachine->getModelViewInfo($this->subscriptionId, $this->resourceGroupName, $this->vmName, true);
$this->assertNotEmpty($modelInfo);
$extensionProperties = new ResourceExtensionProperties('Microsoft.OSTCExtensions', 'CustomScriptForLinux', '1.2');
// for Windows use "new ResourceExtensionProperties('Microsoft.Compute', 'CustomScriptExtension', '1.0')"
$extensionProperties->setSettings(['fileUris' => ["http://tru4.scalr.com/public/installScalarizr?osType=linux&repo=latest&platform=azure"], 'commandToExecute' => 'bash -c "cat installScalarizr | bash && service scalr-upd-client start"']);
$createExtension = new CreateResourceExtension('scalarizr', $region, $extensionProperties);
$this->azure->compute->resourceExtension->create($this->subscriptionId, $this->resourceGroupName, $this->vmName, $createExtension);
$this->deleteAllTestObjects();
}