#Rackspace CDNV2 This document explains how to get started using CDNV2 with Fog. It assumes you have read the [Getting Started with Fog and the Rackspace Open Cloud](getting_started.md) document. ## Starting irb console Start by executing the following command: irb Once `irb` has launched you need to require the Fog library. If using Ruby 1.8.x execute: require 'rubygems' require 'fog' If using Ruby 1.9.x execute: require 'fog' ## Create Service Next, create a connection to Rackspace's CDNV2 API: Using a US-based account: service = Fog::Rackspace::CDNV2.new({ :rackspace_username => RACKSPACE_USER_NAME, # Your Rackspace Username :rackspace_api_key => RACKSPACE_API, # Your Rackspace API key :rackspace_region => :ord, # Defaults to :dfw }) Using a UK-based account: service = Fog::Compute.new({ :rackspace_username => RACKSPACE_USER_NAME, # Your Rackspace Username :rackspace_api_key => RACKSPACE_API, # Your Rackspace API key :rackspace_auth_url => Fog::Rackspace::UK_AUTH_ENDPOINT, :rackspace_region => :lon, }) To learn more about obtaining cloud credentials refer to the [Getting Started with Fog and the Rackspace Open Cloud](getting_started.md) document. By default `Fog::Rackspace::CDNV2` will authenticate against the US authentication endpoint and connect to the DFW region. You can specify alternative authentication endpoints using the key `:rackspace_auth_url`. Please refer to [Alternate Authentication Endpoints](http://docs.rackspace.com/auth/api/v2.0/auth-client-devguide/content/Endpoints-d1e180.html) for a list of alternative Rackspace authentication endpoints. Alternative regions are specified using the key `:rackspace_region `. A list of regions available for Cloud Servers can be found by executing the following: identity_service = Fog::Identity({ :provider => 'Rackspace', # Rackspace Fog provider :rackspace_username => RACKSPACE_USER_NAME, # Your Rackspace Username :rackspace_api_key => RACKSPACE_API, # Your Rackspace API key :rackspace_auth_url => Fog::Rackspace::UK_AUTH_ENDPOINT # Not specified for US Cloud }) identity_service.service_catalog.display_service_regions :cloudServersOpenStack ### Optional Connection Parameters Fog supports passing additional connection parameters to its underlying HTTP library (Excon) using the `:connection_options` parameter.
Key Description
:connect_timeout Connection timeout (default: 60 seconds)
:read_timeout Read timeout for connection (default: 60 seconds)
:write_timeout Write timeout for connection (default: 60 seconds)
:proxy Proxy for HTTP and HTTPS connections
:ssl_ca_path Path to SSL certificate authorities
:ssl_ca_file SSL certificate authority file
:ssl_verify_peer SSL verify peer (default: true)
## Fog Abstractions Fog provides both a **model** and **request** abstraction. The request abstraction provides the most efficient interface and the model abstraction wraps the request abstraction to provide a convenient `ActiveModel` like interface. ### Request Layer The request abstraction maps directly to the [CDNV2 API](http://docs.rackspace.com/networks/api/v2/cn-devguide/content/ch_overview.html). It provides the most efficient interface to the Rackspace CDNV2 To see a list of requests supported by the service: service.requests This returns: [:create_service, :delete_assets, :delete_service, :get_flavor, :get_home_document, :get_ping, :get_service, :list_flavors, :list_services, :update_service] #### Example Request To request a list of services: response = service.list_services This returns in the following `Excon::Response`: #{"services"=>[{"name"=>"SomethingDifferent.net", "domains"=>[{"domain"=>"google.com", "protocol"=>"http"}], "origins"=>[{"origin"=>"google.com", "port"=>80, "ssl"=>false, "rules"=>[]}], "restrictions"=>[], "caching"=>[], "status"=>"create_in_progress", "flavor_id"=>"cdn", "errors"=>[] To view the status of the response: response.status **Note**: Fog is aware of valid HTTP response statuses for each request type. If an unexpected HTTP response status occurs, Fog will raise an exception. To view response body: response.body This will return: {"services"=>[{"name"=>"SomethingDifferent.net", "domains"=>[{"domain"=>"google.com",... To learn more about CDNV2 request methods refer to [rdoc](http://www.rubydoc.info/gems/fog/Fog/Rackspace/CDNV2/Real). To learn more about Excon refer to [Excon GitHub repo](https://github.com/geemus/excon). ### Model Layer Fog models behave in a manner similar to `ActiveModel`. Models will generally respond to `create`, `save`, `persisted?`, `destroy`, `reload` and `attributes` methods. Additionally, fog will automatically create attribute accessors. Here is a summary of common model methods:
Method Description
create Accepts hash of attributes and creates object.
Note: creation is a non-blocking call and you will be required to wait for a valid state before using resulting object.
save Saves object.
Note: not all objects support updating object.
persisted? Returns true if the object has been persisted.
destroy Destroys object.
Note: this is a non-blocking call and object deletion might not be instantaneous.
reload Updates object with latest state from service.
ready? Returns true if object is in a ready state and able to perform actions. This method will raise an exception if object is in an error state.
attributes Returns a hash containing the list of model attributes and values.
identity Returns the identity of the object.
Note: This might not always be equal to object.id.
wait_for This method periodically reloads model and then yields to specified block until block returns true or a timeout occurs.
The remainder of this document details the model abstraction. ## List Services To retrieve a list of available services: service.services This returns a collection of `Fog::Rackspace::CDNV2::Service` models: "google.com", "protocol"=>"http"}], origins=[{"origin"=>"google.com", "port"=>80, "ssl"=>false, "rules"=>[]}], caching=[], restrictions=[], flavor_id="cdn", status="create_in_progress", links=[{"href"=>"", "rel"=>"self"}, {"href"=>"...", "rel"=>"flavor"}] ... ## Create Service Create a service: s = service.services.new s.name = "work.com" s.flavor_id = "cdn" s.add_domain "google.com" s.add_origin "google.com" s.save ## Update Service You may add, remove, or update. -- **DOCS NEEDED** -- s = service.services.first s.add_operation({ op: "add", path: "/domains/0", value: { origin: "cdn.somewhere.org", port: 80, ssl: false, rules: [ { name: "Something", request_url: "google.com" } ] } }) s.save ## Get Service To retrieve individual service: service.services.get "087ffeb0-462d-4f44-b24a-2914fbfb1d42" This returns an `Fog::Rackspace::CDNV2::Service` instance: "google.com", "protocol"=>"http"}], origins=[{"origin"=>"google.com", "port"=>80, "ssl"=>false, "rules"=>[]}], caching=[], restrictions=[], flavor_id="cdn", status="create_in_progress", links=[{"href"=>"", "rel"=>"self"}, {"href"=>"...", "rel"=>"flavor"}] ## Delete Service To delete a service: service.destroy **Note**: The service is not immediately destroyed, but it does occur shortly there after. ## Delete Service Assets To delete a service's assets (or any owned asset via url): service.destroy_assets(url: "/") **Note**: The service's asset is not immediately destroyed, but it does occur shortly there after. ## List Flavors To retrieve a list of available flavors: service.flavors This returns a collection of `Fog::Rackspace::CDNV2::Flavor` models: "akamai", "links"=>[{"href"=>"http://www.akamai.com", "rel"=>"provider_url"}]}], links=[{"href"=>"...", "rel"=>"self"}] > ] > ## Get Flavor To retrieve individual flavor: service.flavors.get "cdn" This returns an `Fog::Rackspace::CDNV2::Flavor` instance: "akamai", "links"=>[{"href"=>"http://www.akamai.com", "rel"=>"provider_url"}]}], links=[{"href"=>"...", "rel"=>"self"}] > ## Ping To ping the CDN: service.ping This returns an boolean based on successful ping. ## Get Home Document To retrieve the home document: service.home_document This returns a JSON blob that describes the home document. ## Additional Resources * [fog.io](http://fog.io/) * [Fog rdoc](http://rubydoc.info/gems/fog/) * [Fog Github repo](https://github.com/fog/fog) * [Fog Github Issues](https://github.com/fog/fog/issues) * [Excon Github repo](https://github.com/geemus/excon) * [Rackspace Networking API](http://docs.rackspace.com/networking/api/v2/cs-devguide/content/ch_preface.html) ## Support and Feedback Your feedback is appreciated! If you have specific issues with the **fog** SDK, you should file an [issue via Github](https://github.com/fog/fog/issues). For general feedback and support requests, send an email to: .