Skip to content

Commit 042b99e

Browse files
Merge pull request #1333 from ATGE/issues/1322
Set notes for network storage
2 parents c1e5501 + 16e17e1 commit 042b99e

File tree

16 files changed

+179
-18
lines changed

16 files changed

+179
-18
lines changed

SoftLayer/CLI/block/detail.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,7 @@ def cli(env, volume_id):
110110
original_volume_info.add_row(['Original Snapshot Name', block_volume['originalSnapshotName']])
111111
table.add_row(['Original Volume Properties', original_volume_info])
112112

113+
notes = '{}'.format(block_volume.get('notes', ''))
114+
table.add_row(['Notes', notes])
115+
113116
env.fout(table)

SoftLayer/CLI/block/list.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
column_helper.Column(
3535
'created_by',
3636
('billingItem', 'orderItem', 'order', 'userRecord', 'username')),
37+
column_helper.Column('notes', ('notes',), mask="notes"),
3738
]
3839

3940
DEFAULT_COLUMNS = [
@@ -47,9 +48,12 @@
4748
'ip_addr',
4849
'lunId',
4950
'active_transactions',
50-
'rep_partner_count'
51+
'rep_partner_count',
52+
'notes'
5153
]
5254

55+
DEFAULT_NOTES_SIZE = 20
56+
5357

5458
@click.command()
5559
@click.option('--username', '-u', help='Volume username')
@@ -75,8 +79,21 @@ def cli(env, sortby, columns, datacenter, username, storage_type):
7579
table = formatting.Table(columns.columns)
7680
table.sortby = sortby
7781

82+
_reduce_notes(block_volumes)
83+
7884
for block_volume in block_volumes:
7985
table.add_row([value or formatting.blank()
8086
for value in columns.row(block_volume)])
8187

8288
env.fout(table)
89+
90+
91+
def _reduce_notes(block_volumes):
92+
"""Reduces the size of the notes in a volume list.
93+
94+
:param block_volumes: An list of block volumes
95+
"""
96+
for block_volume in block_volumes:
97+
if len(block_volume.get('notes', '')) > DEFAULT_NOTES_SIZE:
98+
shortened_notes = block_volume['notes'][:DEFAULT_NOTES_SIZE]
99+
block_volume['notes'] = shortened_notes

SoftLayer/CLI/block/set_note.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
"""Set note for an existing block storage volume."""
2+
# :license: MIT, see LICENSE for more details.
3+
4+
import click
5+
import SoftLayer
6+
from SoftLayer.CLI import environment
7+
from SoftLayer.CLI import helpers
8+
9+
10+
@click.command()
11+
@click.argument('volume-id')
12+
@click.option('--note', '-n',
13+
type=str,
14+
required=True,
15+
help='Public notes related to a Storage volume')
16+
@environment.pass_env
17+
def cli(env, volume_id, note):
18+
"""Set note for an existing block storage volume."""
19+
block_manager = SoftLayer.BlockStorageManager(env.client)
20+
block_volume_id = helpers.resolve_id(block_manager.resolve_ids, volume_id, 'Block Volume')
21+
22+
result = block_manager.volume_set_note(block_volume_id, note)
23+
24+
if result:
25+
click.echo("Set note successfully!")
26+
27+
else:
28+
click.echo("Note could not be set! Please verify your options and try again.")

SoftLayer/CLI/file/detail.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def cli(env, volume_id):
2929
table.add_row(['Type', storage_type])
3030
table.add_row(['Capacity (GB)', "%iGB" % file_volume['capacityGb']])
3131

32-
used_space = int(file_volume['bytesUsed'])\
32+
used_space = int(file_volume['bytesUsed']) \
3333
if file_volume['bytesUsed'] else 0
3434
if used_space < (1 << 10):
3535
table.add_row(['Used Space', "%dB" % used_space])
@@ -126,4 +126,7 @@ def cli(env, volume_id):
126126
original_volume_info.add_row(['Original Snapshot Name', file_volume['originalSnapshotName']])
127127
table.add_row(['Original Volume Properties', original_volume_info])
128128

129+
notes = '{}'.format(file_volume.get('notes', ''))
130+
table.add_row(['Notes', notes])
131+
129132
env.fout(table)

SoftLayer/CLI/file/list.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from SoftLayer.CLI import environment
88
from SoftLayer.CLI import formatting
99

