Skip to content

Instantly share code, notes, and snippets.

@unicolet
Created December 13, 2015 14:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save unicolet/0efa78de6de710ac63b5 to your computer and use it in GitHub Desktop.
Save unicolet/0efa78de6de710ac63b5 to your computer and use it in GitHub Desktop.
salt-cloud linode patch
--- /usr/lib/python2.7/site-packages/salt/cloud/clouds/linode.py.orig 2015-12-12 16:32:49.860428104 +0100
+++ /usr/lib/python2.7/site-packages/salt/cloud/clouds/linode.py 2015-12-12 17:09:37.384331055 +0100
@@ -537,6 +537,18 @@
'disk_size', vm_, __opts__, default=disksize - swap
)
+ def get_data_disk_size(vm_, size, swap):
+ '''
+ Return the size of of the data disk in MB
+ '''
+ conn = get_conn()
+ vmsize = get_size(conn, vm_)
+ disksize = int(vmsize['disk']) * 1024
+ root_disk_size = config.get_cloud_config_value(
+ 'disk_size', vm_, __opts__, default=disksize - swap
+ )
+ return disksize - root_disk_size - swap
+
# End of linode-python specific functions. The following are
# usable by both Apache Libcloud and Linode-python, or just Linode-python.
# Linode-python functions almost all take a LinodeID.
@@ -601,6 +613,14 @@
'private_ip', vm_, __opts__, default=False
)
+def get_data_disk(vm_):
+ '''
+ Return True if a data disk is requested
+ '''
+ return config.get_cloud_config_value(
+ 'data_disk', vm_, __opts__, default=False
+ )
+
def get_swap(vm_):
'''
@@ -738,6 +758,17 @@
Type='swap')
return result
+def create_data_disk(vm_=None, LinodeID=None, datasize=None):
+ '''
+ Create a data disk for the linode (type is hardcoded to ext4 at the moment)
+ '''
+ conn = get_conn()
+
+ result = conn.linode_disk_create(LinodeID=LinodeID,
+ Label='data',
+ Size=datasize,
+ Type='ext4')
+ return result
def create_disk_from_distro(vm_=None, LinodeID=None, swapsize=None):
'''
@@ -767,7 +798,7 @@
return result
-def create_config(vm_, LinodeID=None, root_disk_id=None, swap_disk_id=None):
+def create_config(vm_, LinodeID=None, root_disk_id=None, swap_disk_id=None, data_disk_id=None):
'''
Create a Linode Config
'''
@@ -775,11 +806,14 @@
# 138 appears to always be the latest 64-bit kernel for Linux
kernelid = 138
+
+ disklist = '{0},{1}'.format(root_disk_id,swap_disk_id)
+ if data_disk_id is not None:
+ disklist = '{0},{1},{2}'.format(root_disk_id,swap_disk_id,data_disk_id)
result = conn.linode_config_create(LinodeID=LinodeID,
Label=vm_['name'],
- Disklist='{0},{1}'.format(root_disk_id,
- swap_disk_id),
+ Disklist=disklist,
KernelID=kernelid,
RootDeviceNum=1,
RootDeviceRO=True,
@@ -952,10 +986,17 @@
root_result = create_disk_from_distro(vm_, LinodeID=node_data['LinodeID'],
swapsize=get_swap(vm_))
+ if get_data_disk(vm_):
+ data_result = create_data_disk(LinodeID=node_data['LinodeID'], datasize=get_data_disk_size(vm_, None, get_swap(vm_)))
+ else:
+ # make sure we have the required key
+ data_result = { 'DiskID' : None }
+
# Create config
config_result = create_config(vm_, LinodeID=node_data['LinodeID'],
root_disk_id=root_result['DiskID'],
- swap_disk_id=swap_result['DiskID'])
+ swap_disk_id=swap_result['DiskID'],
+ data_disk_id=data_result['DiskID'])
# Boot!
boot_result = boot(LinodeID=node_data['LinodeID'],
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment