fog-softlayer 0.2.1 → 0.3.1
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 +8 -8
- data/.travis.yml +0 -1
- data/CHANGELOG.md +25 -9
- data/CONTRIBUTING.md +13 -25
- data/CONTRIBUTORS.md +1 -1
- data/Rakefile +3 -3
- data/examples/compute.md +114 -3
- data/examples/network.md +285 -0
- data/examples/tags.md +76 -1
- data/fog-softlayer.gemspec +2 -3
- data/lib/fog/softlayer.rb +2 -0
- data/lib/fog/softlayer/compute.rb +16 -73
- data/lib/fog/softlayer/core.rb +105 -1
- data/lib/fog/softlayer/models/compute/flavor.rb +1 -0
- data/lib/fog/softlayer/models/compute/flavors.rb +1 -0
- data/lib/fog/softlayer/models/compute/image.rb +1 -0
- data/lib/fog/softlayer/models/compute/images.rb +1 -0
- data/lib/fog/softlayer/models/compute/server.rb +71 -12
- data/lib/fog/softlayer/models/compute/servers.rb +9 -5
- data/lib/fog/softlayer/models/compute/tag.rb +5 -6
- data/lib/fog/softlayer/models/compute/tags.rb +1 -0
- data/lib/fog/softlayer/models/network/datacenter.rb +52 -0
- data/lib/fog/softlayer/models/network/datacenters.rb +42 -0
- data/lib/fog/softlayer/models/network/ip.rb +67 -0
- data/lib/fog/softlayer/models/network/ips.rb +39 -0
- data/lib/fog/softlayer/models/network/network.rb +121 -0
- data/lib/fog/softlayer/models/network/networks.rb +47 -0
- data/lib/fog/softlayer/models/network/subnet.rb +62 -0
- data/lib/fog/softlayer/models/network/subnets.rb +33 -0
- data/lib/fog/softlayer/models/network/tag.rb +54 -0
- data/lib/fog/softlayer/models/network/tags.rb +40 -0
- data/lib/fog/softlayer/models/storage/directories.rb +7 -0
- data/lib/fog/softlayer/models/storage/directory.rb +7 -0
- data/lib/fog/softlayer/models/storage/file.rb +7 -0
- data/lib/fog/softlayer/models/storage/files.rb +7 -0
- data/lib/fog/softlayer/network.rb +139 -0
- data/lib/fog/softlayer/requests/compute/create_bare_metal_server.rb +1 -1
- data/lib/fog/softlayer/requests/compute/get_vms.rb +1 -1
- data/lib/fog/softlayer/requests/network/create_network.rb +488 -0
- data/lib/fog/softlayer/requests/network/create_network_tags.rb +50 -0
- data/lib/fog/softlayer/requests/network/delete_network.rb +37 -0
- data/lib/fog/softlayer/requests/network/delete_network_tags.rb +46 -0
- data/lib/fog/softlayer/requests/network/get_datacenter_routers.rb +41 -0
- data/lib/fog/softlayer/requests/network/get_datacenters.rb +30 -0
- data/lib/fog/softlayer/requests/network/get_ip_address.rb +28 -0
- data/lib/fog/softlayer/requests/network/get_network.rb +34 -0
- data/lib/fog/softlayer/requests/network/get_network_tags.rb +47 -0
- data/lib/fog/softlayer/requests/network/get_private_vlan_price_code.rb +27 -0
- data/lib/fog/softlayer/requests/network/get_public_vlan_price_code.rb +27 -0
- data/lib/fog/softlayer/requests/network/get_references_by_tag_name.rb +42 -0
- data/lib/fog/softlayer/requests/network/get_subnet.rb +28 -0
- data/lib/fog/softlayer/requests/network/get_subnet_package_id.rb +29 -0
- data/lib/fog/softlayer/requests/network/get_subnet_price_code.rb +30 -0
- data/lib/fog/softlayer/requests/network/list_networks.rb +30 -0
- data/lib/fog/softlayer/requests/network/list_subnets.rb +28 -0
- data/lib/fog/softlayer/storage.rb +7 -0
- data/lib/fog/softlayer/version.rb +2 -1
- data/tests/compute/flavors_helper.rb +1 -0
- data/tests/compute/server_helper.rb +1 -0
- data/tests/compute/servers_helper.rb +1 -0
- data/tests/helper.rb +7 -0
- data/tests/helpers/collection_helper.rb +7 -0
- data/tests/helpers/compute/flavors_helper.rb +7 -0
- data/tests/helpers/compute/server_helper.rb +7 -0
- data/tests/helpers/compute/servers_helper.rb +7 -0
- data/tests/helpers/formats_helper.rb +7 -0
- data/tests/helpers/formats_helper_tests.rb +7 -0
- data/tests/helpers/mock_helper.rb +7 -0
- data/tests/helpers/model_helper.rb +7 -0
- data/tests/helpers/responds_to_helper.rb +7 -0
- data/tests/helpers/schema_validator_tests.rb +7 -0
- data/tests/helpers/succeeds_helper.rb +7 -0
- data/tests/softlayer/compute/helper.rb +1 -0
- data/tests/softlayer/compute/schema.rb +1 -0
- data/tests/softlayer/models/compute/server_tests.rb +31 -4
- data/tests/softlayer/requests/compute/bmc_tests.rb +4 -3
- data/tests/softlayer/requests/compute/tag_tests.rb +1 -1
- data/tests/softlayer/requests/network/network_tests.rb +129 -0
- metadata +35 -25
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MTM2MDFlYmQ0NjNhMDI0NjZhM2FmNWRjNjVmNzdhMmRhNDE0YjMzYw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MmE5ZjAzZTYzMGVjOGY4YTU5MjQ0OGZkNjkxYTNhMzg4NDYwNThhYg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NmNlZDRhMDYwZDAwNWExZmZhN2UyMzAyNGExMDU0ZDJmMjJjODMwMWIyMGYx
|
10
|
+
YjY0ZmJjMzgzNTg4YTRiMmY1M2UyYzNiYzI5ZDczOTVmMTVlYTUxNzMyNzMz
|
11
|
+
MDJmNjdhYzZmMzQ0MTc4MmMyNTNlNGRlYzFlMmFjNTJlMzQ3OGM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTg3YTBiZjI3ZjdiYzBjYWRmN2Q0YTcxNDkxODgzNWZhMzU1ZmJmMjQ1YjAx
|
14
|
+
ODc0YzEzZGEwYjU5ZWIyYTlhMmZhNmRhZGZjY2U5OWYxNzAxNDI0ODU3Zjc0
|
15
|
+
NDRiMWM2MzIyZGQ1ZTU2MTVlODBhNDA5YzU1MTE5MTViOWIxNjU=
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,26 +1,42 @@
|
|
1
|
+
## 0.3.0 2014-06-26
|
2
|
+
|
3
|
+
* Added Network service.
|
4
|
+
* Network model.
|
5
|
+
* Subnet model.
|
6
|
+
* Ip model.
|
7
|
+
* Tag model.
|
8
|
+
* Added vlan and private_vlan properties to Server model.
|
9
|
+
* Fixed up bare_metal? on Server so it's not a hack. *thanks fernandes*
|
10
|
+
* Fixed Bundler/dep issues with Ruby 1.8.7. (Thx @fernandes!)
|
11
|
+
* Added some missing license headers.
|
12
|
+
* Updated Compute examples and Tag examples to reflect new Network service.
|
13
|
+
* Moved shared logic from `lib/fog/softlayer/compute.rb` to `lib/fog/softlayer/core.rb`
|
14
|
+
|
15
|
+
## 0.2.1 2014-06-17
|
16
|
+
* Add support for SoftLayer Tags on Compute resources.
|
17
|
+
|
1
18
|
## 0.1.1 2014-06-10
|
2
19
|
|
3
|
-
|
20
|
+
* Fix Compute model after breaking change to SLAPI. :datacenter is no longer optional.
|
21
|
+
|
4
22
|
## 0.1.0 2014-06-10
|
5
23
|
|
6
|
-
|
7
|
-
|
24
|
+
* Add missing get method to Fog::DNS::Softlayer::Record.
|
25
|
+
* Add OS attribute and ssh_password method to Compute model.
|
8
26
|
|
9
27
|
### 0.0.9 2014-06-10
|
10
28
|
|
11
|
-
|
29
|
+
* Initial support for DNS.
|
12
30
|
|
13
31
|
### 0.0.8 2014-06-05
|
14
32
|
|
15
|
-
|
33
|
+
* Released support for Object Storage.
|
16
34
|
|
17
35
|
### 0.0.7 2014-05-29
|
18
36
|
|
19
|
-
|
20
|
-
|
37
|
+
* Compute requests and models initial development complete. Supports both VMs and BMC.
|
38
|
+
* Storage requests and models initial development complete.
|
21
39
|
|
22
40
|
### 0.0.1 / 2014-04-18
|
23
41
|
|
24
|
-
Enhancements:
|
25
|
-
|
26
42
|
* Initial release of `fog-softlayer` module.
|
data/CONTRIBUTING.md
CHANGED
@@ -1,30 +1,18 @@
|
|
1
|
-
|
1
|
+
## Getting Involved
|
2
2
|
|
3
|
-
|
3
|
+
New contributors are always welcome, when it doubt please ask questions. We strive to be an open and welcoming community. Please be nice to one another.
|
4
4
|
|
5
|
-
|
5
|
+
### Coding
|
6
6
|
|
7
|
-
*
|
8
|
-
|
9
|
-
*
|
7
|
+
* Pick a task:
|
8
|
+
* Offer feedback on open [pull requests](https://github.com/softlayer/fog/pulls).
|
9
|
+
* Review open [issues](https://github.com/softlayer/fog/issues) for things to help on.
|
10
|
+
* [Create an issue](https://github.com/softlayer/fog/issues/new) to start a discussion on additions or features.
|
11
|
+
* Fork the project, add your changes and tests to cover them in a topic branch.
|
12
|
+
* Commit your changes and rebase against `softlayer/fog` to ensure everything is up to date.
|
13
|
+
* [Submit a pull request](https://github.com/softlayer/fog/compare/).
|
10
14
|
|
11
|
-
|
12
|
-
|
13
|
-
You can file tickets to describe the bug you'd like to fix or feature you'd
|
14
|
-
like to add on the [fog-softlayer project](https://github.com/softlayer/fog-softlayer/issues) on github.
|
15
|
-
|
16
|
-
## Testing Instructions
|
17
|
-
|
18
|
-
To run tests, run the following Ruby tool commands from the root of your local copy of
|
19
|
-
fog-softlayer:
|
20
|
-
|
21
|
-
bundle install
|
22
|
-
bundle exec rake travis
|
23
|
-
|
24
|
-
**All tests must pass** before your contribution can be merged. Thus it's a good idea
|
25
|
-
to execute the tests without your change to be sure you understand how to run
|
26
|
-
them, as well as after to validate that you've avoided regressions.
|
27
|
-
|
28
|
-
All but the most trivial changes should include **at least one unit test case** to exercise the
|
29
|
-
new / changed code; please add tests to your pull request in this common case.
|
15
|
+
### Non-Coding
|
30
16
|
|
17
|
+
* Offer feedback on open [issues](https://github.com/softlayer/fog/issues).
|
18
|
+
* Organize or volunteer at events.
|
data/CONTRIBUTORS.md
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
* Celso Fernandes <fernandes@zertico.com>
|
2
|
-
* Matt Eldridge <matt.eldridge@us.ibm.com>
|
2
|
+
* Matt Eldridge <matt.eldridge@us.ibm.com>
|
data/Rakefile
CHANGED
@@ -34,7 +34,7 @@ def name
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def version
|
37
|
-
Fog::VERSION
|
37
|
+
Fog::Softlayer::VERSION
|
38
38
|
end
|
39
39
|
|
40
40
|
def date
|
@@ -198,7 +198,7 @@ task :gemspec => :validate do
|
|
198
198
|
replace_header(spec, :version)
|
199
199
|
replace_header(spec, :date)
|
200
200
|
#comment this out if your rubyforge_project has a different name
|
201
|
-
replace_header(spec, :rubyforge_project)
|
201
|
+
#replace_header(spec, :rubyforge_project)
|
202
202
|
|
203
203
|
File.open(gemspec_file, 'w') { |io| io.write(spec) }
|
204
204
|
puts "Updated #{gemspec_file}"
|
@@ -209,7 +209,7 @@ task :validate do
|
|
209
209
|
libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}", "lib/tasks"]
|
210
210
|
unless libfiles.empty?
|
211
211
|
puts "Directory `lib` should only contain a `#{name}.rb` file and `#{name}` dir."
|
212
|
-
exit!
|
212
|
+
#exit!
|
213
213
|
end
|
214
214
|
unless Dir['VERSION*'].empty?
|
215
215
|
puts "A `VERSION` file at root level violates Gem best practices."
|
data/examples/compute.md
CHANGED
@@ -32,6 +32,94 @@ These examples all assume you have `~/.fog` which contains the following
|
|
32
32
|
server.state # => 'Running', 'Stopped', 'Terminated', etc.
|
33
33
|
```
|
34
34
|
|
35
|
+
1. Get all servers tagged with certain tags.
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
prod_fe_servers = @sl.servers.tagged_with(['production', 'frontend'])
|
39
|
+
# => [ <Fog::Compute::Softlayer::Server>,
|
40
|
+
# <Fog::Compute::Softlayer::Server>,
|
41
|
+
# <Fog::Compute::Softlayer::Server>,
|
42
|
+
# <Fog::Compute::Softlayer::Server>,
|
43
|
+
# <Fog::Compute::Softlayer::Server>,]
|
44
|
+
```
|
45
|
+
|
46
|
+
1. Get a server's public/frontend VLAN
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
server = @sl.servers.get(12345)
|
50
|
+
server.vlan
|
51
|
+
# => <Fog::Network::Softlayer::Network
|
52
|
+
# id=123456,
|
53
|
+
# name='frontend-staging-vlan',
|
54
|
+
# modify_date="2014-02-22T12:42:31-06:00",
|
55
|
+
# note=nil,
|
56
|
+
# tags=['sparkle', 'motion'],
|
57
|
+
# type="STANDARD",
|
58
|
+
# datacenter= <Fog::Network::Softlayer::Datacenter
|
59
|
+
# id=168642,
|
60
|
+
# long_name="San Jose 1",
|
61
|
+
# name="sjc01"
|
62
|
+
# >,
|
63
|
+
# network_space="PUBLIC",
|
64
|
+
# router={"hostname"=>"fcr01a.sjc01", "id"=>82412, "datacenter"=>{"id"=>168642, "longName"=>"San Jose 1", "name"=>"sjc01"}}
|
65
|
+
# >
|
66
|
+
```
|
67
|
+
|
68
|
+
1. Get a server's private/backend VLAN
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
server = @sl.servers.get(12345)
|
72
|
+
server.private_vlan
|
73
|
+
# => <Fog::Network::Softlayer::Network
|
74
|
+
# id=123456,
|
75
|
+
# name='backend-staging-vlan',
|
76
|
+
# modify_date="2014-02-22T12:42:33-06:00",
|
77
|
+
# note=nil,
|
78
|
+
# tags=[],
|
79
|
+
# type="STANDARD",
|
80
|
+
# datacenter= <Fog::Network::Softlayer::Datacenter
|
81
|
+
# id=168642,
|
82
|
+
# long_name="San Jose 1",
|
83
|
+
# name="sjc01"
|
84
|
+
# >,
|
85
|
+
# network_space="PRIVATE",
|
86
|
+
# router={"hostname"=>"bcr01a.sjc01", "id"=>82461, "datacenter"=>{"id"=>168642, "longName"=>"San Jose 1", "name"=>"sjc01"}}
|
87
|
+
# >
|
88
|
+
|
89
|
+
```
|
90
|
+
|
91
|
+
1. Get a server's tags
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
server = @sl.servers.get(12345)
|
95
|
+
server.tags
|
96
|
+
# => ['production', 'frontend']
|
97
|
+
```
|
98
|
+
|
99
|
+
1. Add tags to a server
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
server = @sl.servers.get(12345)
|
103
|
+
server.tags
|
104
|
+
# => ['production', 'frontend']
|
105
|
+
server.add_tags(['sparkle', 'motion']
|
106
|
+
# => true
|
107
|
+
server.tags
|
108
|
+
# => ['production', 'frontend', 'sparkle', 'motion']
|
109
|
+
```
|
110
|
+
|
111
|
+
1. Delete tags from a server
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
server = @sl.servers.get(12345)
|
115
|
+
server.tags
|
116
|
+
# => ['production', 'frontend', 'sparkle', 'motion']
|
117
|
+
server.delete_tags(['sparkle', 'motion']
|
118
|
+
# => true
|
119
|
+
server.tags
|
120
|
+
# => ['production', 'frontend']
|
121
|
+
```
|
122
|
+
|
35
123
|
1. Provision a new VM with flavor (simple).
|
36
124
|
|
37
125
|
```ruby
|
@@ -45,7 +133,7 @@ These examples all assume you have `~/.fog` which contains the following
|
|
45
133
|
new_server.id # => 1337
|
46
134
|
```
|
47
135
|
|
48
|
-
1. Provision a new
|
136
|
+
1. Provision a new Bare Metal instance with flavor (simple).
|
49
137
|
|
50
138
|
```ruby
|
51
139
|
opts = {
|
@@ -75,7 +163,7 @@ These examples all assume you have `~/.fog` which contains the following
|
|
75
163
|
}
|
76
164
|
```
|
77
165
|
|
78
|
-
1. Provision a
|
166
|
+
1. Provision a Bare Metal Instance without a flavor
|
79
167
|
|
80
168
|
```ruby
|
81
169
|
opts = {
|
@@ -92,9 +180,32 @@ These examples all assume you have `~/.fog` which contains the following
|
|
92
180
|
}
|
93
181
|
```
|
94
182
|
|
95
|
-
1. Delete a VM or
|
183
|
+
1. Delete a VM or Bare Metal instance.
|
96
184
|
|
97
185
|
```ruby
|
98
186
|
@sl.servers.get(<server id>).destroy
|
99
187
|
```
|
188
|
+
|
189
|
+
1. Provision a Server (works the same for VM and Bare Metal) into a specific VLAN
|
190
|
+
|
191
|
+
```ruby
|
192
|
+
# I want to launch another server to hold docker containers into my existing staging VLANs
|
193
|
+
# I'll start by getting a staging server so I can use its vlans as a reference.
|
194
|
+
staging_server = @sl.servers.tagged_with(['staging', 'docker']).first # => <Fog::Compute::Softlayer::Server>
|
195
|
+
|
196
|
+
opts = {
|
197
|
+
:flavor_id => 'm1.large',
|
198
|
+
:image_id => '23f7f05f-3657-4330-8772-329ed2e816bc', # Ubuntu Docker Image
|
199
|
+
:domain => 'staging.example.com',
|
200
|
+
:datacenter => 'ams01', # This needs to be the same datacenter as the target VLAN of course.
|
201
|
+
:name => 'additional-docker-host',
|
202
|
+
:vlan => staging.server.vlan, # Passing in a <Fog::Network::Softlayer::Network> object.
|
203
|
+
:private_vlan => staging.server.private_vlan.id, # Passing in an Integer (the id of a network/vlan) works too.
|
204
|
+
}
|
205
|
+
|
206
|
+
new_staging_server = @sl.servers.create(opts)
|
207
|
+
# => <Fog::Compute::Softlayer::Server>
|
208
|
+
|
209
|
+
|
210
|
+
```
|
100
211
|
|
data/examples/network.md
ADDED
@@ -0,0 +1,285 @@
|
|
1
|
+
### Network Examples
|
2
|
+
|
3
|
+
Note that SoftLayer uses the term `VLAN`. The Fog project tries to keep things provider independent, and we'll be referring to them as `networks`.
|
4
|
+
|
5
|
+
|
6
|
+
These examples all assume you have `~/.fog` which contains the following
|
7
|
+
|
8
|
+
|
9
|
+
```yaml
|
10
|
+
:softlayer_username: example-username
|
11
|
+
:softlayer_api_key: 1a1a1a1a1a1a1a1a1a11a1a1a1a1a1a1a1a1a1
|
12
|
+
```
|
13
|
+
|
14
|
+
#### Create a connection to SoftLayer Network
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
require 'fog/softlayer'
|
18
|
+
@sl = Fog::Network[:softlayer]
|
19
|
+
```
|
20
|
+
|
21
|
+
#### Use the Models
|
22
|
+
1. List existing networks.
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
nets = @sl.networks
|
26
|
+
# => [ <Fog::Network::Softlayer::Network
|
27
|
+
# id=123456,
|
28
|
+
# name="some-optional-name",
|
29
|
+
# modify_date="2014-06-25T17:10:57-05:00",
|
30
|
+
# note=nil,
|
31
|
+
# tags=["sparkle", "motion", "public"],
|
32
|
+
# type="STANDARD",
|
33
|
+
# datacenter= <Fog::Network::Softlayer::Datacenter
|
34
|
+
# id=12345,
|
35
|
+
# long_name="Washington, DC 1",
|
36
|
+
# name="wdc01"
|
37
|
+
# >,
|
38
|
+
# network_space="PUBLIC"
|
39
|
+
# router={"hostname"=>"fcr02.wdc01", "id"=>40378, "datacenter"=>{"id"=>37473, "longName"=>"Washington, DC 1", "name"=>"wdc01"}}
|
40
|
+
# >,
|
41
|
+
# <Fog::Network::Softlayer::Network
|
42
|
+
# id=123457,
|
43
|
+
# name="some-other-optional-name",
|
44
|
+
# modify_date="2014-06-25T17:11:57-05:00",
|
45
|
+
# note=nil,
|
46
|
+
# tags=["sparkle", "motion", "private"],
|
47
|
+
# type="STANDARD",
|
48
|
+
# datacenter= <Fog::Network::Softlayer::Datacenter
|
49
|
+
# id=12345,
|
50
|
+
# long_name="Washington, DC 1",
|
51
|
+
# name="wdc01"
|
52
|
+
# >,
|
53
|
+
# network_space="PRIVATE"
|
54
|
+
# router={"hostname"=>"bcr02.wdc01", "id"=>40379, "datacenter"=>{"id"=>37473, "longName"=>"Washington, DC 1", "name"=>"wdc01"}}
|
55
|
+
# >,
|
56
|
+
# ]
|
57
|
+
```
|
58
|
+
|
59
|
+
1. Get a network by ID.
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
net = @sl.networks.get(123456)
|
63
|
+
# => <Fog::Network::Softlayer::Network
|
64
|
+
# id=123456,
|
65
|
+
# name="some-name",
|
66
|
+
# modify_date="2014-06-25T17:10:57-05:00",
|
67
|
+
# note=nil,
|
68
|
+
# tags=["sparkle", "motion", "public"],
|
69
|
+
# type="STANDARD",
|
70
|
+
# datacenter= <Fog::Network::Softlayer::Datacenter
|
71
|
+
# id=12345,
|
72
|
+
# long_name="Washington, DC 1",
|
73
|
+
# name="wdc01"
|
74
|
+
# >,
|
75
|
+
# network_space="PUBLIC"
|
76
|
+
# router={"hostname"=>"fcr02.wdc01", "id"=>40378, "datacenter"=>{"id"=>37473, "longName"=>"Washington, DC 1", "name"=>"wdc01"}}
|
77
|
+
# >
|
78
|
+
```
|
79
|
+
|
80
|
+
1. Get a network by name.
|
81
|
+
|
82
|
+
```ruby
|
83
|
+
@sl.networks.by_name('some-name')
|
84
|
+
# => <Fog::Network::Softlayer::Network
|
85
|
+
# id=123456,
|
86
|
+
# name="some-name",
|
87
|
+
# modify_date="2014-06-25T17:10:57-05:00",
|
88
|
+
# note=nil,
|
89
|
+
# tags=["sparkle", "motion", "public"],
|
90
|
+
# type="STANDARD",
|
91
|
+
# datacenter= <Fog::Network::Softlayer::Datacenter
|
92
|
+
# id=12345,
|
93
|
+
# long_name="Washington, DC 1",
|
94
|
+
# name="wdc01"
|
95
|
+
# >,
|
96
|
+
# network_space="PUBLIC"
|
97
|
+
# router={"hostname"=>"fcr02.wdc01", "id"=>40378, "datacenter"=>{"id"=>37473, "longName"=>"Washington, DC 1", "name"=>"wdc01"}}
|
98
|
+
# >
|
99
|
+
```
|
100
|
+
|
101
|
+
1. Get all networks with a particular tag.
|
102
|
+
|
103
|
+
```ruby
|
104
|
+
prod_backend_nets = @sl.networks.tagged_with(['production', 'private'])
|
105
|
+
# => [<Fog::Network::Softlayer::Network>,
|
106
|
+
# <Fog::Network::Softlayer::Network>,
|
107
|
+
# <Fog::Network::Softlayer::Network>,
|
108
|
+
# ]
|
109
|
+
```
|
110
|
+
|
111
|
+
1. Get a network's tags.
|
112
|
+
|
113
|
+
```ruby
|
114
|
+
net = @sl.networks.get(123456)
|
115
|
+
net.tags
|
116
|
+
# => ['sparkle', 'motion', 'production', 'public']
|
117
|
+
```
|
118
|
+
|
119
|
+
1. Get a network's router.
|
120
|
+
|
121
|
+
```ruby
|
122
|
+
net = @sl.networks.by_name('some-name')
|
123
|
+
net.router
|
124
|
+
# => {"hostname"=>"bcr02a.ams01",
|
125
|
+
# "id"=>190854,
|
126
|
+
# "datacenter"=>{"id"=>265592, "longName"=>"Amsterdam 1", "name"=>"ams01"}}
|
127
|
+
```
|
128
|
+
|
129
|
+
1. Get a network's subnets.
|
130
|
+
|
131
|
+
```ruby
|
132
|
+
net = @sl.networks.get(123456)
|
133
|
+
net.subnets
|
134
|
+
# => [ <Fog::Network::Softlayer::Subnet
|
135
|
+
# id=123456,
|
136
|
+
# name=nil,
|
137
|
+
# network_id="37.58.125.72",
|
138
|
+
# vlan_id=123456,
|
139
|
+
# cidr=29,
|
140
|
+
# ip_version=4,
|
141
|
+
# type="ADDITIONAL_PRIMARY",
|
142
|
+
# gateway_ip="37.58.125.73",
|
143
|
+
# broadcast="37.58.125.79",
|
144
|
+
# gateway=nil,
|
145
|
+
# datacenter="ams01"
|
146
|
+
# >,
|
147
|
+
# <Fog::Network::Softlayer::Subnet
|
148
|
+
# id=123457,
|
149
|
+
# name=nil,
|
150
|
+
# network_id="81.95.147.148",
|
151
|
+
# vlan_id=123456,
|
152
|
+
# cidr=30,
|
153
|
+
# ip_version=4,
|
154
|
+
# type="PRIMARY",
|
155
|
+
# gateway_ip="81.95.147.149",
|
156
|
+
# broadcast="81.95.147.151",
|
157
|
+
# gateway=nil,
|
158
|
+
# datacenter="ams01"
|
159
|
+
# >]
|
160
|
+
```
|
161
|
+
|
162
|
+
1. Get a subnet's IP Addresses.
|
163
|
+
|
164
|
+
```ruby
|
165
|
+
net = @sl.networks.get(123456)
|
166
|
+
# Here I'm selecting the primary subnet...
|
167
|
+
subnet = net.subnets.select { |vlan| vlan.type == "PRIMARY" }.first
|
168
|
+
# => <Fog::Network::Softlayer::Subnet
|
169
|
+
# id=123457,
|
170
|
+
# ...
|
171
|
+
# >
|
172
|
+
addys = subnet.addresses
|
173
|
+
# => [ <Fog::Network::Softlayer::Ip
|
174
|
+
# id=19222174,
|
175
|
+
# subnet_id=630962,
|
176
|
+
# address="37.58.125.72",
|
177
|
+
# broadcast=false,
|
178
|
+
# gateway=false,
|
179
|
+
# network=true,
|
180
|
+
# reserved=false,
|
181
|
+
# note=nil,
|
182
|
+
# assigned_to=nil
|
183
|
+
# >,
|
184
|
+
# <Fog::Network::Softlayer::Ip
|
185
|
+
# id=19222174,
|
186
|
+
# subnet_id=630962,
|
187
|
+
# address="37.58.125.73",
|
188
|
+
# broadcast=false,
|
189
|
+
# gateway=true,
|
190
|
+
# network=false,
|
191
|
+
# reserved=false,
|
192
|
+
# note=nil,
|
193
|
+
# assigned_to=nil
|
194
|
+
# >,
|
195
|
+
# <Fog::Network::Softlayer::Ip
|
196
|
+
# id=19222174,
|
197
|
+
# subnet_id=630962,
|
198
|
+
# address="37.58.125.74",
|
199
|
+
# broadcast=false,
|
200
|
+
# gateway=false,
|
201
|
+
# network=false,
|
202
|
+
# reserved=false,
|
203
|
+
# note=nil,
|
204
|
+
# assigned_to={"fullyQualifiedDomainName"=>"hostname.example.com", "id"=>281730}
|
205
|
+
# >,
|
206
|
+
# <Fog::Network::Softlayer::Ip
|
207
|
+
# id=19222174,
|
208
|
+
# subnet_id=630962,
|
209
|
+
# address="37.58.125.75",
|
210
|
+
# broadcast=false,
|
211
|
+
# gateway=false,
|
212
|
+
# network=false,
|
213
|
+
# reserved=false,
|
214
|
+
# note=nil,
|
215
|
+
# assigned_to={"fullyQualifiedDomainName"=>"hostname-2.example.com", "id"=>281730}
|
216
|
+
# >,
|
217
|
+
# ...,
|
218
|
+
# ]
|
219
|
+
```
|
220
|
+
|
221
|
+
1. Create a new network.
|
222
|
+
|
223
|
+
```ruby
|
224
|
+
# We're creating a network in wdc01, the same steps will work for any datacenter.
|
225
|
+
# @sl.datacenters will give you a list of available datacenters.
|
226
|
+
|
227
|
+
wdc01 = @sl.datacenters.by_name('wdc01')
|
228
|
+
wdc01.routers
|
229
|
+
# => [{"hostname"=>"bcr01.wdc01", "id"=>16358},
|
230
|
+
# {"hostname"=>"bcr02.wdc01", "id"=>40379},
|
231
|
+
# {"hostname"=>"bcr03a.wdc01", "id"=>85816},
|
232
|
+
# {"hostname"=>"bcr04a.wdc01", "id"=>180611},
|
233
|
+
# {"hostname"=>"bcr05a.wdc01", "id"=>235754},
|
234
|
+
# {"hostname"=>"fcr01.wdc01", "id"=>16357},
|
235
|
+
# {"hostname"=>"fcr02.wdc01", "id"=>40378},
|
236
|
+
# {"hostname"=>"fcr03a.wdc01", "id"=>85814},
|
237
|
+
# {"hostname"=>"fcr04a.wdc01", "id"=>180610},
|
238
|
+
# {"hostname"=>"fcr05a.wdc01", "id"=>235748}]
|
239
|
+
|
240
|
+
# We want to create a public network so be sure to use one of the fcr* routers.
|
241
|
+
# If we were creating a private network we'd want to use a bcr* router.
|
242
|
+
|
243
|
+
opts = {
|
244
|
+
:name => 'my-new-network',
|
245
|
+
:datacenter => wdc01,
|
246
|
+
:router => wdc01.routers[4],
|
247
|
+
:network_space => 'PUBLIC',
|
248
|
+
}
|
249
|
+
|
250
|
+
@sl.networks.create(opts)
|
251
|
+
```
|
252
|
+
|
253
|
+
1. Add tags to a network.
|
254
|
+
|
255
|
+
```ruby
|
256
|
+
net = @sl.networks.by_name('my-new-network')
|
257
|
+
net.tags
|
258
|
+
# => ['sparkle']
|
259
|
+
net.add_tags(['motion'])
|
260
|
+
# => true
|
261
|
+
net.tags
|
262
|
+
# => ['sparkle', 'motion']
|
263
|
+
```
|
264
|
+
|
265
|
+
1. Delete tags from a network.
|
266
|
+
|
267
|
+
```ruby
|
268
|
+
net = @sl.networks.by_name('my-new-network')
|
269
|
+
net.tags
|
270
|
+
# => ['sparkle', 'motion']
|
271
|
+
net.delete_tags(['motion'])
|
272
|
+
# => true
|
273
|
+
net.tags
|
274
|
+
# => ['sparkle']
|
275
|
+
```
|
276
|
+
|
277
|
+
1. Delete a network.
|
278
|
+
|
279
|
+
```ruby
|
280
|
+
@sl.networks.by_name('my-retired-network').destroy
|
281
|
+
# => true
|
282
|
+
|
283
|
+
# You can't delete a network if it has actively routed addresses...
|
284
|
+
```
|
285
|
+
|