Finish section 1 of fog's firstapp tutorial.

Change-Id: I4cffb3574f2f3f9a1b27498f9fbb9b1441950915
This commit is contained in:
Caleb Boylan 2015-09-22 17:53:42 -07:00
parent a97b508d99
commit b09b44a717
2 changed files with 163 additions and 17 deletions

128
firstapp/samples/fog/getting_started.rb Normal file → Executable file
View File

@ -10,18 +10,18 @@ region_name = 'your_region_name'
conn = Fog::Compute.new({ conn = Fog::Compute.new({
:provider => 'openstack', :provider => 'openstack',
:openstack_auth_url => auth_url + '/v2.0/tokens', :openstack_auth_url => auth_url + '/v2.0/tokens',
:openstack_username => auth_username :openstack_username => auth_username,
:openstack_tenant => project_name :openstack_tenant => project_name,
:openstack_api_key => auth_password :openstack_api_key => auth_password,
}) })
# step-2 # step-2
images = conn.list_images images = conn.images.all
print images.body print images
# step-3 # step-3
flavors = conn.list_flavors flavors = conn.flavors.all
print flavors.body print flavors
# step-4 # step-4
image_id = '2cccbea0-cea9-4f86-a3ed-065c652adda5' image_id = '2cccbea0-cea9-4f86-a3ed-065c652adda5'
@ -30,26 +30,128 @@ print image
# step-5 # step-5
flavor_id = '3' flavor_id = '3'
image = conn.flavor.get flavor_id flavor = conn.flavors.get flavor_id
print flavor print flavor
# step-6 # step-6
instance_name = 'testing' instance_name = 'testing'
testing_instance = conn.servers.create(:name => instance_name, :flavor_ref => flavor.id, :image_ref => image.id) testing_instance = conn.servers.create(:name => instance_name,
:flavor_ref => flavor.id,
:image_ref => image.id)
# step-7 # step-7
conn.servers print conn.servers
# step-8 # step-8
testing_instance.destroy testing_instance.destroy
# step-9 # step-9
key_pair_name = "demokey"
pub_key_file = "~/.ssh/id_rsa.pub"
puts "Checking for existing SSH keypair"
for pair in conn.key_pairs.all()
if pair.name == key_pair_name
key_pair = pair
puts "Key pair \"" + key_pair.name + "\" exists, skipping
import"
break
end
end
if not key_pair
puts "Uploading keypair from ~/.ssh/id_rsa.pub"
key_file = File.open(File.expand_path(pub_key_file))
public_key = key_file.read
key_pair = conn.key_pairs.create :name => key_pair_name,
:public_key => public_key
end
# step-10 # step-10
all_in_one_security_group = conn.create_security_group 'all-in-one' 'network access for all-in-one application.' for security_group in conn.security_groups.all
conn.create_security_group_rule all_in_one_security_group 'TCP' 80 80 if security_group.name == 'all-in-one'
conn.create_security_group_rule all_in_one_security_group 'TCP' 22 22 all_in_one_security_group = security_group
break
end
end
if not all_in_one_security_group
conn.create_security_group 'all-in-one',
'network access for all-in-one application.'
for security_group in conn.security_groups.all
if security_group.name == 'all-in-one'
all_in_one_security_group = security_group
break
end
end
conn.security_group_rules.create :ip_protocol => 'TCP',
:from_port => 22,
:to_port => 22,
:parent_group_id => all_in_one_security_group.id
conn.security_group_rules.create :ip_protocol => 'TCP',
:from_port => 80,
:to_port => 80,
:parent_group_id => all_in_one_security_group.id
end
# step-11 # step-11
userdata = "#!/usr/bin/env bash
curl -L -s https://git.openstack.org/cgit/stackforge/faafo/plain/contrib/install.sh \
| bash -s -- \ -i faafo -i messaging -r api -r worker -r demo"
# step-12 # step-12
puts "Checking for existing instance"
for server in conn.servers.all
if server.name == instance_name
instance = server
break
end
end
if not instance
puts "No test instance found, creating one now"
instance = conn.servers.create :name => instance_name,
:flavor_ref => flavor.id,
:image_ref => image.id,
:key_name => key_pair.name,
:user_data => userdata,
:security_groups => all_in_one_security_group
end
until instance.ready?
for server in conn.servers
if server.name == instance.name
instance = server
break
end
end
end
# step-13 # step-13
puts "Checking for unused Floating IP..."
for address in conn.addresses.all()
if not address.instance_id
ip_address = address
puts "Unused IP " + ip_address.ip + " found, it will be used
instead of creating a new IP"
break
end
end
if not ip_address
puts "Allocating new Floating IP"
ip_address = conn.addresses.create()
end
# step-14
if instance.public_ip_addresses.length > 0
puts "Instance already has a floating IP address"
else
instance.associate_address(ip_address.ip)
end
# step-15
puts "Fractals app will be deployed to http://#{ip_address.ip}"

