fog-openstack 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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,
|