Merge pull request #53 from opscode/adamed-OC-8170

OC-8170: Support new publishsettings format
This commit is contained in:
Adam Edwards 2013-06-10 22:23:47 -07:00
Родитель 8729036fd8 c0fd4803ac
Коммит 57e2876120
4 изменённых файлов: 32 добавлений и 4 удалений

Просмотреть файл

@ -19,14 +19,14 @@ OR
The management certificate is required for secure communication with the Windows Azure Platform via the REST APIs. These can be obtained from the publishsettings file. You need to download the .publishsettings file from the link given below. You can either provide the path to the .publishsettings file OR you can generate the management certificate yourself from the .publishsettings file.
===Management Certificate using the .publishsettings file
Download the .publishsettings file from http://go.microsoft.com/fwlink/?LinkId=254432
Download the .publishsettings file from https://manage.windowsazure.com/publishsettings/index?client=xplat
Set the option :azure_publish_settings_file by specifying the path to the downloaded .publishsettings file. The plugin provides this easy option and will save you the complexity of the second approach listed next.
===Management Certificate in the PEM format
Follow these steps to generate the certificate in the PEM format
1. Download the settings file from http://go.microsoft.com/fwlink/?LinkId=254432
1. Download the settings file from https://manage.windowsazure.com/publishsettings/index?client=xplat
2. Extract the data from the ManagementCertificate field into a separate file named - cert.pfx
3. Decode the certificate file :

Просмотреть файл

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<PublishData>
<PublishProfile
SchemaVersion="2.0"
PublishMethod="AzureServiceManagementAPI">
<Subscription
ServiceManagementUrl="https://management.core.windows.net"
Id="id1"
Name="Name1"
ManagementCertificate="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">
</PublishProfile>
</PublishData>

Просмотреть файл

@ -125,9 +125,18 @@ class Chef
begin
doc = Nokogiri::XML(File.open(find_file(filename)))
profile = doc.at_css("PublishProfile")
management_cert = OpenSSL::PKCS12.new(Base64.decode64(profile.attribute("ManagementCertificate").value))
subscription = profile.at_css("Subscription")
#check given PublishSettings XML file format.Currently PublishSettings file have two different XML format
if profile.attribute("SchemaVersion").nil?
management_cert = OpenSSL::PKCS12.new(Base64.decode64(profile.attribute("ManagementCertificate").value))
Chef::Config[:knife][:azure_api_host_name] = URI(profile.attribute("Url").value).host
elsif profile.attribute("SchemaVersion").value == "2.0"
management_cert = OpenSSL::PKCS12.new(Base64.decode64(subscription.attribute("ManagementCertificate").value))
Chef::Config[:knife][:azure_api_host_name] = URI(subscription.attribute("ServiceManagementUrl").value).host
else
ui.error("Publish settings file Schema not supported - " + filename)
end
Chef::Config[:knife][:azure_mgmt_cert] = management_cert.certificate.to_pem + management_cert.key.to_pem
Chef::Config[:knife][:azure_api_host_name] = URI(profile.attribute("Url").value).host
Chef::Config[:knife][:azure_subscription_id] = doc.at_css("Subscription").attribute("Id").value
rescue
ui.error("Incorrect publish settings file - " + filename)

Просмотреть файл

@ -55,6 +55,13 @@ describe Chef::Knife::AzureBase do
validate_cert()
end
it "- should validate parse method for SchemaVersion2-0 publishsettings file" do
@dummy.parse_publish_settings_file("azureValidSchemaVersion-2.0.publishsettings")
Chef::Config[:knife][:azure_api_host_name].should == 'management.core.windows.net'
Chef::Config[:knife][:azure_subscription_id].should == 'id1'
validate_cert()
end
it "- should validate settings file and subscrition id" do
@dummy.config[:azure_subscription_id] = "azure_subscription_id"
Chef::Config[:knife][:azure_publish_settings_file] = "azureValid.publishsettings"