Created
December 13, 2015 14:39
-
-
Save unicolet/0efa78de6de710ac63b5 to your computer and use it in GitHub Desktop.
salt-cloud linode patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- /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