<div dir="ltr"><div>Hi everyone,</div><div><br></div><div>I've been working on a new Juju provider for Microsoft Azure over the last few weeks, making use of the new Azure Resource Manager (ARM) APIs. The existing Azure provider is based on the older Service Management APIs. There's a few interesting things about this provider which I'd like to share.<br></div><div><br></div><div>The new ARM APIs are much more flexible, and mean we will no longer have to give up the ability to use unit placement in Azure. By default your units will be deployed to new machines, and those machines will be placed in an Availability Set along with the rest of the units of the service. Azure provides SLAs when you have two or more machines (i.e. units) in an Availability Set. So any service that supports automatic fail-over will benefit from this.</div><div><br></div><div>Storage is supported, as it was in the old Azure provider. The only difference is that the new provider's storage supports persistent volumes, whereas the old one did not. There is not currently support for network spaces, but I do not anticipate it to be difficult to add.</div><div><br></div><div>There is provisional support for running multiple Azure environments in the one Juju controller. In the new Azure, resources are grouped under (aptly named) Resource Groups. We represent each environment/model as a separate resource group; each of these has its own VMs, storage, etc. All machines in all environments are connected to a single "internal" virtual network, so that machines can communicate with one another and to the controllers.</div><div><br></div><div>Finally, we'll not be using <a href="http://cloud-images.canonical.com">cloud-images.canonical.com</a> to select images, but instead we'll use Azure's built-in image catalogue. Canonical publishes Ubuntu Server images, so we're using effectively using <a href="http://cloud-images.canonical.com">cloud-images.canonical.com</a> by proxy for Ubuntu. What's most interesting about using the Azure catalogue is that we can trivially start Windows VMs. So with the new provider, you can do:<br></div><div>    juju add-machine --series=win2012</div><div>... and it'll just work. No custom image metadata up my sleeve.</div><div>(If you're developing and need to upload Windows agent binaries, look out for my next email.)</div><div><br></div><div>Real deployment of a Powershell charm based on <a href="https://github.com/cloudbase/windows-charms-boilerplate">https://github.com/cloudbase/windows-charms-boilerplate</a>:</div><div>    <a href="http://paste.ubuntu.com/13123095/">http://paste.ubuntu.com/13123095/</a><br></div><div><br></div><div>The code for the provider is all here:</div><div>    <a href="https://github.com/axw/juju/tree/azure-arm/provider/azure">https://github.com/axw/juju/tree/azure-arm/provider/azure</a></div><div>And there's a wiki page describing some of the details here:</div><div>    <a href="https://github.com/juju/juju/wiki/Azure-provider-design-implementation-notes">https://github.com/juju/juju/wiki/Azure-provider-design-implementation-notes</a><br></div><div><br></div><div>There's one piece left to do before this can be proposed for merging, which is backwards-compatibility for existing Azure environments. That should be completed by end of next week.</div><div><br></div><div>Cheers,</div><div>Andrew</div></div>