diff --git a/robot/resources/openstack/cinder_interface.robot b/robot/resources/openstack/cinder_interface.robot
new file mode 100644
index 0000000..ee1a253
--- /dev/null
+++ b/robot/resources/openstack/cinder_interface.robot
@@ -0,0 +1,50 @@
+*** Settings ***
+Documentation     The main interface for interacting with Openstack. It handles low level stuff like managing the authtoken and Openstack required fields
+Library           OpenstackLibrary
+Library 	      RequestsLibrary
+Library	          UUID      
+Library    OperatingSystem
+Resource    ../global_properties.robot
+Resource    ../json_templater.robot
+Resource    openstack_common.robot
+
+
+*** Variables ***
+${OPENSTACK_CINDER_API_VERSION}    /v1
+${OPENSTACK_CINDER_TYPES_PATH}    /types
+${OPENSTACK_CINDER_VOLUMES_PATH}    /volumes
+${OPENSTACK_CINDER_VOLUMES_ADD_BODY_FILE}        robot/assets/templates/cinder_add_volume.template
+${OPENSTACK_CINDER_VOLUMES_TYPE}    SSD
+${OPENSTACK_CINDER_AVAILABILITY_ZONE}    nova
+
+*** Keywords ***
+Get Openstack Volume Types
+    [Documentation]    Returns the openstack volume types information
+    [Arguments]    ${alias}  
+    ${resp}=    Internal Get Openstack    ${alias}    ${GLOBAL_OPENSTACK_CINDER_SERVICE_TYPE}    ${GLOBAL_OPENSTACK_SERVICE_REGION}    ${OPENSTACK_CINDER_TYPES_PATH}  
+    [Return]    ${resp.json()}
+    
+Get Openstack Volume
+    [Documentation]    Returns the openstack volume information for the passed in volume id
+    [Arguments]    ${alias}    ${volume_id}
+    ${resp}=    Internal Get Openstack    ${alias}    ${GLOBAL_OPENSTACK_CINDER_SERVICE_TYPE}    ${GLOBAL_OPENSTACK_SERVICE_REGION}    ${OPENSTACK_CINDER_VOLUMES_PATH}	    /${volume_id}
+    [Return]    ${resp.json()}
+
+Add Openstack Volume
+    [Documentation]    Runs an Openstack Request to add a volume and returns that volume id of the created volume
+    [Arguments]    ${alias}    ${name}	    ${size}
+    ${data_template}=    OperatingSystem.Get File    ${OPENSTACK_CINDER_VOLUMES_ADD_BODY_FILE}
+    ${uuid}=    Generate UUID
+    ${arguments}=    Create Dictionary    name=${name}     description=${GLOBAL_APPLICATION_ID}${uuid}	size=${size}    type=${OPENSTACK_CINDER_VOLUMES_TYPE}    availability_zone=${OPENSTACK_CINDER_AVAILABILITY_ZONE}
+    ${data}=	Fill JSON Template    ${data_template}    ${arguments}
+    ${resp}=    Internal Post Openstack    ${alias}    ${GLOBAL_OPENSTACK_CINDER_SERVICE_TYPE}    ${GLOBAL_OPENSTACK_SERVICE_REGION}    ${OPENSTACK_CINDER_VOLUMES_PATH}    data_path=    data=${data}
+    Should Be Equal As Strings    200  ${resp.status_code}
+    [Return]    ${resp.json()['volume']['id']}
+    
+Delete Openstack Volume
+    [Documentation]    Runs an Openstack Request to delete a volume
+    [Arguments]    ${alias}    ${volume_id}
+    ${resp}=    Internal Delete Openstack    ${alias}    ${GLOBAL_OPENSTACK_CINDER_SERVICE_TYPE}    ${GLOBAL_OPENSTACK_SERVICE_REGION}    ${OPENSTACK_CINDER_VOLUMES_PATH}	  /${volume_id}  
+    ${status_string}=    Convert To String    ${resp.status_code}
+    Should Match Regexp    ${status_string}    ^(204|200|404)$     
+    [Return]    ${resp.text}
\ No newline at end of file
