RIFT OSM R1 Initial Submission
[osm/SO.git] / rwcal / include / riftware / rwcal-api.h
diff --git a/rwcal/include/riftware/rwcal-api.h b/rwcal/include/riftware/rwcal-api.h
new file mode 100644 (file)
index 0000000..6ef5f6a
--- /dev/null
@@ -0,0 +1,561 @@
+
+/*
+ * 
+ *   Copyright 2016 RIFT.IO Inc
+ *
+ *   Licensed under the Apache License, Version 2.0 (the "License");
+ *   you may not use this file except in compliance with the License.
+ *   You may obtain a copy of the License at
+ *
+ *       http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ *
+ */
+
+
+/**
+ * @file rwvx.h
+ * @author Justin Bronder (justin.bronder@riftio.com)
+ * @date 09/29/2014
+ * @brief Top level API include for rwcal submodule
+ */
+
+#ifndef __RWCAL_API_H__
+#define __RWCAL_API_H__
+
+#include <stdbool.h>
+
+#include <libpeas/peas.h>
+
+#include <rwcal.h>
+#include <rwlib.h>
+#include <rw-manifest.pb-c.h>
+#include <rw_vx_plugin.h>
+
+#include "rwlog.h"
+
+__BEGIN_DECLS
+
+struct rwcal_module_s {
+  rw_vx_framework_t * framework;
+  rw_vx_modinst_common_t *mip;
+
+  PeasExtension * cloud;
+  RwCalCloud * cloud_cls;
+  RwCalCloudIface * cloud_iface;
+
+  rwlog_ctx_t *rwlog_instance;
+};
+typedef struct rwcal_module_s * rwcal_module_ptr_t;
+
+// Redefine yang autonames
+typedef RWPB_E(RwManifest_RwcalCloudType) rwcal_cloud_type;
+
+/*
+ * Allocate a rwcal module.  Once allocated, the clients within
+ * the module still need to be initialized.  For rwzk, see
+ * rwcal_rwzk_{kazoo,zake}_init().  For rwcloud, see
+ * rwcal_cloud_init().  It is a fatal error to attempt to use any
+ * client before it has been initialized.  However, it is
+ * perfectly fine to not initialize a client that will remain
+ * unused.  Note that every function contains the client that it
+ * will use as part of the name, just after the rwcal_ prefix.
+ *
+ * @return - rwcal module handle or NULL on failure.
+ */
+rwcal_module_ptr_t rwcal_module_alloc();
+
+/*
+ * Deallocate a rwcal module.
+ *
+ * @param - pointer to the rwcal module to be deallocated.
+ */
+void rwcal_module_free(rwcal_module_ptr_t * rwcal);
+
+
+/*
+ * Initialize the rwcal cloud controller.
+ *
+ * key/secret for various cloud types:
+ *  EC2: ACCESS_ID/SECRET_KEY
+ *
+ * @param rwcal       - module handle.
+ * @return        - RW_STATUS_SUCCESS,
+ *                  RW_STATUS_NOTFOUND if the type is unknown,
+ *                  RW_STATUS_FAILURE otherwise.
+ */
+rw_status_t rwcal_cloud_init(rwcal_module_ptr_t rwcal);
+
+/*
+ * Get a list of the names of the available images that can be
+ * used to start a new VM.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param image_names - on success, contains a NULL-terminated
+ *                      list of image names.
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_image_list(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_VimResources **images);
+
+/*
+ * Delete Image.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param image_id    - id of image to be deleted
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_delete_image(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char * image_id);
+
+/*
+ * Create a flavor.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param flavor      - rwpb_gi_Rwcal_FlavorInfoItem object describing the
+ *                      flavor to be created
+ * @param flavor_id   - on success, contains a NULL-terminated string containing the new flavor_id
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_create_flavor(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_FlavorInfoItem *flavor,
+    char *flavor_id);
+
+
+/*
+ * Delete flavor.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param flavor_id   - id of flavor to be deleted
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_delete_flavor(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char * flavor_id);
+
+/*
+ * Get a specific flavor
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param flavor_id   - id of the flavor to return
+ * @param flavir      - rwpb_gi_Rwcal_FlavorInfoItem object containing the
+ *                      details of the requested flavor
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_flavor(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char * flavor_id,
+    rwpb_gi_Rwcal_FlavorInfoItem **flavor);
+
+/*
+ * Get a list of the details for all flavors
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param flavors     - on success, contains a list of flavor info objects
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_flavor_list(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_VimResources **flavors);
+
+/*
+ * Create a virtual machine.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param vm          - the information that defines what kind of VM will be
+ *                      created
+ * @param vm_id       - on success, contains a NULL-terminated string
+ *                      containing the new vm id
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_create_vm(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_VMInfoItem *vm,
+    char **vm_id);
+
+/*
+ * Delete VM.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param vm_id       - id of vm to be deleted
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_delete_vm(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char * vm_id);
+
+/*
+ * Reboot VM.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param vm_id       - id of vm to be deleted
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_reboot_vm(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char * vm_id);
+
+/*
+ * Start VM.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param vm_id       - id of a vm to start
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_start_vm(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char * vm_id);
+
+/*
+ * Stop VM.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param vm_id       - id of a vm to stop
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_stop_vm(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char * vm_id);
+
+/*
+ * Get a list of the names of the available vms
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param vms         - on success, contains a NULL-terminated
+ *                      list of vms.
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_vm_list(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_VimResources** vms);
+
+/*
+ * Create a tenant.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param tenant_name - name to assign to the tenant.
+ * @param tenant_info - on success, contains a NULL-terminated list of tenant_info
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_create_tenant(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char * tenant_name,
+    char *** tenant_info);
+
+/*
+ * Delete tenant.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param tenant_id   - id of tenant to be deleted
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_delete_tenant(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char * tenant_id);
+
+/*
+ * Get a list of the available tenants
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param tenants     - on success, contains a NULL-terminated
+ *                      list of tenants.
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_tenant_list(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_VimResources **tenants);
+
+/*
+ * Create a role.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param role_name   - name to assign to the role.
+ * @param role_info   - on success, contains a NULL-terminated list of role_info
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_create_role(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char * role_name,
+    char *** role_info);
+
+/*
+ * Delete role.
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param role_id     - id of role to be deleted
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_delete_role(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char * role_id);
+
+/*
+ * Get a list of the available roles
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param roles       - on success, contains a NULL-terminated
+ *                      list of roles.
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_role_list(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_VimResources **roles);
+
+/*
+ * Add a new host
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param host        - host info
+ * @param host_id     - on success, contains a NULL-terminated string
+ *                      containing the new host_id
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_add_host(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_HostInfoItem *host,
+    char **host_id);
+
+/*
+ * Remove a new host
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param host_id     - the id of the host to remove
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_remove_host(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char *host_id);
+
+/*
+ * Get a specific host
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param host_id     - the id of the host to return
+ * @param host        - the requested host info
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_host(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char *host_id,
+    rwpb_gi_Rwcal_HostInfoItem **host);
+
+/*
+ * Get a list of hosts
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param hosts       - on success, contains a NULL-terminated list of hosts.
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_host_list(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_VimResources **hosts);
+
+/*
+ * Create a new port
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param port        - port info
+ * @param port_id     - on success, contains a NULL-terminated string
+ *                      containing the new port id
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_create_port(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_PortInfoItem *port,
+    char **port_id);
+
+/*
+ * Delete a port
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param port_id     - the id of the port to remove
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_delete_port(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char *port_id);
+
+/*
+ * Get a specific port
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param port_id     - the id of the port to return
+ * @param port        - the requested port info
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_port(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char *port_id,
+    rwpb_gi_Rwcal_PortInfoItem **port);
+
+/*
+ * Get a list of ports
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param ports       - on success, contains a NULL-terminated list of ports.
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_port_list(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_VimResources **ports);
+
+/*
+ * Create a new network
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param network     - network info
+ * @param network_id  - on success, contains a NULL-terminated string
+ *                      containing the new network id
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_create_network(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_NetworkInfoItem *network,
+    char **network_id);
+
+/*
+ * Delete a network
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param network_id  - the id of the network to remove
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_delete_network(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char *network_id);
+
+/*
+ * Get a specific network
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param network_id  - the id of the network to return
+ * @param network     - the requested network info
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_network(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    const char *network_id,
+    rwpb_gi_Rwcal_NetworkInfoItem **network);
+
+/*
+ * Get a the management network
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param network     - the management network info
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_management_network(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_NetworkInfoItem **network);
+
+/*
+ * Get a list of networks
+ *
+ * @param rwcal       - module handle.
+ * @param account     - cloud account information.
+ * @param networks    - on success, contains a NULL-terminated list of networks.
+ *
+ * @return            - rw_status_t
+ */
+rw_status_t rwcal_get_network_list(
+    rwcal_module_ptr_t rwcal,
+    rwpb_gi_Rwcal_CloudAccount *account,
+    rwpb_gi_Rwcal_VimResources **networks);
+
+/*
+ * Get a RwLog Context so that log messages can go to rwlog
+ *
+ * @param rwcal       - module handle.
+ *
+ * @return            - rwlog_ctx_t
+ */
+rwlog_ctx_t *rwcal_get_rwlog_ctx(rwcal_module_ptr_t rwcal);
+
+__END_DECLS
+
+#endif
+
+