View File

@ -189,6 +189,7 @@ to run code snippets in your language of choice.
.. only:: fog .. only:: fog
.. literalinclude:: ../samples/fog/getting_started.rb .. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-1 :start-after: step-1
:end-before: step-2 :end-before: step-2
@ -289,6 +290,7 @@ To list the images that are available in your cloud, run some API calls:
.. only:: fog .. only:: fog
.. literalinclude:: ../samples/fog/getting_started.rb .. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-2 :start-after: step-2
:end-before: step-3 :end-before: step-3
@ -382,6 +384,7 @@ You can also get information about available flavors:
.. only:: fog .. only:: fog
.. literalinclude:: ../samples/fog/getting_started.rb .. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-3 :start-after: step-3
:end-before: step-4 :end-before: step-4
@ -499,6 +502,7 @@ image that you picked in the previous section:
.. only:: fog .. only:: fog
.. literalinclude:: ../samples/fog/getting_started.rb .. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-4 :start-after: step-4
:end-before: step-5 :end-before: step-5
@ -580,6 +584,7 @@ Next, choose which flavor you want to use:
.. only:: fog .. only:: fog
.. literalinclude:: ../samples/fog/getting_started.rb .. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-5 :start-after: step-5
:end-before: step-6 :end-before: step-6
@ -682,6 +687,7 @@ Create the instance.
.. only:: fog .. only:: fog
.. literalinclude:: ../samples/fog/getting_started.rb .. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-6 :start-after: step-6
:end-before: step-7 :end-before: step-7
@ -745,6 +751,7 @@ If you list existing instances:
.. only:: fog .. only:: fog
.. literalinclude:: ../samples/fog/getting_started.rb .. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-7 :start-after: step-7
:end-before: step-8 :end-before: step-8
@ -892,6 +899,7 @@ money. Destroy cloud resources to avoid unexpected expenses.
.. only:: fog .. only:: fog
.. literalinclude:: ../samples/fog/getting_started.rb .. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-8 :start-after: step-8
:end-before: step-9 :end-before: step-9
@ -952,7 +960,14 @@ instance:
.. only:: fog .. only:: fog
.. warning:: This section has not been completed. In the following example, :code:`pub_key_file` should be set to
the location of your public SSH key file.
.. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-9
:end-before: step-10
.. only:: libcloud .. only:: libcloud
@ -993,6 +1008,7 @@ instance:
.. only:: fog .. only:: fog
.. literalinclude:: ../samples/fog/getting_started.rb .. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-10 :start-after: step-10
:end-before: step-11 :end-before: step-11
@ -1021,7 +1037,10 @@ instance:
.. only:: fog .. only:: fog
.. warning:: This section has not been completed. .. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-11
:end-before: step-12
.. only:: libcloud .. only:: libcloud
@ -1051,7 +1070,10 @@ request the instance, wait for it to build.
.. only:: fog .. only:: fog
.. warning:: This section has not been completed. .. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-12
:end-before: step-13
.. only:: libcloud .. only:: libcloud
@ -1091,7 +1113,18 @@ address to your instance.
.. only:: fog .. only:: fog
.. warning:: This section has not been completed. .. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-13
:end-before: step-14
This will get an ip address that you can assign to your instance
with:
.. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-14
:end-before: step-15
.. only:: libcloud .. only:: libcloud
@ -1155,6 +1188,12 @@ time. Consider enjoying a cup of coffee while you wait. After the application
deploys, you can visit the awesome graphic interface at the following link deploys, you can visit the awesome graphic interface at the following link
by using your preferred browser. by using your preferred browser.
.. only:: fog
.. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
:start-after: step-15
.. only:: libcloud .. only:: libcloud
.. literalinclude:: ../samples/libcloud/getting_started.py .. literalinclude:: ../samples/libcloud/getting_started.py
@ -1206,6 +1245,11 @@ as a single script.
Before you run this script, confirm that you have set your authentication Before you run this script, confirm that you have set your authentication
information, the flavor ID, and image ID. information, the flavor ID, and image ID.
.. only:: fog
.. literalinclude:: ../samples/fog/getting_started.rb
:language: ruby
.. only:: libcloud .. only:: libcloud
.. literalinclude:: ../samples/libcloud/getting_started.py .. literalinclude:: ../samples/libcloud/getting_started.py