Late last year, Oracle announced the availability of their Bare Metal Cloud IAAS to the world. The Bare Metal Cloud (BMC) combines physical instances combined with a fully virtualized networking infrastructure that emulates a traditional datacenter, but with the convenience and agility that infrastructure as a service provides. With non-virtualized compute and microsecond inter-host network latency, the BMC is particularly suited to demanding high performance workloads. For the latest on the bare metal cloud, see the Oracle website. This post covers the Cloudify integration with the Oracle BMC.
The Cloudify Oracle BMC Plugin
Like all IAAS plugins for Cloudify, the BMC plugin maps nouns in the underlying IAAS API to TOSCA types, and the verbs get mapped to orchestrator lifecycle events (e.g. "create" and "configure"). The current version of the BMC plugin only addresses compute and networking domains of the BMC SDK. The plugin provides the ability to orchestrate instances (both bare metal and virtual), along with related networking components such as networks, subnets, security, and Internet gateways.
The following components and relationships are supported:
This represents a compute node, either bare metal or virtual (based on the "instance_shape") property. It accepts configuration properties such as image_id, instance_shape, compartment_id, and availability_domain. After the install workflow is complete, the instance will have attributes public_ip and private_ip. It is connected to a subnet (described below), via the cloudify.oraclebmc.relationships.instance_connected_to_subnet relationship.
This node type represents a network. The main unique configuration property is the network cidr_block, from which subnets are carved out.
This node type represents a subnet network. This node is configured with a cidr_block and security_list, among other properties. cidr_block represents the portion of the VNC network CIDR block, and the security_list is a list of firewall rules. It is associated with a target network via the cloudify.oraclebmc.relationships.subnet_in_network relationship.
This node represents an internet gateway. It is configured with a list of routing rules, which amounts to an internet firewall. It is associated with a target network via the cloudify.oraclebmc.relationships.gateway_connected_to_network relationship.
A simple, single instance sample blueprint can be found in the plugin examples directory. Bear in mind that it, and the other example mentioned later, rely on images that have firewalld disabled.
node_templates: server: type: cloudify.oraclebmc.nodes.Instance properties: install_agent: false bmc_config: *bmc_config public_key_file: 'somekey.pub' ...
When used with Cloudify Manager, the plugin must be installed via the cfy plugins upload method. A wgn package is included in the repo. The plugin currently only addresses compute and networking aspects of the cloud API. Future revisions will expand support to other aspects such as storage.
The Cloudify Oracle BMC Manager Blueprint
In order to fully support Cloudify orchestration capabilities, a Cloudify Manager is needed. In the examples/manager directory, there is a Cloudify manager blueprint that supports the Oracle Bare Metal Cloud. This blueprint is used to bootstrap a Cloudify manager in a similar fashion to manager blueprints for other clouds. The blueprint inputs file has a description of the settings needed.
The image used must be a Centos 7 image on an instance shape with at least 8GB of RAM. The image must have firewalld (enabled by default) disabled. You'll need Oracle BMC API credentials as well. The blueprints directory contains the file oracle--agent.tar.gz. After manager bootstrap, this file should be added to the /opt/manager/resources/packages/agents directory, if you'll be running agents on Oracle Linux machines.
cfy bootstrap --install-plugins -p oracle-bmc-manager-blueprint.yaml -i oracle-bmc-manager-blueprint-inputs.yaml
After the bootstrap is complete, you can upload blueprints and have full Cloudify Manager functionality.
Oracle has bridged the gap between conventional data centers and the Cloud by providing an infrastructure-as-a-service interface to bare metal servers, while retaining the flexibility of virtual networking. Now this powerful environment has been added to the ever-growing Cloudify family of supported clouds. As always, the code and examples are available on GitHub.