"use strict";(self.webpackChunkwebsite=self.webpackChunkwebsite||[]).push([[8862],{3905:(e,r,t)=>{t.d(r,{Zo:()=>p,kt:()=>m});var o=t(67294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function n(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function c(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?n(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):n(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function l(e,r){if(null==e)return{};var t,o,a=function(e,r){if(null==e)return{};var t,o,a={},n=Object.keys(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(o=0;o<n.length;o++)t=n[o],r.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var i=o.createContext({}),s=function(e){var r=o.useContext(i),t=r;return e&&(t="function"==typeof e?e(r):c(c({},r),e)),t},p=function(e){var r=s(e.components);return o.createElement(i.Provider,{value:r},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},f=o.forwardRef((function(e,r){var t=e.components,a=e.mdxType,n=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=s(t),f=a,m=u["".concat(i,".").concat(f)]||u[f]||d[f]||n;return t?o.createElement(m,c(c({ref:r},p),{},{components:t})):o.createElement(m,c({ref:r},p))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var n=t.length,c=new Array(n);c[0]=f;var l={};for(var i in r)hasOwnProperty.call(r,i)&&(l[i]=r[i]);l.originalType=e,l[u]="string"==typeof e?e:a,c[1]=l;for(var s=2;s<n;s++)c[s]=t[s];return o.createElement.apply(null,c)}return o.createElement.apply(null,t)}f.displayName="MDXCreateElement"},25965:(e,r,t)=>{t.r(r),t.d(r,{assets:()=>i,contentTitle:()=>c,default:()=>d,frontMatter:()=>n,metadata:()=>l,toc:()=>s});var o=t(87462),a=(t(67294),t(3905));const n={layout:"post",title:"Apache CloudStack Terraform 0.5.0 Release",tags:["announcement"],authors:["rohit"],slug:"cloudstack-terraform-provider-0.5.0-release"},c=void 0,l={permalink:"/blog/cloudstack-terraform-provider-0.5.0-release",editUrl:"https://github.com/apache/cloudstack-www/tree/main/blog/2024-04-12-cloudstack-terraform-provider-0.5.0-release/index.md",source:"@site/blog/2024-04-12-cloudstack-terraform-provider-0.5.0-release/index.md",title:"Apache CloudStack Terraform 0.5.0 Release",description:"We are pleased to announce the release of Apache CloudStack Terraform",date:"2024-04-12T00:00:00.000Z",formattedDate:"April 12, 2024",tags:[{label:"announcement",permalink:"/blog/tags/announcement"}],hasTruncateMarker:!0,authors:[{name:"Rohit Yadav",title:"PMC Member",url:"https://github.com/rohityadavcloud",imageURL:"https://github.com/rohityadavcloud.png",key:"rohit"}],frontMatter:{layout:"post",title:"Apache CloudStack Terraform 0.5.0 Release",tags:["announcement"],authors:["rohit"],slug:"cloudstack-terraform-provider-0.5.0-release"},nextItem:{title:"CloudStack Collaboration Conference 2024 \u2013 Prepare to pack for Madrid, Spain in November",permalink:"/blog/ccc-2024"}},i={authorsImageUrls:[void 0]},s=[],p={toc:s},u="wrapper";function d(e){let{components:r,...n}=e;return(0,a.kt)(u,(0,o.Z)({},p,n,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/blog/cloudstack-terraform-provider-0.5.0-release"},(0,a.kt)("img",{src:t(94517).Z,title:"CloudStack Terraform Provider",width:"1200",height:"628"}))),(0,a.kt)("p",null,"We are pleased to announce the release of Apache CloudStack Terraform\nprovider v0.5.0. Terraform is an open-source infrastructure as code software\ntool that provides a consistent CLI workflow to manage resources in many\npublic/private clouds."))}d.isMDXComponent=!0},94517:(e,r,t)=>{t.d(r,{Z:()=>o});const o=t.p+"assets/images/banner-876119598f926b6667d73cd18625f33d.jpg"}}]);