knife-azure 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/Gemfile +22 -0
  2. data/Guardfile +8 -0
  3. data/LICENSE +201 -0
  4. data/Rakefile +51 -0
  5. data/knife-azure.gemspec +106 -0
  6. data/lib/azure/connection.rb +75 -0
  7. data/lib/azure/deploy.rb +114 -0
  8. data/lib/azure/disk.rb +62 -0
  9. data/lib/azure/host.rb +90 -0
  10. data/lib/azure/image.rb +58 -0
  11. data/lib/azure/rest.rb +97 -0
  12. data/lib/azure/role.rb +182 -0
  13. data/lib/azure/utility.rb +29 -0
  14. data/lib/chef/knife/azure_base.rb +102 -0
  15. data/lib/chef/knife/azure_image_list.rb +58 -0
  16. data/lib/chef/knife/azure_server_create.rb +283 -0
  17. data/lib/chef/knife/azure_server_delete.rb +103 -0
  18. data/lib/chef/knife/azure_server_describe.rb +85 -0
  19. data/lib/chef/knife/azure_server_list.rb +70 -0
  20. data/lib/knife-azure/version.rb +7 -0
  21. data/readme.rdoc +210 -0
  22. data/spec/functional/deploys_test.rb +39 -0
  23. data/spec/functional/host_test.rb +22 -0
  24. data/spec/functional/images_list_test.rb +44 -0
  25. data/spec/functional/role_test.rb +16 -0
  26. data/spec/integration/role_lifecycle_test.rb +60 -0
  27. data/spec/spec_helper.rb +41 -0
  28. data/spec/unit/assets/create_deployment.xml +37 -0
  29. data/spec/unit/assets/create_deployment_in_progress.xml +1 -0
  30. data/spec/unit/assets/create_host.xml +7 -0
  31. data/spec/unit/assets/create_role.xml +54 -0
  32. data/spec/unit/assets/list_deployments_for_service000.xml +126 -0
  33. data/spec/unit/assets/list_deployments_for_service001.xml +166 -0
  34. data/spec/unit/assets/list_deployments_for_service002.xml +1 -0
  35. data/spec/unit/assets/list_deployments_for_service003.xml +1 -0
  36. data/spec/unit/assets/list_disks.xml +1 -0
  37. data/spec/unit/assets/list_hosts.xml +1 -0
  38. data/spec/unit/assets/list_images.xml +1 -0
  39. data/spec/unit/assets/post_success.xml +6 -0
  40. data/spec/unit/deploys_list_spec.rb +55 -0
  41. data/spec/unit/disks_spec.rb +44 -0
  42. data/spec/unit/hosts_spec.rb +55 -0
  43. data/spec/unit/images_spec.rb +35 -0
  44. data/spec/unit/query_azure_mock.rb +69 -0
  45. data/spec/unit/roles_create_spec.rb +82 -0
  46. data/spec/unit/roles_list_spec.rb +32 -0
  47. metadata +240 -0
