{"id":11599,"date":"2017-09-30T22:44:44","date_gmt":"2017-09-30T20:44:44","guid":{"rendered":"https:\/\/blog.zhaw.ch\/icclab\/?p=11599"},"modified":"2019-08-05T14:35:06","modified_gmt":"2019-08-05T12:35:06","slug":"migrate-openshift-applications-with-os2os","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/","title":{"rendered":"Migrate OpenShift applications with os2os"},"content":{"rendered":"\n<p>by <a href=\"https:\/\/blog.zhaw.ch\/icclab\/josef-spillner\/\">Josef Spillner<\/a><\/p>\n\n\n<p>One of the desirable properties which users expect in a modern cloud-hosted application is portability. Users want to migrate portable applications between private and public clouds or between different cloud regions. With container images as portable application implementations and emerging <a href=\"https:\/\/arxiv.org\/abs\/1708.08399\">sophisticated container runtimes<\/a>, this should be an easy task. But when a containerised application starts to become more complex, a container platform or an orchestration tool needs to be deployed. This add specifics blueprints and together with the persistent data makes the migration of the application tough. This means that the application is not in a condition to be moved as easily between clouds or even between the orchestration tools or container platforms, losing the desirable portability property. With the idea in mind that the next generation of <a href=\"https:\/\/blog.zhaw.ch\/icclab\/category\/research-approach\/themes\/cloud-native-applications\/\">Cloud-Native Applications<\/a> must be deployable to different cloud providers as the requirements change, we are proud to announce the first proof of concept release of <strong>os2os<\/strong>, a tool to migrate cloud-native applications between <a href=\"https:\/\/www.openshift.com\/\">OpenShift<\/a> installations. While our research on application migration is not limited to this single container platform, we see it as one of the more popular and technically interesting ones.<\/p>\n<p><!--more--><\/p>\n<p><strong>Description of the tool<\/strong><\/p>\n<p>As other successful tools in the containers ecosystem (<a href=\"https:\/\/www.docker.com\/\">Docker<\/a>, <a href=\"https:\/\/docs.docker.com\/engine\/swarm\/\">Docker Swarm<\/a>, <a href=\"https:\/\/kubernetes.io\/\">Kubernetes<\/a>, <a href=\"http:\/\/kompose.io\/\">Kompose<\/a>, &#8230;), os2os is implemented using the <a href=\"https:\/\/golang.org\/\">Go<\/a> programming language, opening the path towards sharing features and libraries. The Go library <a href=\"https:\/\/github.com\/spf13\/cobra\">Cobra<\/a> is used to produce a user-friendly command line interface. Internally, os2os uses the openshift command-line tool, oc, which is supposed to be pre-installed, a reasonable assumption for any user wanting to migrate between OpenShift clusters.<\/p>\n<p>Kompose is a tool which also contributes to solving the portability problem. In this case, Kompose translates Docker Compose files to Kubernetes resources. It is one of the most \u201cstarred or liked\u201d repositories according to the Kubernetes Github page. Trying to be consistent with tools which are tackling comparable problems and making the use easy for e.g. existing Kompose users, os2os offers similar commands which can be learned in few minutes.<\/p>\n<p>In this first version of os2os, users can access these three commands:<\/p>\n<ul>\n<li>os2os export: Download the templates of all the objects or resources of your project.<\/li>\n<li>os2os down: Delete a project in your old OpenShift project or cluster.<\/li>\n<li>os2os up: Deploy a project in your new OpenShift project or cluster.<\/li>\n<\/ul>\n<p>In all the commands, users can configure flags such as project name, clusters or the objects to migrate.<\/p>\n<p><strong>Simple example<\/strong><\/p>\n<p>In this example, we show how to migrate a simple application consisting of a single deployment and a single service between two OpenShift clusters using the three implemented commands. Our demonstration environment includes two local VM-hosted OpenShift clusters which were produced with the command oc up. The scenario service arkisdocument has been taken from a <a href=\"https:\/\/blog.zhaw.ch\/icclab\/cloud-native-microservices-reference-architecture\/\">cloud-native reference application<\/a>. The obligatory screenshot below shows the initial project screen within OpenShift.<\/p>\n<p><a href=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11610 size-full\" src=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png\" alt=\"\" width=\"2210\" height=\"872\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png 2210w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service-300x118.png 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service-768x303.png 768w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service-1024x404.png 1024w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service-500x197.png 500w\" sizes=\"auto, (max-width: 2210px) 100vw, 2210px\" \/><\/a>Once you have installed the binary os2os you can start to use it. To see all the commands and flags, just run os2os or os2os help. The next screenshot shows the ensuing help page.<\/p>\n<p><a href=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-frontpage.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11609 size-full\" src=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-frontpage.png\" alt=\"\" width=\"1672\" height=\"974\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-frontpage.png 1672w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-frontpage-300x175.png 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-frontpage-768x447.png 768w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-frontpage-1024x597.png 1024w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-frontpage-500x291.png 500w\" sizes=\"auto, (max-width: 1672px) 100vw, 1672px\" \/><\/a>Next, using the configuration file, export the current objects to your local computer into the current directory. You can filter objects. In the example shown in the next screenshot, only services and deployments are being migrated.<\/p>\n<p><a href=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-export.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11608 size-full\" src=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-export.png\" alt=\"\" width=\"938\" height=\"482\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-export.png 938w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-export-300x154.png 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-export-768x395.png 768w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-export-500x257.png 500w\" sizes=\"auto, (max-width: 938px) 100vw, 938px\" \/><\/a>Once the export has finished, the same application is reinstantiated at the target system. Again, the relevant objects can be filtered.<\/p>\n<p><a href=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-up.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11611 size-full\" src=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-up.png\" alt=\"\" width=\"1014\" height=\"412\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-up.png 1014w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-up-300x122.png 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-up-768x312.png 768w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-up-500x203.png 500w\" sizes=\"auto, (max-width: 1014px) 100vw, 1014px\" \/><\/a>The last step depends on the migration semantics being a copy or move migration. In the case of a move, the previous instance shall be deleted. Hence, the last command deletes all objects from the source system. Executing all the commands in order (as shown in the screenshots), the commands export, up and down migrate this application statelessly between two clusters.<\/p>\n<p><a href=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-down.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11607 size-full\" src=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-down.png\" alt=\"\" width=\"934\" height=\"388\" srcset=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-down.png 934w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-down-300x125.png 300w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-down-768x319.png 768w, https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-down-500x208.png 500w\" sizes=\"auto, (max-width: 934px) 100vw, 934px\" \/><\/a><strong>Conclusion<\/strong><\/p>\n<p>With this proof of concept prototype, we have released just a first version of the tool which can migrate only stateless applications without loss of functionality. Currently, we are working on more useful features such as migrating the associated data of the application or <a href=\"https:\/\/blog.zhaw.ch\/icclab\/rightsizing-kubernetes-applications\/\">right-sizing<\/a> the application to fit into the constraints of the target environment (we already implemented an example of this feature for Kubernetes applications) or the command convert which can help to change some features of the objects before deploying them into the target cluster.<\/p>\n<p>This tool is designed to work together with others in a set of tools for migrating applications not only between the container platforms but also including orchestration tools such as Docker Swarm and Kubernetes. We are continuing our investigation in the context of seamless application onboarding to the <a href=\"https:\/\/appuio.ch\/\">APPUiO<\/a> Swiss container platform which operates a production-grade OpenShift environment.<\/p>\n<p>Finally you can find os2os in our Git <a href=\"https:\/\/github.com\/serviceprototypinglab\/os2os\">repository<\/a>. We encourage you to use it and give us your <a href=\"https:\/\/blog.zhaw.ch\/icclab\/manuel-ramirez-lopez\/\">feedback<\/a> and other comments or ideas about what could be useful for you.<\/p><div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/cloud-native-application\/\">cloud-native application<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/cna\/\">CNA<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/containers\/\">containers<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/multi-cloud\/\">multi-cloud<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/onboarding\/\">Onboarding<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/open-source\/\">open source<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/openshift\/\">openshift<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>One of the desirable properties which users expect in a modern cloud-hosted application is portability. Users want to migrate portable applications between private and public clouds or between different cloud regions. With container images as portable application implementations and emerging sophisticated container runtimes, this should be an easy task. But when a containerised application starts [&hellip;]<\/p>\n","protected":false},"author":486,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[558,770,609,878,841,684,238],"features":[],"class_list":["post-11599","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-cloud-native-application","tag-cna","tag-containers","tag-multi-cloud","tag-onboarding","tag-open-source","tag-openshift"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Migrate OpenShift applications with os2os - Service Engineering (ICCLab &amp; SPLab)<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migrate OpenShift applications with os2os\" \/>\n<meta property=\"og:description\" content=\"One of the desirable properties which users expect in a modern cloud-hosted application is portability. Users want to migrate portable applications between private and public clouds or between different cloud regions. With container images as portable application implementations and emerging sophisticated container runtimes, this should be an easy task. But when a containerised application starts [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2017-09-30T20:44:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-05T12:35:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png\" \/>\n<meta name=\"author\" content=\"icclab\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"icclab\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/\"},\"author\":{\"name\":\"icclab\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563\"},\"headline\":\"Migrate OpenShift applications with os2os\",\"datePublished\":\"2017-09-30T20:44:44+00:00\",\"dateModified\":\"2019-08-05T12:35:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/\"},\"wordCount\":822,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png\",\"keywords\":[\"cloud-native application\",\"CNA\",\"containers\",\"multi-cloud\",\"Onboarding\",\"open source\",\"openshift\"],\"articleSection\":[\"*.*\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/\",\"name\":\"Migrate OpenShift applications with os2os - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png\",\"datePublished\":\"2017-09-30T20:44:44+00:00\",\"dateModified\":\"2019-08-05T12:35:06+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#primaryimage\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migrate OpenShift applications with os2os\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/\",\"name\":\"Service Engineering (ICCLab &amp; SPLab)\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563\",\"name\":\"icclab\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g\",\"caption\":\"icclab\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/icclab\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Migrate OpenShift applications with os2os - Service Engineering (ICCLab &amp; SPLab)","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:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/","og_locale":"en_US","og_type":"article","og_title":"Migrate OpenShift applications with os2os","og_description":"One of the desirable properties which users expect in a modern cloud-hosted application is portability. Users want to migrate portable applications between private and public clouds or between different cloud regions. With container images as portable application implementations and emerging sophisticated container runtimes, this should be an easy task. But when a containerised application starts [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2017-09-30T20:44:44+00:00","article_modified_time":"2019-08-05T12:35:06+00:00","og_image":[{"url":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png","type":"","width":"","height":""}],"author":"icclab","twitter_card":"summary_large_image","twitter_misc":{"Written by":"icclab","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/"},"author":{"name":"icclab","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563"},"headline":"Migrate OpenShift applications with os2os","datePublished":"2017-09-30T20:44:44+00:00","dateModified":"2019-08-05T12:35:06+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/"},"wordCount":822,"commentCount":0,"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png","keywords":["cloud-native application","CNA","containers","multi-cloud","Onboarding","open source","openshift"],"articleSection":["*.*"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/","url":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/","name":"Migrate OpenShift applications with os2os - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png","datePublished":"2017-09-30T20:44:44+00:00","dateModified":"2019-08-05T12:35:06+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#primaryimage","url":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png","contentUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2017\/09\/os2os-service.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/migrate-openshift-applications-with-os2os\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"Migrate OpenShift applications with os2os"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/icclab\/#website","url":"https:\/\/blog.zhaw.ch\/icclab\/","name":"Service Engineering (ICCLab &amp; SPLab)","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/045c6bde7e681e689e4fc051d8932563","name":"icclab","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7b13169e03783f50e96b96fa2ff222b9c530d13c3125f077c7c44f729b857a51?s=96&d=mm&r=g","caption":"icclab"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/icclab\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/11599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/users\/486"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=11599"}],"version-history":[{"count":7,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/11599\/revisions"}],"predecessor-version":[{"id":12536,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/11599\/revisions\/12536"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=11599"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=11599"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=11599"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=11599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}