10-
1110
COLUMNS = [
1211
column_helper.Column('id', ('id',), mask="id"),
1312
column_helper.Column('username', ('username',), mask="username"),
@@ -18,7 +17,7 @@
1817
'storage_type',
1918
lambda b: b['storageType']['keyName'].split('_').pop(0)
2019
if 'storageType' in b and 'keyName' in b['storageType']
21-
and isinstance(b['storageType']['keyName'], str)
20+
and isinstance(b['storageType']['keyName'], str)
2221
else '-',
2322
mask="storageType.keyName"),
2423
column_helper.Column('capacity_gb', ('capacityGb',), mask="capacityGb"),
@@ -28,12 +27,13 @@
2827
column_helper.Column('active_transactions', ('activeTransactionCount',),
2928
mask="activeTransactionCount"),
3029
column_helper.Column('mount_addr', ('fileNetworkMountAddress',),
31-
mask="fileNetworkMountAddress",),
30+
mask="fileNetworkMountAddress", ),
3231
column_helper.Column('rep_partner_count', ('replicationPartnerCount',),
3332
mask="replicationPartnerCount"),
3433
column_helper.Column(
3534
'created_by',
3635
('billingItem', 'orderItem', 'order', 'userRecord', 'username')),
36+
column_helper.Column('notes', ('notes',), mask="notes"),
3737
]
3838

3939
DEFAULT_COLUMNS = [
@@ -46,9 +46,12 @@
4646
'ip_addr',
4747
'active_transactions',
4848
'mount_addr',
49-
'rep_partner_count'
49+
'rep_partner_count',
50+
'notes',
5051
]
5152

53+
DEFAULT_NOTES_SIZE = 20
54+
5255

5356
@click.command()
5457
@click.option('--username', '-u', help='Volume username')
@@ -74,8 +77,21 @@ def cli(env, sortby, columns, datacenter, username, storage_type):
7477
table = formatting.Table(columns.columns)
7578
table.sortby = sortby
7679

80+
_reduce_notes(file_volumes)
81+
7782
for file_volume in file_volumes:
7883
table.add_row([value or formatting.blank()
7984
for value in columns.row(file_volume)])
8085

8186
env.fout(table)
87+
88+
89+
def _reduce_notes(file_volumes):
90+
"""Reduces the size of the notes in a volume list.
91+
92+
:param file_volumes: An list of file volumes
93+
"""
94+
for file_volume in file_volumes:
95+
if len(file_volume.get('notes', '')) > DEFAULT_NOTES_SIZE:
96+
shortened_notes = file_volume['notes'][:DEFAULT_NOTES_SIZE]
97+
file_volume['notes'] = shortened_notes

SoftLayer/CLI/file/set_note.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
"""Set note for an existing File storage volume."""
2+
# :license: MIT, see LICENSE for more details.
3+
4+
import click
5+
import SoftLayer
6+
from SoftLayer.CLI import environment
7+
from SoftLayer.CLI import helpers
8+
9+
10+
@click.command()
11+
@click.argument('volume-id')
12+
@click.option('--note', '-n',
13+
type=str,
14+
required=True,
15+
help='Public notes related to a Storage volume')
16+
@environment.pass_env
17+
def cli(env, volume_id, note):
18+
"""Set note for an existing file storage volume."""
19+
file_manager = SoftLayer.FileStorageManager(env.client)
20+
file_volume_id = helpers.resolve_id(file_manager.resolve_ids, volume_id, 'File Storage')
21+
22+
result = file_manager.volume_set_note(file_volume_id, note)
23+
24+
if result:
25+
click.echo("Set note successfully!")
26+
27+
else:
28+
click.echo("Note could not be set! Please verify your options and try again.")

SoftLayer/CLI/routes.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
('block:volume-limits', 'SoftLayer.CLI.block.limit:cli'),
115115
('block:volume-refresh', 'SoftLayer.CLI.block.refresh:cli'),
116116
('block:volume-convert', 'SoftLayer.CLI.block.convert:cli'),
117+
('block:volume-set-note', 'SoftLayer.CLI.block.set_note:cli'),
117118

118119
('event-log', 'SoftLayer.CLI.event_log'),
119120
('event-log:get', 'SoftLayer.CLI.event_log.get:cli'),
@@ -147,6 +148,7 @@
147148
('file:volume-limits', 'SoftLayer.CLI.file.limit:cli'),
148149
('file:volume-refresh', 'SoftLayer.CLI.file.refresh:cli'),
149150
('file:volume-convert', 'SoftLayer.CLI.file.convert:cli'),
151+
('file:volume-set-note', 'SoftLayer.CLI.file.set_note:cli'),
150152

151153
('firewall', 'SoftLayer.CLI.firewall'),
152154
('firewall:add', 'SoftLayer.CLI.firewall.add:cli'),

SoftLayer/fixtures/SoftLayer_Network_Storage.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@
215215
]
216216

217217
deleteObject = True
218+
editObject = True
218219
allowAccessFromHostList = True
219220
removeAccessFromHostList = True
220221
failoverToReplicant = True

