{"id":46053,"date":"2015-04-16T17:02:26","date_gmt":"2015-04-16T14:02:26","guid":{"rendered":"https:\/\/www.altoros.com\/blog\/?p=46053"},"modified":"2019-08-15T16:01:16","modified_gmt":"2019-08-15T13:01:16","slug":"how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/","title":{"rendered":"How to Add BOSH Support to a Custom Cloud (Part 1): BOSH Components"},"content":{"rendered":"<p><center><\/p>\n<p><b>Part 1<\/b> | <a href=\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-2-external-bosh-cpis\/\">Part 2<\/a><\/p>\n<p><\/center><\/p>\n<p>The Cloud Foundry PaaS was designed to provide cross-cloud portability and compatibility. BOSH is the official orchestration and deployment tool for CF that makes these features possible. Currently, there is a set of cloud platforms that are able to work with BOSH, but it can be extended to work with clouds that are not on this list.<\/p>\n<p>In this blog series, we&#8217;ll go through all the steps necessary to add BOSH support for a new cloud: from CPI implementation to generating a stemcell.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#The_process_in_a_nutshell\" >The process in a nutshell<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#BOSH_components_and_relations_between_them\" >BOSH components and relations between them<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#Understanding_MicroBOSH\" >Understanding MicroBOSH<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#Issues_to_solve_beforehand\" >Issues to solve beforehand<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#Next_an_external_BOSH_CPI\" >Next: an external BOSH CPI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#Further_reading\" >Further reading<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"The_process_in_a_nutshell\"><\/span>The process in a nutshell<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>In the recent years, the BOSH team have been working on an external CPI mechanism that will make adding BOSH support to new IaaS systems quicker. Still, implementing the full stack of solutions to accomplish this is rather difficult. The BOSH project is evolving very rapidly, so it is hard to find up-to-date information about it. There is also no explicit description of the full process for creating a BOSH CPI in available publications.<\/p>\n<p>Enabling BOSH support for a new cloud is a large topic, so we&#8217;ve divided it into three parts:<\/p>\n<ol>\n<li style=\"margin-bottom: 6px;\"><strong>Understanding BOSH Essentials.<\/strong> This part covers some necessary background information on BOSH, as well as the requirements to your cloud infrastructure. You can skip it, if you already understand BOSH releases, CPI, stemcells, and MicroBOSH.<\/li>\n<li style=\"margin-bottom: 6px;\"><strong>Creating an External BOSH CPI.<\/strong> This blog post will describe how to implement a BOSH CPI in the most modern way and say a few words about the new way to bootstrap your cloud with MicroBOSH using the bosh-init (bosh-micro-cli) project.<\/li>\n<li><strong>Building a Stemcell for a New IaaS.<\/strong> Currently, building stemcells for new infrastructures is not an easy task due to lots of reasons. This post will help you to cope with the issues that you are likely to encounter.<\/li>\n<\/ol>\n<p>So, let\u2019s get to know the BOSH components better. Here, we&#8217;re using the BOSH version 1.2922.0.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"BOSH_components_and_relations_between_them\"><\/span>BOSH components and relations between them<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>If you are a beginner, we strongly recommend that you look through this <a href=\"https:\/\/bosh.io\/docs\/\/bosh-components.html\" target=\"_blank\" rel=\"noopener noreferrer\">documentation page<\/a> and get familiar with the BOSH components before you start.<\/p>\n<p>A <strong>BOSH release<\/strong> is a package that defines how software is compiled and how it should be run. So, it determines how sources are compiled, how templates are rendered, etc.<\/p>\n<p>A <strong>job<\/strong> is an execution unit for BOSH. In fact, a job is a virtual machine where software from BOSH releases is executed. Jobs can contain content from several different releases.<\/p>\n<p><strong>BOSH CPI<\/strong> stands for BOSH Cloud Provider Interface. It is a programmatic wrapper between BOSH and the API of a specific IaaS. A BOSH CPI implements a list of methods defined by the <a href=\"https:\/\/github.com\/cloudfoundry\/bosh\/blob\/main\/bosh_cpi\/lib\/cloud.rb\" target=\"_blank\" rel=\"noopener noreferrer\">cloud<\/a> class, such as <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">create_vm<\/code>, <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">create_disk<\/code>, <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">attach_disk<\/code>, etc. Originally, the CPI was implemented as a Ruby gem and a built-in BOSH project, but an <a href=\"https:\/\/groups.google.com\/a\/cloudfoundry.org\/forum\/#!searchin\/bosh-dev\/persistent$20disk\/bosh-dev\/8CkDk20aDU4\/rrbJxsMHwCoJ\" target=\"_blank\" rel=\"noopener noreferrer\">external CPI mechanism<\/a> has recently become available.<\/p>\n<p>A <strong>stemcell<\/strong> is another cloud-specific BOSH component. In BOSH terminology, a stemcell is a cloud- or hypervisor-specific image that contains a pre-installed BOSH agent with associated packages, folder structure, groups, and users. These support the operation of BOSH inside an instance. In fact, every instance performing a BOSH job is created from a stemcell image. We will take a look at stemcell internals in the upcoming articles.<\/p>\n<p><strong>MicroBOSH<\/strong> is an official way to bootstrap a cloud with a BOSH installation limited to one instance. The term MicroBOSH is often used to refer to a single-instance deployment of BOSH. The main idea behind deploying MicroBOSH is to use BOSH itself to install BOSH components (more detail will be provided below).<\/p>\n<p>The following diagram shows the relations between all these parts.<\/p>\n<p><center><a href=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/08\/how-to-add-bosh-support-to-a-custom-cloud1.png\"><img decoding=\"async\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/08\/how-to-add-bosh-support-to-a-custom-cloud1.png\" alt=\"\" width=\"640\" class=\"aligncenter size-full wp-image-46055\" \/><\/a><\/center><\/p>\n<p>So, if you decided to run BOSH on a new cloud, you will need to implement two things: a BOSH CPI and a stemcell builder. The CPI uses stemcells in its methods, such as <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">create_stemcell<\/code> and <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">create_vm<\/code>. The stemcell contains a MicroBOSH release with a CPI for the target cloud (the reason is described below). This cross-dependency causes lots of issues during development. In our upcoming posts, we are going to explain how to solve these issues.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Understanding_MicroBOSH\"><\/span>Understanding MicroBOSH<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Since MicroBOSH is used to install BOSH, you need to know how MicroBOSH works before you start implementing the CPI and building a stemcell for your cloud.<\/p>\n<p>The standard MicroBOSH deployer is implemented as a <a href=\"https:\/\/github.com\/cloudfoundry\/bosh\/tree\/master\/bosh_cli_plugin_micro\" target=\"_blank\" rel=\"noopener noreferrer\">BOSH CLI plugin<\/a>. You can read about BOSH CLI plugins and how they work in our previous <a href=\"https:\/\/www.altoros.com\/blog\/cloud-foundry-internals-how-to-create-custom-bosh-cli-plugins\/\">blog post<\/a>. Almost the entire process of deployment is <a href=\"https:\/\/github.com\/cloudfoundry\/bosh\/blob\/main\/bosh_cli_plugin_micro\/lib\/bosh\/deployer\/instance_manager.rb\" target=\"_blank\" rel=\"noopener noreferrer\">declared<\/a> in the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">create<\/code> method of the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">InstanceManager<\/code> class. This process requires a MicroBOSH release to be built into the stemcell.<\/p>\n<p>Let\u2019s see how MicroBOSH works in case of OpenStack:<\/p>\n<ol>\n<li style=\"margin-bottom: 6px;\">First of all, you need to specify the stemcell and the manifest\u2014the way it is described in documentation.<\/li>\n<li style=\"margin-bottom: 6px;\">When a user runs <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">bosh micro deploy<\/code>, this triggers the <a href=\"https:\/\/github.com\/cloudfoundry\/bosh\/blob\/master\/bosh_cli_plugin_micro\/lib\/bosh\/deployer\/instance_manager.rb#L28\" target=\"_blank\" rel=\"noopener noreferrer\">create_deployment<\/a> method of InstanceManager and then the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">create<\/code> method is called.<\/li>\n<li style=\"margin-bottom: 6px;\">Inside the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">create<\/code> method, the <a href=\"https:\/\/github.com\/cloudfoundry\/bosh\/blob\/master\/bosh_openstack_cpi\/lib\/cloud\/openstack\/cloud.rb#L130\" target=\"_blank\" rel=\"noopener noreferrer\">create_stemcell<\/a> CPI method is executed:\n<ul style=\"padding-left:20px;\">\n<li style=\"margin-bottom: 6px;\">It takes an image file as a parameter and unpacks it to the <a href=\"https:\/\/github.com\/cloudfoundry\/bosh\/blob\/master\/bosh_openstack_cpi\/lib\/cloud\/openstack\/cloud.rb#L159\" target=\"_blank\" rel=\"noopener noreferrer\">root.img<\/a> file located in a temp folder.<\/li>\n<li style=\"margin-bottom: 6px;\">Using the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">glance<\/code> service of the fog library, it creates an <a href=\"https:\/\/github.com\/cloudfoundry\/bosh\/blob\/master\/bosh_openstack_cpi\/lib\/cloud\/openstack\/cloud.rb#L165\" target=\"_blank\" rel=\"noopener noreferrer\">image<\/a> from the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">root.img<\/code> file.<\/li>\n<li>After the image has been created, the image ID is returned to BOSH.<\/li>\n<\/ul>\n<\/li>\n<li style=\"margin-bottom: 6px;\">Then, the <a href=\"https:\/\/github.com\/cloudfoundry\/bosh\/blob\/master\/bosh_openstack_cpi\/lib\/cloud\/openstack\/cloud.rb#L215\" target=\"_blank\" rel=\"noopener noreferrer\">create_vm<\/a> CPI is called. This method creates a VM using the image ID that was returned after the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">create_stemcell<\/code> invocation.<\/li>\n<li style=\"margin-bottom: 6px;\">After this step, BOSH waits for the agent to be run on the VM.<\/li>\n<li style=\"margin-bottom: 6px;\">At this stage, the BOSH agent on the new VM <a href=\"https:\/\/github.com\/cloudfoundry\/bosh\/blob\/master\/bosh_cli_plugin_micro\/lib\/bosh\/deployer\/instance_manager.rb#L392\" target=\"_blank\" rel=\"noopener noreferrer\">gets a request<\/a> to build a MicroBOSH release that is stored in the local file system of the VM. Instructions (or specs) for building a MicroBOSH release are stored in a stemcell file. They are passed to the agent by the BOSH Micro CLI plugin.<\/li>\n<li>After the agent is done, MicroBOSH waits for the BOSH Director to finish his jobs, and the deployment is over.<\/li>\n<\/ol>\n<p>The concept of MicroBOSH deployment is not so straightforward, but it\u2019s not too hard to see how it works. Anyway, things are going to change soon with the new <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">bosh-micro-cli<\/code> tool that will be released in near future. You can find more about <a href=\"https:\/\/groups.google.com\/a\/cloudfoundry.org\/forum\/#!topic\/bosh-dev\/ApIY-I5aqTg\" target=\"_blank\" rel=\"noopener noreferrer\">bosh-micro-cli<\/a> in <a href=\"https:\/\/groups.google.com\/a\/cloudfoundry.org\/forum\/#!topic\/bosh-dev\/ApIY-I5aqTg\" target=\"_blank\" rel=\"noopener noreferrer\">this conversation<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Issues_to_solve_beforehand\"><\/span>Issues to solve beforehand<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>After you get an understanding of BOSH basics, you\u2019ll probably want to take a look at your infrastructure and check if it has all the necessary features. We suppose, your cloud is ready to perform such basic functions as creating and running VMs. What else will we need? Dealing with infrastructures of our customers, we have met several typical issues related to clouds that want to add BOSH support.<\/p>\n<p>First of all, some clouds have difficulties with creating new <strong>custom images<\/strong>. By \u201ccustom image,\u201d we mean a template for a bootable system disk that will become a VM. This is how we create stemcells. The stemcell is generated with a special builder, which is a part of the BOSH project. This is done to ensure that BOSH components will work in an environment with specific binary libraries. The way the stemcell builder is implemented implies that your cloud can use a file as a \u201ccustom image.\u201d In case of OpenStack, this is the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">.qcow2<\/code> file format built using the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">qemu-img<\/code> tool. vSphere uses the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">vmdk<\/code> files built with the <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">ovftool<\/code> utility. If you can\u2019t use the same workflow, you will need to implement \u201clightweight\u201d stemcells. We\u2019ll provide more details on this solution in the upcoming posts.<\/p>\n<p>Second, BOSH saves data to <strong>persistent disks<\/strong>. This means the data is retained after an instance has been rebooted. It is possible to make BOSH work with clouds without persistent disks, but such a deployment will be unstable. For instance, you can take a look at this <a href=\"https:\/\/twitter.com\/angilly\/status\/401412176566427648\" target=\"_blank\" rel=\"noopener noreferrer\">Twitter discussion<\/a> about BOSH support for DigitalOcean.<\/p>\n<p>There are also some optional features, e.g., sometimes it is useful for BOSH to write data to a <strong>metadata service<\/strong>. A metadata service helps BOSH to optimize the working process and use tags and names for instances. Such services are implemented in the most popular infrastructures, e.g., <a href=\"https:\/\/docs.aws.amazon.com\/AWSEC2\/latest\/UserGuide\/ec2-instance-metadata.html\" target=\"_blank\" rel=\"noopener noreferrer\">AWS<\/a>, <a href=\"https:\/\/docs.openstack.org\/yoga\/admin\/\" target=\"_blank\" rel=\"noopener noreferrer\">OpenStack<\/a>, and <a href=\"https:\/\/cloud.google.com\/compute\/docs\/metadata\/overview\" target=\"_blank\" rel=\"noopener noreferrer\">GCE<\/a>. This is an optional requirement for BOSH deployment. In fact, using a metadata service for sensitive data in public clouds can be dangerous. You can avoid it altogether by relying on a <a href=\"https:\/\/github.com\/cloudfoundry\/bosh\/tree\/master\/bosh-registry\" target=\"_blank\" rel=\"noopener noreferrer\">BOSH registry<\/a>.<\/p>\n<p><strong>Blob storage<\/strong> is another a nice-to-have feature for your cloud. This is where BOSH stores compiled packages used by jobs. The AWS CPI uses the S3 service as blob storage, while Swift is used in case of the OpenStack CPI. This doesn\u2019t mean you cannot run BOSH without blob store support. There are different substitutions for it, e.g., the BOSH project has a simple built-in <a href=\"https:\/\/github.com\/cloudfoundry\/bosh\/tree\/master\/simple_blobstore_server\" target=\"_blank\" rel=\"noopener noreferrer\">blob store server<\/a>.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Next_an_external_BOSH_CPI\"><\/span>Next: an external BOSH CPI<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>By now, you should be familiar with the basic BOSH terminology and how BOSH interacts with different IaaS systems. In the upcoming posts, we will go through the steps for creating an external BOSH CPI module and building a stemcell for a new cloud.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Further_reading\"><\/span>Further reading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-2-external-bosh-cpis\/\">How to Add BOSH Support to a Custom Cloud (Part 2): External BOSH CPIs<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/building-a-custom-bosh-cpi-for-the-cloud-foundry-paas-a-gce-example\/\">Building a Custom BOSH CPI for the Cloud Foundry PaaS: A GCE Example<\/a><\/li>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/creating-a-custom-cloud-foundry-buildpack-from-scratch-whats-under-the-hood\/\">Creating a Custom Cloud Foundry Buildpack from Scratch: What\u2019s Under the Hood<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<\/p>\n<p>Part 1 | Part 2<\/p>\n<\/p>\n<p>The Cloud Foundry PaaS was designed to provide cross-cloud portability and compatibility. BOSH is the official orchestration and deployment tool for CF that makes these features possible. Currently, there is a set of cloud platforms that are able to work with BOSH, but it can be [&#8230;]<\/p>\n","protected":false},"author":35,"featured_media":46069,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[214],"tags":[873,206],"class_list":["post-46053","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-cloud-native","tag-oss-cloud-foundry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>How to Add BOSH Support to a Custom Cloud (Part 1): BOSH Components | Altoros<\/title>\n<meta name=\"description\" content=\"With a step-by-step instructions, learn how to establish relations between BOSH components, enable MicroBOSH on OpenStack, etc.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Add BOSH Support to a Custom Cloud (Part 1): BOSH Components | Altoros\" \/>\n<meta property=\"og:description\" content=\"Part 1 | Part 2 The Cloud Foundry PaaS was designed to provide cross-cloud portability and compatibility. BOSH is the official orchestration and deployment tool for CF that makes these features possible. Currently, there is a set of cloud platforms that are able to work with BOSH, but it can be [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2015-04-16T14:02:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-15T13:01:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2015\/04\/how-to-add-bosh-support-to-a-custom-cloud-featured-image-copy-v1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"269\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Alexander Lomov\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alexander Lomov\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/\",\"name\":\"How to Add BOSH Support to a Custom Cloud (Part 1): BOSH Components | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2015\/04\/how-to-add-bosh-support-to-a-custom-cloud-featured-image-copy-v1.png\",\"datePublished\":\"2015-04-16T14:02:26+00:00\",\"dateModified\":\"2019-08-15T13:01:16+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/32bad30d8a66fbba345c09f5ce9503a6\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2015\/04\/how-to-add-bosh-support-to-a-custom-cloud-featured-image-copy-v1.png\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2015\/04\/how-to-add-bosh-support-to-a-custom-cloud-featured-image-copy-v1.png\",\"width\":640,\"height\":269},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Add BOSH Support to a Custom Cloud (Part 1): BOSH Components\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\",\"url\":\"https:\/\/www.altoros.com\/blog\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.altoros.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/32bad30d8a66fbba345c09f5ce9503a6\",\"name\":\"Alexander Lomov\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/Alexander-Lomov-150x150.jpg\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/Alexander-Lomov-150x150.jpg\",\"caption\":\"Alexander Lomov\"},\"description\":\"Alexander Lomov is a Cloud Foundry Engineer at Altoros. With extensive experience in Ruby, Go, and Python, he was involved in development of BOSH CPIs and other Cloud Foundry-related projects for Canonical, IBM, and other companies. Alexander is a frequent speaker at various events\/meetups, mostly sharing his experience with Cloud Foundry. You may also know him as the author of several blog posts about Cloud Foundry internals.\",\"sameAs\":[\"http:\/\/altoros.com\"],\"url\":\"https:\/\/www.altoros.com\/blog\/author\/alexander-lomov\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to Add BOSH Support to a Custom Cloud (Part 1): BOSH Components | Altoros","description":"With a step-by-step instructions, learn how to establish relations between BOSH components, enable MicroBOSH on OpenStack, etc.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/","og_locale":"en_US","og_type":"article","og_title":"How to Add BOSH Support to a Custom Cloud (Part 1): BOSH Components | Altoros","og_description":"Part 1 | Part 2 The Cloud Foundry PaaS was designed to provide cross-cloud portability and compatibility. BOSH is the official orchestration and deployment tool for CF that makes these features possible. Currently, there is a set of cloud platforms that are able to work with BOSH, but it can be [...]","og_url":"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/","og_site_name":"Altoros","article_published_time":"2015-04-16T14:02:26+00:00","article_modified_time":"2019-08-15T13:01:16+00:00","og_image":[{"width":640,"height":269,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2015\/04\/how-to-add-bosh-support-to-a-custom-cloud-featured-image-copy-v1.png","type":"image\/png"}],"author":"Alexander Lomov","twitter_misc":{"Written by":"Alexander Lomov","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/","url":"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/","name":"How to Add BOSH Support to a Custom Cloud (Part 1): BOSH Components | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2015\/04\/how-to-add-bosh-support-to-a-custom-cloud-featured-image-copy-v1.png","datePublished":"2015-04-16T14:02:26+00:00","dateModified":"2019-08-15T13:01:16+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/32bad30d8a66fbba345c09f5ce9503a6"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2015\/04\/how-to-add-bosh-support-to-a-custom-cloud-featured-image-copy-v1.png","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2015\/04\/how-to-add-bosh-support-to-a-custom-cloud-featured-image-copy-v1.png","width":640,"height":269},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/how-to-add-bosh-support-to-a-custom-cloud-part-1-bosh-components\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Add BOSH Support to a Custom Cloud (Part 1): BOSH Components"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/32bad30d8a66fbba345c09f5ce9503a6","name":"Alexander Lomov","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/Alexander-Lomov-150x150.jpg","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2016\/12\/Alexander-Lomov-150x150.jpg","caption":"Alexander Lomov"},"description":"Alexander Lomov is a Cloud Foundry Engineer at Altoros. With extensive experience in Ruby, Go, and Python, he was involved in development of BOSH CPIs and other Cloud Foundry-related projects for Canonical, IBM, and other companies. Alexander is a frequent speaker at various events\/meetups, mostly sharing his experience with Cloud Foundry. You may also know him as the author of several blog posts about Cloud Foundry internals.","sameAs":["http:\/\/altoros.com"],"url":"https:\/\/www.altoros.com\/blog\/author\/alexander-lomov\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/46053","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=46053"}],"version-history":[{"count":13,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/46053\/revisions"}],"predecessor-version":[{"id":46075,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/46053\/revisions\/46075"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/46069"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=46053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=46053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=46053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}