data/readme.rdoc ADDED
@@ -0,0 +1,210 @@
1
+ =Knife Azure
2
+
3
+ Description: This plugin supports listing, creating, and deleting Azure instances bootstrapped with chef client.
4
+
5
+ ==Installation:
6
+ Be sure you are running the latest version Chef. Versions earlier than 0.10.0 don’t support plugins:
7
+
8
+ gem install chef
9
+ This plugin is distributed as a Ruby Gem. To install it, run:
10
+
11
+ gem install knife-azure
12
+ Depending on your system’s configuration, you may need to run this command with root privileges.
13
+
14
+ ==Requirements:
15
+
16
+ Due to a bug in mixlib-authentication, Chef node names must be 91 characters or shorter. Chef uses the host name by default, however the host names provided by Azure are very long.
17
+
18
+ You must use the '-N NODE_NAME' flag with 'knife azure' to specify a node name to be used by Chef that is less than 91 characters.
19
+
20
+ For more information, see http://tickets.opscode.com/browse/CHEF-3095
21
+
22
+ ==Configuration:
23
+ Most configuration options can be specified either in your knife.rb file or as command line parameters.
24
+
25
+ Options common and necessary for all subcommands:
26
+ option :azure_subscription_id,
27
+ :short => "-S ID",
28
+ :long => "--azure-subscription-id ID",
29
+ :description => "Your Azure subscription ID",
30
+
31
+ option :azure_pem_file,
32
+ :short => "-p FILENAME",
33
+ :long => "--azure-pem-filename FILENAME",
34
+ :description => "Your Azure PEM file name",
35
+
36
+ option :azure_host_name,
37
+ :short => "-H HOSTNAME",
38
+ :long => "--azure_host_name HOSTNAME",
39
+ :description => "Your Azure host name",
40
+
41
+ Options used with the Create subcommand:
42
+ option :chef_node_name,
43
+ :short => "-N NAME",
44
+ :long => "--node-name NAME",
45
+ :description => "The Chef node name for your new node"
46
+
47
+ option :ssh_user,
48
+ :short => "-x USERNAME",
49
+ :long => "--ssh-user USERNAME",
50
+ :description => "The ssh username",
51
+ :default => "root"
52
+
53
+ option :ssh_password,
54
+ :short => "-P PASSWORD",
55
+ :long => "--ssh-password PASSWORD",
56
+ :description => "The ssh password"
57
+
58
+ option :identity_file,
59
+ :short => "-i IDENTITY_FILE",
60
+ :long => "--identity-file IDENTITY_FILE",
61
+ :description => "The SSH identity file used for authentication"
62
+
63
+ option :prerelease,
64
+ :long => "--prerelease",
65
+ :description => "Install the pre-release chef gems"
66
+
67
+ option :bootstrap_version,
68
+ :long => "--bootstrap-version VERSION",
69
+ :description => "The version of Chef to install",
70
+
71
+ option :distro,
72
+ :short => "-d DISTRO",
73
+ :long => "--distro DISTRO",
74
+ :description => "Bootstrap a distro using a template",
75
+ :default => "chef-full"
76
+
77
+ option :template_file,
78
+ :long => "--template-file TEMPLATE",
79
+ :description => "Full path to location of template to use",
80
+ :default => false
81
+
82
+ option :run_list,
83
+ :short => "-r RUN_LIST",
84
+ :long => "--run-list RUN_LIST",
85
+ :description => "Comma separated list of roles/recipes to apply",
86
+ :default => []
87
+
88
+ option :no_host_key_verify,
89
+ :long => "--no-host-key-verify",
90
+ :description => "Disable host key verification",
91
+ :boolean => true,
92
+ :default => false
93
+
94
+ option :hosted_service_name,
95
+ :short => "-s NAME",
96
+ :long => "--hosted-service-name NAME",
97
+ :description => "specifies the name for the hosted service"
98
+
99
+ option :role_name,
100
+ :short => "-R name",
101
+ :long => "-- role-name NAME",
102
+ :description => "specifies the name for the virtual machine"
103
+
104
+ option :host_name,
105
+ :short => "-H NAME",
106
+ :long => "--host-name NAME",
107
+ :description => "specifies the host name for the virtual machine"
108
+
109
+ option :media_location_prefix,
110
+ :short => "-m PREFIX",
111
+ :long => "--media-location-prefix PREFIX",
112
+ :description => "user account name (used for constructing os disk media link)"
113
+
114
+ option :os_disk_name,
115
+ :short => "-o DISKNAME",
116
+ :long => "--os-disk-name DISKNAME",
117
+ :description => "unique name for specifying os disk (optional)"
118
+
119
+ option :source_image,
120
+ :short => "-I IMAGE",
121
+ :long => "--source-image IMAGE",
122
+ :description => "disk image name to use to create virtual machine"
123
+
124
+ option :role_size,
125
+ :short => "-z SIZE",
126
+ :long => "--role-size SIZE",
127
+ :description => "size of virtual machine (ExtraSmall, Small, Medium, Large, ExtraLarge)"
128
+
129
+ option :tcp_endpoints,
130
+ :short => "-t PORT_LIST",
131
+ :long => "--tcp-endpoints PORT_LIST",
132
+ :description => "Comma separated list of TCP local and public ports to open i.e. '80:80,433:5000'"
133
+
134
+ option :udp_endpoints,
135
+ :short => "-u PORT_LIST",
136
+ :long => "--udp-endpoints PORT_LIST",
137
+ :description => "Comma separated list of UDP local and public ports to open i.e. '80:80,433:5000'"
138
+
139
+
140
+ ====Here are some lines with example values in a knife.rb file:
141
+ knife[:azure_subscription_id] = "YOUR-GUID"
142
+
143
+ knife[:azure_pem_file] = "YOUR-CERT.pem"
144
+
145
+ knife[:azure_host_name] = "azure-api-endpoint"
146
+
147
+ knife[:hosted_service_name]='service001'
148
+
149
+ knife[:role_name]='role105'
150
+
151
+ knife[:host_name]='host105'
152
+
153
+ knife[:ssh_user]='yoursshuser'
154
+
155
+ knife[:ssh_password]='yoursshpw'
156
+
157
+ knife[:media_location_prefix]='auxpreview104'
158
+
159
+ knife[:os_disk_name]='disk107'
160
+
161
+ knife[:distro]='centos5-gems'
162
+
163
+ knife[:tcp_endpoints]='66'
164
+
165
+ knife[:udp_endpoints]='77,88,99'
166
+
167
+ # To use the CentOS image, the following lines are necessary
168
+
169
+ # note that the role_size must be Medium or larger
170
+
171
+ knife[:source_image]='OpenLogic__OpenLogic-CentOS-62-20120509-en-us-30GB.vhd'
172
+
173
+ knife[:role_size]='Medium'
174
+
175
+ # Alternatively, at the present time you could use a SUSE image
176
+
177
+ # note that you can use Small or ExtraSmall for the role_size
178
+
179
+ knife[:source_image]='SUSE__OpenSUSE64121-03192012-en-us-15GB.vhd'
180
+
181
+ knife[:role_size]='Small'
182
+
183
+ ==Subcommands
184
+ This plugin provides the following Knife subcommands. Specific command options can be found by invoking the subcommand with a --help flag
185
+
186
+ ===knife azure server create
187
+ Provisions a new server in Azure and then perform a Chef bootstrap (using the SSH protocol). The goal of the bootstrap is to get Chef installed on the target system so it can run Chef Client with a Chef Server. The main assumption is a baseline OS installation exists (provided by the provisioning). It is primarily intended for Chef Client systems that talk to a Chef server. By default the server is bootstrapped using the ubuntu10.04-gems template. This can be overridden using the -d or --template-file command options.
188
+
189
+ ===knife azure server delete [role_name_to_delete]
190
+ Deletes an existing server(role) in the currently configured AWS account. PLEASE NOTE - By default, this does not delete the associated node and client objects from the Chef server. To do so, add the --purge flag.
191
+
192
+ ===knife azure server list
193
+ Outputs a list of all servers in the currently configured AWS account. PLEASE NOTE - this shows all instances associated with the account, some of which may not be currently managed by the Chef server.
194
+
195
+ ===knife azure server describe [role_name_to_describe]
196
+ Outputs detail about a specific role, including all the ports that it has open
197
+
198
+ ===knife azure image list
199
+ Outputs a list of all linux images that are available to use for provisioning. You should choose one of these to use for the :source_image parameter to the server create command.
200
+
201
+ == Understanding Azure
202
+ Azure implements the following hierarchy - subscription=>hosted service=>deployment=>role (and the guest operating system has a hostname as well, which uses the role as its container)
203
+
204
+ These are generally a one to many relationship from top to bottom, however there are two anamolies relating to the deployment
205
+ 1) a hosted service can have more than one deployment, but that seems to be an artifact of the PAAS origins of Azure. PAAS allows there to be one staging and one production deployment per hosted service. It is my understanding (and how the code works) that there should be only one deployment per hosted service. Some initial internal code I examined used the technique of looking at the "production" deployment slot to iterate for existing roles. If a create request occurs and a deployment does not exist, it is created and given the same name as the hosted service and the deployment slot is marked as "production".
206
+ 2) Azure enforces that a deployment must include the initial role when it is created. It also will not allow you to delete a role if it is the last remaining role in a deployment; in that case you are required to delete the deployment.
207
+
208
+ ==Tests:
209
+
210
+ The tests require a subscription id to be places in spec/spec_helper.rb and the associated private key to be placed in 'AzureLinuxCert.pem' in the top level directory. Then run 'rake spec'
@@ -0,0 +1,39 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "deploys" do
4
+ before(:all) do
5
+ @connection = Azure::Connection.new(TEST_PARAMS)
6
+ @deploys = @connection.deploys.all
7
+ end
8
+
9
+ specify {@deploys.length.should be > 0}
10
+ it 'each deployment should have values' do
11
+ @deploys.each do |deploy|
12
+ deploy.name.should_not be_nil
13
+ deploy.status.should_not be_nil
14
+ deploy.url.should_not be_nil
15
+ deploy.roles.length.should be > 0
16
+ end
17
+ end
18
+ it 'each role should have values' do
19
+ @deploys.each do |deploy|
20
+ Chef::Log.info '============================='
21
+ Chef::Log.info 'hosted service: ' + deploy.hostedservicename + ' deployment: ' + deploy.name
22
+ deploy.roles.each do |role|
23
+ role.name.should_not be_nil
24
+ role.status.should_not be_nil
25
+ role.size.should_not be_nil
26
+ role.ipaddress.should_not be_nil
27
+ role.sshport.should_not be_nil
28
+ role.sshipaddress.should_not be_nil
29
+ Chef::Log.info '============================='
30
+ Chef::Log.info 'role: ' + role.name
31
+ Chef::Log.info 'status: ' + role.status
32
+ Chef::Log.info 'size: ' + role.size
33
+ Chef::Log.info 'ip address: ' + role.ipaddress
34
+ Chef::Log.info 'ssh port: ' + role.sshport
35
+ Chef::Log.info 'ssh ip address: ' + role.sshipaddress
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Connection" do
4
+
5
+ before(:all) do
6
+ @connection = Azure::Connection.new(TEST_PARAMS)
7
+ @items = @connection.hosts.all
8
+ end
9
+
10
+ specify {@items.length.should be > 0}
11
+ specify {@connection.hosts.exists("thisServiceShouldNotBeThere").should == false}
12
+ specify{@connection.hosts.exists("service002").should == true}
13
+ it "looking for a specific host" do
14
+ foundNamedHost = false
15
+ @items.each do |host|
16
+ next unless host.name == "service002"
17
+ foundNamedHost = true
18
+ end
19
+ foundNamedHost.should == true
20
+ end
21
+ end
22
+
@@ -0,0 +1,44 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Connection" do
4
+
5
+ before(:all) do
6
+ @connection = Azure::Connection.new(TEST_PARAMS)
7
+ @items = @connection.images.all
8
+ end
9
+
10
+ it "should be contain images" do
11
+ @items.length.should be > 1
12
+ end
13
+ it "each image should have all fields valid" do
14
+ @items.each do |image|
15
+ image.category.should_not be_nil
16
+ image.label.should_not be_nil
17
+ image.name.should_not be_nil
18
+ image.os.should_not be_nil
19
+ image.eula.should_not be_nil
20
+ image.description.should_not be_nil
21
+ end
22
+ end
23
+
24
+
25
+ # it "should get services" do
26
+ # @demo.DemoGet
27
+ # end
28
+ # it "bad subscription should fail with ResourceNotFound" do
29
+ # @demo.subscription = "ae2ff9b3-12b2-45cf-b58e-468bc7e29110xxxxx"
30
+ #
31
+ # expect{@demo.DemoGet}.to raise_error(RuntimeError, /ResourceNotFound/)
32
+ # end
33
+ # it "bad pem_path should fail with CertificateError" do
34
+ # @demo.pem_file = ""
35
+ #
36
+ # expect{@demo.DemoGet}.to raise_error(OpenSSL::X509::CertificateError)
37
+ # end
38
+ # it "bad service_name should fail with " do
39
+ # @demo.service_name = ""
40
+ #
41
+ # expect{@demo.DemoGet}.to raise_error(RuntimeError, /ResourceNotFound/)
42
+ # end
43
+ end
44
+
@@ -0,0 +1,16 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "roles" do
4
+ before(:all) do
5
+ @connection = Azure::Connection.new(TEST_PARAMS)
6
+ @roles = @connection.roles.all
7
+ end
8
+
9
+ specify {@connection.roles.exists('notexist').should == false}
10
+ specify {@connection.roles.exists('role126').should == true}
11
+ it 'run through roles' do
12
+ @connection.roles.roles.each do |role|
13
+ role.name.should_not be_nil
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,60 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ describe "role lifecycle" do
3
+ Chef::Log.init()
4
+ Chef::Log.level=:info
5
+ before(:all) do
6
+ include AzureSpecHelper
7
+ connection_params = TEST_PARAMS
8
+ @connection = Azure::Connection.new(connection_params)
9
+ arbitrary = rand(1000) + 1
10
+ @params = {
11
+ :hosted_service_name=>'service002',
12
+ :role_name=>'role' + arbitrary.to_s,
13
+ :host_name=>'host' + arbitrary.to_s,
14
+ :ssh_user=>'jetstream',
15
+ :ssh_password=>'jetstream1!',
16
+ :media_location_prefix=>'auxpreview104',
17
+ :source_image=>'SUSE__OpenSUSE64121-03192012-en-us-15GB',
18
+ :role_size=>'ExtraSmall'
19
+ }
20
+ end
21
+ # ToFix - breaks because it does not refresh each role
22
+ # within loop and does not know that it needs to delete
23
+ # a deployment instead of a role when it gets down to
24
+ # the last role in a deployment
25
+ it 'delete everything, build out completely' do
26
+ Chef::Log.info 'deleting any existing roles'
27
+ @connection.roles.all.each do |role|
28
+ Chef::Log.info 'deleting role' + role.name
29
+ @connection.roles.delete role.name
30
+ break
31
+ end
32
+
33
+ Chef::Log.info 'deleting any existing hosts'
34
+ @connection.hosts.all.each do |host|
35
+ Chef::Log.info 'deleting host' + host.name
36
+ @connection.hosts.delete host.name
37
+ end
38
+
39
+ # create 5 new roles
40
+ ['001', '002', '003', '004', '005'].each do |val|
41
+ arbitrary = rand(1000) + 1
42
+ @params[:role_name]='role' + val + arbitrary.to_s
43
+ @params[:host_name]='host' + val
44
+ Chef::Log.info 'creating a new role named ' + @params[:role_name]
45
+ @connection.deploys.create(@params)
46
+ end
47
+
48
+ # refresh the roles list
49
+ Chef::Log.info 'refreshing roles'
50
+ @connection.roles.all
51
+
52
+ # list the roles
53
+ Chef::Log.info 'display roles'
54
+ @connection.roles.roles.each do |role|
55
+ Chef::Log.info role.name
56
+ end
57
+ end
58
+ #specify {@connection.roles.exists(@params[:role_name]).should == true}
59
+ #specify {@connection.roles.exists(@params[:role_name] + 'notexist').should == false}
60
+ end
@@ -0,0 +1,41 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ require 'rspec'
3
+ require 'equivalent-xml'
4
+ require 'chef'
5
+ require 'chef/log'
6
+
7
+ require 'azure/connection'
8
+ require 'azure/rest'
9
+ require 'azure/host'
10
+ require 'azure/image'
11
+ require 'azure/deploy'
12
+ require 'azure/role'
13
+ require 'azure/disk'
14
+
15
+ require 'chef/knife/azure_server_list'
16
+ require 'chef/knife/azure_server_delete'
17
+ require 'chef/knife/azure_server_create'
18
+ require 'chef/knife/azure_server_describe'
19
+ require 'chef/knife/azure_image_list'
20
+
21
+ def tmpFile filename
22
+ tmpdir = 'tmp'
23
+ Dir::mkdir tmpdir unless FileTest::directory?(tmpdir)
24
+ tmpdir + '/' + filename
25
+ end
26
+
27
+ Chef::Log.init(tmpFile('debug.log'), 'daily')
28
+ Chef::Log.level=:debug
29
+
30
+ TEST_PARAMS = {
31
+ :azure_subscription_id => "YOUR_SUBSCRIPTION_ID_HERE"
32
+ :azure_pem_file => "AzureLinuxCert.pem",
33
+ :azure_host_name => "management-preview.core.windows-int.net",
34
+ :service_name => "hostedservices"
35
+ }
36
+
37
+ module AzureSpecHelper
38
+ def readFile filename
39
+ File.read(File.dirname(__FILE__) + "/unit/assets/#{filename}")
40
+ end
41
+ end
@@ -0,0 +1,37 @@
1
+ <?xml version="1.0"?> <Deployment xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/windowsazure">
2
+ <Name>unknown_yet</Name>
3
+ <DeploymentSlot>Production</DeploymentSlot>
4
+ <Label>dW5rbm93bl95ZXQ=</Label>
5
+ <RoleList>
6
+ <Role i:type="PersistentVMRole">
7
+ <RoleName>vm01</RoleName>
8
+ <OsVersion i:nil="true"/>
9
+ <RoleType>PersistentVMRole</RoleType>
10
+ <ConfigurationSets>
11
+ <ConfigurationSet i:type="LinuxProvisioningConfigurationSet">
12
+ <ConfigurationSetType>LinuxProvisioningConfiguration</ConfigurationSetType>
13
+ <HostName>myVm</HostName>
14
+ <UserName>jetstream</UserName>
15
+ <UserPassword>jetstream1!</UserPassword>
16
+ <DisableSshPasswordAuthentication>false</DisableSshPasswordAuthentication>
17
+ </ConfigurationSet>
18
+ <ConfigurationSet i:type="NetworkConfigurationSet">
19
+ <ConfigurationSetType>NetworkConfiguration</ConfigurationSetType>
20
+ <InputEndpoints>
21
+ <InputEndpoint>
22
+ <LocalPort>22</LocalPort>
23
+ <Name>SSH</Name>
24
+ <Protocol>TCP</Protocol>
25
+ </InputEndpoint>
26
+ </InputEndpoints>
27
+ </ConfigurationSet>
28
+ </ConfigurationSets>
29
+ <Label>dm0wMQ==</Label>
30
+ <OSVirtualHardDisk>
31
+ <MediaLink>http://auxpreview104imagestore.blob.core.azure-preview.com/os-disks/disk004Test</MediaLink>
32
+ <SourceImageName>SUSE__OpenSUSE64121-03192012-en-us-15GB</SourceImageName>
33
+ </OSVirtualHardDisk>
34
+ <RoleSize>ExtraSmall</RoleSize>
35
+ </Role>
36
+ </RoleList>
37
+ </Deployment>
@@ -0,0 +1 @@
1
+ <Operation xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"><ID>878c6cd7-73d1-4527-949e-44eb7451547c</ID><Status>InProgress</Status></Operation
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <CreateHostedService xmlns="http://schemas.microsoft.com/windowsazure">
3
+ <ServiceName>service003</ServiceName>
4
+ <Label>c2VydmljZTAwMw==</Label>
5
+ <Description>Explicitly created hosted service</Description>
6
+ <Location>Windows Azure Preview</Location>
7
+ </CreateHostedService
@@ -0,0 +1,54 @@
1
+ <?xml version="1.0"?>
2
+ <PersistentVMRole xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
3
+ <RoleName>vm01</RoleName>
4
+ <OsVersion i:nil="true"/>
5
+ <RoleType>PersistentVMRole</RoleType>
6
+ <ConfigurationSets>
7
+ <ConfigurationSet i:type="LinuxProvisioningConfigurationSet">
8
+ <ConfigurationSetType>LinuxProvisioningConfiguration</ConfigurationSetType>
9
+ <HostName>myVm</HostName>
10
+ <UserName>jetstream</UserName>
11
+ <UserPassword>jetstream1!</UserPassword>
12
+ <DisableSshPasswordAuthentication>false</DisableSshPasswordAuthentication>
13
+ </ConfigurationSet>
14
+ <ConfigurationSet i:type="NetworkConfigurationSet">
15
+ <ConfigurationSetType>NetworkConfiguration</ConfigurationSetType>
16
+ <InputEndpoints>
17
+ <InputEndpoint>
18
+ <LocalPort>22</LocalPort>
19
+ <Name>SSH</Name>
20
+ <Protocol>TCP</Protocol>
21
+ </InputEndpoint>
22
+ <InputEndpoint>
23
+ <LocalPort>44</LocalPort>
24
+ <Name>tcpport_44_myVm</Name>
25
+ <Port>45</Port>
26
+ <Protocol>TCP</Protocol>
27
+ </InputEndpoint>
28
+ <InputEndpoint>
29
+ <LocalPort>55</LocalPort>
30
+ <Name>tcpport_55_myVm</Name>
31
+ <Port>55</Port>
32
+ <Protocol>TCP</Protocol>
33
+ </InputEndpoint>
34
+ <InputEndpoint>
35
+ <LocalPort>65</LocalPort>
36
+ <Name>udpport_65_myVm</Name>
37
+ <Port>65</Port>
38
+ <Protocol>UDP</Protocol>
39
+ </InputEndpoint>
40
+ <InputEndpoint>
41
+ <LocalPort>75</LocalPort>
42
+ <Name>udpport_75_myVm</Name>
43
+ <Protocol>UDP</Protocol>
44
+ </InputEndpoint>
45
+ </InputEndpoints>
46
+ </ConfigurationSet>
47
+ </ConfigurationSets>
48
+ <Label>dm0wMQ==</Label>
49
+ <OSVirtualHardDisk>
50
+ <MediaLink>http://auxpreview104imagestore.blob.core.azure-preview.com/os-disks/disk004Test</MediaLink>
51
+ <SourceImageName>SUSE__OpenSUSE64121-03192012-en-us-15GB</SourceImageName>
52
+ </OSVirtualHardDisk>
53
+ <RoleSize>ExtraSmall</RoleSize>
54
+ </PersistentVMRole>
@@ -0,0 +1,126 @@
1
+ <?xml version="1.0"?>
2
+ <Deployment xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
3
+ <Name>service003</Name>
4
+ <DeploymentSlot>Production</DeploymentSlot>
5
+ <PrivateID>34f75bed486643d39affeb9f98d47227</PrivateID>
6
+ <Status>Running</Status>
7
+ <Label>YzJWeWRtbGpaVEF3TXc9PQ==</Label>
8
+ <Url>http://service003.cloudapp-preview.net/</Url>
9
+ <Configuration>PFNlcnZpY2VDb25maWd1cmF0aW9uIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL1NlcnZpY2VIb3N0aW5nLzIwMDgvMTAvU2VydmljZUNvbmZpZ3VyYXRpb24iPg0KICA8Um9sZSBuYW1lPSJyb2xlMjA2Ij4NCiAgICA8SW5zdGFuY2VzIGNvdW50PSIxIiAvPg0KICA8L1JvbGU+DQo8L1NlcnZpY2VDb25maWd1cmF0aW9uPg==</Configuration>
10
+ <RoleInstanceList>
11
+ <RoleInstance>
12
+ <RoleName>role206</RoleName>
13
+ <InstanceName>role206</InstanceName>
14
+ <InstanceStatus>StoppedVM</InstanceStatus>
15
+ <InstanceUpgradeDomain>0</InstanceUpgradeDomain>
16
+ <InstanceFaultDomain>0</InstanceFaultDomain>
17
+ <InstanceSize>ExtraSmall</InstanceSize>
18
+ <InstanceStateDetails/>
19
+ <IpAddress>10.26.198.33</IpAddress>
20
+ <InstanceEndpoints>
21
+ <InstanceEndpoint>
22
+ <Name>SSH</Name>
23
+ <Vip>65.52.251.57</Vip>
24
+ <PublicPort>49627</PublicPort>
25
+ <LocalPort>22</LocalPort>
26
+ <Protocol>tcp</Protocol>
27
+ </InstanceEndpoint>
28
+ <InstanceEndpoint>
29
+ <Name>tcpport66</Name>
30
+ <Vip>65.52.251.57</Vip>
31
+ <PublicPort>66</PublicPort>
32
+ <LocalPort>66</LocalPort>
33
+ <Protocol>tcp</Protocol>
34
+ </InstanceEndpoint>
35
+ <InstanceEndpoint>
36
+ <Name>udpport77</Name>
37
+ <Vip>65.52.251.57</Vip>
38
+ <PublicPort>77</PublicPort>
39
+ <LocalPort>77</LocalPort>
40
+ <Protocol>udp</Protocol>
41
+ </InstanceEndpoint>
42
+ <InstanceEndpoint>
43
+ <Name>udpport88</Name>
44
+ <Vip>65.52.251.57</Vip>
45
+ <PublicPort>88</PublicPort>
46
+ <LocalPort>88</LocalPort>
47
+ <Protocol>udp</Protocol>
48
+ </InstanceEndpoint>
49
+ <InstanceEndpoint>
50
+ <Name>udpport99</Name>
51
+ <Vip>65.52.251.57</Vip>
52
+ <PublicPort>99</PublicPort>
53
+ <LocalPort>99</LocalPort>
54
+ <Protocol>udp</Protocol>
55
+ </InstanceEndpoint>
56
+ </InstanceEndpoints>
57
+ <PowerState>Stopped</PowerState>
58
+ </RoleInstance>
59
+ </RoleInstanceList>
60
+ <UpgradeDomainCount>1</UpgradeDomainCount>
61
+ <RoleList>
62
+ <Role i:type="PersistentVMRole">
63
+ <RoleName>role206</RoleName>
64
+ <OsVersion/>
65
+ <RoleType>PersistentVMRole</RoleType>
66
+ <ConfigurationSets>
67
+ <ConfigurationSet i:type="NetworkConfigurationSet">
68
+ <ConfigurationSetType>NetworkConfiguration</ConfigurationSetType>
69
+ <InputEndpoints>
70
+ <InputEndpoint>
71
+ <LocalPort>22</LocalPort>
72
+ <Name>SSH</Name>
73
+ <Port>49627</Port>
74
+ <Protocol>tcp</Protocol>
75
+ <Vip>65.52.251.57</Vip>
76
+ </InputEndpoint>
77
+ <InputEndpoint>
78
+ <LocalPort>66</LocalPort>
79
+ <Name>tcpport66</Name>
80
+ <Port>66</Port>
81
+ <Protocol>tcp</Protocol>
82
+ <Vip>65.52.251.57</Vip>
83
+ </InputEndpoint>
84
+ <InputEndpoint>
85
+ <LocalPort>77</LocalPort>
86
+ <Name>udpport77</Name>
87
+ <Port>77</Port>
88
+ <Protocol>udp</Protocol>
89
+ <Vip>65.52.251.57</Vip>
90
+ </InputEndpoint>
91
+ <InputEndpoint>
92
+ <LocalPort>88</LocalPort>
93
+ <Name>udpport88</Name>
94
+ <Port>88</Port>
95
+ <Protocol>udp</Protocol>
96
+ <Vip>65.52.251.57</Vip>
97
+ </InputEndpoint>
98
+ <InputEndpoint>
99
+ <LocalPort>99</LocalPort>
100
+ <Name>udpport99</Name>
101
+ <Port>99</Port>
102
+ <Protocol>udp</Protocol>
103
+ <Vip>65.52.251.57</Vip>
104
+ </InputEndpoint>
105
+ </InputEndpoints>
106
+ <SubnetNames/>
107
+ </ConfigurationSet>
108
+ </ConfigurationSets>
109
+ <DataVirtualHardDisks/>
110
+ <OSVirtualHardDisk>
111
+ <HostCaching>ReadWrite</HostCaching>
112
+ <DiskName>service003-role206-0-20120528151407</DiskName>
113
+ <MediaLink>http://auxpreview104imagestore.blob.core.azure-preview.com/os-disks/disk_2012_05_28_08_13</MediaLink>
114
+ <SourceImageName>SUSE__OpenSUSE64121-03192012-en-us-15GB.vhd</SourceImageName>
115
+ <OS>Linux</OS>
116
+ </OSVirtualHardDisk>
117
+ <RoleSize>ExtraSmall</RoleSize>
118
+ </Role>
119
+ </RoleList>
120
+ <SdkVersion/>
121
+ <Locked>false</Locked>
122
+ <RollbackAllowed>false</RollbackAllowed>
123
+ <CreatedTime>2012-05-28T15:14:05Z</CreatedTime>
124
+ <LastModifiedTime>2012-05-28T16:29:06Z</LastModifiedTime>
125
+ <ExtendedProperties/>
126
+ </Deployment>