fog-openstack 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -0
- data/.travis.yml +6 -2
- data/README.md +4 -0
- data/Rakefile +10 -2
- data/fog-openstack.gemspec +2 -3
- data/gemfiles/Gemfile-1.9 +1 -1
- data/lib/fog/openstack.rb +14 -6
- data/lib/fog/openstack/baremetal.rb +1 -1
- data/lib/fog/openstack/common.rb +0 -2
- data/lib/fog/openstack/compute.rb +78 -75
- data/lib/fog/openstack/core.rb +2 -1
- data/lib/fog/openstack/docs/compute.md +1 -1
- data/lib/fog/openstack/docs/network.md +283 -0
- data/lib/fog/openstack/docs/nfv.md +144 -0
- data/lib/fog/openstack/examples/compute/block_device_mapping_v2.rb +4 -4
- data/lib/fog/openstack/examples/network/network_add_port.rb +21 -0
- data/lib/fog/openstack/examples/network/network_rbac.rb +69 -0
- data/lib/fog/openstack/identity.rb +14 -22
- data/lib/fog/openstack/identity_v2.rb +1 -1
- data/lib/fog/openstack/image_v1.rb +13 -28
- data/lib/fog/openstack/image_v2.rb +15 -17
- data/lib/fog/openstack/introspection.rb +1 -1
- data/lib/fog/openstack/metering.rb +1 -1
- data/lib/fog/openstack/models/collection.rb +4 -1
- data/lib/fog/openstack/models/compute/availability_zone.rb +5 -0
- data/lib/fog/openstack/models/compute/flavor.rb +21 -9
- data/lib/fog/openstack/models/compute/server.rb +64 -77
- data/lib/fog/openstack/models/compute/snapshot.rb +6 -6
- data/lib/fog/openstack/models/compute/volume_attachment.rb +15 -0
- data/lib/fog/openstack/models/compute/volume_attachments.rb +20 -0
- data/lib/fog/openstack/models/identity_v3/projects.rb +1 -1
- data/lib/fog/openstack/models/identity_v3/users.rb +2 -2
- data/lib/fog/openstack/models/image_v2/image.rb +41 -22
- data/lib/fog/openstack/models/network/floating_ip.rb +1 -0
- data/lib/fog/openstack/models/network/rbac_policies.rb +33 -0
- data/lib/fog/openstack/models/network/rbac_policy.rb +35 -0
- data/lib/fog/openstack/models/nfv/vnf.rb +58 -0
- data/lib/fog/openstack/models/nfv/vnfd.rb +53 -0
- data/lib/fog/openstack/models/nfv/vnfds.rb +28 -0
- data/lib/fog/openstack/models/nfv/vnfs.rb +28 -0
- data/lib/fog/openstack/models/volume/snapshot.rb +38 -0
- data/lib/fog/openstack/models/volume/snapshots.rb +26 -0
- data/lib/fog/openstack/models/volume/volume.rb +32 -2
- data/lib/fog/openstack/models/volume/volume_type.rb +3 -4
- data/lib/fog/openstack/models/volume_v1/snapshot.rb +43 -0
- data/lib/fog/openstack/models/volume_v1/snapshots.rb +16 -0
- data/lib/fog/openstack/models/volume_v1/volume.rb +12 -2
- data/lib/fog/openstack/models/volume_v2/snapshot.rb +43 -0
- data/lib/fog/openstack/models/volume_v2/snapshots.rb +16 -0
- data/lib/fog/openstack/models/volume_v2/volume.rb +12 -3
- data/lib/fog/openstack/network.rb +53 -46
- data/lib/fog/openstack/nfv.rb +158 -0
- data/lib/fog/openstack/orchestration.rb +1 -1
- data/lib/fog/openstack/planning.rb +1 -1
- data/lib/fog/openstack/requests/compute/create_server.rb +1 -1
- data/lib/fog/openstack/requests/compute/{create_volume_snapshot.rb → create_snapshot.rb} +16 -16
- data/lib/fog/openstack/requests/compute/delete_flavor_metadata.rb +30 -0
- data/lib/fog/openstack/requests/compute/evacuate_server.rb +8 -7
- data/lib/fog/openstack/requests/compute/get_key_pair.rb +49 -0
- data/lib/fog/openstack/requests/compute/list_availability_zones.rb +23 -0
- data/lib/fog/openstack/requests/compute/list_volume_attachments.rb +31 -0
- data/lib/fog/openstack/requests/compute/update_flavor_metadata.rb +33 -0
- data/lib/fog/openstack/requests/network/create_rbac_policy.rb +42 -0
- data/lib/fog/openstack/requests/network/delete_rbac_policy.rb +28 -0
- data/lib/fog/openstack/requests/network/get_rbac_policy.rb +28 -0
- data/lib/fog/openstack/requests/network/list_rbac_policies.rb +25 -0
- data/lib/fog/openstack/requests/network/update_port.rb +8 -7
- data/lib/fog/openstack/requests/network/update_rbac_policy.rb +41 -0
- data/lib/fog/openstack/requests/nfv/create_vnf.rb +37 -0
- data/lib/fog/openstack/requests/nfv/create_vnfd.rb +35 -0
- data/lib/fog/openstack/requests/nfv/delete_vnf.rb +23 -0
- data/lib/fog/openstack/requests/nfv/delete_vnfd.rb +23 -0
- data/lib/fog/openstack/requests/nfv/get_vnf.rb +24 -0
- data/lib/fog/openstack/requests/nfv/get_vnfd.rb +24 -0
- data/lib/fog/openstack/requests/nfv/list_vnfds.rb +25 -0
- data/lib/fog/openstack/requests/nfv/list_vnfs.rb +25 -0
- data/lib/fog/openstack/requests/nfv/update_vnf.rb +35 -0
- data/lib/fog/openstack/requests/volume/action.rb +16 -0
- data/lib/fog/openstack/requests/volume/create_snapshot.rb +18 -0
- data/lib/fog/openstack/requests/volume/delete_metadata.rb +15 -0
- data/lib/fog/openstack/requests/volume/delete_snapshot.rb +5 -5
- data/lib/fog/openstack/requests/volume/delete_snapshot_metadata.rb +15 -0
- data/lib/fog/openstack/requests/volume/replace_metadata.rb +20 -0
- data/lib/fog/openstack/requests/volume/update_metadata.rb +20 -0
- data/lib/fog/openstack/requests/volume/update_snapshot.rb +37 -0
- data/lib/fog/openstack/requests/volume/update_snapshot_metadata.rb +20 -0
- data/lib/fog/openstack/requests/volume/update_volume.rb +25 -0
- data/lib/fog/openstack/requests/volume_v1/action.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/create_snapshot.rb +45 -0
- data/lib/fog/openstack/requests/volume_v1/delete_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/delete_snapshot_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/replace_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/update_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/update_snapshot.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/update_snapshot_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v1/update_volume.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/action.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/create_snapshot.rb +45 -0
- data/lib/fog/openstack/requests/volume_v2/delete_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/delete_snapshot_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/replace_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/update_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/update_snapshot.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/update_snapshot_metadata.rb +2 -0
- data/lib/fog/openstack/requests/volume_v2/update_volume.rb +2 -0
- data/lib/fog/openstack/storage.rb +1 -1
- data/lib/fog/openstack/version.rb +1 -1
- data/lib/fog/openstack/volume.rb +1 -1
- data/lib/fog/openstack/volume_v1.rb +29 -21
- data/lib/fog/openstack/volume_v2.rb +29 -21
- data/supported.md +54 -0
- data/tests/openstack/models/identity/ec2_credential_tests.rb +1 -1
- data/tests/openstack/models/identity/ec2_credentials_tests.rb +1 -1
- data/tests/openstack/models/identity/role_tests.rb +8 -3
- data/tests/openstack/models/identity/roles_tests.rb +5 -4
- data/tests/openstack/models/identity/tenant_tests.rb +7 -4
- data/tests/openstack/models/identity/tenants_tests.rb +10 -5
- data/tests/openstack/models/identity/user_tests.rb +4 -3
- data/tests/openstack/models/identity/users_tests.rb +10 -6
- data/tests/openstack/models/nfv/vnf_tests.rb +35 -0
- data/tests/openstack/models/nfv/vnfd_tests.rb +23 -0
- data/tests/openstack/models/nfv/vnfds_tests.rb +31 -0
- data/tests/openstack/models/nfv/vnfs_tests.rb +38 -0
- data/tests/openstack/requests/identity/ec2_credentials_tests.rb +6 -9
- data/tests/openstack/requests/identity/helper.rb +12 -4
- data/tests/openstack/requests/identity/role_tests.rb +13 -10
- data/tests/openstack/requests/identity/tenant_tests.rb +10 -9
- data/tests/openstack/requests/identity/user_tests.rb +11 -6
- data/tests/openstack/requests/image/image_tests.rb +1 -0
- data/tests/openstack/requests/nfv/vnf_tests.rb +70 -0
- data/tests/openstack/requests/nfv/vnfd_tests.rb +44 -0
- metadata +81 -31
- data/lib/fog/openstack/requests/volume/create_volume_snapshot.rb +0 -26
- data/lib/fog/openstack/requests/volume_v1/create_volume_snapshot.rb +0 -44
- data/lib/fog/openstack/requests/volume_v2/create_volume_snapshot.rb +0 -43
- data/tests/openstack/authenticate_tests.rb +0 -200
- data/tests/openstack/identity_version_tests.rb +0 -25
- data/tests/openstack/storage_tests.rb +0 -18
- data/tests/openstack/version_tests.rb +0 -55
- data/tests/openstack/volume_tests.rb +0 -18
@@ -79,7 +79,7 @@ To see a list of requests supported by the service:
|
|
79
79
|
|
80
80
|
This returns:
|
81
81
|
|
82
|
-
:list_servers, :list_servers_detail, :create_server, :get_server_details, :update_server, :delete_server, :server_actions, :server_action, :reboot_server, :rebuild_server, :resize_server, :confirm_resize_server, :revert_resize_server, :pause_server, :unpause_server, :suspend_server, :resume_server, :rescue_server, :change_server_password, :add_fixed_ip, :remove_fixed_ip, :server_diagnostics, :boot_from_snapshot, :reset_server_state, :get_console_output, :get_vnc_console, :live_migrate_server, :migrate_server, :list_images, :list_images_detail, :create_image, :get_image_details, :delete_image, :list_flavors, :list_flavors_detail, :get_flavor_details, :create_flavor, :delete_flavor, :add_flavor_access, :remove_flavor_access, :list_tenants_with_flavor_access, :list_metadata, :get_metadata, :set_metadata, :update_metadata, :delete_metadata, :delete_meta, :update_meta, :list_addresses, :list_address_pools, :list_all_addresses, :list_private_addresses, :list_public_addresses, :get_address, :allocate_address, :associate_address, :release_address, :disassociate_address, :list_security_groups, :get_security_group, :create_security_group, :create_security_group_rule, :delete_security_group, :delete_security_group_rule, :get_security_group_rule, :list_key_pairs, :create_key_pair, :delete_key_pair, :list_tenants, :set_tenant, :get_limits, :list_volumes, :create_volume, :get_volume_details, :delete_volume, :attach_volume, :detach_volume, :get_server_volumes, :
|
82
|
+
:list_servers, :list_servers_detail, :create_server, :get_server_details, :update_server, :delete_server, :server_actions, :server_action, :reboot_server, :rebuild_server, :resize_server, :confirm_resize_server, :revert_resize_server, :pause_server, :unpause_server, :suspend_server, :resume_server, :rescue_server, :change_server_password, :add_fixed_ip, :remove_fixed_ip, :server_diagnostics, :boot_from_snapshot, :reset_server_state, :get_console_output, :get_vnc_console, :live_migrate_server, :migrate_server, :list_images, :list_images_detail, :create_image, :get_image_details, :delete_image, :list_flavors, :list_flavors_detail, :get_flavor_details, :create_flavor, :delete_flavor, :add_flavor_access, :remove_flavor_access, :list_tenants_with_flavor_access, :list_metadata, :get_metadata, :set_metadata, :update_metadata, :delete_metadata, :delete_meta, :update_meta, :list_addresses, :list_address_pools, :list_all_addresses, :list_private_addresses, :list_public_addresses, :get_address, :allocate_address, :associate_address, :release_address, :disassociate_address, :list_security_groups, :get_security_group, :create_security_group, :create_security_group_rule, :delete_security_group, :delete_security_group_rule, :get_security_group_rule, :list_key_pairs, :create_key_pair, :delete_key_pair, :list_tenants, :set_tenant, :get_limits, :list_volumes, :create_volume, :get_volume_details, :delete_volume, :attach_volume, :detach_volume, :get_server_volumes, :create_snapshot, :list_snapshots, :get_snapshot_details, :delete_snapshot, :list_usages, :get_usage, :get_quota, :get_quota_defaults, :update_quota, :list_hosts, :get_host_details
|
83
83
|
|
84
84
|
|
85
85
|
#### Example Request
|
@@ -0,0 +1,283 @@
|
|
1
|
+
# Network (Neutron)
|
2
|
+
|
3
|
+
This document explains how to get started using OpenStack Network (Neutron) with Fog. It assumes you have read the [Getting Started with Fog and OpenStack](getting_started.md) document.
|
4
|
+
|
5
|
+
## Starting irb console
|
6
|
+
|
7
|
+
Start by executing the following command:
|
8
|
+
```
|
9
|
+
irb
|
10
|
+
```
|
11
|
+
Once `irb` has launched you need to require the Fog library by executing:
|
12
|
+
```
|
13
|
+
require 'fog/openstack'
|
14
|
+
```
|
15
|
+
## Create Service
|
16
|
+
|
17
|
+
Next, create a connection to the Network Service:
|
18
|
+
```
|
19
|
+
service = Fog::Network::OpenStack.new(
|
20
|
+
:openstack_auth_url => 'http://KEYSTONE_HOST:KEYSTONE_PORT/v3/auth/tokens', # OpenStack Keystone v3 endpoint
|
21
|
+
:openstack_username => OPEN_STACK_USER, # Your OpenStack Username
|
22
|
+
:openstack_domain_name => OPEN_STACK_DOMAIN, # Your OpenStack Domain name
|
23
|
+
:openstack_project_name => OPEN_STACK_PROJECT, # Your OpenStack Project name
|
24
|
+
:openstack_api_key => OPEN_STACK_PASSWORD, # Your OpenStack Password
|
25
|
+
:connection_options => {} # Optional
|
26
|
+
)
|
27
|
+
```
|
28
|
+
|
29
|
+
### Optional Connection Parameters
|
30
|
+
|
31
|
+
Fog supports passing additional connection parameters to its underlying HTTP library (Excon) using the `:connection_options` parameter.
|
32
|
+
|
33
|
+
<table>
|
34
|
+
<tr>
|
35
|
+
<th>Key</th>
|
36
|
+
<th>Description</th>
|
37
|
+
</tr>
|
38
|
+
<tr>
|
39
|
+
<td>:connect_timeout</td>
|
40
|
+
<td>Connection timeout (default: 60 seconds)</td>
|
41
|
+
</tr>
|
42
|
+
<tr>
|
43
|
+
<td>:read_timeout</td>
|
44
|
+
<td>Read timeout for connection (default: 60 seconds)</td> </tr>
|
45
|
+
<tr>
|
46
|
+
<td>:write_timeout</td>
|
47
|
+
<td>Write timeout for connection (default: 60 seconds)</td>
|
48
|
+
</tr>
|
49
|
+
<tr>
|
50
|
+
<td>:proxy</td>
|
51
|
+
<td>Proxy for HTTP and HTTPS connections</td>
|
52
|
+
</tr>
|
53
|
+
<tr>
|
54
|
+
<td>:ssl_ca_path</td>
|
55
|
+
<td>Path to SSL certificate authorities</td>
|
56
|
+
</tr>
|
57
|
+
<tr>
|
58
|
+
<td>:ssl_ca_file</td>
|
59
|
+
<td>SSL certificate authority file</td>
|
60
|
+
</tr>
|
61
|
+
<tr>
|
62
|
+
<td>:ssl_verify_peer</td>
|
63
|
+
<td>SSL verify peer (default: true)</td>
|
64
|
+
</tr>
|
65
|
+
</table>
|
66
|
+
|
67
|
+
|
68
|
+
## Fog Abstractions
|
69
|
+
|
70
|
+
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.
|
71
|
+
|
72
|
+
### Request Layer
|
73
|
+
|
74
|
+
The request abstraction maps directly to the [OpenStack Network API](http://developer.openstack.org/api-ref-networking-v2.html). It provides the most efficient interface to the OpenStack Network service.
|
75
|
+
|
76
|
+
To see a list of requests supported by the service:
|
77
|
+
```
|
78
|
+
service.requests
|
79
|
+
```
|
80
|
+
|
81
|
+
This returns:
|
82
|
+
```
|
83
|
+
:list_networks, :create_network, :delete_network, :get_network, :update_network,
|
84
|
+
:list_ports, :create_port, :delete_port, :get_port, :update_port,
|
85
|
+
:list_subnets, :create_subnet, :delete_subnet, :get_subnet, :update_subnet,
|
86
|
+
:list_floating_ips, :create_floating_ip, :delete_floating_ip, :get_floating_ip, :associate_floating_ip, :disassociate_floating_ip,
|
87
|
+
:list_routers, :create_router, :delete_router, :get_router, :update_router, :add_router_interface, :remove_router_interface,
|
88
|
+
:list_lb_pools, :create_lb_pool, :delete_lb_pool, :get_lb_pool, :get_lb_pool_stats, :update_lb_pool,
|
89
|
+
:list_lb_members, :create_lb_member, :delete_lb_member, :get_lb_member, :update_lb_member,
|
90
|
+
:list_lb_health_monitors, :create_lb_health_monitor, :delete_lb_health_monitor, :get_lb_health_monitor, :update_lb_health_monitor, :associate_lb_health_monitor, :disassociate_lb_health_monitor,
|
91
|
+
:list_lb_vips, :create_lb_vip, :delete_lb_vip, :get_lb_vip, :update_lb_vip,
|
92
|
+
:list_vpn_services, :create_vpn_service, :delete_vpn_service, :get_vpn_service, :update_vpn_service,
|
93
|
+
:list_ike_policies, :create_ike_policy, :delete_ike_policy, :get_ike_policy, :update_ike_policy,
|
94
|
+
:list_ipsec_policies, :create_ipsec_policy, :delete_ipsec_policy, :get_ipsec_policy, :update_ipsec_policy,
|
95
|
+
:list_ipsec_site_connections, :create_ipsec_site_connection, :delete_ipsec_site_connection, :get_ipsec_site_connection, :update_ipsec_site_connection,
|
96
|
+
:list_rbac_policies, :create_rbac_policy, :delete_rbac_policy, :get_rbac_policy, :update_rbac_policy,
|
97
|
+
:create_security_group, :delete_security_group, :get_security_group, :list_security_groups,
|
98
|
+
:create_security_group_rule, :delete_security_group_rule, :get_security_group_rule, :list_security_group_rules,
|
99
|
+
:set_tenant, :get_quotas, :get_quota, :update_quota, :delete_quota
|
100
|
+
```
|
101
|
+
|
102
|
+
#### Example Request
|
103
|
+
|
104
|
+
To request a list of networks:
|
105
|
+
```
|
106
|
+
response = service.list_networks
|
107
|
+
```
|
108
|
+
This returns in the following `Excon::Response`:
|
109
|
+
```
|
110
|
+
#<Excon::Response:0x007fd20d34e0e0
|
111
|
+
@data={
|
112
|
+
:body=>{"networks"=>[
|
113
|
+
{"id"=>"f9c54735-a230-443e-9379-b87f741cc1b1", "name"=>"Public", "subnets"=>["db50da7f-1248-43d2-aa30-1c10da0d380d"], "shared"=>true, "status"=>"ACTIVE", "tenant_id"=>"a51fd915", "provider_network_type"=>"vlan", "router:external"=>false, "admin_state_up"=>true},
|
114
|
+
{"id"=>"e624a36d-762b-481f-9b50-4154ceb78bbb", "name"=>"network_1", "subnets"=>["2e4ec6a4-0150-47f5-8523-e899ac03026e"], "shared"=>false, "status"=>"ACTIVE", "admin_state_up"=>true, "tenant_id"=>"f8b26a6032bc47718a7702233ac708b9"}]},
|
115
|
+
:status=>200,
|
116
|
+
:headers=>{}},
|
117
|
+
@body={"networks"=>[
|
118
|
+
{"id"=>"f9c54735-a230-443e-9379-b87f741cc1b1", "name"=>"Public", "subnets"=>["db50da7f-1248-43d2-aa30-1c10da0d380d"], "shared"=>true, "status"=>"ACTIVE", "tenant_id"=>"a51fd915", "provider_network_type"=>"vlan", "router:external"=>false, "admin_state_up"=>true},
|
119
|
+
{"id"=>"e624a36d-762b-481f-9b50-4154ceb78bbb", "name"=>"network_1", "subnets"=>["2e4ec6a4-0150-47f5-8523-e899ac03026e"], "shared"=>false, "status"=>"ACTIVE", "admin_state_up"=>true, "tenant_id"=>"f8b26a6032bc47718a7702233ac708b9"}]},
|
120
|
+
@headers={},
|
121
|
+
@status=200,
|
122
|
+
@remote_ip=nil,
|
123
|
+
@local_port=nil,
|
124
|
+
@local_address=nil
|
125
|
+
>
|
126
|
+
```
|
127
|
+
To view the status of the response:
|
128
|
+
```
|
129
|
+
response.status
|
130
|
+
```
|
131
|
+
**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.
|
132
|
+
|
133
|
+
To view response body:
|
134
|
+
```
|
135
|
+
response.body
|
136
|
+
```
|
137
|
+
This will return:
|
138
|
+
```
|
139
|
+
{"networks"=>[
|
140
|
+
{"id"=>"f9c54735-a230-443e-9379-b87f741cc1b1", "name"=>"Public", "subnets"=>["db50da7f-1248-43d2-aa30-1c10da0d380d"], "shared"=>true, "status"=>"ACTIVE", "tenant_id"=>"a51fd915", "provider_network_type"=>"vlan", "router:external"=>false, "admin_state_up"=>true},
|
141
|
+
{"id"=>"e624a36d-762b-481f-9b50-4154ceb78bbb", "name"=>"network_1", "subnets"=>["2e4ec6a4-0150-47f5-8523-e899ac03026e"], "shared"=>false, "status"=>"ACTIVE", "admin_state_up"=>true, "tenant_id"=>"f8b26a6032bc47718a7702233ac708b9"}]
|
142
|
+
}
|
143
|
+
```
|
144
|
+
To learn more about Network request methods refer to [rdoc](http://www.rubydoc.info/gems/fog-openstack/Fog/Network/OpenStack/Real). To learn more about Excon refer to [Excon GitHub repo](https://github.com/geemus/excon).
|
145
|
+
|
146
|
+
### Model Layer
|
147
|
+
|
148
|
+
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.
|
149
|
+
|
150
|
+
Here is a summary of common model methods:
|
151
|
+
|
152
|
+
<table>
|
153
|
+
<tr>
|
154
|
+
<th>Method</th>
|
155
|
+
<th>Description</th>
|
156
|
+
</tr>
|
157
|
+
<tr>
|
158
|
+
<td>create</td>
|
159
|
+
<td>
|
160
|
+
Accepts hash of attributes and creates object.<br>
|
161
|
+
Note: creation is a non-blocking call and you will be required to wait for a valid state before using resulting object.
|
162
|
+
</td>
|
163
|
+
</tr>
|
164
|
+
<tr>
|
165
|
+
<td>save</td>
|
166
|
+
<td>Saves object.<br>
|
167
|
+
Note: not all objects support updating object.</td>
|
168
|
+
</tr>
|
169
|
+
<tr>
|
170
|
+
<td>persisted?</td>
|
171
|
+
<td>Returns true if the object has been persisted.</td>
|
172
|
+
</tr>
|
173
|
+
<tr>
|
174
|
+
<td>destroy</td>
|
175
|
+
<td>
|
176
|
+
Destroys object.<br>
|
177
|
+
Note: this is a non-blocking call and object deletion might not be instantaneous.
|
178
|
+
</td>
|
179
|
+
<tr>
|
180
|
+
<td>reload</td>
|
181
|
+
<td>Updates object with latest state from service.</td>
|
182
|
+
<tr>
|
183
|
+
<td>ready?</td>
|
184
|
+
<td>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.</td>
|
185
|
+
</tr>
|
186
|
+
<tr>
|
187
|
+
<td>attributes</td>
|
188
|
+
<td>Returns a hash containing the list of model attributes and values.</td>
|
189
|
+
</tr>
|
190
|
+
<td>identity</td>
|
191
|
+
<td>
|
192
|
+
Returns the identity of the object.<br>
|
193
|
+
Note: This might not always be equal to object.id.
|
194
|
+
</td>
|
195
|
+
</tr>
|
196
|
+
<tr>
|
197
|
+
<td>wait_for</td>
|
198
|
+
<td>This method periodically reloads model and then yields to specified block until block returns true or a timeout occurs.</td>
|
199
|
+
</tr>
|
200
|
+
</table>
|
201
|
+
|
202
|
+
To see a list of collections supported by the service:
|
203
|
+
```
|
204
|
+
service.collections
|
205
|
+
```
|
206
|
+
This returns:
|
207
|
+
```
|
208
|
+
:networks, :ports, :subnets, :floating_ips, :routers,
|
209
|
+
:lb_pools, :lb_members, :lb_health_monitors, :lb_vips,
|
210
|
+
:vpn_services, :ike_policies, :ipsec_policies, :ipsec_site_connections,
|
211
|
+
:rbac_policies, :security_groups, :security_group_rules
|
212
|
+
```
|
213
|
+
|
214
|
+
#### Example Request
|
215
|
+
|
216
|
+
To request a collection of networks:
|
217
|
+
```
|
218
|
+
networks = service.networks
|
219
|
+
```
|
220
|
+
This returns in the following `Fog::OpenStack::Model`:
|
221
|
+
```
|
222
|
+
<Fog::Network::OpenStack::Networks
|
223
|
+
filters={}
|
224
|
+
[<Fog::Network::OpenStack::Network
|
225
|
+
id="f9c54735-a230-443e-9379-b87f741cc1b1",
|
226
|
+
name="Public",
|
227
|
+
subnets= <Fog::Network::OpenStack::Subnets
|
228
|
+
filters={}
|
229
|
+
[<Fog::Network::OpenStack::Subnet ... >]
|
230
|
+
>,
|
231
|
+
shared=true,
|
232
|
+
status="ACTIVE",
|
233
|
+
admin_state_up=true,
|
234
|
+
tenant_id="a51fd915",
|
235
|
+
provider_network_type="vlan",
|
236
|
+
provider_physical_network=nil,
|
237
|
+
provider_segmentation_id=nil,
|
238
|
+
router_external=false
|
239
|
+
>,
|
240
|
+
<Fog::Network::OpenStack::Network
|
241
|
+
id="e624a36d-762b-481f-9b50-4154ceb78bbb",
|
242
|
+
name="network_1",
|
243
|
+
subnets= <Fog::Network::OpenStack::Subnets
|
244
|
+
filters={}
|
245
|
+
[]
|
246
|
+
>,
|
247
|
+
shared=false,
|
248
|
+
status="ACTIVE",
|
249
|
+
admin_state_up=true,
|
250
|
+
tenant_id="f8b26a6032bc47718a7702233ac708b9",
|
251
|
+
provider_network_type=nil,
|
252
|
+
provider_physical_network=nil,
|
253
|
+
provider_segmentation_id=nil,
|
254
|
+
router_external=nil
|
255
|
+
>
|
256
|
+
]
|
257
|
+
>
|
258
|
+
```
|
259
|
+
|
260
|
+
To access the name of the first network:
|
261
|
+
```
|
262
|
+
networks.first.name
|
263
|
+
```
|
264
|
+
This will return:
|
265
|
+
```
|
266
|
+
"Public"
|
267
|
+
```
|
268
|
+
## Examples
|
269
|
+
|
270
|
+
Example code using Network can be found [here](https://github.com/fog/fog-openstack/tree/master/lib/fog/openstack/examples/network).
|
271
|
+
|
272
|
+
## Additional Resources
|
273
|
+
|
274
|
+
* [fog.io](http://fog.io/)
|
275
|
+
* [fog-openstack rdoc](http://rubydoc.info/gems/fog-openstack)
|
276
|
+
* [fog-openstack Github repo](https://github.com/fog/fog-openstack)
|
277
|
+
* [fog-openstack Github Issues](https://github.com/fog/fog-openstack/issues)
|
278
|
+
* [Excon Github repo](https://github.com/geemus/excon)
|
279
|
+
* [OpenStack Network API](http://developer.openstack.org/api-ref-networking-v2.html)
|
280
|
+
|
281
|
+
## Support and Feedback
|
282
|
+
|
283
|
+
Your feedback is appreciated! If you have specific issues with the **fog-openstack** SDK, you should file an [issue via Github](https://github.com/fog/fog-openstack/issues).
|
@@ -0,0 +1,144 @@
|
|
1
|
+
# NFV
|
2
|
+
|
3
|
+
This document explains how to get started using NFV with
|
4
|
+
fog-openstack.
|
5
|
+
|
6
|
+
Please also refer to the
|
7
|
+
[Getting Started with Fog and the OpenStack](getting_started.md) document.
|
8
|
+
|
9
|
+
Tacker is an OpenStack service for NFV Orchestration with a general purpose
|
10
|
+
VNF Manager to deploy and operate Virtual Network Functions (VNFs) and Network
|
11
|
+
Services on an NFV Platform. It is based on ETSI MANO Architectural Framework.
|
12
|
+
|
13
|
+
# OpenStack setup
|
14
|
+
|
15
|
+
## The catalog
|
16
|
+
For the fog-openstack's introspection service to work, the corresponding
|
17
|
+
service must be defined in the OpenStack catalog.
|
18
|
+
|
19
|
+
```bash
|
20
|
+
openstack catalog show servicevm
|
21
|
+
+-----------+-----------------------------------------+
|
22
|
+
| Field | Value |
|
23
|
+
+-----------+-----------------------------------------+
|
24
|
+
| endpoints | regionOne |
|
25
|
+
| | publicURL: http://172.16.0.21:8888/ |
|
26
|
+
| | internalURL: http://172.16.0.21:8888/ |
|
27
|
+
| | adminURL: http://172.16.0.21:8888/ |
|
28
|
+
| | |
|
29
|
+
| name | tacker |
|
30
|
+
| type | servicevm |
|
31
|
+
+-----------+-----------------------------------------+
|
32
|
+
```
|
33
|
+
|
34
|
+
Depending on the OpenStack release, the NFV service might be installed
|
35
|
+
but not defined yet in the catalog. In such case, you must add the service and
|
36
|
+
corresponding endpoints to create the catalog entry:
|
37
|
+
|
38
|
+
```bash
|
39
|
+
source ./stackrc
|
40
|
+
openstack service create --name tacker --description "Tacker Project" servicevm
|
41
|
+
openstack endpoint create --region regionOne tacker --publicurl http://example.com:8888 --internalurl http://example.com:8888 --adminurl http://example.com:8888
|
42
|
+
```
|
43
|
+
|
44
|
+
# Work flow
|
45
|
+
A usual work-flow might consist of:
|
46
|
+
* Create vnfd
|
47
|
+
* Deploy vnf using vnfd
|
48
|
+
* Retrieve vnf and vnfd data
|
49
|
+
|
50
|
+
For more details please refer to
|
51
|
+
http://docs.openstack.org/developer/tacker/
|
52
|
+
|
53
|
+
Using 'irb', we start with authentication:
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
@user = "admin"
|
57
|
+
@project = "admin"
|
58
|
+
@password = "secret"
|
59
|
+
@base_url = "http://keystone.example.com:5000/v3/auth/tokens"
|
60
|
+
|
61
|
+
require 'rubygems'
|
62
|
+
require 'fog/openstack'
|
63
|
+
|
64
|
+
@connection_params = {
|
65
|
+
:openstack_auth_url => @base_url,
|
66
|
+
:openstack_username => @user,
|
67
|
+
:openstack_api_key => @password,
|
68
|
+
:openstack_project_name => @project,
|
69
|
+
:openstack_domain_id => "default"
|
70
|
+
}
|
71
|
+
```
|
72
|
+
|
73
|
+
## Vnfd management
|
74
|
+
|
75
|
+
### Create vnfd
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
vnfd_data = {:attributes => {:vnfd => "template_name: sample-vnfd\ndescription: demo-example\n\nservice_properties:\n Id: sample-vnfd\n vendor: tacker\n version: 1\n\nvdus:\n vdu1:\n id: vdu1\n vm_image: cirros\n instance_type: m1.tiny\n\n network_interfaces:\n management:\n network: net_mgmt\n management: true\n pkt_in:\n network: net0\n pkt_out:\n network: net1\n\n placement_policy:\n availability_zone: nova\n\n auto-scaling: noop\n\n config:\n param0: key0\n param1: key1\n"},
|
79
|
+
:service_types => [{:service_type => "vnfd"}],
|
80
|
+
:mgmt_driver => "noop",
|
81
|
+
:infra_driver => "heat"}
|
82
|
+
auth = {"tenantName" => "admin", "passwordCredentials" => {"username" => "admin","password" => "password"}}
|
83
|
+
vnfd = Fog::NFV[:openstack].vnfds.create(:vnfd => vnfd_data, :auth => auth)
|
84
|
+
```
|
85
|
+
|
86
|
+
### List vnfds
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
vnfds = Fog::NFV[:openstack].vnfds
|
90
|
+
```
|
91
|
+
|
92
|
+
### Get vnfd
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
vnfd = Fog::NFV[:openstack].vnfds.last
|
96
|
+
vnfd = Fog::NFV[:openstack].vnfds.get(vnfd.id)
|
97
|
+
```
|
98
|
+
|
99
|
+
### Destroy vnfd
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
vnfd = Fog::NFV[:openstack].vnfds.last
|
103
|
+
vnfd.destroy
|
104
|
+
```
|
105
|
+
|
106
|
+
## Vnf management
|
107
|
+
|
108
|
+
### Create vnf using vnfd
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
vnfd = Fog::NFV[:openstack].vnfds.last
|
112
|
+
vnf_data = {:vnfd_id => vnfd.id, :name => 'Test'}
|
113
|
+
auth = {"tenantName" => "admin", "passwordCredentials" => {"username" => "admin","password" => "password"}}
|
114
|
+
vnf = Fog::NFV[:openstack].vnfs.create(:vnf => vnf_data, :auth => auth)
|
115
|
+
```
|
116
|
+
|
117
|
+
### List vnfs
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
vnfs = Fog::NFV[:openstack].vnfs
|
121
|
+
```
|
122
|
+
|
123
|
+
### Get vnf
|
124
|
+
|
125
|
+
```ruby
|
126
|
+
vnf = Fog::NFV[:openstack].vnfs.last
|
127
|
+
vnf = Fog::NFV[:openstack].vnfs.get(vnf.id)
|
128
|
+
```
|
129
|
+
|
130
|
+
### Update vnf
|
131
|
+
|
132
|
+
```ruby
|
133
|
+
vnf = Fog::NFV[:openstack].vnfs.last
|
134
|
+
vnf_data = {"attributes": {"config": "vdus:\n vdu1:<sample_vdu_config> \n\n"}}
|
135
|
+
auth = {"tenantName" => "admin", "passwordCredentials" => {"username" => "admin","password" => "password"}}
|
136
|
+
vnf = vnf.update(:vnf => vnf_data, :auth => auth)
|
137
|
+
```
|
138
|
+
|
139
|
+
### Destroy vnf
|
140
|
+
|
141
|
+
```ruby
|
142
|
+
vnf = Fog::NFV[:openstack].vnfs.last
|
143
|
+
vnf.destroy
|
144
|
+
```
|
@@ -11,17 +11,17 @@ compute_client ||= ::Fog::Compute::OpenStack.new(
|
|
11
11
|
:openstack_api_key => password,
|
12
12
|
:openstack_username => username,
|
13
13
|
:openstack_auth_url => auth_url,
|
14
|
-
:openstack_tenant => tenant
|
14
|
+
:openstack_tenant => tenant
|
15
15
|
)
|
16
16
|
|
17
|
-
|
17
|
+
_vm = compute_client.servers.create(
|
18
18
|
:name => name,
|
19
19
|
:flavor_ref => flavor,
|
20
20
|
:block_device_mapping_v2 => [
|
21
21
|
{
|
22
|
-
:boot_index => 0
|
22
|
+
:boot_index => 0,
|
23
23
|
:device_name => "vda",
|
24
|
-
:source_type => "volume",
|
24
|
+
:source_type => "volume", # Or "snapshot"
|
25
25
|
:destination_type => "volume",
|
26
26
|
:delete_on_termination => false,
|
27
27
|
:uuid => cinder_uddi,
|