SoftLayer/managers/file.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ def get_file_volume_details(self, volume_id, **kwargs):
102102
'serviceResourceBackendIpAddress,'
103103
'serviceResource[datacenter[name]],'
104104
'replicationSchedule[type[keyname]]]',
105+
'notes',
105106
]
106107
kwargs['mask'] = ','.join(items)
107108
return self.get_volume_details(volume_id, **kwargs)

SoftLayer/managers/storage.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from SoftLayer.managers import storage_utils
1010
from SoftLayer import utils
1111

12+
1213
# pylint: disable=too-many-public-methods
1314

1415

@@ -65,6 +66,7 @@ def get_volume_details(self, volume_id, **kwargs):
6566
'serviceResourceBackendIpAddress,'
6667
'serviceResource[datacenter[name]],'
6768
'replicationSchedule[type[keyname]]]',
69+
'notes',
6870
]
6971
kwargs['mask'] = ','.join(items)
7072
return self.client.call('Network_Storage', 'getObject', id=volume_id, **kwargs)
@@ -173,10 +175,10 @@ def order_replicant_volume(self, volume_id, snapshot_schedule, location, tier=No
173175
:return: Returns a SoftLayer_Container_Product_Order_Receipt
174176
"""
175177

176-
block_mask = 'billingItem[activeChildren,hourlyFlag],'\
177-
'storageTierLevel,osType,staasVersion,'\
178-
'hasEncryptionAtRest,snapshotCapacityGb,schedules,'\
179-
'intervalSchedule,hourlySchedule,dailySchedule,'\
178+
block_mask = 'billingItem[activeChildren,hourlyFlag],' \
179+
'storageTierLevel,osType,staasVersion,' \
180+
'hasEncryptionAtRest,snapshotCapacityGb,schedules,' \
181+
'intervalSchedule,hourlySchedule,dailySchedule,' \
180182
'weeklySchedule,storageType[keyName],provisionedIops'
181183
block_volume = self.get_volume_details(volume_id, mask=block_mask)
182184

@@ -213,9 +215,9 @@ def order_duplicate_volume(self, origin_volume_id, origin_snapshot_id=None, dupl
213215
:return: Returns a SoftLayer_Container_Product_Order_Receipt
214216
"""
215217

216-
block_mask = 'id,billingItem[location,hourlyFlag],snapshotCapacityGb,'\
217-
'storageType[keyName],capacityGb,originalVolumeSize,'\
218-
'provisionedIops,storageTierLevel,osType[keyName],'\
218+
block_mask = 'id,billingItem[location,hourlyFlag],snapshotCapacityGb,' \
219+
'storageType[keyName],capacityGb,originalVolumeSize,' \
220+
'provisionedIops,storageTierLevel,osType[keyName],' \
219221
'staasVersion,hasEncryptionAtRest'
220222
origin_volume = self.get_volume_details(origin_volume_id, mask=block_mask)
221223
storage_class = storage_utils.block_or_file(origin_volume['storageType']['keyName'])
@@ -270,6 +272,16 @@ def order_modified_volume(self, volume_id, new_size=None, new_iops=None, new_tie
270272

271273
return self.client.call('Product_Order', 'placeOrder', order)
272274

275+
def volume_set_note(self, volume_id, note):
276+
"""Set the notes for an existing block volume.
277+
278+
:param volume_id: The ID of the volume to be modified
279+
:param note: the note
280+
:return: Returns true if success
281+
"""
282+
template = {'notes': note}
283+
return self.client.call('SoftLayer_Network_Storage', 'editObject', template, id=volume_id)
284+
273285
def delete_snapshot(self, snapshot_id):
274286
"""Deletes the specified snapshot object.
275287
@@ -295,9 +307,9 @@ def order_snapshot_space(self, volume_id, capacity, tier, upgrade, **kwargs):
295307
:param boolean upgrade: Flag to indicate if this order is an upgrade
296308
:return: Returns a SoftLayer_Container_Product_Order_Receipt
297309
"""
298-
object_mask = 'id,billingItem[location,hourlyFlag],'\
299-
'storageType[keyName],storageTierLevel,provisionedIops,'\
300-
'staasVersion,hasEncryptionAtRest'
310+
object_mask = 'id,billingItem[location,hourlyFlag],' \
311+
'storageType[keyName],storageTierLevel,provisionedIops,' \
312+
'staasVersion,hasEncryptionAtRest'
301313
volume = self.get_volume_details(volume_id, mask=object_mask, **kwargs)
302314

303315
order = storage_utils.prepare_snapshot_order_object(self, volume, capacity, tier, upgrade)

0 commit comments

Comments
 (0)