diff --git a/404.html b/404.html index cece48bc..229fc929 100644 --- a/404.html +++ b/404.html @@ -13,13 +13,13 @@ - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/assets/js/03f10c7d.c1c85d77.js b/assets/js/03f10c7d.dd3b78bc.js similarity index 56% rename from assets/js/03f10c7d.c1c85d77.js rename to assets/js/03f10c7d.dd3b78bc.js index 707d1bf7..97071a60 100644 --- a/assets/js/03f10c7d.c1c85d77.js +++ b/assets/js/03f10c7d.dd3b78bc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[4693],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),f=c(r),d=o,m=f["".concat(p,".").concat(d)]||f[d]||s[d]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl approve configuration"},i=void 0,l={unversionedId:"cli/tnctl_approve_configuration",id:"cli/tnctl_approve_configuration",title:"tnctl approve configuration",description:"tnctl approve configuration",source:"@site/docs/terranetes-controller/cli/tnctl_approve_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_approve_configuration",permalink:"/terranetes-controller/cli/tnctl_approve_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_approve_configuration.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl approve configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl approve cloudresource",permalink:"/terranetes-controller/cli/tnctl_approve_cloudresource"},next:{title:"tnctl build",permalink:"/terranetes-controller/cli/tnctl_build"}},p={},c=[{value:"tnctl approve configuration",id:"tnctl-approve-configuration",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:c};function s(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-approve-configuration"},"tnctl approve configuration"),(0,o.kt)("p",null,"Approves a configuration for release"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Used to approve a terraform configuration and permit the\nconfiguration to move into the apply stage. This command\neffectively changes the terraform.appvia.io/apply annotation\nfrom 'false' to 'true'."),(0,o.kt)("p",null,"Approve one or more configurations\n$ tnctl approve configuration NAME"),(0,o.kt)("p",null,"Approve one or more cloudresource\n$ tnctl approve cloudresource NAME"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl approve configuration [OPTIONS] NAME [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -h, --help help for configuration\n -n, --namespace string Namespace of the resource/s (default "default")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_approve"},"tnctl approve"),"\t - Approves either a configuration or cloudresource")))}s.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[4693],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),c=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(p.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),f=c(r),d=o,m=f["".concat(p,".").concat(d)]||f[d]||s[d]||a;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>s,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl approve configuration"},i=void 0,l={unversionedId:"cli/tnctl_approve_configuration",id:"cli/tnctl_approve_configuration",title:"tnctl approve configuration",description:"tnctl approve configuration",source:"@site/docs/terranetes-controller/cli/tnctl_approve_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_approve_configuration",permalink:"/terranetes-controller/cli/tnctl_approve_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_approve_configuration.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl approve configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl approve cloudresource",permalink:"/terranetes-controller/cli/tnctl_approve_cloudresource"},next:{title:"tnctl build",permalink:"/terranetes-controller/cli/tnctl_build"}},p={},c=[{value:"tnctl approve configuration",id:"tnctl-approve-configuration",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:c};function s(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-approve-configuration"},"tnctl approve configuration"),(0,o.kt)("p",null,"Approves a configuration for release"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Used to approve a terraform configuration and permit the\nconfiguration to move into the apply stage. This command\neffectively changes the terraform.appvia.io/apply annotation\nfrom 'false' to 'true'."),(0,o.kt)("p",null,"Approve one or more configurations\n$ tnctl approve configuration NAME"),(0,o.kt)("p",null,"Approve one or more cloudresource\n$ tnctl approve cloudresource NAME"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl approve configuration [OPTIONS] NAME [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -h, --help help for configuration\n -n, --namespace string Namespace of the resource/s (default "default")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_approve"},"tnctl approve"),"\t - Approves either a configuration or cloudresource")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0af774bb.4cd9e2de.js b/assets/js/0af774bb.4cd9e2de.js new file mode 100644 index 00000000..02c63dc6 --- /dev/null +++ b/assets/js/0af774bb.4cd9e2de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[1184],{3905:(t,e,s)=>{s.d(e,{Zo:()=>c,kt:()=>h});var r=s(7294);function a(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}function p(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,r)}return s}function i(t){for(var e=1;e=0||(a[s]=t[s]);return a}(t,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,s)&&(a[s]=t[s])}return a}var n=r.createContext({}),l=function(t){var e=r.useContext(n),s=e;return t&&(s="function"==typeof t?t(e):i(i({},e),t)),s},c=function(t){var e=l(t.components);return r.createElement(n.Provider,{value:e},t.children)},d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},y=r.forwardRef((function(t,e){var s=t.components,a=t.mdxType,p=t.originalType,n=t.parentName,c=o(t,["components","mdxType","originalType","parentName"]),y=l(s),h=a,k=y["".concat(n,".").concat(h)]||y[h]||d[h]||p;return s?r.createElement(k,i(i({ref:e},c),{},{components:s})):r.createElement(k,i({ref:e},c))}));function h(t,e){var s=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var p=s.length,i=new Array(p);i[0]=y;var o={};for(var n in e)hasOwnProperty.call(e,n)&&(o[n]=e[n]);o.originalType=t,o.mdxType="string"==typeof t?t:a,i[1]=o;for(var l=2;l{s.r(e),s.d(e,{assets:()=>n,contentTitle:()=>i,default:()=>d,frontMatter:()=>p,metadata:()=>o,toc:()=>l});var r=s(7462),a=(s(7294),s(3905));const p={title:"plans.terraform.appvia.io",linkTitle:"Plan",sidebar_position:1},i="Plan",o={unversionedId:"reference/plans.terraform.appvia.io",id:"reference/plans.terraform.appvia.io",title:"plans.terraform.appvia.io",description:"Plan is the schema for the plan type",source:"@site/docs/terranetes-controller/reference/plans.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/plans.terraform.appvia.io",permalink:"/terranetes-controller/reference/plans.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/plans.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"plans.terraform.appvia.io",linkTitle:"Plan",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"contexts.terraform.appvia.io",permalink:"/terranetes-controller/reference/contexts.terraform.appvia.io"},next:{title:"policies.terraform.appvia.io",permalink:"/terranetes-controller/reference/policies.terraform.appvia.io"}},n={},l=[],c={toc:l};function d(t){let{components:e,...s}=t;return(0,a.kt)("wrapper",(0,r.Z)({},c,s,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"plan"},"Plan"),(0,a.kt)("p",{class:"crd-description"},"Plan is the schema for the plan type"),(0,a.kt)("dl",{class:"crd-meta"},(0,a.kt)("dt",{class:"fullname"},"Full name:"),(0,a.kt)("dd",{class:"fullname"},"plans.terraform.appvia.io"),(0,a.kt)("dt",{class:"groupname"},"Group:"),(0,a.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,a.kt)("dt",{class:"singularname"},"Singular name:"),(0,a.kt)("dd",{class:"singularname"},"plan"),(0,a.kt)("dt",{class:"pluralname"},"Plural name:"),(0,a.kt)("dd",{class:"pluralname"},"plans"),(0,a.kt)("dt",{class:"scope"},"Scope:"),(0,a.kt)("dd",{class:"scope"},"Cluster"),(0,a.kt)("dt",{class:"versions"},"Versions:"),(0,a.kt)("dd",{class:"versions"},(0,a.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,a.kt)("div",{class:"crd-schema-version"},(0,a.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,a.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"PlanSpec defines the desired state for a context")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.revisions"},".spec.revisions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Revisions is a collection of revision associated with this plan")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.revisions[*]"},".spec.revisions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"PlanRevision is a reference to a revision of a plan existing in the system")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.revisions[*].name"},".spec.revisions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name of the revision containing the configuration")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.revisions[*].revision"},".spec.revisions[*].revision")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Revision is the version of the revision")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"PlanStatus defines the observed state of a terraform")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.latest"},".status.latest")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Latest is the latest revision from this plan")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.latest.name"},".status.latest.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name of the revision containing the configuration")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.latest.revision"},".status.latest.revision")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Revision is the version of the revision"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0af774bb.d983efc6.js b/assets/js/0af774bb.d983efc6.js deleted file mode 100644 index b7a00e89..00000000 --- a/assets/js/0af774bb.d983efc6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[1184],{3905:(t,e,s)=>{s.d(e,{Zo:()=>c,kt:()=>k});var r=s(7294);function a(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}function p(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,r)}return s}function i(t){for(var e=1;e=0||(a[s]=t[s]);return a}(t,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,s)&&(a[s]=t[s])}return a}var n=r.createContext({}),l=function(t){var e=r.useContext(n),s=e;return t&&(s="function"==typeof t?t(e):i(i({},e),t)),s},c=function(t){var e=l(t.components);return r.createElement(n.Provider,{value:e},t.children)},d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},y=r.forwardRef((function(t,e){var s=t.components,a=t.mdxType,p=t.originalType,n=t.parentName,c=o(t,["components","mdxType","originalType","parentName"]),y=l(s),k=a,h=y["".concat(n,".").concat(k)]||y[k]||d[k]||p;return s?r.createElement(h,i(i({ref:e},c),{},{components:s})):r.createElement(h,i({ref:e},c))}));function k(t,e){var s=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var p=s.length,i=new Array(p);i[0]=y;var o={};for(var n in e)hasOwnProperty.call(e,n)&&(o[n]=e[n]);o.originalType=t,o.mdxType="string"==typeof t?t:a,i[1]=o;for(var l=2;l{s.r(e),s.d(e,{assets:()=>n,contentTitle:()=>i,default:()=>d,frontMatter:()=>p,metadata:()=>o,toc:()=>l});var r=s(7462),a=(s(7294),s(3905));const p={title:"plans.terraform.appvia.io",linkTitle:"Plan",sidebar_position:1},i="Plan",o={unversionedId:"reference/plans.terraform.appvia.io",id:"reference/plans.terraform.appvia.io",title:"plans.terraform.appvia.io",description:"Plan is the schema for the plan type",source:"@site/docs/terranetes-controller/reference/plans.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/plans.terraform.appvia.io",permalink:"/terranetes-controller/reference/plans.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/plans.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"plans.terraform.appvia.io",linkTitle:"Plan",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"contexts.terraform.appvia.io",permalink:"/terranetes-controller/reference/contexts.terraform.appvia.io"},next:{title:"policies.terraform.appvia.io",permalink:"/terranetes-controller/reference/policies.terraform.appvia.io"}},n={},l=[],c={toc:l};function d(t){let{components:e,...s}=t;return(0,a.kt)("wrapper",(0,r.Z)({},c,s,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"plan"},"Plan"),(0,a.kt)("p",{class:"crd-description"},"Plan is the schema for the plan type"),(0,a.kt)("dl",{class:"crd-meta"},(0,a.kt)("dt",{class:"fullname"},"Full name:"),(0,a.kt)("dd",{class:"fullname"},"plans.terraform.appvia.io"),(0,a.kt)("dt",{class:"groupname"},"Group:"),(0,a.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,a.kt)("dt",{class:"singularname"},"Singular name:"),(0,a.kt)("dd",{class:"singularname"},"plan"),(0,a.kt)("dt",{class:"pluralname"},"Plural name:"),(0,a.kt)("dd",{class:"pluralname"},"plans"),(0,a.kt)("dt",{class:"scope"},"Scope:"),(0,a.kt)("dd",{class:"scope"},"Cluster"),(0,a.kt)("dt",{class:"versions"},"Versions:"),(0,a.kt)("dd",{class:"versions"},(0,a.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,a.kt)("div",{class:"crd-schema-version"},(0,a.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,a.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"PlanSpec defines the desired state for a context")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.revisions"},".spec.revisions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Revisions is a collection of revision associated with this plan")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.revisions[*]"},".spec.revisions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"PlanRevision is a reference to a revision of a plan existing in the system")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.revisions[*].name"},".spec.revisions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name of the revision containing the configuration")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.revisions[*].revision"},".spec.revisions[*].revision")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Revision is the version of the revision")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"PlanStatus defines the observed state of a terraform")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.latest"},".status.latest")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Latest is the latest revision from this plan")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.latest.name"},".status.latest.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name of the revision containing the configuration")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.latest.revision"},".status.latest.revision")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Revision is the version of the revision"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0d5fce79.1b33910c.js b/assets/js/0d5fce79.1b33910c.js deleted file mode 100644 index 05754d1f..00000000 --- a/assets/js/0d5fce79.1b33910c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2585],{3905:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>d});var r=n(7294);function l(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function a(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e=0||(l[n]=t[n]);return l}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(l[n]=t[n])}return l}var s=r.createContext({}),c=function(t){var e=r.useContext(s),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},p=function(t){var e=c(t.components);return r.createElement(s.Provider,{value:e},t.children)},u={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},f=r.forwardRef((function(t,e){var n=t.components,l=t.mdxType,a=t.originalType,s=t.parentName,p=i(t,["components","mdxType","originalType","parentName"]),f=c(n),d=l,m=f["".concat(s,".").concat(d)]||f[d]||u[d]||a;return n?r.createElement(m,o(o({ref:e},p),{},{components:n})):r.createElement(m,o({ref:e},p))}));function d(t,e){var n=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var a=n.length,o=new Array(a);o[0]=f;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=t,i.mdxType="string"==typeof t?t:l,o[1]=i;for(var c=2;c{n.r(e),n.d(e,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var r=n(7462),l=(n(7294),n(3905));const a={title:"tnctl state list"},o=void 0,i={unversionedId:"cli/tnctl_state_list",id:"cli/tnctl_state_list",title:"tnctl state list",description:"tnctl state list",source:"@site/docs/terranetes-controller/cli/tnctl_state_list.md",sourceDirName:"cli",slug:"/cli/tnctl_state_list",permalink:"/terranetes-controller/cli/tnctl_state_list",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_state_list.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl state list"},sidebar:"tutorialSidebar",previous:{title:"tnctl state clean",permalink:"/terranetes-controller/cli/tnctl_state_clean"},next:{title:"tnctl verify",permalink:"/terranetes-controller/cli/tnctl_verify"}},s={},c=[{value:"tnctl state list",id:"tnctl-state-list",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:c};function u(t){let{components:e,...n}=t;return(0,l.kt)("wrapper",(0,r.Z)({},p,n,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-state-list"},"tnctl state list"),(0,l.kt)("p",null,"Listing all the configurations in the cluster and the current state"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl state list [OPTIONS] [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --controller-namespace string The namespace the controller is running in (default "terraform-system")\n -h, --help help for list\n --namespace string The namespace to list the configurations, defaults to all\n')),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_state"},"tnctl state"),"\t - Used to manage the Terraform Configuration state secrets")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0d5fce79.de7bd9bd.js b/assets/js/0d5fce79.de7bd9bd.js new file mode 100644 index 00000000..8503e6aa --- /dev/null +++ b/assets/js/0d5fce79.de7bd9bd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2585],{3905:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>d});var r=n(7294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var s=r.createContext({}),c=function(t){var e=r.useContext(s),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},p=function(t){var e=c(t.components);return r.createElement(s.Provider,{value:e},t.children)},u={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},f=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,l=t.originalType,s=t.parentName,p=i(t,["components","mdxType","originalType","parentName"]),f=c(n),d=a,m=f["".concat(s,".").concat(d)]||f[d]||u[d]||l;return n?r.createElement(m,o(o({ref:e},p),{},{components:n})):r.createElement(m,o({ref:e},p))}));function d(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var l=n.length,o=new Array(l);o[0]=f;var i={};for(var s in e)hasOwnProperty.call(e,s)&&(i[s]=e[s]);i.originalType=t,i.mdxType="string"==typeof t?t:a,o[1]=i;for(var c=2;c{n.r(e),n.d(e,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));const l={title:"tnctl state list"},o=void 0,i={unversionedId:"cli/tnctl_state_list",id:"cli/tnctl_state_list",title:"tnctl state list",description:"tnctl state list",source:"@site/docs/terranetes-controller/cli/tnctl_state_list.md",sourceDirName:"cli",slug:"/cli/tnctl_state_list",permalink:"/terranetes-controller/cli/tnctl_state_list",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_state_list.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl state list"},sidebar:"tutorialSidebar",previous:{title:"tnctl state clean",permalink:"/terranetes-controller/cli/tnctl_state_clean"},next:{title:"tnctl verify",permalink:"/terranetes-controller/cli/tnctl_verify"}},s={},c=[{value:"tnctl state list",id:"tnctl-state-list",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:c};function u(t){let{components:e,...n}=t;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"tnctl-state-list"},"tnctl state list"),(0,a.kt)("p",null,"Listing all the configurations in the cluster and the current state"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"tnctl state list [OPTIONS] [flags]\n")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},' --controller-namespace string The namespace the controller is running in (default "terraform-system")\n -h, --help help for list\n --namespace string The namespace to list the configurations, defaults to all\n')),(0,a.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,a.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_state"},"tnctl state"),"\t - Used to manage the Terraform Configuration state secrets")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0e04b2f5.eaa2170e.js b/assets/js/0e04b2f5.e3972bbc.js similarity index 54% rename from assets/js/0e04b2f5.eaa2170e.js rename to assets/js/0e04b2f5.e3972bbc.js index 2a177afb..951125b1 100644 --- a/assets/js/0e04b2f5.eaa2170e.js +++ b/assets/js/0e04b2f5.e3972bbc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2188],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function c(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var a=o.createContext({}),i=function(e){var t=o.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=i(e.components);return o.createElement(a.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,l=e.originalType,a=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=i(r),f=n,g=d["".concat(a,".").concat(f)]||d[f]||p[f]||l;return r?o.createElement(g,c(c({ref:t},u),{},{components:r})):o.createElement(g,c({ref:t},u))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=r.length,c=new Array(l);c[0]=d;var s={};for(var a in t)hasOwnProperty.call(t,a)&&(s[a]=t[a]);s.originalType=e,s.mdxType="string"==typeof e?e:n,c[1]=s;for(var i=2;i{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>l,metadata:()=>s,toc:()=>i});var o=r(7462),n=(r(7294),r(3905));const l={title:"tnctl logs cloudresource"},c=void 0,s={unversionedId:"cli/tnctl_logs_cloudresource",id:"cli/tnctl_logs_cloudresource",title:"tnctl logs cloudresource",description:"tnctl logs cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_logs_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_logs_cloudresource",permalink:"/terranetes-controller/cli/tnctl_logs_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_logs_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl logs cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl logs",permalink:"/terranetes-controller/cli/tnctl_logs"},next:{title:"tnctl logs configuration",permalink:"/terranetes-controller/cli/tnctl_logs_configuration"}},a={},i=[{value:"tnctl logs cloudresource",id:"tnctl-logs-cloudresource",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:i};function p(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"tnctl-logs-cloudresource"},"tnctl logs cloudresource"),(0,n.kt)("p",null,"Displays the latest logs for the given resource"),(0,n.kt)("h3",{id:"synopsis"},"Synopsis"),(0,n.kt)("p",null,"Retrieves and follows the logs from a cloudresource or native configuration"),(0,n.kt)("p",null,"Viewing the logs for a configuration\n$ tnctl logs configuration NAME --follow"),(0,n.kt)("p",null,"Viewing the logs for a cloudresource\n$ tnctl logs cloudresource NAME --follow"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"tnctl logs cloudresource NAME [OPTIONS] [flags]\n")),(0,n.kt)("h3",{id:"options"},"Options"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},' -f, --follow Indicates we should follow the logs\n -h, --help help for cloudresource\n -n, --namespace string The namespace of the resource (default "default")\n --stage string Select the stage to show logs for, else defaults to the current resource state\n --timeout duration The interval to wait for the logs (default 3s)\n')),(0,n.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,n.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"../tnctl_logs"},"tnctl logs"),"\t - Displays the latest logs for the resource")))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2188],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function c(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var a=o.createContext({}),i=function(e){var t=o.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=i(e.components);return o.createElement(a.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,l=e.originalType,a=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=i(r),f=n,g=d["".concat(a,".").concat(f)]||d[f]||p[f]||l;return r?o.createElement(g,c(c({ref:t},u),{},{components:r})):o.createElement(g,c({ref:t},u))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=r.length,c=new Array(l);c[0]=d;var s={};for(var a in t)hasOwnProperty.call(t,a)&&(s[a]=t[a]);s.originalType=e,s.mdxType="string"==typeof e?e:n,c[1]=s;for(var i=2;i{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>l,metadata:()=>s,toc:()=>i});var o=r(7462),n=(r(7294),r(3905));const l={title:"tnctl logs cloudresource"},c=void 0,s={unversionedId:"cli/tnctl_logs_cloudresource",id:"cli/tnctl_logs_cloudresource",title:"tnctl logs cloudresource",description:"tnctl logs cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_logs_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_logs_cloudresource",permalink:"/terranetes-controller/cli/tnctl_logs_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_logs_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl logs cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl logs",permalink:"/terranetes-controller/cli/tnctl_logs"},next:{title:"tnctl logs configuration",permalink:"/terranetes-controller/cli/tnctl_logs_configuration"}},a={},i=[{value:"tnctl logs cloudresource",id:"tnctl-logs-cloudresource",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:i};function p(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"tnctl-logs-cloudresource"},"tnctl logs cloudresource"),(0,n.kt)("p",null,"Displays the latest logs for the given resource"),(0,n.kt)("h3",{id:"synopsis"},"Synopsis"),(0,n.kt)("p",null,"Retrieves and follows the logs from a cloudresource or native configuration"),(0,n.kt)("p",null,"Viewing the logs for a configuration\n$ tnctl logs configuration NAME --follow"),(0,n.kt)("p",null,"Viewing the logs for a cloudresource\n$ tnctl logs cloudresource NAME --follow"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"tnctl logs cloudresource NAME [OPTIONS] [flags]\n")),(0,n.kt)("h3",{id:"options"},"Options"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},' -f, --follow Indicates we should follow the logs\n -h, --help help for cloudresource\n -n, --namespace string The namespace of the resource (default "default")\n --stage string Select the stage to show logs for, else defaults to the current resource state\n --timeout duration The interval to wait for the logs (default 3s)\n')),(0,n.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,n.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"../tnctl_logs"},"tnctl logs"),"\t - Displays the latest logs for the resource")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/10637139.3da2697f.js b/assets/js/10637139.a493b591.js similarity index 57% rename from assets/js/10637139.3da2697f.js rename to assets/js/10637139.a493b591.js index 7bfba309..9519bd75 100644 --- a/assets/js/10637139.3da2697f.js +++ b/assets/js/10637139.a493b591.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[32],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>u});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),f=s(r),u=o,m=f["".concat(l,".").concat(u)]||f[u]||d[u]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function u(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:3},i="Enabling Drift Protection",c={unversionedId:"developer/drift",id:"developer/drift",title:"Enabling Drift Protection",description:"Drift protection instructs the controller to periodically check for drift between the desired state and the upstream cloud provider; this could occur due to someone or something changing the configuration outside of the scope of terraform i.e. on the cloud console, API and so forth. The time frame is configured by the platform team, see Drift Detection for details.",source:"@site/docs/terranetes-controller/developer/drift.md",sourceDirName:"developer",slug:"/developer/drift",permalink:"/terranetes-controller/developer/drift",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/developer/drift.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Configuration Contexts",permalink:"/terranetes-controller/developer/contexts"},next:{title:"Using Flux as Source",permalink:"/terranetes-controller/developer/flux"}},l={},s=[{value:"Enabling Drift Detection",id:"enabling-drift-detection",level:2}],p={toc:s};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"enabling-drift-protection"},"Enabling Drift Protection"),(0,o.kt)("p",null,"Drift protection instructs the controller to periodically check for drift between the desired state and the upstream cloud provider; this could occur due to someone or something changing the configuration outside of the scope of terraform i.e. on the cloud console, API and so forth. The time frame is configured by the platform team, see ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/admin/drift"},"Drift Detection")," for details."),(0,o.kt)("p",null,"When a configuration is detected as out of sync the status of the resource is updated and a kubernetes event is raised."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl -n apps get configurations.terraform.appvia.io\nNAME MODULE SECRET ESTIMATED SYNCHRONIZED AGE\nbucket https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0 test Not Enabled OutOfSync 3m5s\n")),(0,o.kt)("h2",{id:"enabling-drift-detection"},"Enabling Drift Detection"),(0,o.kt)("p",null,"To enable drift detection on a ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," set ",(0,o.kt)("inlineCode",{parentName:"p"},"spec.enableDriftDetection: true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Configuration\nmetadata:\n name: bucket\nspec:\n module: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0\n providerRef:\n name: aws\n # You can enable drift protection as so\n enableDriftDetection: true\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[32],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>u});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),f=s(r),u=o,m=f["".concat(l,".").concat(u)]||f[u]||d[u]||a;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function u(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:3},i="Enabling Drift Protection",c={unversionedId:"developer/drift",id:"developer/drift",title:"Enabling Drift Protection",description:"Drift protection instructs the controller to periodically check for drift between the desired state and the upstream cloud provider; this could occur due to someone or something changing the configuration outside of the scope of terraform i.e. on the cloud console, API and so forth. The time frame is configured by the platform team, see Drift Detection for details.",source:"@site/docs/terranetes-controller/developer/drift.md",sourceDirName:"developer",slug:"/developer/drift",permalink:"/terranetes-controller/developer/drift",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/developer/drift.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Configuration Contexts",permalink:"/terranetes-controller/developer/contexts"},next:{title:"Using Flux as Source",permalink:"/terranetes-controller/developer/flux"}},l={},s=[{value:"Enabling Drift Detection",id:"enabling-drift-detection",level:2}],p={toc:s};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"enabling-drift-protection"},"Enabling Drift Protection"),(0,o.kt)("p",null,"Drift protection instructs the controller to periodically check for drift between the desired state and the upstream cloud provider; this could occur due to someone or something changing the configuration outside of the scope of terraform i.e. on the cloud console, API and so forth. The time frame is configured by the platform team, see ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/admin/drift"},"Drift Detection")," for details."),(0,o.kt)("p",null,"When a configuration is detected as out of sync the status of the resource is updated and a kubernetes event is raised."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl -n apps get configurations.terraform.appvia.io\nNAME MODULE SECRET ESTIMATED SYNCHRONIZED AGE\nbucket https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0 test Not Enabled OutOfSync 3m5s\n")),(0,o.kt)("h2",{id:"enabling-drift-detection"},"Enabling Drift Detection"),(0,o.kt)("p",null,"To enable drift detection on a ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," set ",(0,o.kt)("inlineCode",{parentName:"p"},"spec.enableDriftDetection: true"),"."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Configuration\nmetadata:\n name: bucket\nspec:\n module: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0\n providerRef:\n name: aws\n # You can enable drift protection as so\n enableDriftDetection: true\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/177cd14b.90f87ce6.js b/assets/js/177cd14b.90f87ce6.js deleted file mode 100644 index e6fbb2a4..00000000 --- a/assets/js/177cd14b.90f87ce6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[930],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var i=a.createContext({}),p=function(e){var t=a.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=p(e.components);return a.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=p(r),d=n,k=m["".concat(i,".").concat(d)]||m[d]||u[d]||o;return r?a.createElement(k,l(l({ref:t},c),{},{components:r})):a.createElement(k,l({ref:t},c))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,l=new Array(o);l[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:n,l[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=r(7462),n=(r(7294),r(3905));const o={sidebar_position:2},l="Quick start",s={unversionedId:"quick_start",id:"quick_start",title:"Quick start",description:"While all actions can be performed via kubectl, Terranetes comes bundled with a CLI tool to make operations quicker. You can find the download on releases",source:"@site/docs/terranetes-controller/quick_start.md",sourceDirName:".",slug:"/quick_start",permalink:"/terranetes-controller/quick_start",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/quick_start.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"What is Terranetes?",permalink:"/terranetes-controller/"},next:{title:"Releases",permalink:"/terranetes-controller/releases"}},i={},p=[{value:"Configure credentials",id:"configure-credentials",level:2},{value:"Configure a Revision",id:"configure-a-revision",level:2},{value:"Provision a Cloud Resource",id:"provision-a-cloud-resource",level:2},{value:"Approve the plan",id:"approve-the-plan",level:2},{value:"Deleting the terraform resources",id:"deleting-the-terraform-resources",level:2}],c={toc:p};function u(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"quick-start"},"Quick start"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"While all actions can be performed via kubectl, Terranetes comes bundled with a CLI tool to make operations quicker. You can find the download on ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/releases"},(0,n.kt)("strong",{parentName:"a"},"releases")))),(0,n.kt)("p",null,"Before we begin, you'll need the following tools:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("a",{parentName:"strong",href:"https://helm.sh/docs/intro/install/"},"Helm CLI"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("a",{parentName:"strong",href:"https://kind.sigs.k8s.io/"},"Kind")))),(0,n.kt)("p",null,"The quickest way to get up and running is via the Helm chart (see ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/tree/master/charts/terranetes-controller"},"chart"),"):"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"$ helm repo add appvia https://terranetes-controller.appvia.io\n$ helm repo update\n$ kind create cluster\n$ helm install -n terraform-system terranetes-controller appvia/terranetes-controller --create-namespace\n$ kubectl -n terraform-system get pods\n")),(0,n.kt)("h2",{id:"configure-credentials"},"Configure credentials"),(0,n.kt)("p",null,"Next, we configure some cloud credentials to run terraform with (see ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/blob/master/examples/provider.yaml"},"provider.yaml"),"):"),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"The following assumes you are using static cloud credentials. See the docs for ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/admin/providers/#configure-injected-identity"},(0,n.kt)("strong",{parentName:"a"},"managed pod identity")),".")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl -n terraform-system create secret generic aws \\\n --from-literal=AWS_ACCESS_KEY_ID= \\\n --from-literal=AWS_SECRET_ACCESS_KEY= \\\n --from-literal=AWS_REGION=\n$ kubectl apply -f https://raw.githubusercontent.com/appvia/terranetes-controller/master/examples/provider.yaml\n$ kubectl get provider -o yaml\n")),(0,n.kt)("p",null,"See ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/admin/providers"},"Configure Credentials")," for more details."),(0,n.kt)("h2",{id:"configure-a-revision"},"Configure a Revision"),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"The following example uses a pre-baked Revision, however, for tips on generating Revisions please go ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/admin/cloudresource"},(0,n.kt)("strong",{parentName:"a"},"here")))),(0,n.kt)("p",null,"Retrieve a demo revision that creates an S3 bucket (see ",(0,n.kt)("a",{parentName:"p",href:"https://raw.githubusercontent.com/appvia/terranetes-controller/master/examples/revision.yaml"},"revision.yaml"),")."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://raw.githubusercontent.com/appvia/terranetes-controller/master/examples/revision.yaml\n")),(0,n.kt)("p",null,"Next, lets create a ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")," for the resource."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"# View the contains of the revision for the s3 bucket\n$ cat revision.yaml # demo for provisioning an s3 bucket\n\n# Apply the revision\n$ kubectl apply -f revision.yaml\n$ kubectl get revision\n\n# We should have a plan from the new revision\n$ kubectl get plan\n")),(0,n.kt)("h2",{id:"provision-a-cloud-resource"},"Provision a Cloud Resource"),(0,n.kt)("p",null,"Lets retrieve the cloud resource example from ",(0,n.kt)("a",{parentName:"p",href:"https://raw.githubusercontent.com/appvia/terranetes-controller/master/examples/cloudresource.yaml"},"here")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://raw.githubusercontent.com/appvia/terranetes-controller/master/examples/cloudresource.yaml\n")),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"You can also run ",(0,n.kt)("inlineCode",{parentName:"p"},"tnctl create cloudresource")," to generate a CloudResource CRD from a Revision")),(0,n.kt)("p",null,"Lets create a namespace, and consume the revision."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"# Create the namespace\n$ kubectl create namespace apps\n\n# Ensure you change any 'CHANGE_ME' variables in the example\n$ vim cloudresource.yaml\n\n# Create the cloudresource\n$ kubectl -n apps apply -f cloudresource.yaml\n$ kubectl -n apps get po\n\n# Straight away a job is created to 'watch' the terraform workflow\n$ kubectl -n apps logs -f \n")),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"You can use the ",(0,n.kt)("inlineCode",{parentName:"p"},"tnctl logs cloudresource --namespace apps bucket --follow")," to find and watch the logs from a build, instead of kubectl commands.")),(0,n.kt)("h2",{id:"approve-the-plan"},"Approve the plan"),(0,n.kt)("p",null,"By default, unless the ",(0,n.kt)("inlineCode",{parentName:"p"},"spec.enableAutoApproval")," is true, all changes must be approved before acting on. An annotation is used to approve the previous plan."),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"If you are using the ",(0,n.kt)("inlineCode",{parentName:"p"},"tnctl")," cli, you can approve changes via ",(0,n.kt)("inlineCode",{parentName:"p"},"tnctl approve cloudresource --namespace apps bucket"))),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'kubectl -n apps annotate cloudresources bucket "terraform.appvia.io/apply"=true --overwrite\n')),(0,n.kt)("p",null,"Another kubernetes job will be created to watch the execution of the terraform apply, you can view the logs via ",(0,n.kt)("inlineCode",{parentName:"p"},"kubectl -n apps get po | grep apply"),", get the pod name and tail the logs ",(0,n.kt)("inlineCode",{parentName:"p"},"kubectl -n apps logs -f "),"."),(0,n.kt)("admonition",{type:"important"},(0,n.kt)("p",{parentName:"admonition"},"The actual terraform execution does not occur in the ",(0,n.kt)("inlineCode",{parentName:"p"},"apps")," namespace, users simply have the ability to watch the output of the run. The job and the credentials never leave the platform teams namespace ",(0,n.kt)("inlineCode",{parentName:"p"},"terraform-system"))),(0,n.kt)("p",null,"View the the ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResource")," below."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl -n apps get cloudresources.terraform.appvia.io\nNAME PLAN REVISION SECRET CONFIGURATION ESTIMATED UPDATE SYNCHRONIZED AGE\nbucket bucket v0.0.1 test bucket-7v8jp Not Enabled None InSync 2m7s\n\n# View the kubernetes secrets containing the outputs\n$ kubectl -n apps get secret test -o yaml\n")),(0,n.kt)("p",null,"For a complete summary of ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," click ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/developer/provision"},"here"),"."),(0,n.kt)("h2",{id:"deleting-the-terraform-resources"},"Deleting the terraform resources"),(0,n.kt)("p",null,"You can delete the cloud resource like any other Kubernetes resource"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl -n apps delete cloudresource bucket --wait=false\n")),(0,n.kt)("p",null,"Tailing the logs from the watcher will allow you to view the execution."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"POD_NAME=$(kubectl -n apps get pods -l terraform.appvia.io/stage=destroy --no-headers | cut -d' ' -f1)\nkubectl -n apps logs ${POD_NAME} -f\n")),(0,n.kt)("p",null,"Or via ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/developer/tnctl"},"tnctl")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"tnctl logs cloudresource -n apps bucket -f\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/177cd14b.9203d018.js b/assets/js/177cd14b.9203d018.js new file mode 100644 index 00000000..b6b8276a --- /dev/null +++ b/assets/js/177cd14b.9203d018.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[930],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var i=a.createContext({}),p=function(e){var t=a.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=p(e.components);return a.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),m=p(r),d=n,k=m["".concat(i,".").concat(d)]||m[d]||u[d]||o;return r?a.createElement(k,l(l({ref:t},c),{},{components:r})):a.createElement(k,l({ref:t},c))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,l=new Array(o);l[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s.mdxType="string"==typeof e?e:n,l[1]=s;for(var p=2;p{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var a=r(7462),n=(r(7294),r(3905));const o={sidebar_position:2},l="Quick start",s={unversionedId:"quick_start",id:"quick_start",title:"Quick start",description:"While all actions can be performed via kubectl, Terranetes comes bundled with a CLI tool to make operations quicker. You can find the download on releases",source:"@site/docs/terranetes-controller/quick_start.md",sourceDirName:".",slug:"/quick_start",permalink:"/terranetes-controller/quick_start",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/quick_start.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"What is Terranetes?",permalink:"/terranetes-controller/"},next:{title:"Releases",permalink:"/terranetes-controller/releases"}},i={},p=[{value:"Configure credentials",id:"configure-credentials",level:2},{value:"Configure a Revision",id:"configure-a-revision",level:2},{value:"Provision a Cloud Resource",id:"provision-a-cloud-resource",level:2},{value:"Approve the plan",id:"approve-the-plan",level:2},{value:"Deleting the terraform resources",id:"deleting-the-terraform-resources",level:2}],c={toc:p};function u(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"quick-start"},"Quick start"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"While all actions can be performed via kubectl, Terranetes comes bundled with a CLI tool to make operations quicker. You can find the download on ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/releases"},(0,n.kt)("strong",{parentName:"a"},"releases")))),(0,n.kt)("p",null,"Before we begin, you'll need the following tools:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("a",{parentName:"strong",href:"https://helm.sh/docs/intro/install/"},"Helm CLI"))),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},(0,n.kt)("a",{parentName:"strong",href:"https://kind.sigs.k8s.io/"},"Kind")))),(0,n.kt)("p",null,"The quickest way to get up and running is via the Helm chart (see ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/tree/master/charts/terranetes-controller"},"chart"),"):"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"$ helm repo add appvia https://terranetes-controller.appvia.io\n$ helm repo update\n$ kind create cluster\n$ helm install -n terraform-system terranetes-controller appvia/terranetes-controller --create-namespace\n$ kubectl -n terraform-system get pods\n")),(0,n.kt)("h2",{id:"configure-credentials"},"Configure credentials"),(0,n.kt)("p",null,"Next, we configure some cloud credentials to run terraform with (see ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/blob/master/examples/provider.yaml"},"provider.yaml"),"):"),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"The following assumes you are using static cloud credentials. See the docs for ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/admin/providers/#configure-injected-identity"},(0,n.kt)("strong",{parentName:"a"},"managed pod identity")),".")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl -n terraform-system create secret generic aws \\\n --from-literal=AWS_ACCESS_KEY_ID= \\\n --from-literal=AWS_SECRET_ACCESS_KEY= \\\n --from-literal=AWS_REGION=\n$ kubectl apply -f https://raw.githubusercontent.com/appvia/terranetes-controller/master/examples/provider.yaml\n$ kubectl get provider -o yaml\n")),(0,n.kt)("p",null,"See ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/admin/providers"},"Configure Credentials")," for more details."),(0,n.kt)("h2",{id:"configure-a-revision"},"Configure a Revision"),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"The following example uses a pre-baked Revision, however, for tips on generating Revisions please go ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/admin/cloudresource"},(0,n.kt)("strong",{parentName:"a"},"here")))),(0,n.kt)("p",null,"Retrieve a demo revision that creates an S3 bucket (see ",(0,n.kt)("a",{parentName:"p",href:"https://raw.githubusercontent.com/appvia/terranetes-controller/master/examples/revision.yaml"},"revision.yaml"),")."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://raw.githubusercontent.com/appvia/terranetes-controller/master/examples/revision.yaml\n")),(0,n.kt)("p",null,"Next, lets create a ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")," for the resource."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"# View the contains of the revision for the s3 bucket\n$ cat revision.yaml # demo for provisioning an s3 bucket\n\n# Apply the revision\n$ kubectl apply -f revision.yaml\n$ kubectl get revision\n\n# We should have a plan from the new revision\n$ kubectl get plan\n")),(0,n.kt)("h2",{id:"provision-a-cloud-resource"},"Provision a Cloud Resource"),(0,n.kt)("p",null,"Lets retrieve the cloud resource example from ",(0,n.kt)("a",{parentName:"p",href:"https://raw.githubusercontent.com/appvia/terranetes-controller/master/examples/cloudresource.yaml"},"here")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"wget https://raw.githubusercontent.com/appvia/terranetes-controller/master/examples/cloudresource.yaml\n")),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"You can also run ",(0,n.kt)("inlineCode",{parentName:"p"},"tnctl create cloudresource")," to generate a CloudResource CRD from a Revision")),(0,n.kt)("p",null,"Lets create a namespace, and consume the revision."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"# Create the namespace\n$ kubectl create namespace apps\n\n# Ensure you change any 'CHANGE_ME' variables in the example\n$ vim cloudresource.yaml\n\n# Create the cloudresource\n$ kubectl -n apps apply -f cloudresource.yaml\n$ kubectl -n apps get po\n\n# Straight away a job is created to 'watch' the terraform workflow\n$ kubectl -n apps logs -f \n")),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"You can use the ",(0,n.kt)("inlineCode",{parentName:"p"},"tnctl logs cloudresource --namespace apps bucket --follow")," to find and watch the logs from a build, instead of kubectl commands.")),(0,n.kt)("h2",{id:"approve-the-plan"},"Approve the plan"),(0,n.kt)("p",null,"By default, unless the ",(0,n.kt)("inlineCode",{parentName:"p"},"spec.enableAutoApproval")," is true, all changes must be approved before acting on. An annotation is used to approve the previous plan."),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"If you are using the ",(0,n.kt)("inlineCode",{parentName:"p"},"tnctl")," cli, you can approve changes via ",(0,n.kt)("inlineCode",{parentName:"p"},"tnctl approve cloudresource --namespace apps bucket"))),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'kubectl -n apps annotate cloudresources bucket "terraform.appvia.io/apply"=true --overwrite\n')),(0,n.kt)("p",null,"Another kubernetes job will be created to watch the execution of the terraform apply, you can view the logs via ",(0,n.kt)("inlineCode",{parentName:"p"},"kubectl -n apps get po | grep apply"),", get the pod name and tail the logs ",(0,n.kt)("inlineCode",{parentName:"p"},"kubectl -n apps logs -f "),"."),(0,n.kt)("admonition",{type:"important"},(0,n.kt)("p",{parentName:"admonition"},"The actual terraform execution does not occur in the ",(0,n.kt)("inlineCode",{parentName:"p"},"apps")," namespace, users simply have the ability to watch the output of the run. The job and the credentials never leave the platform teams namespace ",(0,n.kt)("inlineCode",{parentName:"p"},"terraform-system"))),(0,n.kt)("p",null,"View the the ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResource")," below."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl -n apps get cloudresources.terraform.appvia.io\nNAME PLAN REVISION SECRET CONFIGURATION ESTIMATED UPDATE SYNCHRONIZED AGE\nbucket bucket v0.0.1 test bucket-7v8jp Not Enabled None InSync 2m7s\n\n# View the kubernetes secrets containing the outputs\n$ kubectl -n apps get secret test -o yaml\n")),(0,n.kt)("p",null,"For a complete summary of ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," click ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/developer/provision"},"here"),"."),(0,n.kt)("h2",{id:"deleting-the-terraform-resources"},"Deleting the terraform resources"),(0,n.kt)("p",null,"You can delete the cloud resource like any other Kubernetes resource"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"kubectl -n apps delete cloudresource bucket --wait=false\n")),(0,n.kt)("p",null,"Tailing the logs from the watcher will allow you to view the execution."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"POD_NAME=$(kubectl -n apps get pods -l terraform.appvia.io/stage=destroy --no-headers | cut -d' ' -f1)\nkubectl -n apps logs ${POD_NAME} -f\n")),(0,n.kt)("p",null,"Or via ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/developer/tnctl"},"tnctl")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"tnctl logs cloudresource -n apps bucket -f\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/17aa6f83.83457965.js b/assets/js/17aa6f83.83457965.js new file mode 100644 index 00000000..66a7410f --- /dev/null +++ b/assets/js/17aa6f83.83457965.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[3323],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),f=p(r),m=a,d=f["".concat(s,".").concat(m)]||f[m]||u[m]||i;return r?n.createElement(d,o(o({ref:t},c),{},{components:r})):n.createElement(d,o({ref:t},c))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const i={sidebar_position:5},o="Drift Detection",l={unversionedId:"admin/drift",id:"admin/drift",title:"Drift Detection",description:"Drift detection periodically runs a terraform plan on a Configuration, ensuring the expected state (terraform state) and the actual cloud resources are in sync. Currently Configurations must opt in for drift detection via their spec;",source:"@site/docs/terranetes-controller/admin/drift.md",sourceDirName:"admin",slug:"/admin/drift",permalink:"/terranetes-controller/admin/drift",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/drift.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Injecting Defaults",permalink:"/terranetes-controller/admin/defaults"},next:{title:"Terraform State",permalink:"/terranetes-controller/admin/state"}},s={},p=[{value:"Tuning Drift Detection",id:"tuning-drift-detection",level:2},{value:"Drift Intervals",id:"drift-intervals",level:3},{value:"Drift Threshold",id:"drift-threshold",level:3},{value:"Selection Process",id:"selection-process",level:3}],c={toc:p};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"drift-detection"},"Drift Detection"),(0,a.kt)("p",null,"Drift detection periodically runs a terraform plan on a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration"),", ensuring the expected state ",(0,a.kt)("em",{parentName:"p"},"(terraform state)")," and the actual cloud resources are in sync. Currently ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," must opt in for drift detection via their spec;"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Configuration\nmetadata:\n name: bucket\nspec:\n module: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0\n providerRef:\n namespace: terraform-system\n name: aws\n # You can enable drift protection as so\n enableDriftDetection: true\n")),(0,a.kt)("h2",{id:"tuning-drift-detection"},"Tuning Drift Detection"),(0,a.kt)("p",null,"From an administrative perspective the controller exposes two options:"),(0,a.kt)("h3",{id:"drift-intervals"},"Drift Intervals"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"driftInterval")," is the amount of time that must pass from the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration's")," last terraform plan (last transition time recorded within the status of the ",(0,a.kt)("inlineCode",{parentName:"p"},"Configuration")," object), before a new check is run. By default this is ",(0,a.kt)("inlineCode",{parentName:"p"},"3h"),", so every three hours that has passed from the last transition time for a given ",(0,a.kt)("inlineCode",{parentName:"p"},"Configuration")," object, a drift check will be ran against this resource (providing it is within the ",(0,a.kt)("a",{parentName:"p",href:"#drift-threshold"},(0,a.kt)("inlineCode",{parentName:"a"},"driftThreshold")),")."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"The check is always from the last terraform plan run. So if the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," is altered within those 3 hours, the clocks restarts and will be 3 hours from then.")),(0,a.kt)("p",null,"You can configure the drift interval via the helm value ",(0,a.kt)("inlineCode",{parentName:"p"},"controller.driftInterval"),"; the format must be in minutes or hours, i.e. 10m or 10h"),(0,a.kt)("h3",{id:"drift-threshold"},"Drift Threshold"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"driftThreshold")," is a configurable threshold used to ensure we dont overwhelm the cloud provider API with drift checks. These checks are performing a ",(0,a.kt)("inlineCode",{parentName:"p"},"terraform plan")," afterall and thus API requests are sent out to the cloud provider, so a large collection of ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," all confirming at the same time could cause API timeouts and retries due to rate limiting."),(0,a.kt)("p",null,"The threshold is a percentage, expressed as a float between 0 and 1. This sets the maximum number of ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," that can run a drift check at anyone time."),(0,a.kt)("p",null,"This value takes into account ",(0,a.kt)("strong",{parentName:"p"},"all ",(0,a.kt)("inlineCode",{parentName:"strong"},"Configuration")," resources"),", not just those with ",(0,a.kt)("inlineCode",{parentName:"p"},"enableDriftDetection"),", as the intention is to protect against Cloud API limits."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Scenario 1:")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"10 ",(0,a.kt)("inlineCode",{parentName:"li"},"Configuration")," resources"),(0,a.kt)("li",{parentName:"ul"},"1 resource currently in progress (terraform plan or apply is executing)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"driftThreshold: 0.2")," (10 * 20% - maximum 2 resources)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Result:")," A resource with ",(0,a.kt)("inlineCode",{parentName:"li"},"enableDriftCheck")," will execute a check because it is below the threshold")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Scenario 2:")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"10 ",(0,a.kt)("inlineCode",{parentName:"li"},"Configuration")," Resources"),(0,a.kt)("li",{parentName:"ul"},"2 resources currently in progress (terraform plan or apply is executing)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"driftThreshold: 0.2")," (10 * 20% - maximum 2 resources)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Result:")," A resource with ",(0,a.kt)("inlineCode",{parentName:"li"},"enableDriftCheck")," will not execute a check because the threshold is currently met. It will be evaluated again after a fixed 5 minute interval.")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Scenario 3:")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"10 ",(0,a.kt)("inlineCode",{parentName:"li"},"Configuration")," Resources"),(0,a.kt)("li",{parentName:"ul"},"0 resources currently in progress (terraform plan or apply is executing)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"driftThreshold: 0.01")," (10 * 1% - maximum 1 resource)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Result:")," A resource with ",(0,a.kt)("inlineCode",{parentName:"li"},"enableDriftCheck")," will execute because none are currently in progress, and the maximum resources that can be run is rounded upwards to a value of 1.")),(0,a.kt)("h3",{id:"selection-process"},"Selection Process"),(0,a.kt)("p",null,"The controller chooses a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," based on the following:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Drift detection is enabled on the spec i.e. ",(0,a.kt)("inlineCode",{parentName:"li"},"spec.enableDriftDetection: true"),"."),(0,a.kt)("li",{parentName:"ul"},"The configuration has already ran successfully, i.e. a plan, approve and apply."),(0,a.kt)("li",{parentName:"ul"},"The last time a plan ran was >= drift interval."),(0,a.kt)("li",{parentName:"ul"},"Assuming the number of currently running terraform plan or apply actions is below the drift threshold, the configuration is selected.")),(0,a.kt)("p",null,"The selection process is not ordered in any way, the controller makes a best effort approach, knowing eventually all the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," resources will be run in the end."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/17aa6f83.d3b1140d.js b/assets/js/17aa6f83.d3b1140d.js deleted file mode 100644 index bef901ea..00000000 --- a/assets/js/17aa6f83.d3b1140d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[3323],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),f=p(r),m=a,d=f["".concat(s,".").concat(m)]||f[m]||u[m]||i;return r?n.createElement(d,o(o({ref:t},c),{},{components:r})):n.createElement(d,o({ref:t},c))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,o[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const i={sidebar_position:5},o="Drift Detection",l={unversionedId:"admin/drift",id:"admin/drift",title:"Drift Detection",description:"Drift detection periodically runs a terraform plan on a Configuration, ensuring the expected state (terraform state) and the actual cloud resources are in sync. Currently Configurations must opt in for drift detection via their spec;",source:"@site/docs/terranetes-controller/admin/drift.md",sourceDirName:"admin",slug:"/admin/drift",permalink:"/terranetes-controller/admin/drift",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/drift.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Injecting Defaults",permalink:"/terranetes-controller/admin/defaults"},next:{title:"Terraform State",permalink:"/terranetes-controller/admin/state"}},s={},p=[{value:"Tuning Drift Detection",id:"tuning-drift-detection",level:2},{value:"Drift Intervals",id:"drift-intervals",level:3},{value:"Drift Threshold",id:"drift-threshold",level:3},{value:"Selection Process",id:"selection-process",level:3}],c={toc:p};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"drift-detection"},"Drift Detection"),(0,a.kt)("p",null,"Drift detection periodically runs a terraform plan on a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration"),", ensuring the expected state ",(0,a.kt)("em",{parentName:"p"},"(terraform state)")," and the actual cloud resources are in sync. Currently ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," must opt in for drift detection via their spec;"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Configuration\nmetadata:\n name: bucket\nspec:\n module: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0\n providerRef:\n namespace: terraform-system\n name: aws\n # You can enable drift protection as so\n enableDriftDetection: true\n")),(0,a.kt)("h2",{id:"tuning-drift-detection"},"Tuning Drift Detection"),(0,a.kt)("p",null,"From an administrative perspective the controller exposes two options:"),(0,a.kt)("h3",{id:"drift-intervals"},"Drift Intervals"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"driftInterval")," is the amount of time that must pass from the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration's")," last terraform plan (last transition time recorded within the status of the ",(0,a.kt)("inlineCode",{parentName:"p"},"Configuration")," object), before a new check is run. By default this is ",(0,a.kt)("inlineCode",{parentName:"p"},"3h"),", so every three hours that has passed from the last transition time for a given ",(0,a.kt)("inlineCode",{parentName:"p"},"Configuration")," object, a drift check will be ran against this resource (providing it is within the ",(0,a.kt)("a",{parentName:"p",href:"#drift-threshold"},(0,a.kt)("inlineCode",{parentName:"a"},"driftThreshold")),")."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"The check is always from the last terraform plan run. So if the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," is altered within those 3 hours, the clocks restarts and will be 3 hours from then.")),(0,a.kt)("p",null,"You can configure the drift interval via the helm value ",(0,a.kt)("inlineCode",{parentName:"p"},"controller.driftInterval"),"; the format must be in minutes or hours, i.e. 10m or 10h"),(0,a.kt)("h3",{id:"drift-threshold"},"Drift Threshold"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"driftThreshold")," is a configurable threshold used to ensure we dont overwhelm the cloud provider API with drift checks. These checks are performing a ",(0,a.kt)("inlineCode",{parentName:"p"},"terraform plan")," afterall and thus API requests are sent out to the cloud provider, so a large collection of ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," all confirming at the same time could cause API timeouts and retries due to rate limiting."),(0,a.kt)("p",null,"The threshold is a percentage, expressed as a float between 0 and 1. This sets the maximum number of ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," that can run a drift check at anyone time."),(0,a.kt)("p",null,"This value takes into account ",(0,a.kt)("strong",{parentName:"p"},"all ",(0,a.kt)("inlineCode",{parentName:"strong"},"Configuration")," resources"),", not just those with ",(0,a.kt)("inlineCode",{parentName:"p"},"enableDriftDetection"),", as the intention is to protect against Cloud API limits."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Scenario 1:")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"10 ",(0,a.kt)("inlineCode",{parentName:"li"},"Configuration")," resources"),(0,a.kt)("li",{parentName:"ul"},"1 resource currently in progress (terraform plan or apply is executing)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"driftThreshold: 0.2")," (10 * 20% - maximum 2 resources)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Result:")," A resource with ",(0,a.kt)("inlineCode",{parentName:"li"},"enableDriftCheck")," will execute a check because it is below the threshold")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Scenario 2:")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"10 ",(0,a.kt)("inlineCode",{parentName:"li"},"Configuration")," Resources"),(0,a.kt)("li",{parentName:"ul"},"2 resources currently in progress (terraform plan or apply is executing)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"driftThreshold: 0.2")," (10 * 20% - maximum 2 resources)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Result:")," A resource with ",(0,a.kt)("inlineCode",{parentName:"li"},"enableDriftCheck")," will not execute a check because the threshold is currently met. It will be evaluated again after a fixed 5 minute interval.")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Scenario 3:")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"10 ",(0,a.kt)("inlineCode",{parentName:"li"},"Configuration")," Resources"),(0,a.kt)("li",{parentName:"ul"},"0 resources currently in progress (terraform plan or apply is executing)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"driftThreshold: 0.01")," (10 * 1% - maximum 1 resource)"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"Result:")," A resource with ",(0,a.kt)("inlineCode",{parentName:"li"},"enableDriftCheck")," will execute because none are currently in progress, and the maximum resources that can be run is rounded upwards to a value of 1.")),(0,a.kt)("h3",{id:"selection-process"},"Selection Process"),(0,a.kt)("p",null,"The controller chooses a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," based on the following:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Drift detection is enabled on the spec i.e. ",(0,a.kt)("inlineCode",{parentName:"li"},"spec.enableDriftDetection: true"),"."),(0,a.kt)("li",{parentName:"ul"},"The configuration has already ran successfully, i.e. a plan, approve and apply."),(0,a.kt)("li",{parentName:"ul"},"The last time a plan ran was >= drift interval."),(0,a.kt)("li",{parentName:"ul"},"Assuming the number of currently running terraform plan or apply actions is below the drift threshold, the configuration is selected.")),(0,a.kt)("p",null,"The selection process is not ordered in any way, the controller makes a best effort approach, knowing eventually all the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," resources will be run in the end."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1a72d528.d394f409.js b/assets/js/1a72d528.7442ce84.js similarity index 50% rename from assets/js/1a72d528.d394f409.js rename to assets/js/1a72d528.7442ce84.js index de1d0818..27025691 100644 --- a/assets/js/1a72d528.d394f409.js +++ b/assets/js/1a72d528.7442ce84.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[770],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=s(r),f=o,m=d["".concat(c,".").concat(f)]||d[f]||u[f]||i;return r?n.createElement(m,a(a({ref:t},p),{},{components:r})):n.createElement(m,a({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const i={title:"tnctl create revision"},a=void 0,l={unversionedId:"cli/tnctl_create_revision",id:"cli/tnctl_create_revision",title:"tnctl create revision",description:"tnctl create revision",source:"@site/docs/terranetes-controller/cli/tnctl_create_revision.md",sourceDirName:"cli",slug:"/cli/tnctl_create_revision",permalink:"/terranetes-controller/cli/tnctl_create_revision",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_create_revision.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl create revision"},sidebar:"tutorialSidebar",previous:{title:"tnctl create configuration",permalink:"/terranetes-controller/cli/tnctl_create_configuration"},next:{title:"tnctl create workflow",permalink:"/terranetes-controller/cli/tnctl_create_workflow"}},c={},s=[{value:"tnctl create revision",id:"tnctl-create-revision",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-create-revision"},"tnctl create revision"),(0,o.kt)("p",null,"Used to create terranetes revision from a terraform module"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Create a terranetes revision from a terraform module. The command will\nretrieve the module code if required, parse the attributes from the code\nand build a plan."),(0,o.kt)("p",null,"Create a terranetes revision from the current directory\n$ tnctl create revision ."),(0,o.kt)("p",null,"Create a terranetes revision from a terraform module in a git repository\n$ tnctl create revision -n test.01 -m ",(0,o.kt)("a",{parentName:"p",href:"https://examples.com/terraform-module.git?ref=v1.0.0"},"https://examples.com/terraform-module.git?ref=v1.0.0")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl create revision [OPTIONS] MODULE [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --description string A human readable description of the revision and what is provides\n --enable-default-variables Indicates if include variables which have defaults from the terraform module (default true)\n -f, --file string The path to save the revision to\n -h, --help help for revision\n -n, --name string This name of the revision\n --provider string The name of the terranetes provider to use (default "aws")\n -r, --revision string The semvar version of this revision\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_create"},"tnctl create"),"\t - Used to create a resource")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[770],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=s(r),f=o,m=d["".concat(c,".").concat(f)]||d[f]||u[f]||i;return r?n.createElement(m,a(a({ref:t},p),{},{components:r})):n.createElement(m,a({ref:t},p))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,a[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const i={title:"tnctl create revision"},a=void 0,l={unversionedId:"cli/tnctl_create_revision",id:"cli/tnctl_create_revision",title:"tnctl create revision",description:"tnctl create revision",source:"@site/docs/terranetes-controller/cli/tnctl_create_revision.md",sourceDirName:"cli",slug:"/cli/tnctl_create_revision",permalink:"/terranetes-controller/cli/tnctl_create_revision",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_create_revision.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl create revision"},sidebar:"tutorialSidebar",previous:{title:"tnctl create configuration",permalink:"/terranetes-controller/cli/tnctl_create_configuration"},next:{title:"tnctl create workflow",permalink:"/terranetes-controller/cli/tnctl_create_workflow"}},c={},s=[{value:"tnctl create revision",id:"tnctl-create-revision",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-create-revision"},"tnctl create revision"),(0,o.kt)("p",null,"Used to create terranetes revision from a terraform module"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Create a terranetes revision from a terraform module. The command will\nretrieve the module code if required, parse the attributes from the code\nand build a plan."),(0,o.kt)("p",null,"Create a terranetes revision from the current directory\n$ tnctl create revision ."),(0,o.kt)("p",null,"Create a terranetes revision from a terraform module in a git repository\n$ tnctl create revision -n test.01 -m ",(0,o.kt)("a",{parentName:"p",href:"https://examples.com/terraform-module.git?ref=v1.0.0"},"https://examples.com/terraform-module.git?ref=v1.0.0")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl create revision [OPTIONS] MODULE [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --description string A human readable description of the revision and what is provides\n --enable-default-variables Indicates if include variables which have defaults from the terraform module (default true)\n -f, --file string The path to save the revision to\n -h, --help help for revision\n -n, --name string This name of the revision\n --provider string The name of the terranetes provider to use (default "aws")\n -r, --revision string The semvar version of this revision\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_create"},"tnctl create"),"\t - Used to create a resource")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1aa16790.72fd5a25.js b/assets/js/1aa16790.f259c73d.js similarity index 55% rename from assets/js/1aa16790.72fd5a25.js rename to assets/js/1aa16790.f259c73d.js index 9a4ed95f..e12bdfd7 100644 --- a/assets/js/1aa16790.72fd5a25.js +++ b/assets/js/1aa16790.f259c73d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[7726],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=n.createContext({}),p=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),d=p(r),m=a,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||o;return r?n.createElement(f,l(l({ref:t},s),{},{components:r})):n.createElement(f,l({ref:t},s))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=d;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:a,l[1]=c;for(var p=2;p{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={title:"tnctl create"},l=void 0,c={unversionedId:"cli/tnctl_create",id:"cli/tnctl_create",title:"tnctl create",description:"tnctl create",source:"@site/docs/terranetes-controller/cli/tnctl_create.md",sourceDirName:"cli",slug:"/cli/tnctl_create",permalink:"/terranetes-controller/cli/tnctl_create",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_create.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl create"},sidebar:"tutorialSidebar",previous:{title:"tnctl convert revision",permalink:"/terranetes-controller/cli/tnctl_convert_revision"},next:{title:"tnctl create cloudresource",permalink:"/terranetes-controller/cli/tnctl_create_cloudresource"}},i={},p=[{value:"tnctl create",id:"tnctl-create",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"tnctl-create"},"tnctl create"),(0,a.kt)("p",null,"Used to create a resource"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"tnctl create COMMAND [flags]\n")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"}," -h, --help help for create\n")),(0,a.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,a.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_create_cloudresource"},"tnctl create cloudresource"),"\t - Used to create a cloud resource from a plan"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_create_configuration"},"tnctl create configuration"),"\t - Can be used to package up the terraform module for consumption"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_create_revision"},"tnctl create revision"),"\t - Used to create terranetes revision from a terraform module"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_create_workflow"},"tnctl create workflow"),"\t - Generates a workflow used to lint, validate and publish the module")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[7726],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=n.createContext({}),p=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,i=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),d=p(r),m=a,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||o;return r?n.createElement(f,l(l({ref:t},s),{},{components:r})):n.createElement(f,l({ref:t},s))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=d;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:a,l[1]=c;for(var p=2;p{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={title:"tnctl create"},l=void 0,c={unversionedId:"cli/tnctl_create",id:"cli/tnctl_create",title:"tnctl create",description:"tnctl create",source:"@site/docs/terranetes-controller/cli/tnctl_create.md",sourceDirName:"cli",slug:"/cli/tnctl_create",permalink:"/terranetes-controller/cli/tnctl_create",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_create.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl create"},sidebar:"tutorialSidebar",previous:{title:"tnctl convert revision",permalink:"/terranetes-controller/cli/tnctl_convert_revision"},next:{title:"tnctl create cloudresource",permalink:"/terranetes-controller/cli/tnctl_create_cloudresource"}},i={},p=[{value:"tnctl create",id:"tnctl-create",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"tnctl-create"},"tnctl create"),(0,a.kt)("p",null,"Used to create a resource"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"tnctl create COMMAND [flags]\n")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"}," -h, --help help for create\n")),(0,a.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,a.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_create_cloudresource"},"tnctl create cloudresource"),"\t - Used to create a cloud resource from a plan"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_create_configuration"},"tnctl create configuration"),"\t - Can be used to package up the terraform module for consumption"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_create_revision"},"tnctl create revision"),"\t - Used to create terranetes revision from a terraform module"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_create_workflow"},"tnctl create workflow"),"\t - Generates a workflow used to lint, validate and publish the module")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2360e3f2.243579d5.js b/assets/js/2360e3f2.243579d5.js deleted file mode 100644 index fc57e73d..00000000 --- a/assets/js/2360e3f2.243579d5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9796],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>u});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),d=p(r),u=o,f=d["".concat(c,".").concat(u)]||d[u]||m[u]||a;return r?n.createElement(f,i(i({ref:t},s),{},{components:r})):n.createElement(f,i({ref:t},s))}));function u(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:90},i="Customize Job Template",l={unversionedId:"admin/template",id:"admin/template",title:"Customize Job Template",description:"When a configuration is changed (i.e. for plan, apply or destroy), the controller uses a template to render the final job configuration, taking the options provided on the controller command line, custom policies and the terraform configuration itself. A batch job is created from all the options and ordered to execute the change. You can find the default template for this here.",source:"@site/docs/terranetes-controller/admin/template.md",sourceDirName:"admin",slug:"/admin/template",permalink:"/terranetes-controller/admin/template",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/template.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:90,frontMatter:{sidebar_position:90},sidebar:"tutorialSidebar",previous:{title:"Kubernetes RBAC",permalink:"/terranetes-controller/admin/rbac"},next:{title:"Additional Secrets",permalink:"/terranetes-controller/admin/secrets"}},c={},p=[{value:"Overriding the template",id:"overriding-the-template",level:3}],s={toc:p};function m(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"customize-job-template"},"Customize Job Template"),(0,o.kt)("p",null,"When a configuration is changed (i.e. for plan, apply or destroy), the controller uses a template to render the final job configuration, taking the options provided on the controller command line, custom policies and the terraform configuration itself. A batch job is created from all the options and ordered to execute the change. You can find the default template for this ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/blob/master/pkg/assets/job.yaml.tpl"},"here"),"."),(0,o.kt)("h3",{id:"overriding-the-template"},"Overriding the template"),(0,o.kt)("p",null,"While not required in the vast majority of cases this template can be overridden, allowing platform engineers to customize the pipeline. You might want to:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Add a notification on failed configuration, or send a notification when a configuration fails policy."),(0,o.kt)("li",{parentName:"ul"},"Add a new feature into the pipeline such as swapping out the default ",(0,o.kt)("a",{parentName:"li",href:"https://www.checkov.io"},"checkov")," for another policy engine.")),(0,o.kt)("p",null,"You can change the template by uploading a configmap into the namespace where the controller lives:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"# create the template configmap (note the key name of job.yaml)\n$ kubectl -n terraform-system create configmap template --from-file=job.yaml=\n\n# update the helm values to override the template\ncontroller:\n templates:\n job: \n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2360e3f2.48748909.js b/assets/js/2360e3f2.48748909.js new file mode 100644 index 00000000..2dc0994d --- /dev/null +++ b/assets/js/2360e3f2.48748909.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9796],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=p(r),d=a,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||o;return r?n.createElement(f,i(i({ref:t},s),{},{components:r})):n.createElement(f,i({ref:t},s))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:90},i="Customize Job Template",l={unversionedId:"admin/template",id:"admin/template",title:"Customize Job Template",description:"When a configuration is changed (i.e. for plan, apply or destroy), the controller uses a template to render the final job configuration, taking the options provided on the controller command line, custom policies and the terraform configuration itself. A batch job is created from all the options and ordered to execute the change. You can find the default template for this here.",source:"@site/docs/terranetes-controller/admin/template.md",sourceDirName:"admin",slug:"/admin/template",permalink:"/terranetes-controller/admin/template",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/template.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:90,frontMatter:{sidebar_position:90},sidebar:"tutorialSidebar",previous:{title:"Kubernetes RBAC",permalink:"/terranetes-controller/admin/rbac"},next:{title:"Additional Secrets",permalink:"/terranetes-controller/admin/secrets"}},c={},p=[{value:"Overriding the template",id:"overriding-the-template",level:3}],s={toc:p};function m(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"customize-job-template"},"Customize Job Template"),(0,a.kt)("p",null,"When a configuration is changed (i.e. for plan, apply or destroy), the controller uses a template to render the final job configuration, taking the options provided on the controller command line, custom policies and the terraform configuration itself. A batch job is created from all the options and ordered to execute the change. You can find the default template for this ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/blob/master/pkg/assets/job.yaml.tpl"},"here"),"."),(0,a.kt)("h3",{id:"overriding-the-template"},"Overriding the template"),(0,a.kt)("p",null,"While not required in the vast majority of cases this template can be overridden, allowing platform engineers to customize the pipeline. You might want to:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Add a notification on failed configuration, or send a notification when a configuration fails policy."),(0,a.kt)("li",{parentName:"ul"},"Add a new feature into the pipeline such as swapping out the default ",(0,a.kt)("a",{parentName:"li",href:"https://www.checkov.io"},"checkov")," for another policy engine.")),(0,a.kt)("p",null,"You can change the template by uploading a configmap into the namespace where the controller lives:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"# create the template configmap (note the key name of job.yaml)\n$ kubectl -n terraform-system create configmap template --from-file=job.yaml=\n\n# update the helm values to override the template\ncontroller:\n templates:\n job: \n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/23615001.784184a2.js b/assets/js/23615001.784184a2.js deleted file mode 100644 index ab9cab87..00000000 --- a/assets/js/23615001.784184a2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2661],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>d});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=a.createContext({}),p=function(e){var t=a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),c=p(r),d=n,f=c["".concat(s,".").concat(d)]||c[d]||u[d]||o;return r?a.createElement(f,l(l({ref:t},m),{},{components:r})):a.createElement(f,l({ref:t},m))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,l=new Array(o);l[0]=c;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:n,l[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var a=r(7462),n=(r(7294),r(3905));const o={sidebar_position:1,title:"Overview"},l="tf2helm",i={unversionedId:"index",id:"index",title:"Overview",description:"t2helm is a simple Python utility that converts a Terraform module to a Helm Chart. The Helm Chart contains a Kubernetes Custom Resource understood and managed by one of the following Kubernetes Operators:",source:"@site/docs/tf2helm/index.md",sourceDirName:".",slug:"/",permalink:"/tf2helm/",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/tf2helm/index.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1,title:"Overview"},sidebar:"tutorialSidebar",next:{title:"Creating Helm Packages",permalink:"/tf2helm/create-your-own-packages"}},s={},p=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2}],m={toc:p};function u(e){let{components:t,...o}=e;return(0,n.kt)("wrapper",(0,a.Z)({},m,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"tf2helm"},"tf2helm"),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"t2helm")," is a simple Python utility that converts a Terraform module to a Helm Chart. The Helm Chart contains a Kubernetes Custom Resource understood and managed by one of the following Kubernetes Operators:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller"},"Appvia Terraform Controller (default)")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/isaaguilar/terraform-operator"},"Isaaguilar Terraform Operator")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/oam-dev/terraform-controller"},"OAM Terraform Controller"))),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"tf2helm")," reads a Terraform module from a local or remote path and converts it into a Helm Chart in a specified directory. Terraform variables are read from the module source and written under ",(0,n.kt)("inlineCode",{parentName:"p"},".Values.required")," and ",(0,n.kt)("inlineCode",{parentName:"p"},".Values.optional")," keys in the Helm ",(0,n.kt)("inlineCode",{parentName:"p"},"values.yaml")," file, depending on whether they have been assigned values or not."),(0,n.kt)("p",null,"This gives infrastructure operators, e.g. DevOps or Platform engineers, the flexibility to set sensible default parameters for cloud resources and make them visible and configurable to application developers who may or may not override them afterwards."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Terranetes Diagram",src:r(9265).Z,width:"8996",height:"5683"})),(0,n.kt)("h2",{id:"installation"},"Installation"),(0,n.kt)("p",null,"The tf2helm package is published in the ",(0,n.kt)("a",{parentName:"p",href:"https://pypi.org/project/tf2helm/"},"Python Package Index"),", making for easy installation via pip:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"pip install tf2helm\n")),(0,n.kt)("h2",{id:"usage"},"Usage"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},'$ tf2helm --help\nUsage: tf2helm [OPTIONS]\n\n tf2helm converts a Terraform module to a Helm Chart\n\n\nOptions:\n --tf_module_path TEXT Terraform module local Path e.g.\n "/local/path/to/module".\n --tf_module_url TEXT Terraform module URL e.g.\n "https://github.com//?ref=".\n --tf_version TEXT Terraform version.\n --git_auth TEXT Git access token or SSH private key to use with a\n private repository.\n --template TEXT Template to generate the custom resource definition.\n (terraform-controller, isaaguilar, oam-terraform-\n controller) [default: terraform-controller]\n --name TEXT Helm chart name.\n --app_version TEXT Helm chart application version.\n --output_dir TEXT Path to the Helm chart output directory.\n --version Show the version and exit.\n --help Show this message and exit.\n')))}u.isMDXComponent=!0},9265:(e,t,r)=>{r.d(t,{Z:()=>a});const a=r.p+"assets/images/terranetes-a9e16155db8ee977f94f457e99618090.jpg"}}]); \ No newline at end of file diff --git a/assets/js/23615001.93ea3bcb.js b/assets/js/23615001.93ea3bcb.js new file mode 100644 index 00000000..4ea1f9c7 --- /dev/null +++ b/assets/js/23615001.93ea3bcb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2661],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>d});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=a.createContext({}),p=function(e){var t=a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),c=p(r),d=n,f=c["".concat(s,".").concat(d)]||c[d]||u[d]||o;return r?a.createElement(f,l(l({ref:t},m),{},{components:r})):a.createElement(f,l({ref:t},m))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,l=new Array(o);l[0]=c;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:n,l[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var a=r(7462),n=(r(7294),r(3905));const o={sidebar_position:1,title:"Overview"},l="tf2helm",i={unversionedId:"index",id:"index",title:"Overview",description:"t2helm is a simple Python utility that converts a Terraform module to a Helm Chart. The Helm Chart contains a Kubernetes Custom Resource understood and managed by one of the following Kubernetes Operators:",source:"@site/docs/tf2helm/index.md",sourceDirName:".",slug:"/",permalink:"/tf2helm/",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/tf2helm/index.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1,title:"Overview"},sidebar:"tutorialSidebar",next:{title:"Creating Helm Packages",permalink:"/tf2helm/create-your-own-packages"}},s={},p=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2}],m={toc:p};function u(e){let{components:t,...o}=e;return(0,n.kt)("wrapper",(0,a.Z)({},m,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"tf2helm"},"tf2helm"),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"t2helm")," is a simple Python utility that converts a Terraform module to a Helm Chart. The Helm Chart contains a Kubernetes Custom Resource understood and managed by one of the following Kubernetes Operators:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller"},"Appvia Terraform Controller (default)")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/isaaguilar/terraform-operator"},"Isaaguilar Terraform Operator")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"https://github.com/oam-dev/terraform-controller"},"OAM Terraform Controller"))),(0,n.kt)("p",null,(0,n.kt)("inlineCode",{parentName:"p"},"tf2helm")," reads a Terraform module from a local or remote path and converts it into a Helm Chart in a specified directory. Terraform variables are read from the module source and written under ",(0,n.kt)("inlineCode",{parentName:"p"},".Values.required")," and ",(0,n.kt)("inlineCode",{parentName:"p"},".Values.optional")," keys in the Helm ",(0,n.kt)("inlineCode",{parentName:"p"},"values.yaml")," file, depending on whether they have been assigned values or not."),(0,n.kt)("p",null,"This gives infrastructure operators, e.g. DevOps or Platform engineers, the flexibility to set sensible default parameters for cloud resources and make them visible and configurable to application developers who may or may not override them afterwards."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"Terranetes Diagram",src:r(9265).Z,width:"8996",height:"5683"})),(0,n.kt)("h2",{id:"installation"},"Installation"),(0,n.kt)("p",null,"The tf2helm package is published in the ",(0,n.kt)("a",{parentName:"p",href:"https://pypi.org/project/tf2helm/"},"Python Package Index"),", making for easy installation via pip:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"pip install tf2helm\n")),(0,n.kt)("h2",{id:"usage"},"Usage"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},'$ tf2helm --help\nUsage: tf2helm [OPTIONS]\n\n tf2helm converts a Terraform module to a Helm Chart\n\n\nOptions:\n --tf_module_path TEXT Terraform module local Path e.g.\n "/local/path/to/module".\n --tf_module_url TEXT Terraform module URL e.g.\n "https://github.com//?ref=".\n --tf_version TEXT Terraform version.\n --git_auth TEXT Git access token or SSH private key to use with a\n private repository.\n --template TEXT Template to generate the custom resource definition.\n (terraform-controller, isaaguilar, oam-terraform-\n controller) [default: terraform-controller]\n --name TEXT Helm chart name.\n --app_version TEXT Helm chart application version.\n --output_dir TEXT Path to the Helm chart output directory.\n --version Show the version and exit.\n --help Show this message and exit.\n')))}u.isMDXComponent=!0},9265:(e,t,r)=>{r.d(t,{Z:()=>a});const a=r.p+"assets/images/terranetes-a9e16155db8ee977f94f457e99618090.jpg"}}]); \ No newline at end of file diff --git a/assets/js/2559d39d.526387cd.js b/assets/js/2559d39d.c9a10a5e.js similarity index 63% rename from assets/js/2559d39d.526387cd.js rename to assets/js/2559d39d.c9a10a5e.js index dfeec268..562b3030 100644 --- a/assets/js/2559d39d.526387cd.js +++ b/assets/js/2559d39d.c9a10a5e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[1410],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=r.createContext({}),p=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(a.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,a=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=p(n),d=o,m=u["".concat(a,".").concat(d)]||u[d]||f[d]||i;return n?r.createElement(m,c(c({ref:t},s),{},{components:n})):r.createElement(m,c({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,c=new Array(i);c[0]=u;var l={};for(var a in t)hasOwnProperty.call(t,a)&&(l[a]=t[a]);l.originalType=e,l.mdxType="string"==typeof e?e:o,c[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>f,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const i={title:"tnctl config view"},c=void 0,l={unversionedId:"cli/tnctl_config_view",id:"cli/tnctl_config_view",title:"tnctl config view",description:"tnctl config view",source:"@site/docs/terranetes-controller/cli/tnctl_config_view.md",sourceDirName:"cli",slug:"/cli/tnctl_config_view",permalink:"/terranetes-controller/cli/tnctl_config_view",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_config_view.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl config view"},sidebar:"tutorialSidebar",previous:{title:"tnctl config sources remove",permalink:"/terranetes-controller/cli/tnctl_config_sources_remove"},next:{title:"tnctl convert",permalink:"/terranetes-controller/cli/tnctl_convert"}},a={},p=[{value:"tnctl config view",id:"tnctl-config-view",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function f(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-config-view"},"tnctl config view"),(0,o.kt)("p",null,"Shows the current configuration of the CLI"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl config view [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for view\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config"},"tnctl config"),"\t - Used to manage the CLI configuration")))}f.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[1410],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=r.createContext({}),p=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(a.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,a=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),u=p(n),d=o,m=u["".concat(a,".").concat(d)]||u[d]||f[d]||i;return n?r.createElement(m,c(c({ref:t},s),{},{components:n})):r.createElement(m,c({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,c=new Array(i);c[0]=u;var l={};for(var a in t)hasOwnProperty.call(t,a)&&(l[a]=t[a]);l.originalType=e,l.mdxType="string"==typeof e?e:o,c[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>f,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const i={title:"tnctl config view"},c=void 0,l={unversionedId:"cli/tnctl_config_view",id:"cli/tnctl_config_view",title:"tnctl config view",description:"tnctl config view",source:"@site/docs/terranetes-controller/cli/tnctl_config_view.md",sourceDirName:"cli",slug:"/cli/tnctl_config_view",permalink:"/terranetes-controller/cli/tnctl_config_view",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_config_view.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl config view"},sidebar:"tutorialSidebar",previous:{title:"tnctl config sources remove",permalink:"/terranetes-controller/cli/tnctl_config_sources_remove"},next:{title:"tnctl convert",permalink:"/terranetes-controller/cli/tnctl_convert"}},a={},p=[{value:"tnctl config view",id:"tnctl-config-view",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function f(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-config-view"},"tnctl config view"),(0,o.kt)("p",null,"Shows the current configuration of the CLI"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl config view [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for view\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config"},"tnctl config"),"\t - Used to manage the CLI configuration")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2878cf51.05b7be9c.js b/assets/js/2878cf51.05b7be9c.js new file mode 100644 index 00000000..537b02af --- /dev/null +++ b/assets/js/2878cf51.05b7be9c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[893],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>f});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),c=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=c(a),f=n,d=m["".concat(s,".").concat(f)]||m[f]||u[f]||o;return a?r.createElement(d,i(i({ref:t},p),{},{components:a})):r.createElement(d,i({ref:t},p))}));function f(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:n,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=a(7462),n=(a(7294),a(3905));const o={sidebar_position:5},i="Terraform State",l={unversionedId:"admin/state",id:"admin/state",title:"Terraform State",description:"Terraform stores state about your managed infrastructure and configuration. This state is used by Terraform to map real world resources to your configuration, keep track of metadata, and to improve performance for large infrastructures. For a detailed understanding of terraform state, please visit the official docs.",source:"@site/docs/terranetes-controller/admin/state.md",sourceDirName:"admin",slug:"/admin/state",permalink:"/terranetes-controller/admin/state",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/state.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Drift Detection",permalink:"/terranetes-controller/admin/drift"},next:{title:"Kubernetes RBAC",permalink:"/terranetes-controller/admin/rbac"}},s={},c=[{value:"Where is the state?",id:"where-is-the-state",level:3},{value:"How to change state backend?",id:"how-to-change-state-backend",level:3},{value:"Create a template for the backend to use",id:"create-a-template-for-the-backend-to-use",level:4}],p={toc:c};function u(e){let{components:t,...a}=e;return(0,n.kt)("wrapper",(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"terraform-state"},"Terraform State"),(0,n.kt)("p",null,"Terraform stores state about your managed infrastructure and configuration. This state is used by Terraform to map real world resources to your configuration, keep track of metadata, and to improve performance for large infrastructures. For a detailed understanding of terraform state, please visit ",(0,n.kt)("a",{parentName:"p",href:"https://www.terraform.io/language/state"},"the official docs"),"."),(0,n.kt)("h3",{id:"where-is-the-state"},"Where is the state?"),(0,n.kt)("p",null,"By default the terraform state for all ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," is stored in ",(0,n.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/configuration/secret/"},"Kubernetes secrets")," located in the controller namespace. The following template is used as the backend."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Namespace is always the controller namespace."),(0,n.kt)("li",{parentName:"ul"},"Suffix is the ",(0,n.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," UUID."),(0,n.kt)("li",{parentName:"ul"},"Note the ",(0,n.kt)("a",{parentName:"li",href:"https://www.terraform.io/language/settings/backends/kubernetes"},"kubernetes backend")," adds a prefix ",(0,n.kt)("inlineCode",{parentName:"li"},"tfstate-")," so the state secrets will be named ",(0,n.kt)("inlineCode",{parentName:"li"},"tfstate-UUID"),".")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-go"},'var backendTF = `\nterraform {\n backend "kubernetes" {\n in_cluster_config = true\n namespace = "{{ .controller.namespace }}"\n secret_suffix = "{{ .controller.suffix }}"\n }\n}\n')),(0,n.kt)("h3",{id:"how-to-change-state-backend"},"How to change state backend?"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Note the ability to override the backend is only available with version >= v0.3.1")),(0,n.kt)("p",null,"While using Kubernetes as a backend has it's benefits in terms of ease of use, there's a few downsides as well."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"You need to ensure backups are performed on the state secrets."),(0,n.kt)("li",{parentName:"ul"},"Its harder operate or manipulate the terraform state, using taints for example."),(0,n.kt)("li",{parentName:"ul"},"The terraform state is not versioned so rollbacks are harder to performed."),(0,n.kt)("li",{parentName:"ul"},"You are unable to reference the state using ",(0,n.kt)("a",{parentName:"li",href:"https://www.terraform.io/language/state/remote-state-data"},"remote_state_data")," resource."),(0,n.kt)("li",{parentName:"ul"},"The terraform state is ultimately bound to the Cluster.")),(0,n.kt)("p",null,"Platform administrators can change the backend using the following steps."),(0,n.kt)("h4",{id:"create-a-template-for-the-backend-to-use"},"Create a template for the backend to use"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Create a kubernetes secret in the controller namespace containing the template")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'cat < backend.tf\nterraform {\n backend "s3" {\n bucket = "terranetes-controller-state"\n key = "cluster_one/{{ .namespace }}/{{ .name }}"\n region = "eu-west-2"\n access_key = "AWS_ACCESS_KEY_ID"\n secret_key = "AWS_SECRET_ACCESS_KEY"\n }\n}\nEOF\n')),(0,n.kt)("p",null,"Note the template can reference a number variables"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"controller.namespace")," is the namespace where the terranetes-controller is running."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"controller.labels")," is a map of all the labels from the terranetes controller."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"controller.suffix")," is a controller default used for secrets (default: tfstate)."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"configuration")," is the entire Configuration object this you can reference ",(0,n.kt)("inlineCode",{parentName:"li"},"configuration.Metadata.Namespace")," for instance."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"name")," is the Configuration name being executed on"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"namespace")," is the Configuration namespace and can be used to as a s3 key per namespace for example")),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"We inject the entire ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," resource into the context on the template, so you can reference anything side via ",(0,n.kt)("inlineCode",{parentName:"p"},"configuration.PATH"))),(0,n.kt)("p",null,"Create a kubernetes secret from the above file"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"kubectl -n terraform-system create secret generic backend-s3 --from-file=backend.tf=backend.tf\n")),(0,n.kt)("ol",{start:2},(0,n.kt)("li",{parentName:"ol"},"Update the controller to use the backend template")),(0,n.kt)("p",null,"If you are using the helm chart you simply have to update"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"controller:\n # Name of a secret in the controller namespace which contains the template to use\n # for the backend state\n backendTemplate: backend-s3\n")),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},(0,n.kt)("strong",{parentName:"p"},"Note:")," if you are using the helm chart >= v0.6.0, the format has changed to the below format")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"backend:\n name: backend-s3\n # optional: but will create the backend.name kubernetes secret based on this\n # content in 'template'\n template: |\n TEMPLATE_CONTENT\n")),(0,n.kt)("p",null,"If you are deploying the controller yourself, update the ",(0,n.kt)("inlineCode",{parentName:"p"},"--backend-template=backend-s3")," command line flag."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2878cf51.979b0cd0.js b/assets/js/2878cf51.979b0cd0.js deleted file mode 100644 index 6725606c..00000000 --- a/assets/js/2878cf51.979b0cd0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[893],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>d});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),c=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=c(a),d=n,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||o;return a?r.createElement(f,i(i({ref:t},p),{},{components:a})):r.createElement(f,i({ref:t},p))}));function d(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:n,i[1]=l;for(var c=2;c{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=a(7462),n=(a(7294),a(3905));const o={sidebar_position:5},i="Terraform State",l={unversionedId:"admin/state",id:"admin/state",title:"Terraform State",description:"Terraform stores state about your managed infrastructure and configuration. This state is used by Terraform to map real world resources to your configuration, keep track of metadata, and to improve performance for large infrastructures. For a detailed understanding of terraform state, please visit the official docs.",source:"@site/docs/terranetes-controller/admin/state.md",sourceDirName:"admin",slug:"/admin/state",permalink:"/terranetes-controller/admin/state",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/state.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Drift Detection",permalink:"/terranetes-controller/admin/drift"},next:{title:"Kubernetes RBAC",permalink:"/terranetes-controller/admin/rbac"}},s={},c=[{value:"Where is the state?",id:"where-is-the-state",level:3},{value:"How to change state backend?",id:"how-to-change-state-backend",level:3},{value:"Create a template for the backend to use",id:"create-a-template-for-the-backend-to-use",level:4}],p={toc:c};function u(e){let{components:t,...a}=e;return(0,n.kt)("wrapper",(0,r.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"terraform-state"},"Terraform State"),(0,n.kt)("p",null,"Terraform stores state about your managed infrastructure and configuration. This state is used by Terraform to map real world resources to your configuration, keep track of metadata, and to improve performance for large infrastructures. For a detailed understanding of terraform state, please visit ",(0,n.kt)("a",{parentName:"p",href:"https://www.terraform.io/language/state"},"the official docs"),"."),(0,n.kt)("h3",{id:"where-is-the-state"},"Where is the state?"),(0,n.kt)("p",null,"By default the terraform state for all ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," is stored in ",(0,n.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/configuration/secret/"},"Kubernetes secrets")," located in the controller namespace. The following template is used as the backend."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Namespace is always the controller namespace."),(0,n.kt)("li",{parentName:"ul"},"Suffix is the ",(0,n.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," UUID."),(0,n.kt)("li",{parentName:"ul"},"Note the ",(0,n.kt)("a",{parentName:"li",href:"https://www.terraform.io/language/settings/backends/kubernetes"},"kubernetes backend")," adds a prefix ",(0,n.kt)("inlineCode",{parentName:"li"},"tfstate-")," so the state secrets will be named ",(0,n.kt)("inlineCode",{parentName:"li"},"tfstate-UUID"),".")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-go"},'var backendTF = `\nterraform {\n backend "kubernetes" {\n in_cluster_config = true\n namespace = "{{ .controller.namespace }}"\n secret_suffix = "{{ .controller.suffix }}"\n }\n}\n')),(0,n.kt)("h3",{id:"how-to-change-state-backend"},"How to change state backend?"),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"Note the ability to override the backend is only available with version >= v0.3.1")),(0,n.kt)("p",null,"While using Kubernetes as a backend has it's benefits in terms of ease of use, there's a few downsides as well."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"You need to ensure backups are performed on the state secrets."),(0,n.kt)("li",{parentName:"ul"},"Its harder operate or manipulate the terraform state, using taints for example."),(0,n.kt)("li",{parentName:"ul"},"The terraform state is not versioned so rollbacks are harder to performed."),(0,n.kt)("li",{parentName:"ul"},"You are unable to reference the state using ",(0,n.kt)("a",{parentName:"li",href:"https://www.terraform.io/language/state/remote-state-data"},"remote_state_data")," resource."),(0,n.kt)("li",{parentName:"ul"},"The terraform state is ultimately bound to the Cluster.")),(0,n.kt)("p",null,"Platform administrators can change the backend using the following steps."),(0,n.kt)("h4",{id:"create-a-template-for-the-backend-to-use"},"Create a template for the backend to use"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},"Create a kubernetes secret in the controller namespace containing the template")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},'cat < backend.tf\nterraform {\n backend "s3" {\n bucket = "terranetes-controller-state"\n key = "cluster_one/{{ .namespace }}/{{ .name }}"\n region = "eu-west-2"\n access_key = "AWS_ACCESS_KEY_ID"\n secret_key = "AWS_SECRET_ACCESS_KEY"\n }\n}\nEOF\n')),(0,n.kt)("p",null,"Note the template can reference a number variables"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"controller.namespace")," is the namespace where the terranetes-controller is running."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"controller.labels")," is a map of all the labels from the terranetes controller."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"controller.suffix")," is a controller default used for secrets (default: tfstate)."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"configuration")," is the entire Configuration object this you can reference ",(0,n.kt)("inlineCode",{parentName:"li"},"configuration.Metadata.Namespace")," for instance."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"name")," is the Configuration name being executed on"),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("inlineCode",{parentName:"li"},"namespace")," is the Configuration namespace and can be used to as a s3 key per namespace for example")),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"We inject the entire ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," resource into the context on the template, so you can reference anything side via ",(0,n.kt)("inlineCode",{parentName:"p"},"configuration.PATH"))),(0,n.kt)("p",null,"Create a kubernetes secret from the above file"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"kubectl -n terraform-system create secret generic backend-s3 --from-file=backend.tf=backend.tf\n")),(0,n.kt)("ol",{start:2},(0,n.kt)("li",{parentName:"ol"},"Update the controller to use the backend template")),(0,n.kt)("p",null,"If you are using the helm chart you simply have to update"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"controller:\n # Name of a secret in the controller namespace which contains the template to use\n # for the backend state\n backendTemplate: backend-s3\n")),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},(0,n.kt)("strong",{parentName:"p"},"Note:")," if you are using the helm chart >= v0.6.0, the format has changed to the below format")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"backend:\n name: backend-s3\n # optional: but will create the backend.name kubernetes secret based on this\n # content in 'template'\n template: |\n TEMPLATE_CONTENT\n")),(0,n.kt)("p",null,"If you are deploying the controller yourself, update the ",(0,n.kt)("inlineCode",{parentName:"p"},"--backend-template=backend-s3")," command line flag."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2b941cda.6fb02dd4.js b/assets/js/2b941cda.725cec7a.js similarity index 51% rename from assets/js/2b941cda.6fb02dd4.js rename to assets/js/2b941cda.725cec7a.js index 5b31c689..572c38ad 100644 --- a/assets/js/2b941cda.6fb02dd4.js +++ b/assets/js/2b941cda.725cec7a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[4605],{3905:(t,e,r)=>{r.d(e,{Zo:()=>p,kt:()=>f});var n=r(7294);function o(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function l(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function a(t){for(var e=1;e=0||(o[r]=t[r]);return o}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}var c=n.createContext({}),s=function(t){var e=n.useContext(c),r=e;return t&&(r="function"==typeof t?t(e):a(a({},e),t)),r},p=function(t){var e=s(t.components);return n.createElement(c.Provider,{value:e},t.children)},u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var r=t.components,o=t.mdxType,l=t.originalType,c=t.parentName,p=i(t,["components","mdxType","originalType","parentName"]),d=s(r),f=o,y=d["".concat(c,".").concat(f)]||d[f]||u[f]||l;return r?n.createElement(y,a(a({ref:e},p),{},{components:r})):n.createElement(y,a({ref:e},p))}));function f(t,e){var r=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var l=r.length,a=new Array(l);a[0]=d;var i={};for(var c in e)hasOwnProperty.call(e,c)&&(i[c]=e[c]);i.originalType=t,i.mdxType="string"==typeof t?t:o,a[1]=i;for(var s=2;s{r.r(e),r.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl retry"},a=void 0,i={unversionedId:"cli/tnctl_retry",id:"cli/tnctl_retry",title:"tnctl retry",description:"tnctl retry",source:"@site/docs/terranetes-controller/cli/tnctl_retry.md",sourceDirName:"cli",slug:"/cli/tnctl_retry",permalink:"/terranetes-controller/cli/tnctl_retry",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_retry.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl retry"},sidebar:"tutorialSidebar",previous:{title:"tnctl logs configuration",permalink:"/terranetes-controller/cli/tnctl_logs_configuration"},next:{title:"tnctl retry cloudresource",permalink:"/terranetes-controller/cli/tnctl_retry_cloudresource"}},c={},s=[{value:"tnctl retry",id:"tnctl-retry",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(t){let{components:e,...r}=t;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-retry"},"tnctl retry"),(0,o.kt)("p",null,"Attempts to trigger the resource to retry"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"By default a Configuration is only run on a change to the specification. Its\nuseful however to be able to restart the process without changing the\nspec - i.e. the credentials were incorrect and out-of-band error occurred or\nso forth."),(0,o.kt)("p",null,"This command will restart the process by tagging the configuration with a\nannotation. By default the restarted process will be watched for logs."),(0,o.kt)("p",null,"Restart the Configuration:\n$ tnctl retry NAME"),(0,o.kt)("p",null,"Restart the Configuration but do not watch the logs:\n$ tnctl retry NAME --watch=false"),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for retry\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_retry_cloudresource"},"tnctl retry cloudresource"),"\t - Attempts to restart a cloud resource"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_retry_configuration"},"tnctl retry configuration"),"\t - Attempts to restart a configuration")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[4605],{3905:(t,e,r)=>{r.d(e,{Zo:()=>p,kt:()=>f});var n=r(7294);function o(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function l(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function a(t){for(var e=1;e=0||(o[r]=t[r]);return o}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}var c=n.createContext({}),s=function(t){var e=n.useContext(c),r=e;return t&&(r="function"==typeof t?t(e):a(a({},e),t)),r},p=function(t){var e=s(t.components);return n.createElement(c.Provider,{value:e},t.children)},u={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},d=n.forwardRef((function(t,e){var r=t.components,o=t.mdxType,l=t.originalType,c=t.parentName,p=i(t,["components","mdxType","originalType","parentName"]),d=s(r),f=o,y=d["".concat(c,".").concat(f)]||d[f]||u[f]||l;return r?n.createElement(y,a(a({ref:e},p),{},{components:r})):n.createElement(y,a({ref:e},p))}));function f(t,e){var r=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var l=r.length,a=new Array(l);a[0]=d;var i={};for(var c in e)hasOwnProperty.call(e,c)&&(i[c]=e[c]);i.originalType=t,i.mdxType="string"==typeof t?t:o,a[1]=i;for(var s=2;s{r.r(e),r.d(e,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl retry"},a=void 0,i={unversionedId:"cli/tnctl_retry",id:"cli/tnctl_retry",title:"tnctl retry",description:"tnctl retry",source:"@site/docs/terranetes-controller/cli/tnctl_retry.md",sourceDirName:"cli",slug:"/cli/tnctl_retry",permalink:"/terranetes-controller/cli/tnctl_retry",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_retry.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl retry"},sidebar:"tutorialSidebar",previous:{title:"tnctl logs configuration",permalink:"/terranetes-controller/cli/tnctl_logs_configuration"},next:{title:"tnctl retry cloudresource",permalink:"/terranetes-controller/cli/tnctl_retry_cloudresource"}},c={},s=[{value:"tnctl retry",id:"tnctl-retry",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(t){let{components:e,...r}=t;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-retry"},"tnctl retry"),(0,o.kt)("p",null,"Attempts to trigger the resource to retry"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"By default a Configuration is only run on a change to the specification. Its\nuseful however to be able to restart the process without changing the\nspec - i.e. the credentials were incorrect and out-of-band error occurred or\nso forth."),(0,o.kt)("p",null,"This command will restart the process by tagging the configuration with a\nannotation. By default the restarted process will be watched for logs."),(0,o.kt)("p",null,"Restart the Configuration:\n$ tnctl retry NAME"),(0,o.kt)("p",null,"Restart the Configuration but do not watch the logs:\n$ tnctl retry NAME --watch=false"),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for retry\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_retry_cloudresource"},"tnctl retry cloudresource"),"\t - Attempts to restart a cloud resource"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_retry_configuration"},"tnctl retry configuration"),"\t - Attempts to restart a configuration")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2cdad165.9132581a.js b/assets/js/2cdad165.5b87cc97.js similarity index 52% rename from assets/js/2cdad165.9132581a.js rename to assets/js/2cdad165.5b87cc97.js index 215c7242..468d0dff 100644 --- a/assets/js/2cdad165.9132581a.js +++ b/assets/js/2cdad165.5b87cc97.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5700],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),f=o,m=p["".concat(s,".").concat(f)]||p[f]||d[f]||a;return r?n.createElement(m,c(c({ref:t},u),{},{components:r})):n.createElement(m,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=p;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl config sources add"},c=void 0,i={unversionedId:"cli/tnctl_config_sources_add",id:"cli/tnctl_config_sources_add",title:"tnctl config sources add",description:"tnctl config sources add",source:"@site/docs/terranetes-controller/cli/tnctl_config_sources_add.md",sourceDirName:"cli",slug:"/cli/tnctl_config_sources_add",permalink:"/terranetes-controller/cli/tnctl_config_sources_add",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_config_sources_add.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl config sources add"},sidebar:"tutorialSidebar",previous:{title:"tnctl config sources",permalink:"/terranetes-controller/cli/tnctl_config_sources"},next:{title:"tnctl config sources list",permalink:"/terranetes-controller/cli/tnctl_config_sources_list"}},s={},l=[{value:"tnctl config sources add",id:"tnctl-config-sources-add",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:l};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-config-sources-add"},"tnctl config sources add"),(0,o.kt)("p",null,"Adds a terraform module source to the configuration"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Sources are the URL locations for terraform modules. By default if\nno sources are defined we use the public terraform registry. We currently\nsupport aggregating modules from any terraform registry and Github."),(0,o.kt)("p",null,"Add a terraform registry to the source\n$ tnctl config sources add ",(0,o.kt)("a",{parentName:"p",href:"https://registry.terraform.io"},"https://registry.terraform.io")),(0,o.kt)("p",null,"Add a Github organization or user to the source\n$ tnctl config sources add github.com/appvia/terranetes-controller"),(0,o.kt)("p",null,"Note, skipping the name github organization or user requires your GITHUB_TOKEN\nis exported as the CLI will use this to authenticate to the github and\nsearch any repositories you are a member, contributor or owner of."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl config sources add SOURCE [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for add\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources"},"tnctl config sources"),"\t - Used to manage the sources of the terraform modules")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5700],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),l=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=l(r),f=o,m=p["".concat(s,".").concat(f)]||p[f]||d[f]||a;return r?n.createElement(m,c(c({ref:t},u),{},{components:r})):n.createElement(m,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=p;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>c,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl config sources add"},c=void 0,i={unversionedId:"cli/tnctl_config_sources_add",id:"cli/tnctl_config_sources_add",title:"tnctl config sources add",description:"tnctl config sources add",source:"@site/docs/terranetes-controller/cli/tnctl_config_sources_add.md",sourceDirName:"cli",slug:"/cli/tnctl_config_sources_add",permalink:"/terranetes-controller/cli/tnctl_config_sources_add",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_config_sources_add.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl config sources add"},sidebar:"tutorialSidebar",previous:{title:"tnctl config sources",permalink:"/terranetes-controller/cli/tnctl_config_sources"},next:{title:"tnctl config sources list",permalink:"/terranetes-controller/cli/tnctl_config_sources_list"}},s={},l=[{value:"tnctl config sources add",id:"tnctl-config-sources-add",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:l};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-config-sources-add"},"tnctl config sources add"),(0,o.kt)("p",null,"Adds a terraform module source to the configuration"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Sources are the URL locations for terraform modules. By default if\nno sources are defined we use the public terraform registry. We currently\nsupport aggregating modules from any terraform registry and Github."),(0,o.kt)("p",null,"Add a terraform registry to the source\n$ tnctl config sources add ",(0,o.kt)("a",{parentName:"p",href:"https://registry.terraform.io"},"https://registry.terraform.io")),(0,o.kt)("p",null,"Add a Github organization or user to the source\n$ tnctl config sources add github.com/appvia/terranetes-controller"),(0,o.kt)("p",null,"Note, skipping the name github organization or user requires your GITHUB_TOKEN\nis exported as the CLI will use this to authenticate to the github and\nsearch any repositories you are a member, contributor or owner of."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl config sources add SOURCE [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for add\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources"},"tnctl config sources"),"\t - Used to manage the sources of the terraform modules")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/31230563.0b524a64.js b/assets/js/31230563.0b524a64.js deleted file mode 100644 index 62d4b7b5..00000000 --- a/assets/js/31230563.0b524a64.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5518],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),u=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=u(e.components);return n.createElement(a.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,a=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),d=u(r),f=o,m=d["".concat(a,".").concat(f)]||d[f]||p[f]||c;return r?n.createElement(m,l(l({ref:t},s),{},{components:r})):n.createElement(m,l({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,l=new Array(c);l[0]=d;var i={};for(var a in t)hasOwnProperty.call(t,a)&&(i[a]=t[a]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>c,metadata:()=>i,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl convert cloudresource"},l=void 0,i={unversionedId:"cli/tnctl_convert_cloudresource",id:"cli/tnctl_convert_cloudresource",title:"tnctl convert cloudresource",description:"tnctl convert cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_convert_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_convert_cloudresource",permalink:"/terranetes-controller/cli/tnctl_convert_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_convert_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl convert cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl convert",permalink:"/terranetes-controller/cli/tnctl_convert"},next:{title:"tnctl convert configuration",permalink:"/terranetes-controller/cli/tnctl_convert_configuration"}},a={},u=[{value:"tnctl convert cloudresource",id:"tnctl-convert-cloudresource",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:u};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-convert-cloudresource"},"tnctl convert cloudresource"),(0,o.kt)("p",null,"Used to convert cloudresource back to terraform"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Provides the ability to convert configurations and cloudresources back\ninto terraform modules."),(0,o.kt)("p",null,"Note, if you include --include-provider or --include-checkov, this\ncommand will use the current kubeconfig context to retrieve the provider\nand checkov policy from the cluster."),(0,o.kt)("p",null,"Convert a configuration in the cluster into a terraform module:\n$ tnctl convert configuration -n my-namespace my-configuration"),(0,o.kt)("p",null,"Convert a configuration file into a terraform module:\n$ tnctl convert configuration -f my-configuration.yaml"),(0,o.kt)("p",null,"Convert a cloudresource in the cluster into a terraform module:\n$ tnctl convert cloudresource -n my-namespace my-cloudresource"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl convert cloudresource [OPTIONS] NAME [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -h, --help help for cloudresource\n --include-checkov Include checkov in the output (default true)\n --include-provider Include provider in the output (default true)\n -n, --namespace string Namespace of the resource (default "default")\n -p, --path string The path to write the files to (default ".")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_convert"},"tnctl convert"),"\t - Used to convert between different formats")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/31230563.bb562721.js b/assets/js/31230563.bb562721.js new file mode 100644 index 00000000..3753ad7a --- /dev/null +++ b/assets/js/31230563.bb562721.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5518],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),u=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=u(e.components);return n.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,i=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),d=u(r),f=o,m=d["".concat(i,".").concat(f)]||d[f]||p[f]||c;return r?n.createElement(m,l(l({ref:t},s),{},{components:r})):n.createElement(m,l({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,l=new Array(c);l[0]=d;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:o,l[1]=a;for(var u=2;u{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>p,frontMatter:()=>c,metadata:()=>a,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl convert cloudresource"},l=void 0,a={unversionedId:"cli/tnctl_convert_cloudresource",id:"cli/tnctl_convert_cloudresource",title:"tnctl convert cloudresource",description:"tnctl convert cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_convert_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_convert_cloudresource",permalink:"/terranetes-controller/cli/tnctl_convert_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_convert_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl convert cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl convert",permalink:"/terranetes-controller/cli/tnctl_convert"},next:{title:"tnctl convert configuration",permalink:"/terranetes-controller/cli/tnctl_convert_configuration"}},i={},u=[{value:"tnctl convert cloudresource",id:"tnctl-convert-cloudresource",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:u};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-convert-cloudresource"},"tnctl convert cloudresource"),(0,o.kt)("p",null,"Used to convert cloudresource back to terraform"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Provides the ability to convert configurations and cloudresources back\ninto terraform modules."),(0,o.kt)("p",null,"Note, if you include --include-provider or --include-checkov, this\ncommand will use the current kubeconfig context to retrieve the provider\nand checkov policy from the cluster."),(0,o.kt)("p",null,"Convert a configuration in the cluster into a terraform module:\n$ tnctl convert configuration -n my-namespace my-configuration"),(0,o.kt)("p",null,"Convert a configuration file into a terraform module:\n$ tnctl convert configuration -f my-configuration.yaml"),(0,o.kt)("p",null,"Convert a cloudresource in the cluster into a terraform module:\n$ tnctl convert cloudresource -n my-namespace my-cloudresource"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl convert cloudresource [OPTIONS] NAME [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -h, --help help for cloudresource\n --include-checkov Include checkov in the output (default true)\n --include-provider Include provider in the output (default true)\n -n, --namespace string Namespace of the resource (default "default")\n -p, --path string The path to write the files to (default ".")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_convert"},"tnctl convert"),"\t - Used to convert between different formats")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/322e2069.e0214920.js b/assets/js/322e2069.40b3a685.js similarity index 55% rename from assets/js/322e2069.e0214920.js rename to assets/js/322e2069.40b3a685.js index a1d8a39d..be899b0e 100644 --- a/assets/js/322e2069.e0214920.js +++ b/assets/js/322e2069.40b3a685.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8300],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=p(r),d=o,m=u["".concat(c,".").concat(d)]||u[d]||f[d]||l;return r?n.createElement(m,a(a({ref:t},s),{},{components:r})):n.createElement(m,a({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,a=new Array(l);a[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>f,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl workflow"},a=void 0,i={unversionedId:"cli/tnctl_workflow",id:"cli/tnctl_workflow",title:"tnctl workflow",description:"tnctl workflow",source:"@site/docs/terranetes-controller/cli/tnctl_workflow.md",sourceDirName:"cli",slug:"/cli/tnctl_workflow",permalink:"/terranetes-controller/cli/tnctl_workflow",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_workflow.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl workflow"},sidebar:"tutorialSidebar",previous:{title:"tnctl verify revision",permalink:"/terranetes-controller/cli/tnctl_verify_revision"},next:{title:"tnctl workflow create",permalink:"/terranetes-controller/cli/tnctl_workflow_create"}},c={},p=[{value:"tnctl workflow",id:"tnctl-workflow",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function f(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-workflow"},"tnctl workflow"),(0,o.kt)("p",null,"Can be used to generate a skelton CI pipeline"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Workflow provide an out of the box solution to generating ci\npipelines for your terraform modules. The pipelines are coded\nto enforce, linting, validation, documentation generation\nand security scanning. Also when enabled the pipeline will\nalso include a release."),(0,o.kt)("p",null,"Generate a pipeline for a terraform module\n$ tnctl workflow create PATH"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl workflow COMMAND [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for workflow\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_workflow_create"},"tnctl workflow create"),"\t - Generates a workflow used to lint, validate and publish the module")))}f.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8300],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=p(r),d=o,m=u["".concat(c,".").concat(d)]||u[d]||f[d]||l;return r?n.createElement(m,a(a({ref:t},s),{},{components:r})):n.createElement(m,a({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,a=new Array(l);a[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>f,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl workflow"},a=void 0,i={unversionedId:"cli/tnctl_workflow",id:"cli/tnctl_workflow",title:"tnctl workflow",description:"tnctl workflow",source:"@site/docs/terranetes-controller/cli/tnctl_workflow.md",sourceDirName:"cli",slug:"/cli/tnctl_workflow",permalink:"/terranetes-controller/cli/tnctl_workflow",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_workflow.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl workflow"},sidebar:"tutorialSidebar",previous:{title:"tnctl verify revision",permalink:"/terranetes-controller/cli/tnctl_verify_revision"},next:{title:"tnctl workflow create",permalink:"/terranetes-controller/cli/tnctl_workflow_create"}},c={},p=[{value:"tnctl workflow",id:"tnctl-workflow",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function f(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-workflow"},"tnctl workflow"),(0,o.kt)("p",null,"Can be used to generate a skelton CI pipeline"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Workflow provide an out of the box solution to generating ci\npipelines for your terraform modules. The pipelines are coded\nto enforce, linting, validation, documentation generation\nand security scanning. Also when enabled the pipeline will\nalso include a release."),(0,o.kt)("p",null,"Generate a pipeline for a terraform module\n$ tnctl workflow create PATH"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl workflow COMMAND [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for workflow\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_workflow_create"},"tnctl workflow create"),"\t - Generates a workflow used to lint, validate and publish the module")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/32424a33.41427e84.js b/assets/js/32424a33.41427e84.js new file mode 100644 index 00000000..c362bfd0 --- /dev/null +++ b/assets/js/32424a33.41427e84.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[115],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),f=p(n),m=a,d=f["".concat(s,".").concat(m)]||f[m]||u[m]||o;return n?r.createElement(d,i(i({ref:t},c),{},{components:n})):r.createElement(d,i({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var r=n(7462),a=(n(7294),n(3905));const o={sidebar_position:3},i="Configuration Contexts",l={unversionedId:"developer/contexts",id:"developer/contexts",title:"Configuration Contexts",description:"Configuration Contexts are a means to share common configuration (inputs) between Configurations in the cluster.",source:"@site/docs/terranetes-controller/developer/contexts.md",sourceDirName:"developer",slug:"/developer/contexts",permalink:"/terranetes-controller/developer/contexts",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/developer/contexts.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Using Private Repositories",permalink:"/terranetes-controller/developer/private"},next:{title:"Enabling Drift Protection",permalink:"/terranetes-controller/developer/drift"}},s={},p=[{value:"Viewing the Contexts",id:"viewing-the-contexts",level:2},{value:"Referencing Context Values",id:"referencing-context-values",level:2},{value:"Field Definitions",id:"field-definitions",level:3}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"configuration-contexts"},"Configuration Contexts"),(0,a.kt)("p",null,"Configuration ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Contexts")," are a means to share common configuration (inputs) between ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," in the cluster."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"This feature is only available from v0.3.25 onwards")),(0,a.kt)("p",null,"These are provisioned by the platform team, but can be referenced by any ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")),(0,a.kt)("h2",{id:"viewing-the-contexts"},"Viewing the Contexts"),(0,a.kt)("p",null,"You can list all the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Contexts")," available via"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl get contexts\n")),(0,a.kt)("p",null,"The contains is a map of entities which contains both a ",(0,a.kt)("inlineCode",{parentName:"p"},"description")," an d ",(0,a.kt)("inlineCode",{parentName:"p"},"value"),", as such;"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: terraform.appvia.io/v1alpha1\nkind: Context\nmetadata:\n name: default\nspec:\n #\n ## All variables MUST follow the pattern of 'description' and 'value'. The\n ## value can be any complex or simple type (boolean, int, map, object etc)\n #\n variables:\n environment:\n description: Is the environment your running in\n value: dev\n # Is the name of the variable\n vpc_id:\n # Provides a description to the consumer of the input\n description: Is the network identifier we are residing\n # The value of the value\n value: vpc-1223133113\n public_subnets_ids:\n # Provides a description to the consumer of the input\n description: |\n Is a collection of subnet id's which are publicly available i.e.\n they are attached to an internet gateway\n # The value of the value\n value:\n - subnet-12312312312\n - subnet-32332321312\n")),(0,a.kt)("h2",{id:"referencing-context-values"},"Referencing Context Values"),(0,a.kt)("p",null,"You can reference a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," value using the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.valueFrom")," field in the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")),(0,a.kt)("p",null,"For instance if we have a module that requires knowledge of the VPC id, we can use"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"}," ---\n apiVersion: terraform.appvia.io/v1alpha1\n kind: Configuration\n metadata:\n name: bucket\n spec:\n module: https://github.com/terraform-aws-modules/terraform-aws-rds\n\n providerRef:\n name: aws\n valueFrom:\n - context: NAME_OF_CONTEXT\n key: vpc\n name: vpc_id\n optional: true\n")),(0,a.kt)("h3",{id:"field-definitions"},"Field Definitions"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"context")," is the name of the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," resource to reference."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"key")," is the name of the variable inside the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," resource."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"name")," is the name we present the value to the terraform module - i.e you might need ",(0,a.kt)("inlineCode",{parentName:"li"},"vpc_id")," mapped to ",(0,a.kt)("inlineCode",{parentName:"li"},"network_id")," or ",(0,a.kt)("inlineCode",{parentName:"li"},"vpc")," in the module."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"optional")," controls if the value or ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," needs to exist, if true, any missing value is ignored.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/32424a33.a50f2f70.js b/assets/js/32424a33.a50f2f70.js deleted file mode 100644 index 7830f7e2..00000000 --- a/assets/js/32424a33.a50f2f70.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[115],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),f=p(n),d=a,m=f["".concat(s,".").concat(d)]||f[d]||u[d]||o;return n?r.createElement(m,i(i({ref:t},c),{},{components:n})):r.createElement(m,i({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var r=n(7462),a=(n(7294),n(3905));const o={sidebar_position:3},i="Configuration Contexts",l={unversionedId:"developer/contexts",id:"developer/contexts",title:"Configuration Contexts",description:"Configuration Contexts are a means to share common configuration (inputs) between Configurations in the cluster.",source:"@site/docs/terranetes-controller/developer/contexts.md",sourceDirName:"developer",slug:"/developer/contexts",permalink:"/terranetes-controller/developer/contexts",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/developer/contexts.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Using Private Repositories",permalink:"/terranetes-controller/developer/private"},next:{title:"Enabling Drift Protection",permalink:"/terranetes-controller/developer/drift"}},s={},p=[{value:"Viewing the Contexts",id:"viewing-the-contexts",level:2},{value:"Referencing Context Values",id:"referencing-context-values",level:2},{value:"Field Definitions",id:"field-definitions",level:3}],c={toc:p};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"configuration-contexts"},"Configuration Contexts"),(0,a.kt)("p",null,"Configuration ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Contexts")," are a means to share common configuration (inputs) between ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," in the cluster."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"This feature is only available from v0.3.25 onwards")),(0,a.kt)("p",null,"These are provisioned by the platform team, but can be referenced by any ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")),(0,a.kt)("h2",{id:"viewing-the-contexts"},"Viewing the Contexts"),(0,a.kt)("p",null,"You can list all the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Contexts")," available via"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl get contexts\n")),(0,a.kt)("p",null,"The contains is a map of entities which contains both a ",(0,a.kt)("inlineCode",{parentName:"p"},"description")," an d ",(0,a.kt)("inlineCode",{parentName:"p"},"value"),", as such;"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: terraform.appvia.io/v1alpha1\nkind: Context\nmetadata:\n name: default\nspec:\n #\n ## All variables MUST follow the pattern of 'description' and 'value'. The\n ## value can be any complex or simple type (boolean, int, map, object etc)\n #\n variables:\n environment:\n description: Is the environment your running in\n value: dev\n # Is the name of the variable\n vpc_id:\n # Provides a description to the consumer of the input\n description: Is the network identifier we are residing\n # The value of the value\n value: vpc-1223133113\n public_subnets_ids:\n # Provides a description to the consumer of the input\n description: |\n Is a collection of subnet id's which are publicly available i.e.\n they are attached to an internet gateway\n # The value of the value\n value:\n - subnet-12312312312\n - subnet-32332321312\n")),(0,a.kt)("h2",{id:"referencing-context-values"},"Referencing Context Values"),(0,a.kt)("p",null,"You can reference a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," value using the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.valueFrom")," field in the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")),(0,a.kt)("p",null,"For instance if we have a module that requires knowledge of the VPC id, we can use"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"}," ---\n apiVersion: terraform.appvia.io/v1alpha1\n kind: Configuration\n metadata:\n name: bucket\n spec:\n module: https://github.com/terraform-aws-modules/terraform-aws-rds\n\n providerRef:\n name: aws\n valueFrom:\n - context: NAME_OF_CONTEXT\n key: vpc\n name: vpc_id\n optional: true\n")),(0,a.kt)("h3",{id:"field-definitions"},"Field Definitions"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"context")," is the name of the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," resource to reference."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"key")," is the name of the variable inside the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," resource."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"name")," is the name we present the value to the terraform module - i.e you might need ",(0,a.kt)("inlineCode",{parentName:"li"},"vpc_id")," mapped to ",(0,a.kt)("inlineCode",{parentName:"li"},"network_id")," or ",(0,a.kt)("inlineCode",{parentName:"li"},"vpc")," in the module."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"optional")," controls if the value or ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," needs to exist, if true, any missing value is ignored.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/35262849.340f8acb.js b/assets/js/35262849.340f8acb.js new file mode 100644 index 00000000..4a0fd34d --- /dev/null +++ b/assets/js/35262849.340f8acb.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6427],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(l[r]=e[r]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r])}return l}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,l=e.mdxType,o=e.originalType,i=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),f=s(r),d=l,m=f["".concat(i,".").concat(d)]||f[d]||u[d]||o;return r?n.createElement(m,a(a({ref:t},p),{},{components:r})):n.createElement(m,a({ref:t},p))}));function d(e,t){var r=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=r.length,a=new Array(o);a[0]=f;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:l,a[1]=c;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>s});var n=r(7462),l=(r(7294),r(3905));const o={title:"tnctl get"},a=void 0,c={unversionedId:"cli/tnctl_get",id:"cli/tnctl_get",title:"tnctl get",description:"tnctl get",source:"@site/docs/terranetes-controller/cli/tnctl_get.md",sourceDirName:"cli",slug:"/cli/tnctl_get",permalink:"/terranetes-controller/cli/tnctl_get",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get"},sidebar:"tutorialSidebar",previous:{title:"tnctl describe configuration",permalink:"/terranetes-controller/cli/tnctl_describe_configuration"},next:{title:"tnctl get cloudresource",permalink:"/terranetes-controller/cli/tnctl_get_cloudresource"}},i={},s=[{value:"tnctl get",id:"tnctl-get",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,l.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-get"},"tnctl get"),(0,l.kt)("p",null,"Used to retrieve a list of resources"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl get KIND [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"}," -h, --help help for get\n")),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get_cloudresource"},"tnctl get cloudresource"),"\t - Used to retrieve cloudresource/s from the cluster"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get_configuration"},"tnctl get configuration"),"\t - Used to retrieve configuration/s from the cluster"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get_context"},"tnctl get context"),"\t - Used to retrieve context/s from the cluster"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get_plan"},"tnctl get plan"),"\t - Used to retrieve plan/s from the cluster"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get_policy"},"tnctl get policy"),"\t - Used to retrieve policy/s from the cluster"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get_revision"},"tnctl get revision"),"\t - Used to retrieve revision/s from the cluster")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/35262849.44616e24.js b/assets/js/35262849.44616e24.js deleted file mode 100644 index b6bf8513..00000000 --- a/assets/js/35262849.44616e24.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6427],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(l[r]=e[r]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r])}return l}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,l=e.mdxType,o=e.originalType,i=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=s(r),f=l,m=d["".concat(i,".").concat(f)]||d[f]||u[f]||o;return r?n.createElement(m,a(a({ref:t},p),{},{components:r})):n.createElement(m,a({ref:t},p))}));function f(e,t){var r=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=r.length,a=new Array(o);a[0]=d;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:l,a[1]=c;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>s});var n=r(7462),l=(r(7294),r(3905));const o={title:"tnctl get"},a=void 0,c={unversionedId:"cli/tnctl_get",id:"cli/tnctl_get",title:"tnctl get",description:"tnctl get",source:"@site/docs/terranetes-controller/cli/tnctl_get.md",sourceDirName:"cli",slug:"/cli/tnctl_get",permalink:"/terranetes-controller/cli/tnctl_get",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get"},sidebar:"tutorialSidebar",previous:{title:"tnctl describe configuration",permalink:"/terranetes-controller/cli/tnctl_describe_configuration"},next:{title:"tnctl get cloudresource",permalink:"/terranetes-controller/cli/tnctl_get_cloudresource"}},i={},s=[{value:"tnctl get",id:"tnctl-get",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,l.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-get"},"tnctl get"),(0,l.kt)("p",null,"Used to retrieve a list of resources"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl get KIND [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"}," -h, --help help for get\n")),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get_cloudresource"},"tnctl get cloudresource"),"\t - Used to retrieve cloudresource/s from the cluster"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get_configuration"},"tnctl get configuration"),"\t - Used to retrieve configuration/s from the cluster"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get_context"},"tnctl get context"),"\t - Used to retrieve context/s from the cluster"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get_plan"},"tnctl get plan"),"\t - Used to retrieve plan/s from the cluster"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get_policy"},"tnctl get policy"),"\t - Used to retrieve policy/s from the cluster"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get_revision"},"tnctl get revision"),"\t - Used to retrieve revision/s from the cluster")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/370dbcd4.80288bcd.js b/assets/js/370dbcd4.80288bcd.js deleted file mode 100644 index 3020b286..00000000 --- a/assets/js/370dbcd4.80288bcd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[7683],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),d=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=d(e.components);return n.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=d(r),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||o;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var d=2;d{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:1,sidebar_class_name:"green"},i="Configure Providers",s={unversionedId:"admin/providers",id:"admin/providers",title:"Configure Providers",description:"Credentials to access the cloud are represented by Providers in the controller, a cluster scoped resource. When defining a terraform module developers reference a provider using spec.providerRef, tying together the resource and credentials.",source:"@site/docs/terranetes-controller/admin/providers.md",sourceDirName:"admin",slug:"/admin/providers",permalink:"/terranetes-controller/admin/providers",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/providers.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Administration",permalink:"/terranetes-controller/category/administration"},next:{title:"Define Guardrails",permalink:"/terranetes-controller/category/define-guardrails"}},l={},d=[{value:"Use a provider",id:"use-a-provider",level:2},{value:"Default Provider",id:"default-provider",level:3},{value:"Configure credentials",id:"configure-credentials",level:2},{value:"Configure by secret",id:"configure-by-secret",level:3},{value:"Configure injected identity",id:"configure-injected-identity",level:3},{value:"Configure IRSA for Amazon Web Services",id:"configure-irsa-for-amazon-web-services",level:3},{value:"Configure Azure AAD Pod Identity",id:"configure-azure-aad-pod-identity",level:3},{value:"Service Account Permissions",id:"service-account-permissions",level:4},{value:"Configure RBAC for providers",id:"configure-rbac-for-providers",level:2},{value:"Provider Configuration",id:"provider-configuration",level:2}],c={toc:d};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"configure-providers"},"Configure Providers"),(0,a.kt)("p",null,"Credentials to access the cloud are represented by ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Providers")," in the controller, a cluster scoped resource. When defining a terraform module developers reference a provider using ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.providerRef"),", tying together the resource and credentials."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"Note, credentials never leave the controller namespace, removing the risk of exposure.")),(0,a.kt)("h2",{id:"use-a-provider"},"Use a provider"),(0,a.kt)("p",null,"To reference a Provider apply the following Terraform configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Configuration\nmetadata:\n name: bucket\nspec:\n providerRef:\n name: aws\n module: \n variables: {}\n")),(0,a.kt)("h3",{id:"default-provider"},"Default Provider"),(0,a.kt)("p",null,"In order to remove the need for developers to discover Providers, platform administrators can set a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," to be default. Under these condition any ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," which has not defined the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.providerRef.name")," will have the default Provider automatically injected for them."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"Note, this feature is only available from >= v0.3.19 release")),(0,a.kt)("p",null,"In order to configure an ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," as default, add the annotation ",(0,a.kt)("inlineCode",{parentName:"p"},'terranetes.appvia.io/default-provider: "true"')," as before. Note, only one ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," can be configured as 'default' at a time."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'---\napiVersion: terraform.appvia.io/v1alpha1\nkind: Provider\nmetadata:\n name: aws\n annotations:\n terranetes.appvia.io/default-provider: "true"\nspec:\n')),(0,a.kt)("h2",{id:"configure-credentials"},"Configure credentials"),(0,a.kt)("p",null,"In ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Providers")," we currently support these options for configuring credentials:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"spec.source: secret")," References a kubernetes secret and mounts as environment variables into the executor."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"spec.source: injected")," Runs the executor with a defined service account. This is used to support pod identity or IRSA in AWS.")),(0,a.kt)("p",null,"These are described below."),(0,a.kt)("h3",{id:"configure-by-secret"},"Configure by secret"),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"Static credentials are the easiest to get going, but moving forward we highly recommend using pod identity and offloading credentials management to the cloud provider.")),(0,a.kt)("p",null,"All the terraform providers support configuration using environment variables, e.g., for AWS you can use ",(0,a.kt)("inlineCode",{parentName:"p"},"AWS_REGION"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"AWS_ACCESS_KEY_ID")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"AWS_SECRET_ACCESS_KEY"),". Simply create a Kubernetes secret in the controller namespace (defaults to ",(0,a.kt)("inlineCode",{parentName:"p"},"terraform-system"),") with these environment variables defined:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl -n terraform-system create secret generic aws \\\n --from-literal=AWS_ACCESS_KEY_ID= \\\n --from-literal=AWS_SECRET_ACCESS_KEY= \\\n --from-literal=AWS_REGION=\n")),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"Static credentials secrets must exist within the same namespace as the terraform controller itself. This is due to the fact the credentials are mounted into the job as environment variables.")),(0,a.kt)("p",null,"The process is the same for all the providers:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://registry.terraform.io/providers/hashicorp/aws/latest/docs"},"Amazon")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://registry.terraform.io/providers/hashicorp/google/latest"},"Google Cloud")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs"},"Azure"))),(0,a.kt)("p",null,"Presently we support using ",(0,a.kt)("inlineCode",{parentName:"p"},"google"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"aws")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"azurerm")," as providers. The controller is not limited to these, but for additional providers you'll have to define them yourself in the module."),(0,a.kt)("p",null,"Once the secret is provisioned you can create a Provider for it:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Provider\nmetadata:\n # This name should match the `providerRef` in the Configuration.\n name: default\nspec:\n summary: Default providers for all configurations\n source: secret\n provider: aws\n secretRef:\n namespace: terraform-system\n name: aws\n")),(0,a.kt)("h3",{id:"configure-injected-identity"},"Configure injected identity"),(0,a.kt)("p",null,"Injected identities are known by a few names depending on the cloud provider you are using. On"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS - ",(0,a.kt)("a",{parentName:"li",href:"https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-enable-IAM.html"},"IRSA")),(0,a.kt)("li",{parentName:"ul"},"Google - ",(0,a.kt)("a",{parentName:"li",href:"https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity"},"workload identity")),(0,a.kt)("li",{parentName:"ul"},"Azure - ",(0,a.kt)("a",{parentName:"li",href:"https://docs.microsoft.com/en-us/azure/aks/use-azure-ad-pod-identity"},"pod identity"))),(0,a.kt)("p",null,"In all cases these perform the same task:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"One or more roles are configured in the cloud provider with defined permissions."),(0,a.kt)("li",{parentName:"ul"},"A binding (cloud vendor dependent) is provisioned that gives a ",(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/"},"service account")," in Kubernetes the ability to retrieve short-term credentials for a defined Role."),(0,a.kt)("li",{parentName:"ul"},"The cloud vendor generates ephemeral credentials and returns them to the workload.")),(0,a.kt)("p",null,"Under this scenario all credentials management is offloaded to the cloud vendor and ensures the credentials used are short-lived and expire, thus improving the overall security."),(0,a.kt)("p",null,"Configuring injected identities is cloud dependent and the complete details are beyond the scope of this document."),(0,a.kt)("h3",{id:"configure-irsa-for-amazon-web-services"},"Configure IRSA for Amazon Web Services"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Before using IRSA in EKS, you must configure an OIDC connector. For details, see ",(0,a.kt)("a",{parentName:"p",href:"https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-technical-overview.html"},"Technical overview"),"."),(0,a.kt)("admonition",{parentName:"li",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"If you can build your clusters via Terraform, take a look at ",(0,a.kt)("a",{parentName:"p",href:"https://registry.terraform.io/modules/terraform-aws-modules/iam/aws/latest/submodules/iam-role-for-service-accounts-eks"},"https://registry.terraform.io/modules/terraform-aws-modules/iam/aws/latest/submodules/iam-role-for-service-accounts-eks")))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Update your helm values in a similar way to the example below. The important values here are the annotations for the service account used by the executor; this must contain the ARN for the role to be used."))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"rbac:\n # Indicates we should create all the necessary rbac resources\n create: true\n # ServiceAccount for the controller\n controller:\n # indicates we should create the terranetes-controller service account\n create: true\n # annotations is a collection of annotations which should be added to the ServiceAccount\n annotations: {}\n\n # Configuration for the terraform executor service account\n executor:\n # indicates we should create the terraform-executor service account\n create: true\n # annotations is a collection of annotations which should be added to the ServiceAccount\n annotations:\n eks.amazonaws.com/role-arn: arn:aws:iam:::role/\n")),(0,a.kt)("p",null,"When the pod is created:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"The EKS controlplane sees the annotation on the service account."),(0,a.kt)("li",{parentName:"ol"},"It checks for a binding between the service account and the defined IAM role."),(0,a.kt)("li",{parentName:"ol"},"If such a binding exists, it generates credentials and injects them via a secret as environment variables into the pod.")),(0,a.kt)("h3",{id:"configure-azure-aad-pod-identity"},"Configure Azure AAD Pod Identity"),(0,a.kt)("p",null,"In order to use Azure's Pod identity service we need to"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Ensure the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," msi configuration")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Provider\nmetadata:\n name: azurerm\nspec:\n # Anything in configuration section is converting to HCL and configured the provider\n configuration:\n subscription_id: AZURE_SUBSCRIPTION_ID\n tenant_id: AZURE_TENANT_ID\n use_msi: true\n source: injected\n provider: azurerm\n")),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Ensure you have added the ",(0,a.kt)("inlineCode",{parentName:"p"},"use_msi: true")," on the Provider configuration otherwise the AzureRM provider will attempt to fallback to the ",(0,a.kt)("inlineCode",{parentName:"p"},"az")," CLI and complain the binary is not found")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"Provision the Azure Identity in the subscription (",(0,a.kt)("a",{parentName:"li",href:"https://azure.github.io/aad-pod-identity/docs/demo/standard_walkthrough/"},"https://azure.github.io/aad-pod-identity/docs/demo/standard_walkthrough/"),")"),(0,a.kt)("li",{parentName:"ol"},"Provision the Azure Identity in the controller namespace")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: aadpodidentity.k8s.io/v1\nkind: AzureIdentity\nmetadata:\n annotations:\n aadpodidentity.k8s.io/Behavior: namespaced\n generation: 3\n name: terranetes-controller\n namespace: terraform-system\nspec:\n clientID: CLIENT_ID\n resourceID: /subscriptions/SUBSCRIPTION/resourcegroups/RESOURCE_GROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/IDENTITY\n type: 0\n")),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},"Provision the binding to the pods")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: aadpodidentity.k8s.io/v1\nkind: AzureIdentityBinding\nmetadata:\n name: terranetes-controller\n namespace: terraform-system\nspec:\n azureIdentity: IDENTITY\n selector: terranetes-executor\n")),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Details on binding can be found ",(0,a.kt)("a",{parentName:"p",href:"https://azure.github.io/aad-pod-identity/docs/concepts/azureidentitybinding/"},"here"),", but essentially it's used to filter the pods in the namespace and provide the permissions to the pods that match the labels - i.e. the pod must have label of the same name and value."),(0,a.kt)("p",{parentName:"admonition"},"As of <= v0.3.30 the pod selector is not configurable in the controller to ensure you use ",(0,a.kt)("inlineCode",{parentName:"p"},"terranetes-executor")," on the binding.")),(0,a.kt)("h4",{id:"service-account-permissions"},"Service Account Permissions"),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"The following is important when using or creating additional service accounts for a Provider. For example lets assume you create another service account 'admin' in the terraform-system namespace and reference that service account in a Provider which uses that account for IRSA.")),(0,a.kt)("p",null,"By default the service account the terraform controller uses to execute jobs is ",(0,a.kt)("inlineCode",{parentName:"p"},"terraform-executor"),". If you require additional service accounts for Providers i.e for use with ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.source: injected")," or simply needing to use another service account; you need to ensure the correct RBAC permissions. The terraform job is using kubernetes secrets to store the terraform state and leases for locking. So the following needs to be in place."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n name: NAME_OF_ROLE\n namespace: terraform-system\nrules:\n - apiGroups:\n - coordination.k8s.io\n resources:\n - leases\n verbs:\n - create\n - delete\n - get\n - list\n - update\n - watch\n - apiGroups:\n - ""\n resources:\n - configmaps\n verbs:\n - get\n - list\n - watch\n - apiGroups:\n - ""\n resources:\n - secrets\n verbs:\n - create\n - delete\n - get\n - list\n - patch\n - update\n - watch\n')),(0,a.kt)("p",null,"And a binding to the service account."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"}," ---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: terraform-executor\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: NAME_OF_ROLE\nsubjects:\n - kind: ServiceAccount\n name: terraform-executor\n namespace: terraform-system\n")),(0,a.kt)("p",null,"Without this the terraform execution will simply fail on access denied on secrets and or leases."),(0,a.kt)("h2",{id:"configure-rbac-for-providers"},"Configure RBAC for providers"),(0,a.kt)("p",null,"Providers support the ability to filter who can use them. When a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io#v1alpha1-.spec.selector"},(0,a.kt)("inlineCode",{parentName:"a"},"spec.selector"))," is defined on the provider, any configuration referencing it must pass the filter, otherwise it will fail."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"By default an empty ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.selector")," dictates all ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," in the cluster can use it. This is useful to provide limited scope credentials to all teams.")),(0,a.kt)("p",null,"Using the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.selector")," field you can scope the credentials based on namespace and resource labels. For example you could add a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," for system namespaces only:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Provider\nmetadata:\n # This name should match the `providerRef` in the Terraform Configuration (see above example).\n name: admin\nspec:\n selector:\n namespace:\n matchExpressions:\n - key: kubernetes.io/metadata.name\n operator: In\n values: [kube-system]\n source: secret\n provider: aws\n secretRef:\n namespace: terraform-system\n name: admin\n")),(0,a.kt)("p",null,"At the same time you could provide another limited set of permissions to all cluster users by removing the selector."),(0,a.kt)("p",null,"This feature could also be used to map to different pod identity roles in the cloud vendor, or different service account mapped to ",(0,a.kt)("a",{parentName:"p",href:"https://www.vaultproject.io/"},"Vault"),"."),(0,a.kt)("h2",{id:"provider-configuration"},"Provider Configuration"),(0,a.kt)("p",null,"You can incorporate additional configuration into the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," via the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.configuration"),". For instance the Azure provider comes with a ",(0,a.kt)("a",{parentName:"p",href:"https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/features-block"},"features")," which can be configured in the provider as such"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Provider\nmetadata:\n name: azure\nspec:\n # Anything in configuration section is converting to HCL and configured the provider\n configuration:\n features:\n api_management:\n purge_soft_delete_on_destroy: true\n recover_soft_deleted_api_managements: true\n virtual_machine:\n graceful_shutdown: true\n source: secret\n provider: azurerm\n secretRef:\n namespace: terraform-system\n name: admin\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/370dbcd4.893a240d.js b/assets/js/370dbcd4.893a240d.js new file mode 100644 index 00000000..278005f3 --- /dev/null +++ b/assets/js/370dbcd4.893a240d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[7683],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),d=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=d(e.components);return n.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=d(r),m=a,f=u["".concat(l,".").concat(m)]||u[m]||p[m]||o;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var d=2;d{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>d});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:1,sidebar_class_name:"green"},i="Configure Providers",s={unversionedId:"admin/providers",id:"admin/providers",title:"Configure Providers",description:"Credentials to access the cloud are represented by Providers in the controller, a cluster scoped resource. When defining a terraform module developers reference a provider using spec.providerRef, tying together the resource and credentials.",source:"@site/docs/terranetes-controller/admin/providers.md",sourceDirName:"admin",slug:"/admin/providers",permalink:"/terranetes-controller/admin/providers",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/providers.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Administration",permalink:"/terranetes-controller/category/administration"},next:{title:"Define Guardrails",permalink:"/terranetes-controller/category/define-guardrails"}},l={},d=[{value:"Use a provider",id:"use-a-provider",level:2},{value:"Default Provider",id:"default-provider",level:3},{value:"Configure credentials",id:"configure-credentials",level:2},{value:"Configure by secret",id:"configure-by-secret",level:3},{value:"Configure injected identity",id:"configure-injected-identity",level:3},{value:"Configure IRSA for Amazon Web Services",id:"configure-irsa-for-amazon-web-services",level:3},{value:"Configure Azure AAD Pod Identity",id:"configure-azure-aad-pod-identity",level:3},{value:"Service Account Permissions",id:"service-account-permissions",level:4},{value:"Configure RBAC for providers",id:"configure-rbac-for-providers",level:2},{value:"Provider Configuration",id:"provider-configuration",level:2}],c={toc:d};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"configure-providers"},"Configure Providers"),(0,a.kt)("p",null,"Credentials to access the cloud are represented by ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Providers")," in the controller, a cluster scoped resource. When defining a terraform module developers reference a provider using ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.providerRef"),", tying together the resource and credentials."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"Note, credentials never leave the controller namespace, removing the risk of exposure.")),(0,a.kt)("h2",{id:"use-a-provider"},"Use a provider"),(0,a.kt)("p",null,"To reference a Provider apply the following Terraform configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Configuration\nmetadata:\n name: bucket\nspec:\n providerRef:\n name: aws\n module: \n variables: {}\n")),(0,a.kt)("h3",{id:"default-provider"},"Default Provider"),(0,a.kt)("p",null,"In order to remove the need for developers to discover Providers, platform administrators can set a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," to be default. Under these condition any ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," which has not defined the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.providerRef.name")," will have the default Provider automatically injected for them."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"Note, this feature is only available from >= v0.3.19 release")),(0,a.kt)("p",null,"In order to configure an ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," as default, add the annotation ",(0,a.kt)("inlineCode",{parentName:"p"},'terranetes.appvia.io/default-provider: "true"')," as before. Note, only one ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," can be configured as 'default' at a time."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'---\napiVersion: terraform.appvia.io/v1alpha1\nkind: Provider\nmetadata:\n name: aws\n annotations:\n terranetes.appvia.io/default-provider: "true"\nspec:\n')),(0,a.kt)("h2",{id:"configure-credentials"},"Configure credentials"),(0,a.kt)("p",null,"In ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Providers")," we currently support these options for configuring credentials:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"spec.source: secret")," References a kubernetes secret and mounts as environment variables into the executor."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"spec.source: injected")," Runs the executor with a defined service account. This is used to support pod identity or IRSA in AWS.")),(0,a.kt)("p",null,"These are described below."),(0,a.kt)("h3",{id:"configure-by-secret"},"Configure by secret"),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"Static credentials are the easiest to get going, but moving forward we highly recommend using pod identity and offloading credentials management to the cloud provider.")),(0,a.kt)("p",null,"All the terraform providers support configuration using environment variables, e.g., for AWS you can use ",(0,a.kt)("inlineCode",{parentName:"p"},"AWS_REGION"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"AWS_ACCESS_KEY_ID")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"AWS_SECRET_ACCESS_KEY"),". Simply create a Kubernetes secret in the controller namespace (defaults to ",(0,a.kt)("inlineCode",{parentName:"p"},"terraform-system"),") with these environment variables defined:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl -n terraform-system create secret generic aws \\\n --from-literal=AWS_ACCESS_KEY_ID= \\\n --from-literal=AWS_SECRET_ACCESS_KEY= \\\n --from-literal=AWS_REGION=\n")),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"Static credentials secrets must exist within the same namespace as the terraform controller itself. This is due to the fact the credentials are mounted into the job as environment variables.")),(0,a.kt)("p",null,"The process is the same for all the providers:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://registry.terraform.io/providers/hashicorp/aws/latest/docs"},"Amazon")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://registry.terraform.io/providers/hashicorp/google/latest"},"Google Cloud")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs"},"Azure"))),(0,a.kt)("p",null,"Presently we support using ",(0,a.kt)("inlineCode",{parentName:"p"},"google"),", ",(0,a.kt)("inlineCode",{parentName:"p"},"aws")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"azurerm")," as providers. The controller is not limited to these, but for additional providers you'll have to define them yourself in the module."),(0,a.kt)("p",null,"Once the secret is provisioned you can create a Provider for it:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Provider\nmetadata:\n # This name should match the `providerRef` in the Configuration.\n name: default\nspec:\n summary: Default providers for all configurations\n source: secret\n provider: aws\n secretRef:\n namespace: terraform-system\n name: aws\n")),(0,a.kt)("h3",{id:"configure-injected-identity"},"Configure injected identity"),(0,a.kt)("p",null,"Injected identities are known by a few names depending on the cloud provider you are using. On"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"AWS - ",(0,a.kt)("a",{parentName:"li",href:"https://docs.aws.amazon.com/emr/latest/EMR-on-EKS-DevelopmentGuide/setting-up-enable-IAM.html"},"IRSA")),(0,a.kt)("li",{parentName:"ul"},"Google - ",(0,a.kt)("a",{parentName:"li",href:"https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity"},"workload identity")),(0,a.kt)("li",{parentName:"ul"},"Azure - ",(0,a.kt)("a",{parentName:"li",href:"https://docs.microsoft.com/en-us/azure/aks/use-azure-ad-pod-identity"},"pod identity"))),(0,a.kt)("p",null,"In all cases these perform the same task:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"One or more roles are configured in the cloud provider with defined permissions."),(0,a.kt)("li",{parentName:"ul"},"A binding (cloud vendor dependent) is provisioned that gives a ",(0,a.kt)("a",{parentName:"li",href:"https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/"},"service account")," in Kubernetes the ability to retrieve short-term credentials for a defined Role."),(0,a.kt)("li",{parentName:"ul"},"The cloud vendor generates ephemeral credentials and returns them to the workload.")),(0,a.kt)("p",null,"Under this scenario all credentials management is offloaded to the cloud vendor and ensures the credentials used are short-lived and expire, thus improving the overall security."),(0,a.kt)("p",null,"Configuring injected identities is cloud dependent and the complete details are beyond the scope of this document."),(0,a.kt)("h3",{id:"configure-irsa-for-amazon-web-services"},"Configure IRSA for Amazon Web Services"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Before using IRSA in EKS, you must configure an OIDC connector. For details, see ",(0,a.kt)("a",{parentName:"p",href:"https://docs.aws.amazon.com/eks/latest/userguide/iam-roles-for-service-accounts-technical-overview.html"},"Technical overview"),"."),(0,a.kt)("admonition",{parentName:"li",type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"If you can build your clusters via Terraform, take a look at ",(0,a.kt)("a",{parentName:"p",href:"https://registry.terraform.io/modules/terraform-aws-modules/iam/aws/latest/submodules/iam-role-for-service-accounts-eks"},"https://registry.terraform.io/modules/terraform-aws-modules/iam/aws/latest/submodules/iam-role-for-service-accounts-eks")))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Update your helm values in a similar way to the example below. The important values here are the annotations for the service account used by the executor; this must contain the ARN for the role to be used."))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"rbac:\n # Indicates we should create all the necessary rbac resources\n create: true\n # ServiceAccount for the controller\n controller:\n # indicates we should create the terranetes-controller service account\n create: true\n # annotations is a collection of annotations which should be added to the ServiceAccount\n annotations: {}\n\n # Configuration for the terraform executor service account\n executor:\n # indicates we should create the terraform-executor service account\n create: true\n # annotations is a collection of annotations which should be added to the ServiceAccount\n annotations:\n eks.amazonaws.com/role-arn: arn:aws:iam:::role/\n")),(0,a.kt)("p",null,"When the pod is created:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"The EKS controlplane sees the annotation on the service account."),(0,a.kt)("li",{parentName:"ol"},"It checks for a binding between the service account and the defined IAM role."),(0,a.kt)("li",{parentName:"ol"},"If such a binding exists, it generates credentials and injects them via a secret as environment variables into the pod.")),(0,a.kt)("h3",{id:"configure-azure-aad-pod-identity"},"Configure Azure AAD Pod Identity"),(0,a.kt)("p",null,"In order to use Azure's Pod identity service we need to"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Ensure the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," msi configuration")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Provider\nmetadata:\n name: azurerm\nspec:\n # Anything in configuration section is converting to HCL and configured the provider\n configuration:\n subscription_id: AZURE_SUBSCRIPTION_ID\n tenant_id: AZURE_TENANT_ID\n use_msi: true\n source: injected\n provider: azurerm\n")),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Ensure you have added the ",(0,a.kt)("inlineCode",{parentName:"p"},"use_msi: true")," on the Provider configuration otherwise the AzureRM provider will attempt to fallback to the ",(0,a.kt)("inlineCode",{parentName:"p"},"az")," CLI and complain the binary is not found")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"Provision the Azure Identity in the subscription (",(0,a.kt)("a",{parentName:"li",href:"https://azure.github.io/aad-pod-identity/docs/demo/standard_walkthrough/"},"https://azure.github.io/aad-pod-identity/docs/demo/standard_walkthrough/"),")"),(0,a.kt)("li",{parentName:"ol"},"Provision the Azure Identity in the controller namespace")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: aadpodidentity.k8s.io/v1\nkind: AzureIdentity\nmetadata:\n annotations:\n aadpodidentity.k8s.io/Behavior: namespaced\n generation: 3\n name: terranetes-controller\n namespace: terraform-system\nspec:\n clientID: CLIENT_ID\n resourceID: /subscriptions/SUBSCRIPTION/resourcegroups/RESOURCE_GROUP/providers/Microsoft.ManagedIdentity/userAssignedIdentities/IDENTITY\n type: 0\n")),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},"Provision the binding to the pods")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: aadpodidentity.k8s.io/v1\nkind: AzureIdentityBinding\nmetadata:\n name: terranetes-controller\n namespace: terraform-system\nspec:\n azureIdentity: IDENTITY\n selector: terranetes-executor\n")),(0,a.kt)("admonition",{type:"caution"},(0,a.kt)("p",{parentName:"admonition"},"Details on binding can be found ",(0,a.kt)("a",{parentName:"p",href:"https://azure.github.io/aad-pod-identity/docs/concepts/azureidentitybinding/"},"here"),", but essentially it's used to filter the pods in the namespace and provide the permissions to the pods that match the labels - i.e. the pod must have label of the same name and value."),(0,a.kt)("p",{parentName:"admonition"},"As of <= v0.3.30 the pod selector is not configurable in the controller to ensure you use ",(0,a.kt)("inlineCode",{parentName:"p"},"terranetes-executor")," on the binding.")),(0,a.kt)("h4",{id:"service-account-permissions"},"Service Account Permissions"),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"The following is important when using or creating additional service accounts for a Provider. For example lets assume you create another service account 'admin' in the terraform-system namespace and reference that service account in a Provider which uses that account for IRSA.")),(0,a.kt)("p",null,"By default the service account the terraform controller uses to execute jobs is ",(0,a.kt)("inlineCode",{parentName:"p"},"terraform-executor"),". If you require additional service accounts for Providers i.e for use with ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.source: injected")," or simply needing to use another service account; you need to ensure the correct RBAC permissions. The terraform job is using kubernetes secrets to store the terraform state and leases for locking. So the following needs to be in place."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n name: NAME_OF_ROLE\n namespace: terraform-system\nrules:\n - apiGroups:\n - coordination.k8s.io\n resources:\n - leases\n verbs:\n - create\n - delete\n - get\n - list\n - update\n - watch\n - apiGroups:\n - ""\n resources:\n - configmaps\n verbs:\n - get\n - list\n - watch\n - apiGroups:\n - ""\n resources:\n - secrets\n verbs:\n - create\n - delete\n - get\n - list\n - patch\n - update\n - watch\n')),(0,a.kt)("p",null,"And a binding to the service account."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"}," ---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: terraform-executor\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: Role\n name: NAME_OF_ROLE\nsubjects:\n - kind: ServiceAccount\n name: terraform-executor\n namespace: terraform-system\n")),(0,a.kt)("p",null,"Without this the terraform execution will simply fail on access denied on secrets and or leases."),(0,a.kt)("h2",{id:"configure-rbac-for-providers"},"Configure RBAC for providers"),(0,a.kt)("p",null,"Providers support the ability to filter who can use them. When a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io#v1alpha1-.spec.selector"},(0,a.kt)("inlineCode",{parentName:"a"},"spec.selector"))," is defined on the provider, any configuration referencing it must pass the filter, otherwise it will fail."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"By default an empty ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.selector")," dictates all ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," in the cluster can use it. This is useful to provide limited scope credentials to all teams.")),(0,a.kt)("p",null,"Using the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.selector")," field you can scope the credentials based on namespace and resource labels. For example you could add a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," for system namespaces only:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Provider\nmetadata:\n # This name should match the `providerRef` in the Terraform Configuration (see above example).\n name: admin\nspec:\n selector:\n namespace:\n matchExpressions:\n - key: kubernetes.io/metadata.name\n operator: In\n values: [kube-system]\n source: secret\n provider: aws\n secretRef:\n namespace: terraform-system\n name: admin\n")),(0,a.kt)("p",null,"At the same time you could provide another limited set of permissions to all cluster users by removing the selector."),(0,a.kt)("p",null,"This feature could also be used to map to different pod identity roles in the cloud vendor, or different service account mapped to ",(0,a.kt)("a",{parentName:"p",href:"https://www.vaultproject.io/"},"Vault"),"."),(0,a.kt)("h2",{id:"provider-configuration"},"Provider Configuration"),(0,a.kt)("p",null,"You can incorporate additional configuration into the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," via the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.configuration"),". For instance the Azure provider comes with a ",(0,a.kt)("a",{parentName:"p",href:"https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/guides/features-block"},"features")," which can be configured in the provider as such"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Provider\nmetadata:\n name: azure\nspec:\n # Anything in configuration section is converting to HCL and configured the provider\n configuration:\n features:\n api_management:\n purge_soft_delete_on_destroy: true\n recover_soft_deleted_api_managements: true\n virtual_machine:\n graceful_shutdown: true\n source: secret\n provider: azurerm\n secretRef:\n namespace: terraform-system\n name: admin\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3bd8b39a.ea522986.js b/assets/js/3bd8b39a.8cda0a41.js similarity index 54% rename from assets/js/3bd8b39a.ea522986.js rename to assets/js/3bd8b39a.8cda0a41.js index 2ce8340c..c15ea778 100644 --- a/assets/js/3bd8b39a.ea522986.js +++ b/assets/js/3bd8b39a.8cda0a41.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6004],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>u});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=r.createContext({}),p=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(a.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,a=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),m=p(n),u=o,d=m["".concat(a,".").concat(u)]||m[u]||f[u]||l;return n?r.createElement(d,i(i({ref:t},s),{},{components:n})):r.createElement(d,i({ref:t},s))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,i=new Array(l);i[0]=m;var c={};for(var a in t)hasOwnProperty.call(t,a)&&(c[a]=t[a]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var p=2;p{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>f,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl completion fish"},i=void 0,c={unversionedId:"cli/tnctl_completion_fish",id:"cli/tnctl_completion_fish",title:"tnctl completion fish",description:"tnctl completion fish",source:"@site/docs/terranetes-controller/cli/tnctl_completion_fish.md",sourceDirName:"cli",slug:"/cli/tnctl_completion_fish",permalink:"/terranetes-controller/cli/tnctl_completion_fish",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_completion_fish.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl completion fish"},sidebar:"tutorialSidebar",previous:{title:"tnctl completion bash",permalink:"/terranetes-controller/cli/tnctl_completion_bash"},next:{title:"tnctl completion powershell",permalink:"/terranetes-controller/cli/tnctl_completion_powershell"}},a={},p=[{value:"tnctl completion fish",id:"tnctl-completion-fish",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function f(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-completion-fish"},"tnctl completion fish"),(0,o.kt)("p",null,"Generate the autocompletion script for fish"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Generate the autocompletion script for the fish shell."),(0,o.kt)("p",null,"To load completions in your current shell session:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion fish | source\n")),(0,o.kt)("p",null,"To load completions for every new session, execute once:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion fish > ~/.config/fish/completions/tnctl.fish\n")),(0,o.kt)("p",null,"You will need to start a new shell for this setup to take effect."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion fish [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for fish\n --no-descriptions disable completion descriptions\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion"},"tnctl completion"),"\t - Generate the autocompletion script for the specified shell")))}f.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6004],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>u});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=r.createContext({}),p=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(a.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,a=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),m=p(n),u=o,d=m["".concat(a,".").concat(u)]||m[u]||f[u]||l;return n?r.createElement(d,i(i({ref:t},s),{},{components:n})):r.createElement(d,i({ref:t},s))}));function u(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,i=new Array(l);i[0]=m;var c={};for(var a in t)hasOwnProperty.call(t,a)&&(c[a]=t[a]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var p=2;p{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>f,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl completion fish"},i=void 0,c={unversionedId:"cli/tnctl_completion_fish",id:"cli/tnctl_completion_fish",title:"tnctl completion fish",description:"tnctl completion fish",source:"@site/docs/terranetes-controller/cli/tnctl_completion_fish.md",sourceDirName:"cli",slug:"/cli/tnctl_completion_fish",permalink:"/terranetes-controller/cli/tnctl_completion_fish",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_completion_fish.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl completion fish"},sidebar:"tutorialSidebar",previous:{title:"tnctl completion bash",permalink:"/terranetes-controller/cli/tnctl_completion_bash"},next:{title:"tnctl completion powershell",permalink:"/terranetes-controller/cli/tnctl_completion_powershell"}},a={},p=[{value:"tnctl completion fish",id:"tnctl-completion-fish",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function f(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-completion-fish"},"tnctl completion fish"),(0,o.kt)("p",null,"Generate the autocompletion script for fish"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Generate the autocompletion script for the fish shell."),(0,o.kt)("p",null,"To load completions in your current shell session:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion fish | source\n")),(0,o.kt)("p",null,"To load completions for every new session, execute once:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion fish > ~/.config/fish/completions/tnctl.fish\n")),(0,o.kt)("p",null,"You will need to start a new shell for this setup to take effect."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion fish [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for fish\n --no-descriptions disable completion descriptions\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion"},"tnctl completion"),"\t - Generate the autocompletion script for the specified shell")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3d35bbfd.25d23231.js b/assets/js/3d35bbfd.25d23231.js deleted file mode 100644 index a9dec2b6..00000000 --- a/assets/js/3d35bbfd.25d23231.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9687],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),f=s(r),d=o,g=f["".concat(c,".").concat(d)]||f[d]||u[d]||l;return r?n.createElement(g,a(a({ref:t},p),{},{components:r})):n.createElement(g,a({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,a=new Array(l);a[0]=f;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl logs"},a=void 0,i={unversionedId:"cli/tnctl_logs",id:"cli/tnctl_logs",title:"tnctl logs",description:"tnctl logs",source:"@site/docs/terranetes-controller/cli/tnctl_logs.md",sourceDirName:"cli",slug:"/cli/tnctl_logs",permalink:"/terranetes-controller/cli/tnctl_logs",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_logs.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl logs"},sidebar:"tutorialSidebar",previous:{title:"tnctl kubectl plugin",permalink:"/terranetes-controller/cli/tnctl_kubectl_plugin"},next:{title:"tnctl logs cloudresource",permalink:"/terranetes-controller/cli/tnctl_logs_cloudresource"}},c={},s=[{value:"tnctl logs",id:"tnctl-logs",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-logs"},"tnctl logs"),(0,o.kt)("p",null,"Displays the latest logs for the resource"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Retrieves and follows the logs from a cloudresource or native configuration"),(0,o.kt)("p",null,"Viewing the logs for a configuration\n$ tnctl logs configuration NAME --follow"),(0,o.kt)("p",null,"Viewing the logs for a cloudresource\n$ tnctl logs cloudresource NAME --follow"),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for logs\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_logs_cloudresource"},"tnctl logs cloudresource"),"\t - Displays the latest logs for the given resource"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_logs_configuration"},"tnctl logs configuration"),"\t - Displays the latest logs for the given resource")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3d35bbfd.bfb8fed1.js b/assets/js/3d35bbfd.bfb8fed1.js new file mode 100644 index 00000000..93b120ac --- /dev/null +++ b/assets/js/3d35bbfd.bfb8fed1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9687],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(l[r]=e[r]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r])}return l}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,l=e.mdxType,o=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),f=s(r),d=l,g=f["".concat(c,".").concat(d)]||f[d]||u[d]||o;return r?n.createElement(g,a(a({ref:t},p),{},{components:r})):n.createElement(g,a({ref:t},p))}));function d(e,t){var r=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=r.length,a=new Array(o);a[0]=f;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:l,a[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var n=r(7462),l=(r(7294),r(3905));const o={title:"tnctl logs"},a=void 0,i={unversionedId:"cli/tnctl_logs",id:"cli/tnctl_logs",title:"tnctl logs",description:"tnctl logs",source:"@site/docs/terranetes-controller/cli/tnctl_logs.md",sourceDirName:"cli",slug:"/cli/tnctl_logs",permalink:"/terranetes-controller/cli/tnctl_logs",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_logs.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl logs"},sidebar:"tutorialSidebar",previous:{title:"tnctl kubectl plugin",permalink:"/terranetes-controller/cli/tnctl_kubectl_plugin"},next:{title:"tnctl logs cloudresource",permalink:"/terranetes-controller/cli/tnctl_logs_cloudresource"}},c={},s=[{value:"tnctl logs",id:"tnctl-logs",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,l.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-logs"},"tnctl logs"),(0,l.kt)("p",null,"Displays the latest logs for the resource"),(0,l.kt)("h3",{id:"synopsis"},"Synopsis"),(0,l.kt)("p",null,"Retrieves and follows the logs from a cloudresource or native configuration"),(0,l.kt)("p",null,"Viewing the logs for a configuration\n$ tnctl logs configuration NAME --follow"),(0,l.kt)("p",null,"Viewing the logs for a cloudresource\n$ tnctl logs cloudresource NAME --follow"),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"}," -h, --help help for logs\n")),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_logs_cloudresource"},"tnctl logs cloudresource"),"\t - Displays the latest logs for the given resource"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_logs_configuration"},"tnctl logs configuration"),"\t - Displays the latest logs for the given resource")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3f723aab.56086624.js b/assets/js/3f723aab.f97ba99a.js similarity index 62% rename from assets/js/3f723aab.56086624.js rename to assets/js/3f723aab.f97ba99a.js index c0055bd1..ca981da8 100644 --- a/assets/js/3f723aab.56086624.js +++ b/assets/js/3f723aab.f97ba99a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6346],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),a=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=a(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),f=a(r),d=o,m=f["".concat(s,".").concat(d)]||f[d]||p[d]||c;return r?n.createElement(m,l(l({ref:t},u),{},{components:r})):n.createElement(m,l({ref:t},u))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,l=new Array(c);l[0]=f;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var a=2;a{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>c,metadata:()=>i,toc:()=>a});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl config sources list"},l=void 0,i={unversionedId:"cli/tnctl_config_sources_list",id:"cli/tnctl_config_sources_list",title:"tnctl config sources list",description:"tnctl config sources list",source:"@site/docs/terranetes-controller/cli/tnctl_config_sources_list.md",sourceDirName:"cli",slug:"/cli/tnctl_config_sources_list",permalink:"/terranetes-controller/cli/tnctl_config_sources_list",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_config_sources_list.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl config sources list"},sidebar:"tutorialSidebar",previous:{title:"tnctl config sources add",permalink:"/terranetes-controller/cli/tnctl_config_sources_add"},next:{title:"tnctl config sources remove",permalink:"/terranetes-controller/cli/tnctl_config_sources_remove"}},s={},a=[{value:"tnctl config sources list",id:"tnctl-config-sources-list",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:a};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-config-sources-list"},"tnctl config sources list"),(0,o.kt)("p",null,"Shows the current sources of the terraform modules"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl config sources list [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for list\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources"},"tnctl config sources"),"\t - Used to manage the sources of the terraform modules")))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6346],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),a=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=a(e.components);return n.createElement(s.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),f=a(r),d=o,m=f["".concat(s,".").concat(d)]||f[d]||p[d]||c;return r?n.createElement(m,l(l({ref:t},u),{},{components:r})):n.createElement(m,l({ref:t},u))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,l=new Array(c);l[0]=f;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var a=2;a{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>p,frontMatter:()=>c,metadata:()=>i,toc:()=>a});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl config sources list"},l=void 0,i={unversionedId:"cli/tnctl_config_sources_list",id:"cli/tnctl_config_sources_list",title:"tnctl config sources list",description:"tnctl config sources list",source:"@site/docs/terranetes-controller/cli/tnctl_config_sources_list.md",sourceDirName:"cli",slug:"/cli/tnctl_config_sources_list",permalink:"/terranetes-controller/cli/tnctl_config_sources_list",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_config_sources_list.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl config sources list"},sidebar:"tutorialSidebar",previous:{title:"tnctl config sources add",permalink:"/terranetes-controller/cli/tnctl_config_sources_add"},next:{title:"tnctl config sources remove",permalink:"/terranetes-controller/cli/tnctl_config_sources_remove"}},s={},a=[{value:"tnctl config sources list",id:"tnctl-config-sources-list",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:a};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-config-sources-list"},"tnctl config sources list"),(0,o.kt)("p",null,"Shows the current sources of the terraform modules"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl config sources list [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for list\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources"},"tnctl config sources"),"\t - Used to manage the sources of the terraform modules")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/43f34b2f.8e356cb1.js b/assets/js/43f34b2f.72917628.js similarity index 56% rename from assets/js/43f34b2f.8e356cb1.js rename to assets/js/43f34b2f.72917628.js index af59a1f0..c0f63939 100644 --- a/assets/js/43f34b2f.8e356cb1.js +++ b/assets/js/43f34b2f.72917628.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2181],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=o.createContext({}),i=function(e){var t=o.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=i(e.components);return o.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,p=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),d=i(r),f=n,v=d["".concat(p,".").concat(f)]||d[f]||u[f]||a;return r?o.createElement(v,l(l({ref:t},s),{},{components:r})):o.createElement(v,l({ref:t},s))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,l=new Array(a);l[0]=d;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c.mdxType="string"==typeof e?e:n,l[1]=c;for(var i=2;i{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>i});var o=r(7462),n=(r(7294),r(3905));const a={title:"tnctl approve cloudresource"},l=void 0,c={unversionedId:"cli/tnctl_approve_cloudresource",id:"cli/tnctl_approve_cloudresource",title:"tnctl approve cloudresource",description:"tnctl approve cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_approve_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_approve_cloudresource",permalink:"/terranetes-controller/cli/tnctl_approve_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_approve_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl approve cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl approve",permalink:"/terranetes-controller/cli/tnctl_approve"},next:{title:"tnctl approve configuration",permalink:"/terranetes-controller/cli/tnctl_approve_configuration"}},p={},i=[{value:"tnctl approve cloudresource",id:"tnctl-approve-cloudresource",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:i};function u(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"tnctl-approve-cloudresource"},"tnctl approve cloudresource"),(0,n.kt)("p",null,"Approves a cloudresource for release"),(0,n.kt)("h3",{id:"synopsis"},"Synopsis"),(0,n.kt)("p",null,"Used to approve a terraform configuration and permit the\nconfiguration to move into the apply stage. This command\neffectively changes the terraform.appvia.io/apply annotation\nfrom 'false' to 'true'."),(0,n.kt)("p",null,"Approve one or more configurations\n$ tnctl approve configuration NAME"),(0,n.kt)("p",null,"Approve one or more cloudresource\n$ tnctl approve cloudresource NAME"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"tnctl approve cloudresource [OPTIONS] NAME [flags]\n")),(0,n.kt)("h3",{id:"options"},"Options"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},' -h, --help help for cloudresource\n -n, --namespace string Namespace of the resource/s (default "default")\n')),(0,n.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,n.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"../tnctl_approve"},"tnctl approve"),"\t - Approves either a configuration or cloudresource")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2181],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=o.createContext({}),i=function(e){var t=o.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=i(e.components);return o.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,a=e.originalType,p=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),d=i(r),f=n,v=d["".concat(p,".").concat(f)]||d[f]||u[f]||a;return r?o.createElement(v,l(l({ref:t},s),{},{components:r})):o.createElement(v,l({ref:t},s))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var a=r.length,l=new Array(a);l[0]=d;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c.mdxType="string"==typeof e?e:n,l[1]=c;for(var i=2;i{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>i});var o=r(7462),n=(r(7294),r(3905));const a={title:"tnctl approve cloudresource"},l=void 0,c={unversionedId:"cli/tnctl_approve_cloudresource",id:"cli/tnctl_approve_cloudresource",title:"tnctl approve cloudresource",description:"tnctl approve cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_approve_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_approve_cloudresource",permalink:"/terranetes-controller/cli/tnctl_approve_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_approve_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl approve cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl approve",permalink:"/terranetes-controller/cli/tnctl_approve"},next:{title:"tnctl approve configuration",permalink:"/terranetes-controller/cli/tnctl_approve_configuration"}},p={},i=[{value:"tnctl approve cloudresource",id:"tnctl-approve-cloudresource",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:i};function u(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,o.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h2",{id:"tnctl-approve-cloudresource"},"tnctl approve cloudresource"),(0,n.kt)("p",null,"Approves a cloudresource for release"),(0,n.kt)("h3",{id:"synopsis"},"Synopsis"),(0,n.kt)("p",null,"Used to approve a terraform configuration and permit the\nconfiguration to move into the apply stage. This command\neffectively changes the terraform.appvia.io/apply annotation\nfrom 'false' to 'true'."),(0,n.kt)("p",null,"Approve one or more configurations\n$ tnctl approve configuration NAME"),(0,n.kt)("p",null,"Approve one or more cloudresource\n$ tnctl approve cloudresource NAME"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"tnctl approve cloudresource [OPTIONS] NAME [flags]\n")),(0,n.kt)("h3",{id:"options"},"Options"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},' -h, --help help for cloudresource\n -n, --namespace string Namespace of the resource/s (default "default")\n')),(0,n.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,n.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("a",{parentName:"li",href:"../tnctl_approve"},"tnctl approve"),"\t - Approves either a configuration or cloudresource")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4472a7ee.b0c5ca02.js b/assets/js/4472a7ee.b0c5ca02.js new file mode 100644 index 00000000..24820883 --- /dev/null +++ b/assets/js/4472a7ee.b0c5ca02.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6410],{3905:(e,t,s)=>{s.d(t,{Zo:()=>d,kt:()=>h});var r=s(7294);function p(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function a(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,r)}return s}function i(e){for(var t=1;t=0||(p[s]=e[s]);return p}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(p[s]=e[s])}return p}var n=r.createContext({}),c=function(e){var t=r.useContext(n),s=t;return e&&(s="function"==typeof e?e(t):i(i({},t),e)),s},d=function(e){var t=c(e.components);return r.createElement(n.Provider,{value:t},e.children)},l={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},y=r.forwardRef((function(e,t){var s=e.components,p=e.mdxType,a=e.originalType,n=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),y=c(s),h=p,k=y["".concat(n,".").concat(h)]||y[h]||l[h]||a;return s?r.createElement(k,i(i({ref:t},d),{},{components:s})):r.createElement(k,i({ref:t},d))}));function h(e,t){var s=arguments,p=t&&t.mdxType;if("string"==typeof e||p){var a=s.length,i=new Array(a);i[0]=y;var o={};for(var n in t)hasOwnProperty.call(t,n)&&(o[n]=t[n]);o.originalType=e,o.mdxType="string"==typeof e?e:p,i[1]=o;for(var c=2;c{s.r(t),s.d(t,{assets:()=>n,contentTitle:()=>i,default:()=>l,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var r=s(7462),p=(s(7294),s(3905));const a={title:"revisions.terraform.appvia.io",linkTitle:"Revision",sidebar_position:1},i="Revision",o={unversionedId:"reference/revisions.terraform.appvia.io",id:"reference/revisions.terraform.appvia.io",title:"revisions.terraform.appvia.io",description:"Revision is the schema for a revision",source:"@site/docs/terranetes-controller/reference/revisions.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/revisions.terraform.appvia.io",permalink:"/terranetes-controller/reference/revisions.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/revisions.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"revisions.terraform.appvia.io",linkTitle:"Revision",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"providers.terraform.appvia.io",permalink:"/terranetes-controller/reference/providers.terraform.appvia.io"},next:{title:"CLI Reference",permalink:"/terranetes-controller/category/cli-reference"}},n={},c=[],d={toc:c};function l(e){let{components:t,...s}=e;return(0,p.kt)("wrapper",(0,r.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,p.kt)("h1",{id:"revision"},"Revision"),(0,p.kt)("p",{class:"crd-description"},"Revision is the schema for a revision"),(0,p.kt)("dl",{class:"crd-meta"},(0,p.kt)("dt",{class:"fullname"},"Full name:"),(0,p.kt)("dd",{class:"fullname"},"revisions.terraform.appvia.io"),(0,p.kt)("dt",{class:"groupname"},"Group:"),(0,p.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,p.kt)("dt",{class:"singularname"},"Singular name:"),(0,p.kt)("dd",{class:"singularname"},"revision"),(0,p.kt)("dt",{class:"pluralname"},"Plural name:"),(0,p.kt)("dd",{class:"pluralname"},"revisions"),(0,p.kt)("dt",{class:"scope"},"Scope:"),(0,p.kt)("dd",{class:"scope"},"Cluster"),(0,p.kt)("dt",{class:"versions"},"Versions:"),(0,p.kt)("dd",{class:"versions"},(0,p.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,p.kt)("div",{class:"crd-schema-version"},(0,p.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,p.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,p.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,p.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"RevisionSpec defines the desired state of a configuration plan revision")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration"},".spec.configuration")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Configuration is the configuration which this revision is providing to the consumer.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.auth"},".spec.configuration.auth")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Auth is used to configure any options required when the source of the terraform module is private or requires credentials to retrieve. This could be SSH keys or git user/pass or AWS credentials for an s3 bucket.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.auth.name"},".spec.configuration.auth.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"name is unique within a namespace to reference a secret resource.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.auth.namespace"},".spec.configuration.auth.namespace")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"namespace defines the space within which the secret name must be unique.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.enableAutoApproval"},".spec.configuration.enableAutoApproval")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"boolean")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"EnableAutoApproval when enabled indicates the configuration does not need to be manually approved. On a change to the configuration, the controller will automatically approve the configuration. Note it still needs to adhere to any checks or policies.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.enableDriftDetection"},".spec.configuration.enableDriftDetection")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"boolean")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"EnableDriftDetection when enabled run periodic reconciliation configurations looking for any drift between the expected and current state. If any drift is detected the status is changed and a kubernetes event raised.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.module"},".spec.configuration.module")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Module is the URL to the source of the terraform module. The format of the URL is a direct implementation of terraform\u2019s module reference. Please see the following repository for more details ",(0,p.kt)("a",{href:"https://github.com/hashicorp/go-getter"},"https://github.com/hashicorp/go-getter"))))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.plan"},".spec.configuration.plan")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Plan is an optional reference to a plan this configuration is associated with. If not set and a policy exists to enforce a plan, the configuration will be rejected.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.plan.name"},".spec.configuration.plan.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is the name of the plan this configuration is associated with")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.plan.revision"},".spec.configuration.plan.revision")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Revision is the revision of the plan this configuration is associated with")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.providerRef"},".spec.configuration.providerRef")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ProviderRef is the reference to the provider which should be used to execute this configuration.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.providerRef.name"},".spec.configuration.providerRef.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is the name of the provider which contains the credentials to use for this configuration.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.providerRef.namespace"},".spec.configuration.providerRef.namespace")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Namespace is the namespace of the provider itself.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.terraformVersion"},".spec.configuration.terraformVersion")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"TerraformVersion provides the ability to override the default terraform version. Before changing this field its best to consult with platform administrator. As the value of this field is used to change the tag of the terraform container image.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom"},".spec.configuration.valueFrom")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ValueFromSource is a collection of value from sources, where the source of the value is taken from a secret")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom[*]"},".spec.configuration.valueFrom[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ValueFromSource defines a value which is taken from a secret")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom[*].context"},".spec.configuration.valueFrom[*].context")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Context is the context is the name of the terraform context where the value should be retrieved from")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom[*].key"},".spec.configuration.valueFrom[*].key")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Key is the key in the secret which we should used for the value")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom[*].name"},".spec.configuration.valueFrom[*].name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is the name which we use when injecting the value into the terraform code i.e. the secret may contain data.DB_HOST but you call this database_hostname. Note, for backwards compatiability if no name is provided, we using the key at the name")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom[*].optional"},".spec.configuration.valueFrom[*].optional")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"boolean")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Optional indicates the secret can be optional, i.e if the secret does not exist, or the key is not contained in the secret, we ignore the error")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom[*].secret"},".spec.configuration.valueFrom[*].secret")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Secret is the name of the secret in the configuration namespace")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.variables"},".spec.configuration.variables")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Variables provides the inputs for the terraform module itself. These are passed to the terraform executor and used to execute the plan, apply and destroy phases.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.writeConnectionSecretToRef"},".spec.configuration.writeConnectionSecretToRef")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"WriteConnectionSecretToRef is the name for a secret. On execution of the terraform module any module outputs are written to this secret. The outputs are automatically uppercased and ready to be consumed as environment variables. WriteConnectionSecretRef is the secret where the terraform outputs will be written.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.writeConnectionSecretToRef.keys"},".spec.configuration.writeConnectionSecretToRef.keys")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Keys is a collection of name used to filter the terraform output. By default all keys from the output of the terraform state are written to the connection secret. Here we can define exactly which keys we want from that output.")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.writeConnectionSecretToRef.keys[*]"},".spec.configuration.writeConnectionSecretToRef.keys[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.writeConnectionSecretToRef.name"},".spec.configuration.writeConnectionSecretToRef.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is the of the secret where you want to the terraform output to be written. The terraform outputs will be written to the secret as a key value pair. All are uppercased can read to be consumed by the workload.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies"},".spec.dependencies")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Dependencies is a collection of dependencies which this revision depends on such as a Provider, Terranetes version, or Revision")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*]"},".spec.dependencies[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"RevisionDependency defined a dependency for this revision. Currently we support Provider, Revision or Terranetes version")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].context"},".spec.dependencies[*].context")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Revision indicates this revision has a dependency on a context resource")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].context.cloud"},".spec.dependencies[*].context.cloud")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Cloud is the name of the cloud vendor we are dependent on, such as aws, azurerm, which the context resource is associated with")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].context.name"},".spec.dependencies[*].context.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is the name of the context resource we are dependent on")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].provider"},".spec.dependencies[*].provider")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Provider indicates this revision has a dependency on a provider resource")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].provider.cloud"},".spec.dependencies[*].provider.cloud")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Cloud is the name of the cloud vendor we are dependent on, such as aws, azurerm, The controller we ensure we have the provider installed before we can apply the configuration")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].terranetes"},".spec.dependencies[*].terranetes")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Terranetes indicates this revision has a dependency on a terranetes controller")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].terranetes.version"},".spec.dependencies[*].terranetes.version")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Version is used to specify the version of the terranetes resource we are dependent on. This format is based on Semantic Versioning 2.0.0 and can use \u2018>=\u2019, \u2018>\u2019, \u2018<=\u2019, and \u2018<\u2019")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs"},".spec.inputs")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Inputs is a collection of inputs which this revision the consumer of this revision can or must provide. This is usually limited to contextual information such as a name for the database, the size required, a bucket name, or policy.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs[*]"},".spec.inputs[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"RevisionInput is a user defined input for a revision, such as a database name or a cache size etc.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs[*].default"},".spec.inputs[*].default")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Default is the default value for this input, this is a map which must contain the field \u2018value\u2019 => \u2018default value\u2019. Default values can be any simple of complex type, such as string, int, bool, etc.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs[*].description"},".spec.inputs[*].description")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Description is a short description of the input and its purpose, capabilities, etc.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs[*].key"},".spec.inputs[*].key")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Key is the name of the variable when presented to the terraform module. If this field is not specified, the name will be used as the key instead")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs[*].required"},".spec.inputs[*].required")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"boolean")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Required indicates whether this input is required or not by the revision")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs[*].type"},".spec.inputs[*].type")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Type is the format of the input, such as string, int, bool, etc.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan"},".spec.plan")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Plan contains the information related to the name, version, description of the revision.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.categories"},".spec.plan.categories")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Categories is a list of categories which this revision is grouped by, such as database, cache, etc.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.categories[*]"},".spec.plan.categories[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.changeLog"},".spec.plan.changeLog")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ChangeLog provides a human readable list of changes for this revision")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.description"},".spec.plan.description")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Description is a short description of the revision and its purpose, capabilities, etc.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.name"},".spec.plan.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is the name which this revision is grouped by, such as mysql, redis, etc. Multiple revisions can be grouped by the same name, presented as a list of revisions for a single plan name")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.revision"},".spec.plan.revision")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Revision is the version of the revision, such as 1.0.0, 1.0.1, etc.")))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"RevisionStatus defines the observed state of a terraform")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.inUse"},".status.inUse")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"InUse is the number of cloud resources which are currently using this revision")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Time is the last time the resource was reconciled"))))))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4472a7ee.ea96cade.js b/assets/js/4472a7ee.ea96cade.js deleted file mode 100644 index bcd9c3ed..00000000 --- a/assets/js/4472a7ee.ea96cade.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6410],{3905:(e,t,s)=>{s.d(t,{Zo:()=>d,kt:()=>h});var r=s(7294);function p(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function a(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,r)}return s}function i(e){for(var t=1;t=0||(p[s]=e[s]);return p}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(p[s]=e[s])}return p}var n=r.createContext({}),c=function(e){var t=r.useContext(n),s=t;return e&&(s="function"==typeof e?e(t):i(i({},t),e)),s},d=function(e){var t=c(e.components);return r.createElement(n.Provider,{value:t},e.children)},l={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},y=r.forwardRef((function(e,t){var s=e.components,p=e.mdxType,a=e.originalType,n=e.parentName,d=o(e,["components","mdxType","originalType","parentName"]),y=c(s),h=p,k=y["".concat(n,".").concat(h)]||y[h]||l[h]||a;return s?r.createElement(k,i(i({ref:t},d),{},{components:s})):r.createElement(k,i({ref:t},d))}));function h(e,t){var s=arguments,p=t&&t.mdxType;if("string"==typeof e||p){var a=s.length,i=new Array(a);i[0]=y;var o={};for(var n in t)hasOwnProperty.call(t,n)&&(o[n]=t[n]);o.originalType=e,o.mdxType="string"==typeof e?e:p,i[1]=o;for(var c=2;c{s.r(t),s.d(t,{assets:()=>n,contentTitle:()=>i,default:()=>l,frontMatter:()=>a,metadata:()=>o,toc:()=>c});var r=s(7462),p=(s(7294),s(3905));const a={title:"revisions.terraform.appvia.io",linkTitle:"Revision",sidebar_position:1},i="Revision",o={unversionedId:"reference/revisions.terraform.appvia.io",id:"reference/revisions.terraform.appvia.io",title:"revisions.terraform.appvia.io",description:"Revision is the schema for a revision",source:"@site/docs/terranetes-controller/reference/revisions.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/revisions.terraform.appvia.io",permalink:"/terranetes-controller/reference/revisions.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/revisions.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"revisions.terraform.appvia.io",linkTitle:"Revision",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"providers.terraform.appvia.io",permalink:"/terranetes-controller/reference/providers.terraform.appvia.io"},next:{title:"CLI Reference",permalink:"/terranetes-controller/category/cli-reference"}},n={},c=[],d={toc:c};function l(e){let{components:t,...s}=e;return(0,p.kt)("wrapper",(0,r.Z)({},d,s,{components:t,mdxType:"MDXLayout"}),(0,p.kt)("h1",{id:"revision"},"Revision"),(0,p.kt)("p",{class:"crd-description"},"Revision is the schema for a revision"),(0,p.kt)("dl",{class:"crd-meta"},(0,p.kt)("dt",{class:"fullname"},"Full name:"),(0,p.kt)("dd",{class:"fullname"},"revisions.terraform.appvia.io"),(0,p.kt)("dt",{class:"groupname"},"Group:"),(0,p.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,p.kt)("dt",{class:"singularname"},"Singular name:"),(0,p.kt)("dd",{class:"singularname"},"revision"),(0,p.kt)("dt",{class:"pluralname"},"Plural name:"),(0,p.kt)("dd",{class:"pluralname"},"revisions"),(0,p.kt)("dt",{class:"scope"},"Scope:"),(0,p.kt)("dd",{class:"scope"},"Cluster"),(0,p.kt)("dt",{class:"versions"},"Versions:"),(0,p.kt)("dd",{class:"versions"},(0,p.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,p.kt)("div",{class:"crd-schema-version"},(0,p.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,p.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,p.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,p.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"RevisionSpec defines the desired state of a configuration plan revision")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration"},".spec.configuration")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Configuration is the configuration which this revision is providing to the consumer.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.auth"},".spec.configuration.auth")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Auth is used to configure any options required when the source of the terraform module is private or requires credentials to retrieve. This could be SSH keys or git user/pass or AWS credentials for an s3 bucket.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.auth.name"},".spec.configuration.auth.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"name is unique within a namespace to reference a secret resource.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.auth.namespace"},".spec.configuration.auth.namespace")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"namespace defines the space within which the secret name must be unique.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.enableAutoApproval"},".spec.configuration.enableAutoApproval")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"boolean")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"EnableAutoApproval when enabled indicates the configuration does not need to be manually approved. On a change to the configuration, the controller will automatically approve the configuration. Note it still needs to adhere to any checks or policies.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.enableDriftDetection"},".spec.configuration.enableDriftDetection")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"boolean")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"EnableDriftDetection when enabled run periodic reconciliation configurations looking for any drift between the expected and current state. If any drift is detected the status is changed and a kubernetes event raised.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.module"},".spec.configuration.module")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Module is the URL to the source of the terraform module. The format of the URL is a direct implementation of terraform\u2019s module reference. Please see the following repository for more details ",(0,p.kt)("a",{href:"https://github.com/hashicorp/go-getter"},"https://github.com/hashicorp/go-getter"))))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.plan"},".spec.configuration.plan")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Plan is an optional reference to a plan this configuration is associated with. If not set and a policy exists to enforce a plan, the configuration will be rejected.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.plan.name"},".spec.configuration.plan.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is the name of the plan this configuration is associated with")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.plan.revision"},".spec.configuration.plan.revision")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Revision is the revision of the plan this configuration is associated with")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.providerRef"},".spec.configuration.providerRef")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ProviderRef is the reference to the provider which should be used to execute this configuration.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.providerRef.name"},".spec.configuration.providerRef.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is the name of the provider which contains the credentials to use for this configuration.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.providerRef.namespace"},".spec.configuration.providerRef.namespace")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Namespace is the namespace of the provider itself.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.terraformVersion"},".spec.configuration.terraformVersion")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"TerraformVersion provides the ability to override the default terraform version. Before changing this field its best to consult with platform administrator. As the value of this field is used to change the tag of the terraform container image.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom"},".spec.configuration.valueFrom")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ValueFromSource is a collection of value from sources, where the source of the value is taken from a secret")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom[*]"},".spec.configuration.valueFrom[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ValueFromSource defines a value which is taken from a secret")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom[*].context"},".spec.configuration.valueFrom[*].context")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Context is the context is the name of the terraform context where the value should be retrieved from")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom[*].key"},".spec.configuration.valueFrom[*].key")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Key is the key in the secret which we should used for the value")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom[*].name"},".spec.configuration.valueFrom[*].name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is the name which we use when injecting the value into the terraform code i.e. the secret may contain data.DB_HOST but you call this database_hostname. Note, for backwards compatiability if no name is provided, we using the key at the name")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom[*].optional"},".spec.configuration.valueFrom[*].optional")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"boolean")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Optional indicates the secret can be optional, i.e if the secret does not exist, or the key is not contained in the secret, we ignore the error")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.valueFrom[*].secret"},".spec.configuration.valueFrom[*].secret")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Secret is the name of the secret in the configuration namespace")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.variables"},".spec.configuration.variables")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Variables provides the inputs for the terraform module itself. These are passed to the terraform executor and used to execute the plan, apply and destroy phases.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.writeConnectionSecretToRef"},".spec.configuration.writeConnectionSecretToRef")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"WriteConnectionSecretToRef is the name for a secret. On execution of the terraform module any module outputs are written to this secret. The outputs are automatically uppercased and ready to be consumed as environment variables. WriteConnectionSecretRef is the secret where the terraform outputs will be written.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.writeConnectionSecretToRef.keys"},".spec.configuration.writeConnectionSecretToRef.keys")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Keys is a collection of name used to filter the terraform output. By default all keys from the output of the terraform state are written to the connection secret. Here we can define exactly which keys we want from that output.")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.writeConnectionSecretToRef.keys[*]"},".spec.configuration.writeConnectionSecretToRef.keys[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration.writeConnectionSecretToRef.name"},".spec.configuration.writeConnectionSecretToRef.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is the of the secret where you want to the terraform output to be written. The terraform outputs will be written to the secret as a key value pair. All are uppercased can read to be consumed by the workload.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies"},".spec.dependencies")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Dependencies is a collection of dependencies which this revision depends on such as a Provider, Terranetes version, or Revision")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*]"},".spec.dependencies[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"RevisionDependency defined a dependency for this revision. Currently we support Provider, Revision or Terranetes version")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].context"},".spec.dependencies[*].context")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Revision indicates this revision has a dependency on a context resource")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].context.cloud"},".spec.dependencies[*].context.cloud")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Cloud is the name of the cloud vendor we are dependent on, such as aws, azurerm, which the context resource is associated with")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].context.name"},".spec.dependencies[*].context.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is the name of the context resource we are dependent on")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].provider"},".spec.dependencies[*].provider")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Provider indicates this revision has a dependency on a provider resource")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].provider.cloud"},".spec.dependencies[*].provider.cloud")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Cloud is the name of the cloud vendor we are dependent on, such as aws, azurerm, The controller we ensure we have the provider installed before we can apply the configuration")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].terranetes"},".spec.dependencies[*].terranetes")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Terranetes indicates this revision has a dependency on a terranetes controller")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.dependencies[*].terranetes.version"},".spec.dependencies[*].terranetes.version")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Version is used to specify the version of the terranetes resource we are dependent on. This format is based on Semantic Versioning 2.0.0 and can use \u2018>=\u2019, \u2018>\u2019, \u2018<=\u2019, and \u2018<\u2019")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs"},".spec.inputs")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Inputs is a collection of inputs which this revision the consumer of this revision can or must provide. This is usually limited to contextual information such as a name for the database, the size required, a bucket name, or policy.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs[*]"},".spec.inputs[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"RevisionInput is a user defined input for a revision, such as a database name or a cache size etc.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs[*].default"},".spec.inputs[*].default")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Default is the default value for this input, this is a map which must contain the field \u2018value\u2019 => \u2018default value\u2019. Default values can be any simple of complex type, such as string, int, bool, etc.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs[*].description"},".spec.inputs[*].description")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Description is a short description of the input and its purpose, capabilities, etc.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs[*].key"},".spec.inputs[*].key")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Key is the name of the variable when presented to the terraform module. If this field is not specified, the name will be used as the key instead")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs[*].required"},".spec.inputs[*].required")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"boolean")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Required indicates whether this input is required or not by the revision")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.inputs[*].type"},".spec.inputs[*].type")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Type is the format of the input, such as string, int, bool, etc.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan"},".spec.plan")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Plan contains the information related to the name, version, description of the revision.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.categories"},".spec.plan.categories")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Categories is a list of categories which this revision is grouped by, such as database, cache, etc.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.categories[*]"},".spec.plan.categories[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.changeLog"},".spec.plan.changeLog")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ChangeLog provides a human readable list of changes for this revision")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.description"},".spec.plan.description")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Description is a short description of the revision and its purpose, capabilities, etc.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.name"},".spec.plan.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is the name which this revision is grouped by, such as mysql, redis, etc. Multiple revisions can be grouped by the same name, presented as a list of revisions for a single plan name")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.revision"},".spec.plan.revision")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Revision is the version of the revision, such as 1.0.0, 1.0.1, etc.")))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"RevisionStatus defines the observed state of a terraform")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.inUse"},".status.inUse")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"InUse is the number of cloud resources which are currently using this revision")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Time is the last time the resource was reconciled"))))))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4635b07f.93894c21.js b/assets/js/4635b07f.679f399f.js similarity index 56% rename from assets/js/4635b07f.93894c21.js rename to assets/js/4635b07f.679f399f.js index e6d801d4..caac8563 100644 --- a/assets/js/4635b07f.93894c21.js +++ b/assets/js/4635b07f.679f399f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8577],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),a=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=a(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=a(n),d=o,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||l;return n?r.createElement(f,i(i({ref:t},s),{},{components:n})):r.createElement(f,i({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,i=new Array(l);i[0]=u;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p.mdxType="string"==typeof e?e:o,i[1]=p;for(var a=2;a{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>p,toc:()=>a});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl completion powershell"},i=void 0,p={unversionedId:"cli/tnctl_completion_powershell",id:"cli/tnctl_completion_powershell",title:"tnctl completion powershell",description:"tnctl completion powershell",source:"@site/docs/terranetes-controller/cli/tnctl_completion_powershell.md",sourceDirName:"cli",slug:"/cli/tnctl_completion_powershell",permalink:"/terranetes-controller/cli/tnctl_completion_powershell",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_completion_powershell.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl completion powershell"},sidebar:"tutorialSidebar",previous:{title:"tnctl completion fish",permalink:"/terranetes-controller/cli/tnctl_completion_fish"},next:{title:"tnctl completion zsh",permalink:"/terranetes-controller/cli/tnctl_completion_zsh"}},c={},a=[{value:"tnctl completion powershell",id:"tnctl-completion-powershell",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:a};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-completion-powershell"},"tnctl completion powershell"),(0,o.kt)("p",null,"Generate the autocompletion script for powershell"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Generate the autocompletion script for powershell."),(0,o.kt)("p",null,"To load completions in your current shell session:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion powershell | Out-String | Invoke-Expression\n")),(0,o.kt)("p",null,"To load completions for every new session, add the output of the above command\nto your powershell profile."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion powershell [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for powershell\n --no-descriptions disable completion descriptions\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion"},"tnctl completion"),"\t - Generate the autocompletion script for the specified shell")))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8577],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),a=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=a(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),u=a(n),d=o,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||l;return n?r.createElement(f,i(i({ref:t},s),{},{components:n})):r.createElement(f,i({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,i=new Array(l);i[0]=u;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p.mdxType="string"==typeof e?e:o,i[1]=p;for(var a=2;a{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>p,toc:()=>a});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl completion powershell"},i=void 0,p={unversionedId:"cli/tnctl_completion_powershell",id:"cli/tnctl_completion_powershell",title:"tnctl completion powershell",description:"tnctl completion powershell",source:"@site/docs/terranetes-controller/cli/tnctl_completion_powershell.md",sourceDirName:"cli",slug:"/cli/tnctl_completion_powershell",permalink:"/terranetes-controller/cli/tnctl_completion_powershell",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_completion_powershell.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl completion powershell"},sidebar:"tutorialSidebar",previous:{title:"tnctl completion fish",permalink:"/terranetes-controller/cli/tnctl_completion_fish"},next:{title:"tnctl completion zsh",permalink:"/terranetes-controller/cli/tnctl_completion_zsh"}},c={},a=[{value:"tnctl completion powershell",id:"tnctl-completion-powershell",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:a};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-completion-powershell"},"tnctl completion powershell"),(0,o.kt)("p",null,"Generate the autocompletion script for powershell"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Generate the autocompletion script for powershell."),(0,o.kt)("p",null,"To load completions in your current shell session:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion powershell | Out-String | Invoke-Expression\n")),(0,o.kt)("p",null,"To load completions for every new session, add the output of the above command\nto your powershell profile."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion powershell [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for powershell\n --no-descriptions disable completion descriptions\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion"},"tnctl completion"),"\t - Generate the autocompletion script for the specified shell")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/47f9d068.51810f0d.js b/assets/js/47f9d068.51810f0d.js deleted file mode 100644 index 2e4e188e..00000000 --- a/assets/js/47f9d068.51810f0d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8569],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),p=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,i=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),d=p(r),f=o,v=d["".concat(i,".").concat(f)]||d[f]||u[f]||c;return r?n.createElement(v,l(l({ref:t},s),{},{components:r})):n.createElement(v,l({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,l=new Array(c);l[0]=d;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:o,l[1]=a;for(var p=2;p{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>c,metadata:()=>a,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl convert"},l=void 0,a={unversionedId:"cli/tnctl_convert",id:"cli/tnctl_convert",title:"tnctl convert",description:"tnctl convert",source:"@site/docs/terranetes-controller/cli/tnctl_convert.md",sourceDirName:"cli",slug:"/cli/tnctl_convert",permalink:"/terranetes-controller/cli/tnctl_convert",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_convert.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl convert"},sidebar:"tutorialSidebar",previous:{title:"tnctl config view",permalink:"/terranetes-controller/cli/tnctl_config_view"},next:{title:"tnctl convert cloudresource",permalink:"/terranetes-controller/cli/tnctl_convert_cloudresource"}},i={},p=[{value:"tnctl convert",id:"tnctl-convert",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-convert"},"tnctl convert"),(0,o.kt)("p",null,"Used to convert between different formats"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl convert COMMAND [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for convert\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_convert_cloudresource"},"tnctl convert cloudresource"),"\t - Used to convert cloudresource back to terraform"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_convert_configuration"},"tnctl convert configuration"),"\t - Converts configuration back to a terraform module"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_convert_revision"},"tnctl convert revision"),"\t - Used to convert revision back to terraform")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/47f9d068.c37a1bb0.js b/assets/js/47f9d068.c37a1bb0.js new file mode 100644 index 00000000..6ad98668 --- /dev/null +++ b/assets/js/47f9d068.c37a1bb0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8569],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),p=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,i=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),f=p(r),d=o,v=f["".concat(i,".").concat(d)]||f[d]||u[d]||c;return r?n.createElement(v,l(l({ref:t},s),{},{components:r})):n.createElement(v,l({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,l=new Array(c);l[0]=f;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:o,l[1]=a;for(var p=2;p{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>c,metadata:()=>a,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl convert"},l=void 0,a={unversionedId:"cli/tnctl_convert",id:"cli/tnctl_convert",title:"tnctl convert",description:"tnctl convert",source:"@site/docs/terranetes-controller/cli/tnctl_convert.md",sourceDirName:"cli",slug:"/cli/tnctl_convert",permalink:"/terranetes-controller/cli/tnctl_convert",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_convert.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl convert"},sidebar:"tutorialSidebar",previous:{title:"tnctl config view",permalink:"/terranetes-controller/cli/tnctl_config_view"},next:{title:"tnctl convert cloudresource",permalink:"/terranetes-controller/cli/tnctl_convert_cloudresource"}},i={},p=[{value:"tnctl convert",id:"tnctl-convert",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-convert"},"tnctl convert"),(0,o.kt)("p",null,"Used to convert between different formats"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl convert COMMAND [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for convert\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_convert_cloudresource"},"tnctl convert cloudresource"),"\t - Used to convert cloudresource back to terraform"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_convert_configuration"},"tnctl convert configuration"),"\t - Converts configuration back to a terraform module"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_convert_revision"},"tnctl convert revision"),"\t - Used to convert revision back to terraform")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4882424c.423b3f57.js b/assets/js/4882424c.423b3f57.js deleted file mode 100644 index 5e7551e8..00000000 --- a/assets/js/4882424c.423b3f57.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2713],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=a.createContext({}),s=function(e){var t=a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=s(r),h=n,d=m["".concat(p,".").concat(h)]||m[h]||u[h]||i;return r?a.createElement(d,o(o({ref:t},c),{},{components:r})):a.createElement(d,o({ref:t},c))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,o=new Array(i);o[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:n,o[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var a=r(7462),n=(r(7294),r(3905));const i={sidebar_position:2},o="Using Private Repositories",l={unversionedId:"developer/private",id:"developer/private",title:"Using Private Repositories",description:"If the repository containing the terraform module is private and requires credentials to retrieve, you can add the authentication details to a secret held within the namespace.",source:"@site/docs/terranetes-controller/developer/private.md",sourceDirName:"developer",slug:"/developer/private",permalink:"/terranetes-controller/developer/private",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/developer/private.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Terranetes CLI",permalink:"/terranetes-controller/developer/tnctl"},next:{title:"Configuration Contexts",permalink:"/terranetes-controller/developer/contexts"}},p={},s=[{value:"Using SSH Authentication",id:"using-ssh-authentication",level:2},{value:"Using HTTP Authentication",id:"using-http-authentication",level:2},{value:"Using Token Authentication",id:"using-token-authentication",level:2},{value:"What sources are supported?",id:"what-sources-are-supported",level:2}],c={toc:s};function u(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"using-private-repositories"},"Using Private Repositories"),(0,n.kt)("p",null,"If the repository containing the terraform module is private and requires credentials to retrieve, you can add the authentication details to a secret held within the namespace."),(0,n.kt)("h2",{id:"using-ssh-authentication"},"Using SSH Authentication"),(0,n.kt)("p",null,"Let's assume we have a terraform module hosted in a private Github repository. Here's how to add authentication details:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Create an SSH deployment key for the repository with the ability to clone.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Create a Kubernetes secret in the namespace containing the SSH private key."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl -n apps create secret generic ssh --from-file=SSH_KEY_AUTH=id.rsa\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Update the Terraform module configuration resource, setting the ",(0,n.kt)("inlineCode",{parentName:"p"},"spec.auth.name: [NAME]")," to the name of the secret:"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n auth:\n name: ssh\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Reference a git repository as the module source"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n module: git::ssh://git@github.com/ORG/REPOSITORY?ref=\n")))),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"If you need to extract a specific folder within the repository the syntax ",(0,n.kt)("inlineCode",{parentName:"p"},"git::ssh://git@github.com/ORG/REPOSITORY//PATH?ref="))),(0,n.kt)("h2",{id:"using-http-authentication"},"Using HTTP Authentication"),(0,n.kt)("p",null,"Similar to the above, create a Kubernetes secret like so"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Create a Kubernetes secret containing the username and password"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl -n app create secret generic httpauth --from-literal=GIT_USERNAME=USERNAME --from-literal=GIT_PASSWORD=PASSWORD\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Update the ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," to include the authentication reference"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n auth:\n name: httpauth\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Reference the terraform module using http"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n module: https://git@github.com/ORG/REPOSITORY?ref=\n")))),(0,n.kt)("h2",{id:"using-token-authentication"},"Using Token Authentication"),(0,n.kt)("p",null,"Use the same process as above, creating a Kubernetes secret ",(0,n.kt)("inlineCode",{parentName:"p"},"TOKEN")),(0,n.kt)("h2",{id:"what-sources-are-supported"},"What sources are supported?"),(0,n.kt)("p",null,"We use the same library as Terraform, ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/hashicorp/go-getter"},"go-getter")," that supports:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Git"),(0,n.kt)("li",{parentName:"ul"},"Mercurial"),(0,n.kt)("li",{parentName:"ul"},"HTTP"),(0,n.kt)("li",{parentName:"ul"},"Amazon S3"),(0,n.kt)("li",{parentName:"ul"},"Google GCP")),(0,n.kt)("p",null,"For full details, see ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/hashicorp/go-getter"},"https://github.com/hashicorp/go-getter"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4882424c.c835e1dd.js b/assets/js/4882424c.c835e1dd.js new file mode 100644 index 00000000..aebac5fe --- /dev/null +++ b/assets/js/4882424c.c835e1dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2713],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>h});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=a.createContext({}),s=function(e){var t=a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},c=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=s(r),h=n,d=m["".concat(p,".").concat(h)]||m[h]||u[h]||i;return r?a.createElement(d,o(o({ref:t},c),{},{components:r})):a.createElement(d,o({ref:t},c))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,o=new Array(i);o[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l.mdxType="string"==typeof e?e:n,o[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var a=r(7462),n=(r(7294),r(3905));const i={sidebar_position:2},o="Using Private Repositories",l={unversionedId:"developer/private",id:"developer/private",title:"Using Private Repositories",description:"If the repository containing the terraform module is private and requires credentials to retrieve, you can add the authentication details to a secret held within the namespace.",source:"@site/docs/terranetes-controller/developer/private.md",sourceDirName:"developer",slug:"/developer/private",permalink:"/terranetes-controller/developer/private",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/developer/private.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Terranetes CLI",permalink:"/terranetes-controller/developer/tnctl"},next:{title:"Configuration Contexts",permalink:"/terranetes-controller/developer/contexts"}},p={},s=[{value:"Using SSH Authentication",id:"using-ssh-authentication",level:2},{value:"Using HTTP Authentication",id:"using-http-authentication",level:2},{value:"Using Token Authentication",id:"using-token-authentication",level:2},{value:"What sources are supported?",id:"what-sources-are-supported",level:2}],c={toc:s};function u(e){let{components:t,...r}=e;return(0,n.kt)("wrapper",(0,a.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"using-private-repositories"},"Using Private Repositories"),(0,n.kt)("p",null,"If the repository containing the terraform module is private and requires credentials to retrieve, you can add the authentication details to a secret held within the namespace."),(0,n.kt)("h2",{id:"using-ssh-authentication"},"Using SSH Authentication"),(0,n.kt)("p",null,"Let's assume we have a terraform module hosted in a private Github repository. Here's how to add authentication details:"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Create an SSH deployment key for the repository with the ability to clone.")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Create a Kubernetes secret in the namespace containing the SSH private key."),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl -n apps create secret generic ssh --from-file=SSH_KEY_AUTH=id.rsa\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Update the Terraform module configuration resource, setting the ",(0,n.kt)("inlineCode",{parentName:"p"},"spec.auth.name: [NAME]")," to the name of the secret:"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n auth:\n name: ssh\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Reference a git repository as the module source"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n module: git::ssh://git@github.com/ORG/REPOSITORY?ref=\n")))),(0,n.kt)("admonition",{type:"tip"},(0,n.kt)("p",{parentName:"admonition"},"If you need to extract a specific folder within the repository the syntax ",(0,n.kt)("inlineCode",{parentName:"p"},"git::ssh://git@github.com/ORG/REPOSITORY//PATH?ref="))),(0,n.kt)("h2",{id:"using-http-authentication"},"Using HTTP Authentication"),(0,n.kt)("p",null,"Similar to the above, create a Kubernetes secret like so"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Create a Kubernetes secret containing the username and password"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl -n app create secret generic httpauth --from-literal=GIT_USERNAME=USERNAME --from-literal=GIT_PASSWORD=PASSWORD\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Update the ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," to include the authentication reference"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n auth:\n name: httpauth\n"))),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("p",{parentName:"li"},"Reference the terraform module using http"),(0,n.kt)("pre",{parentName:"li"},(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n module: https://git@github.com/ORG/REPOSITORY?ref=\n")))),(0,n.kt)("h2",{id:"using-token-authentication"},"Using Token Authentication"),(0,n.kt)("p",null,"Use the same process as above, creating a Kubernetes secret ",(0,n.kt)("inlineCode",{parentName:"p"},"TOKEN")),(0,n.kt)("h2",{id:"what-sources-are-supported"},"What sources are supported?"),(0,n.kt)("p",null,"We use the same library as Terraform, ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/hashicorp/go-getter"},"go-getter")," that supports:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Git"),(0,n.kt)("li",{parentName:"ul"},"Mercurial"),(0,n.kt)("li",{parentName:"ul"},"HTTP"),(0,n.kt)("li",{parentName:"ul"},"Amazon S3"),(0,n.kt)("li",{parentName:"ul"},"Google GCP")),(0,n.kt)("p",null,"For full details, see ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/hashicorp/go-getter"},"https://github.com/hashicorp/go-getter"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4e00d4f0.3b39d536.js b/assets/js/4e00d4f0.3b39d536.js new file mode 100644 index 00000000..a5cdf6f2 --- /dev/null +++ b/assets/js/4e00d4f0.3b39d536.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6430],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(n),m=r,f=d["".concat(l,".").concat(m)]||d[m]||u[m]||o;return n?a.createElement(f,i(i({ref:t},p),{},{components:n})):a.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=n(7462),r=(n(7294),n(3905));const o={sidebar_position:5},i="Injecting Defaults",s={unversionedId:"admin/defaults",id:"admin/defaults",title:"Injecting Defaults",description:"Currently via policies platform administrators have the ability to inject both variables and or secrets into developer Configurations, common use cases",source:"@site/docs/terranetes-controller/admin/defaults.md",sourceDirName:"admin",slug:"/admin/defaults",permalink:"/terranetes-controller/admin/defaults",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/defaults.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Expose Costs",permalink:"/terranetes-controller/admin/costs"},next:{title:"Drift Detection",permalink:"/terranetes-controller/admin/drift"}},l={},c=[{value:"Variables",id:"variables",level:2},{value:"Secrets",id:"secrets",level:2}],p={toc:c};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"injecting-defaults"},"Injecting Defaults"),(0,r.kt)("p",null,"Currently via policies platform administrators have the ability to inject both variables and or secrets into developer Configurations, common use cases"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Removing the administrative headache from the developers around which values to use, or enforcing specific organizational defaults on upstream modules."),(0,r.kt)("li",{parentName:"ul"},"Sharing credentials, tokens across an collection of Configurations, for example access to private repositories.")),(0,r.kt)("h2",{id:"variables"},"Variables"),(0,r.kt)("p",null,"Default environments provide the ability to inject environment-specific variables into a configuration based on a selector. An example might be:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Adding environment-specific options (e.g. VPC ID, tags, etc), elements that you don't want developers to have to deal with"),(0,r.kt)("li",{parentName:"ul"},"Adding project-specific tags (e.g. cost center codes, project ID, etc)")),(0,r.kt)("p",null,"You can configure these via a Policy resource. For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: environment-defaults\nspec:\n defaults:\n # Can be used to filter on configuration module sources\n modules:\n - \n namespace:\n # Match on namespace labels\n matchLabels:\n kubernetes.io/metadata.name: hello\n # Use expressions to match on namespace labels\n matchExpressions:\n - key: kubernetes.io/metadata.name\n operator: Exists\n variables:\n environment: dev\n")),(0,r.kt)("h2",{id:"secrets"},"Secrets"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"This feature is only available from v0.3.15 onwards")),(0,r.kt)("p",null,"A defaults policy can also be used to inject secrets into a job. A common use case would be for the platform team to provide transparent authentication. Lets take the following example."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"We have a number of private repositories we want to allow the developers to consume."),(0,r.kt)("li",{parentName:"ul"},"We don't want the developers to have to deal with authenticating to these modules and thus the feature should be transparent to them."),(0,r.kt)("li",{parentName:"ul"},"We have already create a kubernetes secret in the controller namespace containing a ssh_key or personal access token used to source the modules."),(0,r.kt)("li",{parentName:"ul"},"We need to setup a policy which injects these secrets into the job so developers don't need to private authentication themselves.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: default-authentication\nspec:\n defaults:\n # Can be used to filter on configuration module sources\n modules:\n - github.com/appvia/terraform-aws-myprivaterepo:.*\n namespace:\n # Use expressions to match on namespace labels\n matchExpressions:\n - key: kubernetes.io/metadata.name\n operator: Exists\n secrets:\n - auth_key\n")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Note, terranetes controller had a bug prior to v0.3.30 in regard to default secrets. The ",(0,r.kt)("inlineCode",{parentName:"p"},"setup")," stage, which is responsible retrieving the ",(0,r.kt)("inlineCode",{parentName:"p"},"spec.module")," (terraform code) did not have access to the secret; thus if your using the feature to support private repository access, you'll have issues in the delete. This was fixed ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/pull/812"},"here"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4e00d4f0.4821f715.js b/assets/js/4e00d4f0.4821f715.js deleted file mode 100644 index 9fcd4249..00000000 --- a/assets/js/4e00d4f0.4821f715.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6430],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=a.createContext({}),c=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(n),m=r,f=d["".concat(l,".").concat(m)]||d[m]||u[m]||o;return n?a.createElement(f,i(i({ref:t},p),{},{components:n})):a.createElement(f,i({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:r,i[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=n(7462),r=(n(7294),n(3905));const o={sidebar_position:5},i="Injecting Defaults",s={unversionedId:"admin/defaults",id:"admin/defaults",title:"Injecting Defaults",description:"Currently via policies platform administrators have the ability to inject both variables and or secrets into developer Configurations, common use cases",source:"@site/docs/terranetes-controller/admin/defaults.md",sourceDirName:"admin",slug:"/admin/defaults",permalink:"/terranetes-controller/admin/defaults",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/defaults.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:5,frontMatter:{sidebar_position:5},sidebar:"tutorialSidebar",previous:{title:"Expose Costs",permalink:"/terranetes-controller/admin/costs"},next:{title:"Drift Detection",permalink:"/terranetes-controller/admin/drift"}},l={},c=[{value:"Variables",id:"variables",level:2},{value:"Secrets",id:"secrets",level:2}],p={toc:c};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"injecting-defaults"},"Injecting Defaults"),(0,r.kt)("p",null,"Currently via policies platform administrators have the ability to inject both variables and or secrets into developer Configurations, common use cases"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Removing the administrative headache from the developers around which values to use, or enforcing specific organizational defaults on upstream modules."),(0,r.kt)("li",{parentName:"ul"},"Sharing credentials, tokens across an collection of Configurations, for example access to private repositories.")),(0,r.kt)("h2",{id:"variables"},"Variables"),(0,r.kt)("p",null,"Default environments provide the ability to inject environment-specific variables into a configuration based on a selector. An example might be:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Adding environment-specific options (e.g. VPC ID, tags, etc), elements that you don't want developers to have to deal with"),(0,r.kt)("li",{parentName:"ul"},"Adding project-specific tags (e.g. cost center codes, project ID, etc)")),(0,r.kt)("p",null,"You can configure these via a Policy resource. For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: environment-defaults\nspec:\n defaults:\n # Can be used to filter on configuration module sources\n modules:\n - \n namespace:\n # Match on namespace labels\n matchLabels:\n kubernetes.io/metadata.name: hello\n # Use expressions to match on namespace labels\n matchExpressions:\n - key: kubernetes.io/metadata.name\n operator: Exists\n variables:\n environment: dev\n")),(0,r.kt)("h2",{id:"secrets"},"Secrets"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"This feature is only available from v0.3.15 onwards")),(0,r.kt)("p",null,"A defaults policy can also be used to inject secrets into a job. A common use case would be for the platform team to provide transparent authentication. Lets take the following example."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"We have a number of private repositories we want to allow the developers to consume."),(0,r.kt)("li",{parentName:"ul"},"We don't want the developers to have to deal with authenticating to these modules and thus the feature should be transparent to them."),(0,r.kt)("li",{parentName:"ul"},"We have already create a kubernetes secret in the controller namespace containing a ssh_key or personal access token used to source the modules."),(0,r.kt)("li",{parentName:"ul"},"We need to setup a policy which injects these secrets into the job so developers don't need to private authentication themselves.")),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: default-authentication\nspec:\n defaults:\n # Can be used to filter on configuration module sources\n modules:\n - github.com/appvia/terraform-aws-myprivaterepo:.*\n namespace:\n # Use expressions to match on namespace labels\n matchExpressions:\n - key: kubernetes.io/metadata.name\n operator: Exists\n secrets:\n - auth_key\n")),(0,r.kt)("admonition",{type:"caution"},(0,r.kt)("p",{parentName:"admonition"},"Note, terranetes controller had a bug prior to v0.3.30 in regard to default secrets. The ",(0,r.kt)("inlineCode",{parentName:"p"},"setup")," stage, which is responsible retrieving the ",(0,r.kt)("inlineCode",{parentName:"p"},"spec.module")," (terraform code) did not have access to the secret; thus if your using the feature to support private repository access, you'll have issues in the delete. This was fixed ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/pull/812"},"here"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4f26f5d6.1ba461fa.js b/assets/js/4f26f5d6.1ba461fa.js new file mode 100644 index 00000000..f1f49c29 --- /dev/null +++ b/assets/js/4f26f5d6.1ba461fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6448],{3905:(t,e,a)=>{a.d(e,{Zo:()=>h,kt:()=>c});var l=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function p(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,l)}return a}function n(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(t);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var i=l.createContext({}),s=function(t){var e=l.useContext(i),a=e;return t&&(a="function"==typeof t?t(e):n(n({},e),t)),a},h=function(t){var e=s(t.components);return l.createElement(i.Provider,{value:e},t.children)},u={inlineCode:"code",wrapper:function(t){var e=t.children;return l.createElement(l.Fragment,{},e)}},m=l.forwardRef((function(t,e){var a=t.components,r=t.mdxType,p=t.originalType,i=t.parentName,h=o(t,["components","mdxType","originalType","parentName"]),m=s(a),c=r,g=m["".concat(i,".").concat(c)]||m[c]||u[c]||p;return a?l.createElement(g,n(n({ref:e},h),{},{components:a})):l.createElement(g,n({ref:e},h))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var p=a.length,n=new Array(p);n[0]=m;var o={};for(var i in e)hasOwnProperty.call(e,i)&&(o[i]=e[i]);o.originalType=t,o.mdxType="string"==typeof t?t:r,n[1]=o;for(var s=2;s{a.r(e),a.d(e,{assets:()=>i,contentTitle:()=>n,default:()=>u,frontMatter:()=>p,metadata:()=>o,toc:()=>s});var l=a(7462),r=(a(7294),a(3905));const p={sidebar_position:2},n="Releases",o={unversionedId:"releases",id:"releases",title:"Releases",description:"Release v0.4.0",source:"@site/docs/terranetes-controller/releases.md",sourceDirName:".",slug:"/releases",permalink:"/terranetes-controller/releases",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/releases.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Quick start",permalink:"/terranetes-controller/quick_start"},next:{title:"Architecture",permalink:"/terranetes-controller/architecture"}},i={},s=[{value:"Release v0.4.0",id:"release-v040",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl",level:3},{value:"What's Changed",id:"whats-changed",level:3},{value:"Features",id:"features",level:3},{value:"Documentation",id:"documentation",level:3},{value:"BugFixes",id:"bugfixes",level:3},{value:"Dependencies",id:"dependencies",level:3},{value:"New Contributors",id:"new-contributors",level:2},{value:"Release v0.3.23",id:"release-v0323",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-1",level:3},{value:"\u2747\ufe0f FEATURES",id:"\ufe0f-features",level:3},{value:"What's Changed",id:"whats-changed-1",level:3},{value:"Release v0.3.22",id:"release-v0322",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-2",level:3},{value:"What's Changed",id:"whats-changed-2",level:3},{value:"Release v0.3.21",id:"release-v0321",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-3",level:3},{value:"\u2747\ufe0f FEATURES",id:"\ufe0f-features-1",level:3},{value:"\ud83d\udc1b BUGS",id:"-bugs",level:3},{value:"What's Changed",id:"whats-changed-3",level:3},{value:"Release v0.3.20",id:"release-v0320",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-4",level:3},{value:"\u2747\ufe0f FEATURES",id:"\ufe0f-features-2",level:3},{value:"\ud83d\udc1b BUGS",id:"-bugs-1",level:3},{value:"What's Changed",id:"whats-changed-4",level:3},{value:"Release v0.3.19",id:"release-v0319",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-5",level:3},{value:"\u2747\ufe0f FEATURES",id:"\ufe0f-features-3",level:3},{value:"What's Changed",id:"whats-changed-5",level:3},{value:"Release v0.3.18",id:"release-v0318",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-6",level:3},{value:"What's Changed",id:"whats-changed-6",level:3},{value:"Release v0.3.17",id:"release-v0317",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-7",level:3},{value:"What's Changed#",id:"whats-changed-7",level:3},{value:"Release v0.3.16",id:"release-v0316",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-8",level:3},{value:"\u2747\ufe0f FEATURES",id:"\ufe0f-features-4",level:3},{value:"\ud83d\udc1b BUGS",id:"-bugs-2",level:3},{value:"What's Changed",id:"whats-changed-8",level:3},{value:"Release v0.3.15",id:"release-v0315",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-9",level:3},{value:"\u2747\ufe0f Features",id:"\ufe0f-features-5",level:3},{value:"What's Changed",id:"whats-changed-9",level:3},{value:"Release v0.3.14",id:"release-v0314",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-10",level:3},{value:"\ud83d\udc1b Bug Fixes",id:"-bug-fixes",level:3},{value:"\u2747\ufe0f Features",id:"\ufe0f-features-6",level:3},{value:"What's Changed",id:"whats-changed-10",level:3},{value:"Release v0.3.13",id:"release-v0313",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-11",level:3},{value:"\ud83d\udc1b Bug Fixes",id:"-bug-fixes-1",level:3},{value:"\u2747\ufe0f Features",id:"\ufe0f-features-7",level:3},{value:"What's Changed",id:"whats-changed-11",level:3},{value:"Release v0.3.12",id:"release-v0312",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-12",level:3},{value:"Bug Fixes",id:"bug-fixes",level:3},{value:"What's Changed",id:"whats-changed-12",level:3},{value:"Release v0.3.11",id:"release-v0311",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-13",level:3},{value:"What's Changed",id:"whats-changed-13",level:3},{value:"Release v0.3.10",id:"release-v0310",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-14",level:3},{value:"Bug Fixes",id:"bug-fixes-1",level:3},{value:"What's Changed",id:"whats-changed-14",level:3},{value:"Release v0.3.9",id:"release-v039",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-15",level:3},{value:"What's Changed",id:"whats-changed-15",level:3},{value:"Release v0.3.8",id:"release-v038",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-16",level:3},{value:"Bug Fixes",id:"bug-fixes-2",level:3},{value:"What's Changed",id:"whats-changed-16",level:3},{value:"Release v0.3.7",id:"release-v037",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-17",level:3},{value:"New Features",id:"new-features",level:3},{value:"What's Changed",id:"whats-changed-17",level:3},{value:"Release v0.3.6",id:"release-v036",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-18",level:3},{value:"What's Changed",id:"whats-changed-18",level:3},{value:"Release v0.3.5",id:"release-v035",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-19",level:3},{value:"What's Changed",id:"whats-changed-19",level:3},{value:"Release v0.3.4",id:"release-v034",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-20",level:3},{value:"What's Changed",id:"whats-changed-20",level:3},{value:"Release v0.3.3",id:"release-v033",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-21",level:3},{value:"What's Changed",id:"whats-changed-21",level:3},{value:"Release v0.3.2",id:"release-v032",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-22",level:3},{value:"New Features",id:"new-features-1",level:3},{value:"Bug Fixes",id:"bug-fixes-3",level:3},{value:"What's Changed",id:"whats-changed-22",level:3},{value:"Release v0.3.1",id:"release-v031",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-23",level:3},{value:"New Features",id:"new-features-2",level:3},{value:"What's Changed",id:"whats-changed-23",level:3},{value:"Release v0.3.0",id:"release-v030",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-24",level:3},{value:"Breaking Change",id:"breaking-change",level:3},{value:"What's Changed",id:"whats-changed-24",level:3},{value:"Release v0.2.9",id:"release-v029",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-25",level:3},{value:"New Features",id:"new-features-3",level:3},{value:"Build",id:"build",level:3},{value:"Bug Fixes",id:"bug-fixes-4",level:3},{value:"What's Changed",id:"whats-changed-25",level:3},{value:"Release v0.2.8",id:"release-v028",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-26",level:3},{value:"What's Changed",id:"whats-changed-26",level:3},{value:"Release v0.2.7",id:"release-v027",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-27",level:3},{value:"New Features",id:"new-features-4",level:3},{value:"Bug Fixes",id:"bug-fixes-5",level:3},{value:"What's Changed",id:"whats-changed-27",level:3},{value:"Release v0.2.6",id:"release-v026",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-28",level:3},{value:"New Features",id:"new-features-5",level:3},{value:"Bug Fixes",id:"bug-fixes-6",level:3},{value:"What's Changed",id:"whats-changed-28",level:3},{value:"Release v0.2.5",id:"release-v025",level:2},{value:"Bug Fixes",id:"bug-fixes-7",level:3},{value:"What's Changed",id:"whats-changed-29",level:3},{value:"Release v0.2.4",id:"release-v024",level:2},{value:"New Features",id:"new-features-6",level:3},{value:"Bug Fixes",id:"bug-fixes-8",level:3},{value:"What's Changed",id:"whats-changed-30",level:3},{value:"Release v0.2.3",id:"release-v023",level:2},{value:"New Features",id:"new-features-7",level:3},{value:"What's Changed",id:"whats-changed-31",level:3},{value:"Release v0.2.2",id:"release-v022",level:2},{value:"Bug Fixes",id:"bug-fixes-9",level:3},{value:"What's Changed",id:"whats-changed-32",level:3},{value:"Release v0.2.1",id:"release-v021",level:2},{value:"Bug Fixes",id:"bug-fixes-10",level:3},{value:"What's Changed",id:"whats-changed-33",level:3},{value:"Release v0.2.0",id:"release-v020",level:2},{value:"New Features",id:"new-features-8",level:3},{value:"Bug Fixes",id:"bug-fixes-11",level:3},{value:"Migration Required",id:"migration-required",level:3},{value:"What's Changed",id:"whats-changed-34",level:3},{value:"Release v0.1.6",id:"release-v016",level:2},{value:"New Features",id:"new-features-9",level:3},{value:"Bug Fixes",id:"bug-fixes-12",level:3},{value:"What's Changed",id:"whats-changed-35",level:3},{value:"New Contributors",id:"new-contributors-1",level:3},{value:"Release v0.1.5",id:"release-v015",level:2},{value:"Build",id:"build-1",level:3},{value:"What's Changed",id:"whats-changed-36",level:3},{value:"Release v0.1.4",id:"release-v014",level:2},{value:"New Features",id:"new-features-10",level:3},{value:"Build",id:"build-2",level:3},{value:"What's Changed",id:"whats-changed-37",level:3},{value:"Release v0.1.3",id:"release-v013",level:2},{value:"Bug Fixes",id:"bug-fixes-13",level:3},{value:"What's Changed",id:"whats-changed-38",level:3},{value:"Release v0.1.2",id:"release-v012",level:2},{value:"New Features",id:"new-features-11",level:3},{value:"Bug Fixes",id:"bug-fixes-14",level:3},{value:"Documentation",id:"documentation-1",level:3},{value:"What's Changed",id:"whats-changed-39",level:3},{value:"Release v0.1.1",id:"release-v011",level:2},{value:"Features",id:"features-1",level:3},{value:"What's Changed",id:"whats-changed-40",level:3},{value:"Release v0.1.0",id:"release-v010",level:2},{value:"New Features",id:"new-features-12",level:3},{value:"Bug Fixes",id:"bug-fixes-15",level:3},{value:"What's Changed",id:"whats-changed-41",level:3}],h={toc:s};function u(t){let{components:e,...a}=t;return(0,r.kt)("wrapper",(0,l.Z)({},h,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"releases"},"Releases"),(0,r.kt)("h2",{id:"release-v040"},"Release v0.4.0"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed"},"What's Changed"),(0,r.kt)("p",null,"This release introduces the concept of a CloudResource. Currently Configuration CRDs are one to one mappings to the Terraform module, throwing a myriad of options at the consumer. CloudResources & Revision augments the consumer interface to a vastly reduced entry point, removing the cognitive load on the developers (consumers), and allowing the platform team to instil their version of best practice, defaults and organizational policy before consumption."),(0,r.kt)("p",null,"For more details see ",(0,r.kt)("a",{parentName:"p",href:"https://terranetes.appvia.io/terranetes-controller/admin/cloudresource/"},"https://terranetes.appvia.io/terranetes-controller/admin/cloudresource/")),(0,r.kt)("h3",{id:"features"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Added the new user model of CloudResources & Revisions, scoping the interface to the resource via a strict version controlled blueprint by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/824"},"https://github.com/appvia/terranetes-controller/pull/824")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Added Revision Command to provide a entrypoint for provisioning revisions by the platform team by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/847"},"https://github.com/appvia/terranetes-controller/pull/847")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Added a new CLI command to verify a Revision is runnable by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/866"},"https://github.com/appvia/terranetes-controller/pull/866")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Added a Create CloudResource Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/899"},"https://github.com/appvia/terranetes-controller/pull/899")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Convenience Aliases for Delete & Apply by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/868"},"https://github.com/appvia/terranetes-controller/pull/868")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - CLI Get Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/854"},"https://github.com/appvia/terranetes-controller/pull/854")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Cloud Resources Reconciles on Plan Changes by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/856"},"https://github.com/appvia/terranetes-controller/pull/856")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Additional EKS Preload Values by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/911"},"https://github.com/appvia/terranetes-controller/pull/911")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Cloud Resource Update Available by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/852"},"https://github.com/appvia/terranetes-controller/pull/852")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Create Workflow Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/853"},"https://github.com/appvia/terranetes-controller/pull/853")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Added to the Convert Command the ability to render into a Revision by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/855"},"https://github.com/appvia/terranetes-controller/pull/855")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Revisions in Use Metric by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/867"},"https://github.com/appvia/terranetes-controller/pull/867")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Update Proection for Revisions in Use by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/851"},"https://github.com/appvia/terranetes-controller/pull/851")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/992"},"https://github.com/appvia/terranetes-controller/pull/992")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/993"},"https://github.com/appvia/terranetes-controller/pull/993")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/999"},"https://github.com/appvia/terranetes-controller/pull/999"),"\ncontroller/pull/1011"),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1009"},"https://github.com/appvia/terranetes-controller/pull/1009")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1010"},"https://github.com/appvia/terranetes-controller/pull/1010")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Infracost Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1027"},"https://github.com/appvia/terranetes-controller/pull/1027")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1026"},"https://github.com/appvia/terranetes-controller/pull/1026")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1035"},"https://github.com/appvia/terranetes-controller/pull/1035")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1042"},"https://github.com/appvia/terranetes-controller/pull/1042")),(0,r.kt)("li",{parentName:"ul"},"[WF-3359]"," UpdateReadme by @celesteg1 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/979"},"https://github.com/appvia/terranetes-controller/pull/979")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Helm Release v0.4.0 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1050"},"https://github.com/appvia/terranetes-controller/pull/1050"))),(0,r.kt)("h3",{id:"documentation"},"Documentation"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Code Owners File by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1031"},"https://github.com/appvia/terranetes-controller/pull/1031")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Adding Examples by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1045"},"https://github.com/appvia/terranetes-controller/pull/1045")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Updating Examples by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1051"},"https://github.com/appvia/terranetes-controller/pull/1051"))),(0,r.kt)("h3",{id:"bugfixes"},"BugFixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Fixing Diagnostics by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1047"},"https://github.com/appvia/terranetes-controller/pull/1047")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Pod Name Retry by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1048"},"https://github.com/appvia/terranetes-controller/pull/1048")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Fixing Typo by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1049"},"https://github.com/appvia/terranetes-controller/pull/1049")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Create Cloud Resource CLI by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1052"},"https://github.com/appvia/terranetes-controller/pull/1052"))),(0,r.kt)("h3",{id:"dependencies"},"Dependencies"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[DEPS]"," - Updating Controller Runtime v0.16.0 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/985"},"https://github.com/appvia/terranetes-controller/pull/985")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/client-go from 0.28.0 to 0.28.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/990"},"https://github.com/appvia/terranetes-controller/pull/990")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.28.0 to 0.28.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/989"},"https://github.com/appvia/terranetes-controller/pull/989")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.44.331 to 1.44.332 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/987"},"https://github.com/appvia/terranetes-controller/pull/987")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.28.0 to 0.28.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/988"},"https://github.com/appvia/terranetes-controller/pull/988")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.44.332 to 1.44.334 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/994"},"https://github.com/appvia/terranetes-controller/pull/994")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.44.334 to 1.45.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/995"},"https://github.com/appvia/terranetes-controller/pull/995")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-runtime from 0.16.0 to 0.16.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/996"},"https://github.com/appvia/terranetes-controller/pull/996")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.0 to 1.45.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/997"},"https://github.com/appvia/terranetes-controller/pull/997")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/oauth2 from 0.11.0 to 0.12.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1000"},"https://github.com/appvia/terranetes-controller/pull/1000")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.1 to 1.45.5 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1004"},"https://github.com/appvia/terranetes-controller/pull/1004")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/tools from 0.12.0 to 0.13.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1001"},"https://github.com/appvia/terranetes-controller/pull/1001")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.5 to 1.45.6 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1005"},"https://github.com/appvia/terranetes-controller/pull/1005")),(0,r.kt)("li",{parentName:"ul"},"Bump actions/checkout from 3 to 4 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1006"},"https://github.com/appvia/terranetes-controller/pull/1006")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/build-push-action from 4.1.1 to 4.2.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1007"},"https://github.com/appvia/terranetes-controller/pull/1007")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/evanphx/json-patch from 5.6.0+incompatible to 5.7.0+incompatible by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-"},"https://github.com/appvia/terranetes-")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/code-generator from 0.28.1 to 0.28.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1016"},"https://github.com/appvia/terranetes-controller/pull/1016")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.6 to 1.45.9 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1017"},"https://github.com/appvia/terranetes-controller/pull/1017")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.28.1 to 0.28.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1015"},"https://github.com/appvia/terranetes-controller/pull/1015")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.28.1 to 0.28.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1019"},"https://github.com/appvia/terranetes-controller/pull/1019")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.9 to 1.45.10 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1018"},"https://github.com/appvia/terranetes-controller/pull/1018")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/login-action from 2 to 3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1024"},"https://github.com/appvia/terranetes-controller/pull/1024")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/setup-buildx-action from 2 to 3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1023"},"https://github.com/appvia/terranetes-controller/pull/1023")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/build-push-action from 4.2.1 to 5.0.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1022"},"https://github.com/appvia/terranetes-controller/pull/1022")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/metadata-action from 4.6.0 to 5.0.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1021"},"https://github.com/appvia/terranetes-controller/pull/1021")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.10 to 1.45.11 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1020"},"https://github.com/appvia/terranetes-controller/pull/1020")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.12.0 to 2.12.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1029"},"https://github.com/appvia/terranetes-controller/pull/1029")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.11 to 1.45.13 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1028"},"https://github.com/appvia/terranetes-controller/pull/1028")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.13 to 1.45.14 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1030"},"https://github.com/appvia/terranetes-controller/pull/1030")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/tidwall/gjson from 1.16.0 to 1.17.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1032"},"https://github.com/appvia/terranetes-controller/pull/1032")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.14 to 1.45.15 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1033"},"https://github.com/appvia/terranetes-controller/pull/1033")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.15 to 1.45.16 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1034"},"https://github.com/appvia/terranetes-controller/pull/1034")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.16 to 1.45.17 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1036"},"https://github.com/appvia/terranetes-controller/pull/1036")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.17 to 1.45.20 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1041"},"https://github.com/appvia/terranetes-controller/pull/1041")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.27.10 to 1.28.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1040"},"https://github.com/appvia/terranetes-controller/pull/1040")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/prometheus/client_golang from 1.16.0 to 1.17.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1038"},"https://github.com/appvia/terranetes-controller/pull/1038")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.20 to 1.45.22 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1044"},"https://github.com/appvia/terranetes-controller/pull/1044")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.22 to 1.45.23 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1046"},"https://github.com/appvia/terranetes-controller/pull/1046"))),(0,r.kt)("h2",{id:"new-contributors"},"New Contributors"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"@celesteg1 made their first contribution in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/979"},"https://github.com/appvia/terranetes-controller/pull/979"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.31...v0.4.0"},"https://github.com/appvia/terranetes-controller/compare/v0.3.31...v0.4.0")),(0,r.kt)("h2",{id:"release-v0323"},"Release v0.3.23"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-1"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"\ufe0f-features"},"\u2747\ufe0f FEATURES"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Remove Provider Constraint by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/722"},"https://github.com/appvia/terranetes-controller/pull/722")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Allowing for Remapping of ValueFrom Inputs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/723"},"https://github.com/appvia/terranetes-controller/pull/723")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Renaming ValueFrom Secret Name by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/724"},"https://github.com/appvia/terranetes-controller/pull/724"))),(0,r.kt)("h3",{id:"whats-changed-1"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Dummy Terraform Module by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/704"},"https://github.com/appvia/terranetes-controller/pull/704")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Dummy Terraform Module by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/717"},"https://github.com/appvia/terranetes-controller/pull/717")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Switching Dummy Module Requirements by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/719"},"https://github.com/appvia/terranetes-controller/pull/719")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Custom Backend Testing by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/720"},"https://github.com/appvia/terranetes-controller/pull/720")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/oauth2 from 0.7.0 to 0.8.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/721"},"https://github.com/appvia/terranetes-controller/pull/721")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Remove Provider Constraint by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/722"},"https://github.com/appvia/terranetes-controller/pull/722")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Allowing for Remapping of ValueFrom Inputs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/723"},"https://github.com/appvia/terranetes-controller/pull/723")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Renaming ValueFrom Secret Name by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/724"},"https://github.com/appvia/terranetes-controller/pull/724")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release for v0.3.23 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/725"},"https://github.com/appvia/terranetes-controller/pull/725")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Fixing Image Building in E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/726"},"https://github.com/appvia/terranetes-controller/pull/726")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Bumping Terraform Module Version (Disabled ACLs) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/727"},"https://github.com/appvia/terranetes-controller/pull/727"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.22...v0.3.23"},"https://github.com/appvia/terranetes-controller/compare/v0.3.22...v0.3.23")),(0,r.kt)("h2",{id:"release-v0322"},"Release v0.3.22"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-2"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-2"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.22 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/700"},"https://github.com/appvia/terranetes-controller/pull/700"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.21...v0.3.22"},"https://github.com/appvia/terranetes-controller/compare/v0.3.21...v0.3.22")),(0,r.kt)("h2",{id:"release-v0321"},"Release v0.3.21"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-3"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"\ufe0f-features-1"},"\u2747\ufe0f FEATURES"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Deletion of Namespace Protection Webhook by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/697"},"https://github.com/appvia/terranetes-controller/pull/697"))),(0,r.kt)("h3",{id:"-bugs"},"\ud83d\udc1b BUGS"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Azure Identity Binding by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/696"},"https://github.com/appvia/terranetes-controller/pull/696"))),(0,r.kt)("h3",{id:"whats-changed-3"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Azure Identity Binding by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/696"},"https://github.com/appvia/terranetes-controller/pull/696")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/694"},"https://github.com/appvia/terranetes-controller/pull/694")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/693"},"https://github.com/appvia/terranetes-controller/pull/693")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Infracost Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/692"},"https://github.com/appvia/terranetes-controller/pull/692")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Delection of Namespace Protection Webhook by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/697"},"https://github.com/appvia/terranetes-controller/pull/697")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.21 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/698"},"https://github.com/appvia/terranetes-controller/pull/698"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.20...v0.3.21"},"https://github.com/appvia/terranetes-controller/compare/v0.3.20...v0.3.21")),(0,r.kt)("h2",{id:"release-v0320"},"Release v0.3.20"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-4"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"\ufe0f-features-2"},"\u2747\ufe0f FEATURES"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Namespace Protection by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/688"},"https://github.com/appvia/terranetes-controller/pull/688")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Check Namespace Status by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/689"},"https://github.com/appvia/terranetes-controller/pull/689"))),(0,r.kt)("h3",{id:"-bugs-1"},"\ud83d\udc1b BUGS"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Terranetes Namespace Error Message by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/691"},"https://github.com/appvia/terranetes-controller/pull/691"))),(0,r.kt)("h3",{id:"whats-changed-4"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apimachinery from 0.27.0 to 0.27.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/683"},"https://github.com/appvia/terranetes-controller/pull/683")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/code-generator from 0.27.0 to 0.27.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/684"},"https://github.com/appvia/terranetes-controller/pull/684")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Namespace Protection by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/688"},"https://github.com/appvia/terranetes-controller/pull/688")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Check Namespace Status by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/689"},"https://github.com/appvia/terranetes-controller/pull/689")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.20 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/690"},"https://github.com/appvia/terranetes-controller/pull/690")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Terranetes Namespace Error Message by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/691"},"https://github.com/appvia/terranetes-controller/pull/691"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.19...v0.3.20"},"https://github.com/appvia/terranetes-controller/compare/v0.3.19...v0.3.20")),(0,r.kt)("h2",{id:"release-v0319"},"Release v0.3.19"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-5"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"\ufe0f-features-3"},"\u2747\ufe0f FEATURES"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Default Providers by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/676"},"https://github.com/appvia/terranetes-controller/pull/676"))),(0,r.kt)("h3",{id:"whats-changed-5"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apimachinery from 0.26.3 to 0.27.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/678"},"https://github.com/appvia/terranetes-controller/pull/678")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/prometheus/client_golang from 1.14.0 to 1.15.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/677"},"https://github.com/appvia/terranetes-controller/pull/677")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Default Providers by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/676"},"https://github.com/appvia/terranetes-controller/pull/676")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Golang Version 1.19-1.20 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/679"},"https://github.com/appvia/terranetes-controller/pull/679")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.19 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/680"},"https://github.com/appvia/terranetes-controller/pull/680"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.18...v0.3.19"},"https://github.com/appvia/terranetes-controller/compare/v0.3.18...v0.3.19")),(0,r.kt)("h2",{id:"release-v0318"},"Release v0.3.18"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-6"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-6"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.17 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/653"},"https://github.com/appvia/terranetes-controller/pull/653")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.18 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/675"},"https://github.com/appvia/terranetes-controller/pull/675"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.17...v0.3.18"},"https://github.com/appvia/terranetes-controller/compare/v0.3.17...v0.3.18")),(0,r.kt)("h2",{id:"release-v0317"},"Release v0.3.17"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-7"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-7"},"What's Changed#"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release for v0.3.16 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/611"},"https://github.com/appvia/terranetes-controller/pull/611")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/net from 0.6.0 to 0.7.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/631"},"https://github.com/appvia/terranetes-controller/pull/631"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.16...v0.3.17"},"https://github.com/appvia/terranetes-controller/compare/v0.3.16...v0.3.17")),(0,r.kt)("h2",{id:"release-v0316"},"Release v0.3.16"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-8"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"\ufe0f-features-4"},"\u2747\ufe0f FEATURES"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Updated the infracosts ci image to ci-0.10.17 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/607"},"https://github.com/appvia/terranetes-controller/pull/607"))),(0,r.kt)("h3",{id:"-bugs-2"},"\ud83d\udc1b BUGS"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixes a bug from v0.3.15 where the CRD definition was not updated in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/608"},"https://github.com/appvia/terranetes-controller/pull/608"))),(0,r.kt)("h3",{id:"whats-changed-8"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.15 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/602"},"https://github.com/appvia/terranetes-controller/pull/602")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/oauth2 from 0.4.0 to 0.5.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/603"},"https://github.com/appvia/terranetes-controller/pull/603")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/tools from 0.5.0 to 0.6.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/604"},"https://github.com/appvia/terranetes-controller/pull/604")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.8.0 to 2.8.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/606"},"https://github.com/appvia/terranetes-controller/pull/606")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/hashicorp/go-getter from 1.6.2 to 1.7.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/605"},"https://github.com/appvia/terranetes-controller/pull/605")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Infracost Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/607"},"https://github.com/appvia/terranetes-controller/pull/607")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Updating the Boilerplate by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/608"},"https://github.com/appvia/terranetes-controller/pull/608"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.15...v0.3.16"},"https://github.com/appvia/terranetes-controller/compare/v0.3.15...v0.3.16")),(0,r.kt)("h2",{id:"release-v0315"},"Release v0.3.15"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-9"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"\ufe0f-features-5"},"\u2747\ufe0f Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Default Secrets into Policy by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/600"},"https://github.com/appvia/terranetes-controller/pull/600"))),(0,r.kt)("h3",{id:"whats-changed-9"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.14 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/591"},"https://github.com/appvia/terranetes-controller/pull/591")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Makefile Fix Typo by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/592"},"https://github.com/appvia/terranetes-controller/pull/592")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.50.1 to 1.51.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/593"},"https://github.com/appvia/terranetes-controller/pull/593")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-tools from 0.11.2 to 0.11.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/595"},"https://github.com/appvia/terranetes-controller/pull/595")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.51.0 to 1.51.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/596"},"https://github.com/appvia/terranetes-controller/pull/596")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/build-push-action from 3.3.0 to 4.0.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/594"},"https://github.com/appvia/terranetes-controller/pull/594")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-runtime from 0.14.2 to 0.14.4 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/597"},"https://github.com/appvia/terranetes-controller/pull/597")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/599"},"https://github.com/appvia/terranetes-controller/pull/599")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Default Secrets into Policy by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/600"},"https://github.com/appvia/terranetes-controller/pull/600")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Changing to v3 Save Github Actions by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/601"},"https://github.com/appvia/terranetes-controller/pull/601"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.14...v0.3.15"},"https://github.com/appvia/terranetes-controller/compare/v0.3.14...v0.3.15")),(0,r.kt)("h2",{id:"release-v0314"},"Release v0.3.14"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-10"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"-bug-fixes"},"\ud83d\udc1b Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added job-template flag by @richardbeumer in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/503"},"https://github.com/appvia/terranetes-controller/pull/503")),(0,r.kt)("li",{parentName:"ul"},"Remove the --name flag from tnctl logs as it is a required arg by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/520"},"https://github.com/appvia/terranetes-controller/pull/520")),(0,r.kt)("li",{parentName:"ul"},"Fixing Ready Condition Transition by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/535"},"https://github.com/appvia/terranetes-controller/pull/535")),(0,r.kt)("li",{parentName:"ul"},"Enable Webhooks Toggle by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/562"},"https://github.com/appvia/terranetes-controller/pull/562")),(0,r.kt)("li",{parentName:"ul"},"Reconcilation Annontation Predicate moved into Ensure Func by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/563"},"https://github.com/appvia/terranetes-controller/pull/563")),(0,r.kt)("li",{parentName:"ul"},"Disable Infracosts Update Check by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/565"},"https://github.com/appvia/terranetes-controller/pull/565"))),(0,r.kt)("h3",{id:"\ufe0f-features-6"},"\u2747\ufe0f Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/499"},"https://github.com/appvia/terranetes-controller/pull/499")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/498"},"https://github.com/appvia/terranetes-controller/pull/498")),(0,r.kt)("li",{parentName:"ul"},"Kubernetes Backend Secret Labels by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/533"},"https://github.com/appvia/terranetes-controller/pull/533")),(0,r.kt)("li",{parentName:"ul"},"Kubernetes State Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/534"},"https://github.com/appvia/terranetes-controller/pull/534")),(0,r.kt)("li",{parentName:"ul"},"Retry Logic for Pod Logs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/542"},"https://github.com/appvia/terranetes-controller/pull/542")),(0,r.kt)("li",{parentName:"ul"},"Lookup Providers in cluster for CLI Search by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/560"},"https://github.com/appvia/terranetes-controller/pull/560")),(0,r.kt)("li",{parentName:"ul"},"Retry CLI by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/568"},"https://github.com/appvia/terranetes-controller/pull/568")),(0,r.kt)("li",{parentName:"ul"},"Provider Secret Validation by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/575"},"https://github.com/appvia/terranetes-controller/pull/575")),(0,r.kt)("li",{parentName:"ul"},"Terraform Image Update to v1.3.7 by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/546"},"https://github.com/appvia/terranetes-controller/pull/546")),(0,r.kt)("li",{parentName:"ul"},"Changing to CI Infracost Image by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/577"},"https://github.com/appvia/terranetes-controller/pull/577")),(0,r.kt)("li",{parentName:"ul"},"Checkov Image Update to v2.2.299 by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/581"},"https://github.com/appvia/terranetes-controller/pull/581"))),(0,r.kt)("h3",{id:"whats-changed-10"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Helm Release v0.3.14 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/584"},"https://github.com/appvia/terranetes-controller/pull/584"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.13...v0.3.14"},"https://github.com/appvia/terranetes-controller/compare/v0.3.13...v0.3.14")),(0,r.kt)("h2",{id:"release-v0313"},"Release v0.3.13"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-11"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"-bug-fixes-1"},"\ud83d\udc1b Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Checkov Policies Zero Matches by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/496"},"https://github.com/appvia/terranetes-controller/pull/496")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Wrap log watcher Pod with error handling and retry logic by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/493"},"https://github.com/appvia/terranetes-controller/pull/493"))),(0,r.kt)("h3",{id:"\ufe0f-features-7"},"\u2747\ufe0f Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/499"},"https://github.com/appvia/terranetes-controller/pull/499")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/498"},"https://github.com/appvia/terranetes-controller/pull/498"))),(0,r.kt)("h3",{id:"whats-changed-11"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.5.0 to 2.5.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/495"},"https://github.com/appvia/terranetes-controller/pull/495")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Wrap log watcher Pod with error handling and retry logic by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/493"},"https://github.com/appvia/terranetes-controller/pull/493")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/tidwall/gjson from 1.14.3 to 1.14.4 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/497"},"https://github.com/appvia/terranetes-controller/pull/497")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Checkov Policies Zero Matches by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/496"},"https://github.com/appvia/terranetes-controller/pull/496")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/499"},"https://github.com/appvia/terranetes-controller/pull/499")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/498"},"https://github.com/appvia/terranetes-controller/pull/498")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart Changes for Release v0.3.13 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/500"},"https://github.com/appvia/terranetes-controller/pull/500"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.12...v0.3.13"},"https://github.com/appvia/terranetes-controller/compare/v0.3.12...v0.3.13")),(0,r.kt)("h2",{id:"release-v0312"},"Release v0.3.12"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-12"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"bug-fixes"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed an issue in the CLI not showing Checkov policies when infracost disabled by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/488"},"https://github.com/appvia/terranetes-controller/pull/488"))),(0,r.kt)("h3",{id:"whats-changed-12"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart Release Fix by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/471"},"https://github.com/appvia/terranetes-controller/pull/471")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Security Policy by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/473"},"https://github.com/appvia/terranetes-controller/pull/473")),(0,r.kt)("li",{parentName:"ul"},"Bump azure/setup-kubectl from 2.0 to 3.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/474"},"https://github.com/appvia/terranetes-controller/pull/474")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/metadata-action from 4.0.1 to 4.1.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/476"},"https://github.com/appvia/terranetes-controller/pull/476")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/tools from 0.2.0 to 0.3.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/480"},"https://github.com/appvia/terranetes-controller/pull/480")),(0,r.kt)("li",{parentName:"ul"},"Bump helm/chart-releaser-action from 1.4.0 to 1.4.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/478"},"https://github.com/appvia/terranetes-controller/pull/478")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/build-push-action from 3.0.0 to 3.2.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/475"},"https://github.com/appvia/terranetes-controller/pull/475")),(0,r.kt)("li",{parentName:"ul"},"Bump helm/chart-testing-action from 2.2.1 to 2.3.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/477"},"https://github.com/appvia/terranetes-controller/pull/477")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.24.0 to 1.24.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/479"},"https://github.com/appvia/terranetes-controller/pull/479")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.25.3 to 0.25.4 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/481"},"https://github.com/appvia/terranetes-controller/pull/481")),(0,r.kt)("li",{parentName:"ul"},"Bump actions/download-artifact from 2 to 3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/485"},"https://github.com/appvia/terranetes-controller/pull/485")),(0,r.kt)("li",{parentName:"ul"},"Bump actions/dependency-review-action from 1 to 3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/486"},"https://github.com/appvia/terranetes-controller/pull/486")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.25.3 to 0.25.4 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/487"},"https://github.com/appvia/terranetes-controller/pull/487")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Checkov Policies on Describe by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/488"},"https://github.com/appvia/terranetes-controller/pull/488")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart Updates for v0.3.12 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/489"},"https://github.com/appvia/terranetes-controller/pull/489")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Pegging the Artifact Upload to @v2.2.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/491"},"https://github.com/appvia/terranetes-controller/pull/491")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Action Throw Upload Errors by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/492"},"https://github.com/appvia/terranetes-controller/pull/492"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.11...v0.3.12"},"https://github.com/appvia/terranetes-controller/compare/v0.3.11...v0.3.12")),(0,r.kt)("h2",{id:"release-v0311"},"Release v0.3.11"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-13"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-13"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Removing Tag Badge by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/431"},"https://github.com/appvia/terranetes-controller/pull/431")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Golang 1.19 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/432"},"https://github.com/appvia/terranetes-controller/pull/432")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Removing Deprecated Linters by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/433"},"https://github.com/appvia/terranetes-controller/pull/433")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Fixing CLI Reference Docs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/434"},"https://github.com/appvia/terranetes-controller/pull/434")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Infracost Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/435"},"https://github.com/appvia/terranetes-controller/pull/435")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/437"},"https://github.com/appvia/terranetes-controller/pull/437")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/436"},"https://github.com/appvia/terranetes-controller/pull/436")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Github Action Update (Upload Artifacts) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/438"},"https://github.com/appvia/terranetes-controller/pull/438")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Github Actions Upgrade by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/439"},"https://github.com/appvia/terranetes-controller/pull/439")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/spf13/cobra from 1.5.0 to 1.6.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/440"},"https://github.com/appvia/terranetes-controller/pull/440")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.21.1 to 1.22.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/441"},"https://github.com/appvia/terranetes-controller/pull/441")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.3.0 to 2.3.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/443"},"https://github.com/appvia/terranetes-controller/pull/443")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/code-generator from 0.25.2 to 0.25.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/447"},"https://github.com/appvia/terranetes-controller/pull/447")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apimachinery from 0.25.2 to 0.25.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/445"},"https://github.com/appvia/terranetes-controller/pull/445")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/client-go from 0.25.2 to 0.25.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/444"},"https://github.com/appvia/terranetes-controller/pull/444")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/api from 0.25.2 to 0.25.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/449"},"https://github.com/appvia/terranetes-controller/pull/449")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.25.2 to 0.25.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/446"},"https://github.com/appvia/terranetes-controller/pull/446")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.25.2 to 0.25.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/448"},"https://github.com/appvia/terranetes-controller/pull/448")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/450"},"https://github.com/appvia/terranetes-controller/pull/450")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/tools from 0.1.12 to 0.2.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/451"},"https://github.com/appvia/terranetes-controller/pull/451")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.3.1 to 2.4.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/453"},"https://github.com/appvia/terranetes-controller/pull/453")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.50.0 to 1.50.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/454"},"https://github.com/appvia/terranetes-controller/pull/454")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/stretchr/testify from 1.8.0 to 1.8.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/452"},"https://github.com/appvia/terranetes-controller/pull/452")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/spf13/cobra from 1.6.0 to 1.6.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/455"},"https://github.com/appvia/terranetes-controller/pull/455")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/456"},"https://github.com/appvia/terranetes-controller/pull/456")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.22.1 to 1.23.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/457"},"https://github.com/appvia/terranetes-controller/pull/457")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Infracost Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/458"},"https://github.com/appvia/terranetes-controller/pull/458")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/459"},"https://github.com/appvia/terranetes-controller/pull/459")),(0,r.kt)("li",{parentName:"ul"},"[TESTS]"," - Fixing Unit Test by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/460"},"https://github.com/appvia/terranetes-controller/pull/460")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Updating Cosign Action by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/461"},"https://github.com/appvia/terranetes-controller/pull/461")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/462"},"https://github.com/appvia/terranetes-controller/pull/462")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/prometheus/client_golang from 1.13.0 to 1.13.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/463"},"https://github.com/appvia/terranetes-controller/pull/463")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.23.0 to 1.24.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/464"},"https://github.com/appvia/terranetes-controller/pull/464")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.4.0 to 2.5.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/465"},"https://github.com/appvia/terranetes-controller/pull/465")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-runtime from 0.13.0 to 0.13.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/466"},"https://github.com/appvia/terranetes-controller/pull/466")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/468"},"https://github.com/appvia/terranetes-controller/pull/468")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/467"},"https://github.com/appvia/terranetes-controller/pull/467")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/prometheus/client_golang from 1.13.1 to 1.14.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/469"},"https://github.com/appvia/terranetes-controller/pull/469")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart for v0.3.11 Release by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/470"},"https://github.com/appvia/terranetes-controller/pull/470"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.10...v0.3.11"},"https://github.com/appvia/terranetes-controller/compare/v0.3.10...v0.3.11")),(0,r.kt)("h2",{id:"release-v0310"},"Release v0.3.10"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-14"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"bug-fixes-1"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed an issue where the logs where not being shown when an error was encountered in the terranetes init by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/396"},"https://github.com/appvia/terranetes-controller/pull/396")),(0,r.kt)("li",{parentName:"ul"},"Fixed an issue in tnctl which wasn't find the logs correctly in the tnctl log by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/401"},"https://github.com/appvia/terranetes-controller/pull/401"))),(0,r.kt)("h3",{id:"whats-changed-14"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release for v0.3.9 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/390"},"https://github.com/appvia/terranetes-controller/pull/390")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Updating the Readme by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/391"},"https://github.com/appvia/terranetes-controller/pull/391")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Release Dependency Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/392"},"https://github.com/appvia/terranetes-controller/pull/392")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Additional Secrets by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/395"},"https://github.com/appvia/terranetes-controller/pull/395")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Executor Service Account to terranetes-executor by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/394"},"https://github.com/appvia/terranetes-controller/pull/394")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Init Errors Showing in Logs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/396"},"https://github.com/appvia/terranetes-controller/pull/396")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Fixing Typo on Makefile Comment by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/399"},"https://github.com/appvia/terranetes-controller/pull/399")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-runtime from 0.12.3 to 0.13.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/393"},"https://github.com/appvia/terranetes-controller/pull/393")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Logs Command Fixes by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/401"},"https://github.com/appvia/terranetes-controller/pull/401")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Fixing Namespace Creation in E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/402"},"https://github.com/appvia/terranetes-controller/pull/402")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Cleanup on E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/403"},"https://github.com/appvia/terranetes-controller/pull/403")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Infracost Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/404"},"https://github.com/appvia/terranetes-controller/pull/404")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Updating dependencies by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/400"},"https://github.com/appvia/terranetes-controller/pull/400")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/405"},"https://github.com/appvia/terranetes-controller/pull/405")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/AlecAivazis/survey/v2 from 2.3.5 to 2.3.6 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/406"},"https://github.com/appvia/terranetes-controller/pull/406")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apimachinery from 0.25.0 to 0.25.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/409"},"https://github.com/appvia/terranetes-controller/pull/409")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/code-generator from 0.25.0 to 0.25.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/411"},"https://github.com/appvia/terranetes-controller/pull/411")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/api from 0.25.0 to 0.25.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/410"},"https://github.com/appvia/terranetes-controller/pull/410")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.25.0 to 0.25.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/408"},"https://github.com/appvia/terranetes-controller/pull/408")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.1.6 to 2.2.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/413"},"https://github.com/appvia/terranetes-controller/pull/413")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.25.0 to 0.25.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/414"},"https://github.com/appvia/terranetes-controller/pull/414")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apimachinery from 0.25.1 to 0.25.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/416"},"https://github.com/appvia/terranetes-controller/pull/416")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/code-generator from 0.25.1 to 0.25.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/418"},"https://github.com/appvia/terranetes-controller/pull/418")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.25.1 to 0.25.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/415"},"https://github.com/appvia/terranetes-controller/pull/415")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.25.1 to 0.25.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/419"},"https://github.com/appvia/terranetes-controller/pull/419")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/go-swagger/go-swagger from 0.30.2 to 0.30.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/421"},"https://github.com/appvia/terranetes-controller/pull/421")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-tools from 0.9.2 to 0.10.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/417"},"https://github.com/appvia/terranetes-controller/pull/417")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/tcnksm/ghr from 0.15.0 to 0.16.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/422"},"https://github.com/appvia/terranetes-controller/pull/422")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.49.0 to 1.50.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/424"},"https://github.com/appvia/terranetes-controller/pull/424")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Docker Ignore File by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/423"},"https://github.com/appvia/terranetes-controller/pull/423")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Ensure Legacy ServiceAccount by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/425"},"https://github.com/appvia/terranetes-controller/pull/425")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Deletion Event by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/427"},"https://github.com/appvia/terranetes-controller/pull/427")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.10 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/428"},"https://github.com/appvia/terranetes-controller/pull/428"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.9...v0.3.10"},"https://github.com/appvia/terranetes-controller/compare/v0.3.9...v0.3.10")),(0,r.kt)("h2",{id:"release-v039"},"Release v0.3.9"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-15"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-15"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Fix Badge Format by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/367"},"https://github.com/appvia/terranetes-controller/pull/367")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart Release v0.3.8 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/366"},"https://github.com/appvia/terranetes-controller/pull/366")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Fixing Versions Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/369"},"https://github.com/appvia/terranetes-controller/pull/369")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Bridgecrew Image Versions by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/373"},"https://github.com/appvia/terranetes-controller/pull/373")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Adding Google Project ID by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/386"},"https://github.com/appvia/terranetes-controller/pull/386"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.8...v0.3.9"},"https://github.com/appvia/terranetes-controller/compare/v0.3.8...v0.3.9")),(0,r.kt)("h2",{id:"release-v038"},"Release v0.3.8"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-16"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"bug-fixes-2"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed an issue in the drift controller which was not correctly calculating the total running by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/362"},"https://github.com/appvia/terranetes-controller/pull/362"))),(0,r.kt)("h3",{id:"whats-changed-16"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Drift Threshold by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/362"},"https://github.com/appvia/terranetes-controller/pull/362")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release Chart for v0.3.7 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/355"},"https://github.com/appvia/terranetes-controller/pull/355")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Versions Workflow Bugfix by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/356"},"https://github.com/appvia/terranetes-controller/pull/356")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Versions Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/357"},"https://github.com/appvia/terranetes-controller/pull/357")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Split badges in README onto new lines by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/365"},"https://github.com/appvia/terranetes-controller/pull/365"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.7...v0.3.8"},"https://github.com/appvia/terranetes-controller/compare/v0.3.7...v0.3.8")),(0,r.kt)("h2",{id:"release-v037"},"Release v0.3.7"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-17"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"new-features"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added the ability to source in Checkov policies from central repository by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/340"},"https://github.com/appvia/terranetes-controller/pull/340")),(0,r.kt)("li",{parentName:"ul"},"Added prometheus API metrics by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/332"},"https://github.com/appvia/terranetes-controller/pull/332")),(0,r.kt)("li",{parentName:"ul"},"Bumped the version of Infracost to v0.10.10 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/336"},"https://github.com/appvia/terranetes-controller/pull/336")),(0,r.kt)("li",{parentName:"ul"},"Bumped the version of Checkov to 2.1.137 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/337"},"https://github.com/appvia/terranetes-controller/pull/337"))),(0,r.kt)("h3",{id:"whats-changed-17"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Terraform Variables by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/354"},"https://github.com/appvia/terranetes-controller/pull/354")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Version Downgrade (1.2.7 -> 1.2.5) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/353"},"https://github.com/appvia/terranetes-controller/pull/353")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Adding Diagnostics to E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/352"},"https://github.com/appvia/terranetes-controller/pull/352")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Bug Fixes in E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/351"},"https://github.com/appvia/terranetes-controller/pull/351")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Image Version Automation by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/349"},"https://github.com/appvia/terranetes-controller/pull/349")),(0,r.kt)("li",{parentName:"ul"},"[CLEAN]"," - Dropping Checkov Variables Options by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/348"},"https://github.com/appvia/terranetes-controller/pull/348")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Adding Image Scanning by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/334"},"https://github.com/appvia/terranetes-controller/pull/334")),(0,r.kt)("li",{parentName:"ul"},"[CLEAN]"," - Cleaning the Job Template by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/347"},"https://github.com/appvia/terranetes-controller/pull/347")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Watching Destroy Logs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/339"},"https://github.com/appvia/terranetes-controller/pull/339")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Central Security Policy by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/346"},"https://github.com/appvia/terranetes-controller/pull/346")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Publishing an Image for CLI by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/333"},"https://github.com/appvia/terranetes-controller/pull/333")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Upgrading Base Image (Alpine 3.15 -> 3.16) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/335"},"https://github.com/appvia/terranetes-controller/pull/335")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding API Server Metrics by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/332"},"https://github.com/appvia/terranetes-controller/pull/332")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Checkov Version (2.1.104 -> 2.1.137) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/337"},"https://github.com/appvia/terranetes-controller/pull/337")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Terraform Version (v1.2.5 - v1.2.7) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/338"},"https://github.com/appvia/terranetes-controller/pull/338")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Setting a Default Namespace by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/343"},"https://github.com/appvia/terranetes-controller/pull/343")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Infracost Version (v0.10.9 -> v0.10.10) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/336"},"https://github.com/appvia/terranetes-controller/pull/336")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Checkov Configuraion Optional by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/342"},"https://github.com/appvia/terranetes-controller/pull/342")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Changing the Policy Source Field by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/341"},"https://github.com/appvia/terranetes-controller/pull/341")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - External Checkov Source by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/340"},"https://github.com/appvia/terranetes-controller/pull/340")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.24.3 to 0.24.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/324"},"https://github.com/appvia/terranetes-controller/pull/324")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.24.3 to 0.24.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/325"},"https://github.com/appvia/terranetes-controller/pull/325")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/api from 0.24.3 to 0.24.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/329"},"https://github.com/appvia/terranetes-controller/pull/329")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/client-go from 0.24.3 to 0.24.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/328"},"https://github.com/appvia/terranetes-controller/pull/328")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/tcnksm/ghr from 0.14.0 to 0.15.0 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/327"},"https://github.com/appvia/terranetes-controller/pull/327")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/tidwall/gjson from 1.14.2 to 1.14.3 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/322"},"https://github.com/appvia/terranetes-controller/pull/322")),(0,r.kt)("li",{parentName:"ul"},"[CLEANUP]"," - Dependencies by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/320"},"https://github.com/appvia/terranetes-controller/pull/320")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Updating Configuration Example by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/350"},"https://github.com/appvia/terranetes-controller/pull/350")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Adding Private Module Example by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/345"},"https://github.com/appvia/terranetes-controller/pull/345")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Readme Update by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/323"},"https://github.com/appvia/terranetes-controller/pull/323")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - GHCR badge by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/321"},"https://github.com/appvia/terranetes-controller/pull/321"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.6...v0.3.7"},"https://github.com/appvia/terranetes-controller/compare/v0.3.6...v0.3.7")),(0,r.kt)("h2",{id:"release-v036"},"Release v0.3.6"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-18"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-18"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.5 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/317"},"https://github.com/appvia/terranetes-controller/pull/317")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Convert Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/318"},"https://github.com/appvia/terranetes-controller/pull/318")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Convert Configuration Source by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/319"},"https://github.com/appvia/terranetes-controller/pull/319"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.5...v0.3.6"},"https://github.com/appvia/terranetes-controller/compare/v0.3.5...v0.3.6")),(0,r.kt)("h2",{id:"release-v035"},"Release v0.3.5"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-19"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-19"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/315"},"https://github.com/appvia/terranetes-controller/pull/315")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Redirect Search Output by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/316"},"https://github.com/appvia/terranetes-controller/pull/316"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.4...v0.3.5"},"https://github.com/appvia/terranetes-controller/compare/v0.3.4...v0.3.5")),(0,r.kt)("h2",{id:"release-v034"},"Release v0.3.4"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-20"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-20"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Updating Development Docs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/299"},"https://github.com/appvia/terranetes-controller/pull/299")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Support Binaries & CLI by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/301"},"https://github.com/appvia/terranetes-controller/pull/301")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Trigger Development E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/304"},"https://github.com/appvia/terranetes-controller/pull/304")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Example Provider Secrets by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/307"},"https://github.com/appvia/terranetes-controller/pull/307")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Updating Readme by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/312"},"https://github.com/appvia/terranetes-controller/pull/312")),(0,r.kt)("li",{parentName:"ul"},"Update README.md by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/313"},"https://github.com/appvia/terranetes-controller/pull/313"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.3...v0.3.4"},"https://github.com/appvia/terranetes-controller/compare/v0.3.3...v0.3.4")),(0,r.kt)("h2",{id:"release-v033"},"Release v0.3.3"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-21"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-21"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.2 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/288"},"https://github.com/appvia/terranetes-controller/pull/288")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bugfix Helm Template (Policies & Providers) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/290"},"https://github.com/appvia/terranetes-controller/pull/290")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.47.2 to 1.47.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/291"},"https://github.com/appvia/terranetes-controller/pull/291")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Configuration Interface by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/292"},"https://github.com/appvia/terranetes-controller/pull/292"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.2...v0.3.3"},"https://github.com/appvia/terranetes-controller/compare/v0.3.2...v0.3.3")),(0,r.kt)("h2",{id:"release-v032"},"Release v0.3.2"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-22"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"new-features-1"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The ability to generate the kubectl plugin by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/286"},"https://github.com/appvia/terranetes-controller/pull/286"))),(0,r.kt)("h3",{id:"bug-fixes-3"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed the issues where a $HOME/.tnctl/config.yaml not present would throw an error by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/284"},"https://github.com/appvia/terranetes-controller/pull/284"))),(0,r.kt)("h3",{id:"whats-changed-22"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Update README.md by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/278"},"https://github.com/appvia/terranetes-controller/pull/278")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Updating Controller Version String by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/280"},"https://github.com/appvia/terranetes-controller/pull/280")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Install Official Chart by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/279"},"https://github.com/appvia/terranetes-controller/pull/279")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Use Chart Option by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/281"},"https://github.com/appvia/terranetes-controller/pull/281")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Check Suite Script by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/282"},"https://github.com/appvia/terranetes-controller/pull/282")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - CLI Configuration by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/284"},"https://github.com/appvia/terranetes-controller/pull/284")),(0,r.kt)("li",{parentName:"ul"},"[TESTS]"," - Update CLI Tests for Sources Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/285"},"https://github.com/appvia/terranetes-controller/pull/285")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Kubectl Plugin Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/286"},"https://github.com/appvia/terranetes-controller/pull/286")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Using Repository Name in Search by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/287"},"https://github.com/appvia/terranetes-controller/pull/287"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.1...v0.3.2"},"https://github.com/appvia/terranetes-controller/compare/v0.3.1...v0.3.2")),(0,r.kt)("h2",{id:"release-v031"},"Release v0.3.1"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-23"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"new-features-2"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added support for custom terraform state backends by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/276"},"https://github.com/appvia/terranetes-controller/pull/276")),(0,r.kt)("li",{parentName:"ul"},"Added support to the Helm chart to specify the ",(0,r.kt)("inlineCode",{parentName:"li"},"spec.summary")," field in Provider by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/275"},"https://github.com/appvia/terranetes-controller/pull/275"))),(0,r.kt)("h3",{id:"whats-changed-23"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Architecture Images by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/274"},"https://github.com/appvia/terranetes-controller/pull/274")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Support Summaries on Provider Helm Chart by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/275"},"https://github.com/appvia/terranetes-controller/pull/275")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Custom State Backend by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/276"},"https://github.com/appvia/terranetes-controller/pull/276")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Helm Release for v0.3.1 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/277"},"https://github.com/appvia/terranetes-controller/pull/277"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.0...v0.3.1"},"https://github.com/appvia/terranetes-controller/compare/v0.3.0...v0.3.1")),(0,r.kt)("h2",{id:"release-v030"},"Release v0.3.0"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-24"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"breaking-change"},"Breaking Change"),(0,r.kt)("p",null,"Note the project was renamed from teraform-controller to terranetes-controller"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"All the CRD have stayed the same - so no need to alter any Provides, Policies or Configurations."),(0,r.kt)("li",{parentName:"ul"},"The helm chart and name of the project inside has changed though")),(0,r.kt)("p",null,"To upgrade - the easiest solution would be to delete the old helm chart and install the latest one. There are no changes from v0.2.9, all commits are related to name changes."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# We are assuming here the controller is installed via helm in 'terraform-system' namespace.\n$ helm ls -n terraform-system\n# Remove the chart\n$ helm -n terraform-system uninstall terraform-controller\n\n# Add the new Helm chart repository\n$ helm repo remove appvia\n$ helm repo add appvia https://terranetes-controller.appvia.io\n$ helm repo update\n$ helm install -n terraform-system terranetes-controller appvia/terranetes-controller --create-namespace \\\n --values YOUR_VALUES_IF_ANY\n# kubectl -n terraform-system get po\n")),(0,r.kt)("p",null,"If you are managing the deployments outside of Helm, you simply need to use the updated images"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"ghcr.io/appvia/terranetes-controller:v0.3.0 (on deployment)"),(0,r.kt)("li",{parentName:"ul"},"ghcr.io/appvia/terranetes-executor:v0.3.0 (on command line --executor-image)")),(0,r.kt)("h3",{id:"whats-changed-24"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[NAMING]"," - Renaming to Terranetes Controller by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/268"},"https://github.com/appvia/terranetes-controller/pull/268")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Adding Workflow Dispatch - CodeQL by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/267"},"https://github.com/appvia/terranetes-controller/pull/267")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - CodeQL Badge by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/266"},"https://github.com/appvia/terranetes-controller/pull/266")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bumping the Helm Chart by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/270"},"https://github.com/appvia/terranetes-controller/pull/270")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Workflow Fix - Docker Images by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/271"},"https://github.com/appvia/terranetes-controller/pull/271")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Fixing Naming on Docker Images by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/272"},"https://github.com/appvia/terranetes-controller/pull/272")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.0 Chart by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/273"},"https://github.com/appvia/terranetes-controller/pull/273"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.9...v0.3.0"},"https://github.com/appvia/terranetes-controller/compare/v0.2.9...v0.3.0")),(0,r.kt)("h2",{id:"release-v029"},"Release v0.2.9"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-25"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"new-features-3"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added code analysis by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/205"},"https://github.com/appvia/terranetes-controller/pull/205")),(0,r.kt)("li",{parentName:"ul"},"Added Provider Summary Field by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/247"},"https://github.com/appvia/terranetes-controller/pull/247")),(0,r.kt)("li",{parentName:"ul"},"Bumping Version Checkov 2.1.67 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/251"},"https://github.com/appvia/terranetes-controller/pull/251")),(0,r.kt)("li",{parentName:"ul"},"Bumping Infracost Version 0.10.7, 0.10.8 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/250"},"https://github.com/appvia/terranetes-controller/pull/250")),(0,r.kt)("li",{parentName:"ul"},"Terraform Version v1.2.5 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/252"},"https://github.com/appvia/terranetes-controller/pull/252")),(0,r.kt)("li",{parentName:"ul"},"Added the abiliy to apply executor permissions to namespace service account, making it quicker to rollout multiple injected provided Service by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/260"},"https://github.com/appvia/terranetes-controller/pull/260")),(0,r.kt)("li",{parentName:"ul"},"Started off the basis of error detection to ease diagnosis by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/259"},"https://github.com/appvia/terranetes-controller/pull/259")),(0,r.kt)("li",{parentName:"ul"},"Added the ability to deploy Providers via Helm by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/261"},"https://github.com/appvia/terranetes-controller/pull/261")),(0,r.kt)("li",{parentName:"ul"},"Added the ability to deploy Policies via Helm by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/262"},"https://github.com/appvia/terranetes-controller/pull/262"))),(0,r.kt)("h3",{id:"build"},"Build"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added Code of Conduct by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/242"},"https://github.com/appvia/terranetes-controller/pull/242")),(0,r.kt)("li",{parentName:"ul"},"Added Issue templates by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/243"},"https://github.com/appvia/terranetes-controller/pull/243"))),(0,r.kt)("h3",{id:"bug-fixes-4"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed the sync status of a remove to say 'Deleting' by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/253"},"https://github.com/appvia/terranetes-controller/pull/253")),(0,r.kt)("li",{parentName:"ul"},"Sanity Checking Query Parameters by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/255"},"https://github.com/appvia/terranetes-controller/pull/255"))),(0,r.kt)("h3",{id:"whats-changed-25"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart Release v0.2.8 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/233"},"https://github.com/appvia/terranetes-controller/pull/233")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding CodeQL Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/205"},"https://github.com/appvia/terranetes-controller/pull/205")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Add Code of Conduct by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/242"},"https://github.com/appvia/terranetes-controller/pull/242")),(0,r.kt)("li",{parentName:"ul"},"[GITHUB]"," - Add Issue templates by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/243"},"https://github.com/appvia/terranetes-controller/pull/243")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.46.2 to 1.47.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/246"},"https://github.com/appvia/terranetes-controller/pull/246")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/sirupsen/logrus from 1.8.1 to 1.9.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/245"},"https://github.com/appvia/terranetes-controller/pull/245")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Provider Summary Field by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/247"},"https://github.com/appvia/terranetes-controller/pull/247")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.19.0 to 1.20.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/248"},"https://github.com/appvia/terranetes-controller/pull/248")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bumping Version Checkov 2.1.67 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/251"},"https://github.com/appvia/terranetes-controller/pull/251")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bumping Infracost Version 0.10.7, 0.10.8 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/250"},"https://github.com/appvia/terranetes-controller/pull/250")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Terraform Version v1.2.5 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/252"},"https://github.com/appvia/terranetes-controller/pull/252")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Resource Status when deleting by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/253"},"https://github.com/appvia/terranetes-controller/pull/253")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Sanity Checking Query Parameters by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/255"},"https://github.com/appvia/terranetes-controller/pull/255")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.47.1 to 1.47.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/256"},"https://github.com/appvia/terranetes-controller/pull/256")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - User Inputs Parameter Checking by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/258"},"https://github.com/appvia/terranetes-controller/pull/258")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Detection of Errors by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/259"},"https://github.com/appvia/terranetes-controller/pull/259")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Service Account Permissions - Executors by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/260"},"https://github.com/appvia/terranetes-controller/pull/260")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Deploy Providers via Helm by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/261"},"https://github.com/appvia/terranetes-controller/pull/261")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Deploy Policies via Helm Chart by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/262"},"https://github.com/appvia/terranetes-controller/pull/262")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.2.9 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/263"},"https://github.com/appvia/terranetes-controller/pull/263")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Github Release Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/264"},"https://github.com/appvia/terranetes-controller/pull/264")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Refuse to continue by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/265"},"https://github.com/appvia/terranetes-controller/pull/265"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.8...v0.2.9"},"https://github.com/appvia/terranetes-controller/compare/v0.2.8...v0.2.9")),(0,r.kt)("h2",{id:"release-v028"},"Release v0.2.8"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-26"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-26"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Helm Release (v0.2.7) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/224"},"https://github.com/appvia/terranetes-controller/pull/224")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Release Workflow Fix by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/225"},"https://github.com/appvia/terranetes-controller/pull/225")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Fixing Application Bump by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/226"},"https://github.com/appvia/terranetes-controller/pull/226")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Adding Logs Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/227"},"https://github.com/appvia/terranetes-controller/pull/227")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Build Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/230"},"https://github.com/appvia/terranetes-controller/pull/230")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Build Command Resource Name by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/231"},"https://github.com/appvia/terranetes-controller/pull/231")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Fixing Logs Command for Plans by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/232"},"https://github.com/appvia/terranetes-controller/pull/232"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.7...v0.2.8"},"https://github.com/appvia/terranetes-controller/compare/v0.2.7...v0.2.8")),(0,r.kt)("h2",{id:"release-v027"},"Release v0.2.7"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-27"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"new-features-4"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Provides the ability to remap connection secrets ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/222"},"https://github.com/appvia/terranetes-controller/pull/222"))),(0,r.kt)("h3",{id:"bug-fixes-5"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixes a template error in the ",(0,r.kt)("inlineCode",{parentName:"li"},"tnctl describe")," command which was causing a error ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/219"},"https://github.com/appvia/terranetes-controller/pull/219")),(0,r.kt)("li",{parentName:"ul"},"Fixes the streaming of the logs in the developer namespace we stream in real time rather than waiting for completion ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/215"},"https://github.com/appvia/terranetes-controller/pull/215"))),(0,r.kt)("h3",{id:"whats-changed-27"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bumping Version of Chart by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/213"},"https://github.com/appvia/terranetes-controller/pull/213")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Release Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/214"},"https://github.com/appvia/terranetes-controller/pull/214")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Streaming Logs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/215"},"https://github.com/appvia/terranetes-controller/pull/215")),(0,r.kt)("li",{parentName:"ul"},"[TESTING]"," - Adding Unit Tests for CLI by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/216"},"https://github.com/appvia/terranetes-controller/pull/216")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-runtime from 0.12.2 to 0.12.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/217"},"https://github.com/appvia/terranetes-controller/pull/217")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Workflow Override by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/218"},"https://github.com/appvia/terranetes-controller/pull/218")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - CLI Describe Template by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/219"},"https://github.com/appvia/terranetes-controller/pull/219")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Build Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/221"},"https://github.com/appvia/terranetes-controller/pull/221")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Describe Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/220"},"https://github.com/appvia/terranetes-controller/pull/220")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Secret Renaming by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/222"},"https://github.com/appvia/terranetes-controller/pull/222"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.6...v0.2.7"},"https://github.com/appvia/terranetes-controller/compare/v0.2.6...v0.2.7")),(0,r.kt)("h2",{id:"release-v026"},"Release v0.2.6"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-28"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"new-features-5"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added a terranetes CLI (tnctl) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/187"},"http://github.com/appvia/terranetes-controller/pull/187")),(0,r.kt)("li",{parentName:"ul"},"Exposed the Costs and Policy evaluations to user by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/180"},"http://github.com/appvia/terranetes-controller/pull/180")),(0,r.kt)("li",{parentName:"ul"},"Added additional Executor Secrets by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/204"},"http://github.com/appvia/terranetes-controller/pull/204"))),(0,r.kt)("h3",{id:"bug-fixes-6"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Changed the default port for the webhooks to 10250 which by default is available for callback on most cloud vendored kubernetes by @gambol99 in by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/206"},"http://github.com/appvia/terranetes-controller/pull/206"))),(0,r.kt)("h3",{id:"whats-changed-28"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Fixing LFAGS (#212) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/212"},"http://github.com/appvia/terranetes-controller/pull/212")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - CLI Docs Generation (#210) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/210"},"http://github.com/appvia/terranetes-controller/pull/210")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Generate CLI Docs (#208) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/208"},"http://github.com/appvia/terranetes-controller/pull/208")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Workflow Creation (#207) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/207"},"http://github.com/appvia/terranetes-controller/pull/207")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Additional Controller Secrets (#204) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/204"},"http://github.com/appvia/terranetes-controller/pull/204")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - CLI Configuration Override (#203) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/203"},"http://github.com/appvia/terranetes-controller/pull/203")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Terraform Registry Namespace (#202) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/202"},"http://github.com/appvia/terranetes-controller/pull/202")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Sensitive Inputs (#201) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/201"},"http://github.com/appvia/terranetes-controller/pull/201")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Terranetes Search CLI by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/187"},"http://github.com/appvia/terranetes-controller/pull/187")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Github Repository Listing by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/198"},"http://github.com/appvia/terranetes-controller/pull/198")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Infracost Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/199"},"http://github.com/appvia/terranetes-controller/pull/199")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Costs on Pull Requests by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/197"},"http://github.com/appvia/terranetes-controller/pull/197")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Fixing Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/195"},"http://github.com/appvia/terranetes-controller/pull/195")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Adding the Workflow ID by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/196"},"http://github.com/appvia/terranetes-controller/pull/196")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Run on Merge by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/194"},"http://github.com/appvia/terranetes-controller/pull/194")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Dropping the Readme Check by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/193"},"http://github.com/appvia/terranetes-controller/pull/193")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Removing Questions by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/192"},"http://github.com/appvia/terranetes-controller/pull/192")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Adding Checkov Example by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/191"},"http://github.com/appvia/terranetes-controller/pull/191")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Fixing Handler Lookup (#190) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/190"},"http://github.com/appvia/terranetes-controller/pull/190")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Terranetes CLI (#187) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/187"},"http://github.com/appvia/terranetes-controller/pull/187")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump sigs.k8s.io/controller-tools from 0.9.1 to 0.9.2 (#189) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/189"},"http://github.com/appvia/terranetes-controller/pull/189")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump github.com/stretchr/testify from 1.7.5 to 1.8.0 (#188) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/188"},"http://github.com/appvia/terranetes-controller/pull/188")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump sigs.k8s.io/controller-tools from 0.9.0 to 0.9.1 (#186) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/186"},"http://github.com/appvia/terranetes-controller/pull/186")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump sigs.k8s.io/controller-runtime from 0.12.1 to 0.12.2 (#185) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/185"},"http://github.com/appvia/terranetes-controller/pull/185")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump github.com/stretchr/testify from 1.7.4 to 1.7.5 (#184) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/184"},"http://github.com/appvia/terranetes-controller/pull/184")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump github.com/stretchr/testify from 1.7.2 to 1.7.4 (#181) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/181"},"http://github.com/appvia/terranetes-controller/pull/181")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Helm Chart Linting (#183) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/183"},"http://github.com/appvia/terranetes-controller/pull/183")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump github.com/spf13/cobra from 1.4.0 to 1.5.0 (#182) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/182"},"http://github.com/appvia/terranetes-controller/pull/182")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Exposing Integrations (#180) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/180"},"http://github.com/appvia/terranetes-controller/pull/180")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump k8s.io/apiextensions-apiserver from 0.24.1 to 0.24.2 (#176) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/176"},"http://github.com/appvia/terranetes-controller/pull/176")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump k8s.io/code-generator from 0.24.1 to 0.24.2 (#177) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/177"},"http://github.com/appvia/terranetes-controller/pull/177")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump k8s.io/client-go from 0.24.1 to 0.24.2 (#175) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/175"},"http://github.com/appvia/terranetes-controller/pull/175")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Image Versions (#174) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/174"},"http://github.com/appvia/terranetes-controller/pull/174")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Improvements to E2E (#173) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/173"},"http://github.com/appvia/terranetes-controller/pull/173")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump k8s.io/apiextensions-apiserver from 0.24.0 to 0.24.1 (#169) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/169"},"http://github.com/appvia/terranetes-controller/pull/169")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Update README.md (#209) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/209"},"http://github.com/appvia/terranetes-controller/pull/209")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Webhooks Port (#206) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/206"},"http://github.com/appvia/terranetes-controller/pull/206")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Controller Version (#170) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/170"},"http://github.com/appvia/terranetes-controller/pull/170")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - CHart Version v0.2.12 (#168) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/168"},"http://github.com/appvia/terranetes-controller/pull/168"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.5...v0.2.6"},"https://github.com/appvia/terranetes-controller/compare/v0.2.5...v0.2.6")),(0,r.kt)("h2",{id:"release-v025"},"Release v0.2.5"),(0,r.kt)("h3",{id:"bug-fixes-7"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Configuration Secrets Removal"),": the configuration secret in the controller namespace were not being deleted on deletion of the Configuration, fixed by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/165"},"https://github.com/appvia/terranetes-controller/pull/165"))),(0,r.kt)("h3",{id:"whats-changed-29"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[E2E]"," Infracost E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/161"},"https://github.com/appvia/terranetes-controller/pull/161")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.2.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/162"},"https://github.com/appvia/terranetes-controller/pull/162")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Deployment Key Secret by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/163"},"https://github.com/appvia/terranetes-controller/pull/163")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Bumping the Infracost Version to v0.10.3 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/164"},"https://github.com/appvia/terranetes-controller/pull/164")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Ensuring Removal of Configuration Secrets by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/165"},"https://github.com/appvia/terranetes-controller/pull/165")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release for v0.2.5 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/167"},"https://github.com/appvia/terranetes-controller/pull/167"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.4...v0.2.5"},"https://github.com/appvia/terranetes-controller/compare/v0.2.4...v0.2.5")),(0,r.kt)("h2",{id:"release-v024"},"Release v0.2.4"),(0,r.kt)("h3",{id:"new-features-6"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Provider Configuration"),": you can now specify additional configuration to the terraform providers via spec.configuration by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/154"},"https://github.com/appvia/terranetes-controller/pull/154"))),(0,r.kt)("h3",{id:"bug-fixes-8"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Configuration Authentication"),": fixed a bug when using a source that required authentication by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/159"},"https://github.com/appvia/terranetes-controller/pull/159")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"SSH Key"),": fixed a bug in the source command that was incorrectly processing the ref options by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/159"},"https://github.com/appvia/terranetes-controller/pull/159")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Prometheus Metrics"),": the helm chart was accidently adding prometheus metrics twice, helm ignored this but flux through issues, fix by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/162"},"https://github.com/appvia/terranetes-controller/pull/162"))),(0,r.kt)("h3",{id:"whats-changed-30"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart Version v0.2.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/162"},"https://github.com/appvia/terranetes-controller/pull/162")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Private Repositories & SSH Key by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/156"},"https://github.com/appvia/terranetes-controller/pull/156")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Provider Configuration by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/154"},"https://github.com/appvia/terranetes-controller/pull/154")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Configuration Authentication by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/159"},"https://github.com/appvia/terranetes-controller/pull/159"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.3...v0.2.4"},"https://github.com/appvia/terranetes-controller/compare/v0.2.3...v0.2.4")),(0,r.kt)("h2",{id:"release-v023"},"Release v0.2.3"),(0,r.kt)("h3",{id:"new-features-7"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Expanded the provider list to include the official providers, by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/149"},"https://github.com/appvia/terranetes-controller/pull/149"))),(0,r.kt)("h3",{id:"whats-changed-31"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release Helm Chart v0.2.2 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/148"},"https://github.com/appvia/terranetes-controller/pull/148")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Provider List by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/149"},"https://github.com/appvia/terranetes-controller/pull/149"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.2...v0.2.3"},"https://github.com/appvia/terranetes-controller/compare/v0.2.2...v0.2.3")),(0,r.kt)("h2",{id:"release-v022"},"Release v0.2.2"),(0,r.kt)("h3",{id:"bug-fixes-9"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Checkov Results by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/146"},"https://github.com/appvia/terranetes-controller/pull/146"))),(0,r.kt)("h3",{id:"whats-changed-32"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[TESTS]"," - Configuration Controller Unit Tests by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/143"},"https://github.com/appvia/terranetes-controller/pull/143")),(0,r.kt)("li",{parentName:"ul"},"Use GHCR by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/127"},"https://github.com/appvia/terranetes-controller/pull/127")),(0,r.kt)("li",{parentName:"ul"},"[LOGGING]"," - Display the version by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/144"},"https://github.com/appvia/terranetes-controller/pull/144")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Checkov Results by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/146"},"https://github.com/appvia/terranetes-controller/pull/146")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Update README.md by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/147"},"https://github.com/appvia/terranetes-controller/pull/147"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.1...v0.2.2"},"https://github.com/appvia/terranetes-controller/compare/v0.2.1...v0.2.2")),(0,r.kt)("h2",{id:"release-v021"},"Release v0.2.1"),(0,r.kt)("h3",{id:"bug-fixes-10"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixing a bug in the parsing of the infracost report which was introduced in v0.1.6 release by ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/96"},"https://github.com/appvia/terranetes-controller/pull/96"),". We were expecting a float64 when actually it's a string")),(0,r.kt)("h3",{id:"whats-changed-33"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Helm Release for v0.2.0 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/137"},"https://github.com/appvia/terranetes-controller/pull/137"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.0...v0.2.1"},"https://github.com/appvia/terranetes-controller/compare/v0.2.0...v0.2.1")),(0,r.kt)("h2",{id:"release-v020"},"Release v0.2.0"),(0,r.kt)("h3",{id:"new-features-8"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Provider Scope moved to Cluster")," has been moved to teh cluster scope and away from a namespace resource. ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/116"},"#116")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Drift Detection")," provides the ability to automatically detect configurations which have drifted from the expected state ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/131"},"#131")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Adding Terraform Version to Status")," is not exporsed on the terraform state ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/131"},"#131")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Overall Configuration State")," now provides a synchronization overview of the configuration.")),(0,r.kt)("h3",{id:"bug-fixes-11"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Approval Annotation by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/133"},"https://github.com/appvia/terranetes-controller/pull/133")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Fixing Method Name Typo by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/121"},"https://github.com/appvia/terranetes-controller/pull/121"))),(0,r.kt)("h3",{id:"migration-required"},"Migration Required"),(0,r.kt)("p",null,"Would involve deleting all the current providers, their CRD and them applying them again without the namespace."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# scope the deployment down\n$ kubectl -n terraform-system scale deployment terranetes-controller --replicas=0\n# delete the old provider\n$ kubectl -n terraform-system get provider -o yaml > saved.1\n# Deploy the v0.1.7 version, just change the replicas to 0\n$ vim # change the top replicaCount -> replicaCount: 0\n# Perform the upgrade - no changes to the configurations are required. The namespace field in the spec.providerRef is simply ignored.\n$ helm upgrade -n terraform-system terranetes-controller appvia/terranetes-controller --values \n# Apply the providers again\n$ kubectl apply -f saved.1\n# Change the replicaCount back to 1 and rerun the helm upgrade\n")),(0,r.kt)("h3",{id:"whats-changed-34"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Provider Scope moved to Cluster by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/116"},"https://github.com/appvia/terranetes-controller/pull/116")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - CI Workflow by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/135"},"https://github.com/appvia/terranetes-controller/pull/135")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Drift Detection E2E by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/134"},"https://github.com/appvia/terranetes-controller/pull/134")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Approval Annotation by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/133"},"https://github.com/appvia/terranetes-controller/pull/133")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Drift Detection by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/131"},"https://github.com/appvia/terranetes-controller/pull/131")),(0,r.kt)("li",{parentName:"ul"},"[GENERAL]"," - Moving Utility Method into common by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/130"},"https://github.com/appvia/terranetes-controller/pull/130")),(0,r.kt)("li",{parentName:"ul"},"[CLEAN]"," - Template Unit Tests by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/129"},"https://github.com/appvia/terranetes-controller/pull/129")),(0,r.kt)("li",{parentName:"ul"},"[LOGGING]"," - Condition Logging by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/128"},"https://github.com/appvia/terranetes-controller/pull/128")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump gotest.tools/gotestsum from 1.8.0 to 1.8.1 by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/126"},"https://github.com/appvia/terranetes-controller/pull/126")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Terraform Version to Status by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/124"},"https://github.com/appvia/terranetes-controller/pull/124")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Linting Timeout"),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Clean Status by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/122"},"https://github.com/appvia/terranetes-controller/pull/122")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Fixing Method Name Typo by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/121"},"https://github.com/appvia/terranetes-controller/pull/121")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Labels to Executors"),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Pod Labels by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/119"},"https://github.com/appvia/terranetes-controller/pull/119")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump github.com/stretchr/testify from 1.7.1 to 1.7.2 by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/117"},"https://github.com/appvia/terranetes-controller/pull/117")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump mvdan.cc/sh/v3 from 3.4.3 to 3.5.1 by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/108"},"https://github.com/appvia/terranetes-controller/pull/108")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump k8s.io/code-generator from 0.24.0 to 0.24.1 by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/107"},"https://github.com/appvia/terranetes-controller/pull/107")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump github.com/golangci/golangci-lint from 1.45.2 to 1.46.2 ","[#97]",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/97"},"https://github.com/appvia/terranetes-controller/pull/97")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump github.com/evanphx/json-patch from 4.12.0+incompatible to 5.6.0+incompatible by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/109"},"https://github.com/appvia/terranetes-controller/pull/109")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump github.com/felixge/httpsnoop from 1.0.2 to 1.0.3 by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/110"},"https://github.com/appvia/terranetes-controller/pull/110")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Development Docs by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/136"},"https://github.com/appvia/terranetes-controller/pull/136")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Readme Change by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/118"},"https://github.com/appvia/terranetes-controller/pull/118")),(0,r.kt)("li",{parentName:"ul"},"[API]"," - Description on API Types by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/114"},"https://github.com/appvia/terranetes-controller/pull/114")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Dependabot Target Branch by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/113"},"https://github.com/appvia/terranetes-controller/pull/113")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Updating Architecture Image by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/115"},"https://github.com/appvia/terranetes-controller/pull/115")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Latest Workflow Change by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/112"},"https://github.com/appvia/terranetes-controller/pull/112")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - ","[DEPENDABOT]"," - Bumping Version of Chart by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/111"},"https://github.com/appvia/terranetes-controller/pull/111"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.6...v0.2.0"},"https://github.com/appvia/terranetes-controller/compare/v0.1.6...v0.2.0")),(0,r.kt)("h2",{id:"release-v016"},"Release v0.1.6"),(0,r.kt)("h3",{id:"new-features-9"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Configuration Cost Metrics")," adds the predicted costs of the configuration as exposed prometheus metrics; by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/96"},"https://github.com/appvia/terranetes-controller/pull/96")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ValueFrom fields")," allows to source sensitive variables from kubernetes secrets rather exposing on the spec; by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/103"},"https://github.com/appvia/terranetes-controller/pull/103"))),(0,r.kt)("h3",{id:"bug-fixes-12"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Terraform State Decoding by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/104"},"https://github.com/appvia/terranetes-controller/pull/104")),(0,r.kt)("li",{parentName:"ul"},"Exposing the Metrics by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/95"},"https://github.com/appvia/terranetes-controller/pull/95")),(0,r.kt)("li",{parentName:"ul"},"Adding the UID Labels - adding the UIDs on the labels for resources to make pinpointing the source configuration easier. By @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/100"},"https://github.com/appvia/terranetes-controller/pull/100"))),(0,r.kt)("h3",{id:"whats-changed-35"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Adding Dependabot Config by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/70"},"https://github.com/appvia/terranetes-controller/pull/70")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.18.1 to 1.19.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/71"},"https://github.com/appvia/terranetes-controller/pull/71")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Changing Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/83"},"https://github.com/appvia/terranetes-controller/pull/83")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Minior Changes by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/84"},"https://github.com/appvia/terranetes-controller/pull/84")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Ginkgo Update by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/80"},"https://github.com/appvia/terranetes-controller/pull/80")),(0,r.kt)("li",{parentName:"ul"},"Update features in README linking to docs by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/81"},"https://github.com/appvia/terranetes-controller/pull/81")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Adding Architecture Image by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/85"},"https://github.com/appvia/terranetes-controller/pull/85")),(0,r.kt)("li",{parentName:"ul"},"Update README.md by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/87"},"https://github.com/appvia/terranetes-controller/pull/87")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Ignore Existing Releases by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/88"},"https://github.com/appvia/terranetes-controller/pull/88")),(0,r.kt)("li",{parentName:"ul"},"Update README.md by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/89"},"https://github.com/appvia/terranetes-controller/pull/89")),(0,r.kt)("li",{parentName:"ul"},"lookup bash executable instead by @myjaffoo in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/90"},"https://github.com/appvia/terranetes-controller/pull/90")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-tools from 0.8.0 to 0.9.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/92"},"https://github.com/appvia/terranetes-controller/pull/92")),(0,r.kt)("li",{parentName:"ul"},"Bump gotest.tools/gotestsum from 1.8.0 to 1.8.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/91"},"https://github.com/appvia/terranetes-controller/pull/91")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/client-go from 0.23.5 to 0.24.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/78"},"https://github.com/appvia/terranetes-controller/pull/78")),(0,r.kt)("li",{parentName:"ul"},"[DEPS]"," - Updating the Dependencies by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/94"},"https://github.com/appvia/terranetes-controller/pull/94")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Terraform State Decoding by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/104"},"https://github.com/appvia/terranetes-controller/pull/104")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bumping Application Version by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/106"},"https://github.com/appvia/terranetes-controller/pull/106")),(0,r.kt)("li",{parentName:"ul"},"[RELEASE]"," - Release v0.1.6 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/86"},"https://github.com/appvia/terranetes-controller/pull/86"))),(0,r.kt)("h3",{id:"new-contributors-1"},"New Contributors"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"@KashifSaadat made their first contribution in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/81"},"https://github.com/appvia/terranetes-controller/pull/81")),(0,r.kt)("li",{parentName:"ul"},"@myjaffoo made their first contribution in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/90"},"https://github.com/appvia/terranetes-controller/pull/90"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.5...v0.1.6"},"https://github.com/appvia/terranetes-controller/compare/v0.1.5...v0.1.6")),(0,r.kt)("h2",{id:"release-v015"},"Release v0.1.5"),(0,r.kt)("h3",{id:"build-1"},"Build"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed up the chart directory structure in order to properly support the helm tools and deployment ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/67"},"#67"))),(0,r.kt)("h3",{id:"whats-changed-36"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Directory Structure by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/67"},"https://github.com/appvia/terranetes-controller/pull/67")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bumping Helm Releaser Version by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/68"},"https://github.com/appvia/terranetes-controller/pull/68"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.4...v0.1.5"},"https://github.com/appvia/terranetes-controller/compare/v0.1.4...v0.1.5")),(0,r.kt)("h2",{id:"release-v014"},"Release v0.1.4"),(0,r.kt)("h3",{id:"new-features-10"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Disable Terraform Version Override ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/50"},"#50")," Currently all configurations have the ability to override the terraform version on their spec (this effectively overrides the terraform image tag). There might be times where you want this disabled though. This PR adds the ability to the platform teams to switch off the feature (which is enabled by default)."),(0,r.kt)("li",{parentName:"ul"},"Module Selector (#58): The current module constraint is global, adding a selector here you can target specific resources or namespaces and provides a means for additional permissions. Note as with all selectors here, a empty selector indicates it applies to all."),(0,r.kt)("li",{parentName:"ul"},"External Checks for Checkov ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/64"},"#64"),": Adding the ability to source in external checks to be included in the scan.")),(0,r.kt)("h3",{id:"build-2"},"Build"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Workflow Speed ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/61"},"#61"),": sped up the execution time of the images by breaking them up"),(0,r.kt)("li",{parentName:"ul"},"Deduplicating the E2E ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/63"},"#63"),": Much of the E2E is the we can dedup the workflow and reuse across all the providers"),(0,r.kt)("li",{parentName:"ul"},"Constraint Checks ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/65"},"#65"),": adding Constraint Checks"),(0,r.kt)("li",{parentName:"ul"},"Added E2E for Azure"),(0,r.kt)("li",{parentName:"ul"},"Adding E2E for Google ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/issues/42"},"#42"))),(0,r.kt)("h3",{id:"whats-changed-37"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Adding Azure E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/54"},"https://github.com/appvia/terranetes-controller/pull/54")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Resource Lock by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/57"},"https://github.com/appvia/terranetes-controller/pull/57")),(0,r.kt)("li",{parentName:"ul"},"[RELEASE]"," v0.1.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/59"},"https://github.com/appvia/terranetes-controller/pull/59"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.3...v0.1.4"},"https://github.com/appvia/terranetes-controller/compare/v0.1.3...v0.1.4")),(0,r.kt)("h2",{id:"release-v013"},"Release v0.1.3"),(0,r.kt)("h3",{id:"bug-fixes-13"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed an issue with the API type for Provider. An enum was stopping an Azure provider from being added as it had ",(0,r.kt)("inlineCode",{parentName:"li"},"azure")," not ",(0,r.kt)("inlineCode",{parentName:"li"},"azurerm")," defined. ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/51"},"https://github.com/appvia/terranetes-controller/pull/51"))),(0,r.kt)("h3",{id:"whats-changed-38"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Reuse E2E Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/46"},"https://github.com/appvia/terranetes-controller/pull/46")),(0,r.kt)("li",{parentName:"ul"},"Update README.md by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/48"},"https://github.com/appvia/terranetes-controller/pull/48")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Fixing the README links by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/49"},"https://github.com/appvia/terranetes-controller/pull/49")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Provider Enum on API Types by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/51"},"https://github.com/appvia/terranetes-controller/pull/51"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.2...v0.1.3"},"https://github.com/appvia/terranetes-controller/compare/v0.1.2...v0.1.3")),(0,r.kt)("h2",{id:"release-v012"},"Release v0.1.2"),(0,r.kt)("h3",{id:"new-features-11"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"RBAC Support"),": Added support for RBAC on the Providers. This allows platform teams to specify a collection of selectors which are used to match namespace and resource labels to determine if the Configuration is permitted to use it. Click ",(0,r.kt)("a",{parentName:"li",href:"https://terranetes-controller.appvia.io/admin/providers#configure-rbac-for-providers"},"here")," for full details ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/29"},"https://github.com/appvia/terranetes-controller/pull/29")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Connection Secret Keys"),": added the ability for Configuration's to filter which keys from the terraform ouput they want to see in the connection secret. Click ",(0,r.kt)("a",{parentName:"li",href:"https://terranetes-controller.appvia.io/admin/providers"},"here")," for details. ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/34"},"https://github.com/appvia/terranetes-controller/pull/34")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Kubernetes Events"),": crucial events were being recorded in the status conditions only. This change raises those same conditions as Kubernetes events themselves which can be used to trigger off notifications. ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/31"},"https://github.com/appvia/terranetes-controller/pull/31"))),(0,r.kt)("h3",{id:"bug-fixes-14"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed an issue where the service account from the provider was not correctly being set on the terraform ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/35"},"https://github.com/appvia/terranetes-controller/pull/35"))),(0,r.kt)("h3",{id:"documentation-1"},"Documentation"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added a additional docs on the types types ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/26"},"https://github.com/appvia/terranetes-controller/pull/26")),(0,r.kt)("li",{parentName:"ul"},"Updated the repository readme ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/25"},"https://github.com/appvia/terranetes-controller/pull/25"))),(0,r.kt)("h3",{id:"whats-changed-39"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," Updating the README by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/25"},"https://github.com/appvia/terranetes-controller/pull/25")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," Updating the API Documentation by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/26"},"https://github.com/appvia/terranetes-controller/pull/26")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - E2E Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/33"},"https://github.com/appvia/terranetes-controller/pull/33")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Provider Service Accounts by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/35"},"https://github.com/appvia/terranetes-controller/pull/35")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Adding License File by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/38"},"https://github.com/appvia/terranetes-controller/pull/38")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Dependency Review by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/37"},"https://github.com/appvia/terranetes-controller/pull/37")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Connection Secret Keys by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/34"},"https://github.com/appvia/terranetes-controller/pull/34")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Kubernetes Events by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/31"},"https://github.com/appvia/terranetes-controller/pull/31")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Provider RBAC by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/29"},"https://github.com/appvia/terranetes-controller/pull/29")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Dependency Check by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/44"},"https://github.com/appvia/terranetes-controller/pull/44")),(0,r.kt)("li",{parentName:"ul"},"[RELEASE]"," - Version v0.1.2 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/45"},"https://github.com/appvia/terranetes-controller/pull/45"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.1...v0.1.2"},"https://github.com/appvia/terranetes-controller/compare/v0.1.1...v0.1.2")),(0,r.kt)("h2",{id:"release-v011"},"Release v0.1.1"),(0,r.kt)("h3",{id:"features-1"},"Features"),(0,r.kt)("p",null,"Introduced the ability for the platform administrators to enforce a security profile against the terraform modules."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-YAML"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: checkov\nspec:\n constraints:\n checkov:\n # See: https://www.checkov.io/5.Policy%20Index/terraform.html\n checks: []\n # See: https://www.checkov.io/5.Policy%20Index/terraform.html\n skipChecks: []\n")),(0,r.kt)("p",null,"Where necessary an exception can be added, targetting by namespace and resource labels; which will override the above."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-YAML"},"---\n# Create an exception to the above policy and force configurations\n# in the specific namespace to use this instead\n---\napiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: checkov-override\nspec:\n constraints:\n checkov:\n selector:\n namespace:\n matchExpressions:\n - key: kubernetes.io/metadata.name\n operator: In\n values: [apps2]\n # See: https://www.checkov.io/5.Policy%20Index/terraform.html\n skipChecks:\n - \n")),(0,r.kt)("h3",{id:"whats-changed-40"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Fixing Github Workflow (Release) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/18"},"https://github.com/appvia/terranetes-controller/pull/18")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Decreasing Backoff Limit by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/19"},"https://github.com/appvia/terranetes-controller/pull/19")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Development Readme by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/21"},"https://github.com/appvia/terranetes-controller/pull/21")),(0,r.kt)("li",{parentName:"ul"},"[FIX]"," - Supported Providers by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/22"},"https://github.com/appvia/terranetes-controller/pull/22")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Checkov Security Policy by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/20"},"https://github.com/appvia/terranetes-controller/pull/20")),(0,r.kt)("li",{parentName:"ul"},"Release v0.1.1 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/23"},"https://github.com/appvia/terranetes-controller/pull/23")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Fixing the Release Step by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/24"},"https://github.com/appvia/terranetes-controller/pull/24"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.0...v0.1.1"},"https://github.com/appvia/terranetes-controller/compare/v0.1.0...v0.1.1")),(0,r.kt)("h2",{id:"release-v010"},"Release v0.1.0"),(0,r.kt)("h3",{id:"new-features-12"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Changed to use multiple containers within a job rather then baking a executor with all the dependencies. This opens up the ability to change the versions, images and so forth."),(0,r.kt)("li",{parentName:"ul"},"Added the ability to specify the terraform version in the configuration"),(0,r.kt)("li",{parentName:"ul"},"Added the ability to override the job template completely for customization")),(0,r.kt)("h3",{id:"bug-fixes-15"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixes a helm chart which was recreating the ca secret")),(0,r.kt)("h3",{id:"whats-changed-41"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Autogenerate Certificate by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/12"},"https://github.com/appvia/terranetes-controller/pull/12")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Executor Docs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/13"},"https://github.com/appvia/terranetes-controller/pull/13")),(0,r.kt)("li",{parentName:"ul"},"Release v0.1.0 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/10"},"https://github.com/appvia/terranetes-controller/pull/10")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Kind Installation by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/16"},"https://github.com/appvia/terranetes-controller/pull/16")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Adding Administrative Docs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/17"},"https://github.com/appvia/terranetes-controller/pull/17"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.0.4...v0.1.0"},"https://github.com/appvia/terranetes-controller/compare/v0.0.4...v0.1.0")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4f26f5d6.b18fa160.js b/assets/js/4f26f5d6.b18fa160.js deleted file mode 100644 index d8e54c05..00000000 --- a/assets/js/4f26f5d6.b18fa160.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6448],{3905:(t,e,a)=>{a.d(e,{Zo:()=>h,kt:()=>c});var l=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function p(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);e&&(l=l.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,l)}return a}function n(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(t);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var i=l.createContext({}),s=function(t){var e=l.useContext(i),a=e;return t&&(a="function"==typeof t?t(e):n(n({},e),t)),a},h=function(t){var e=s(t.components);return l.createElement(i.Provider,{value:e},t.children)},u={inlineCode:"code",wrapper:function(t){var e=t.children;return l.createElement(l.Fragment,{},e)}},m=l.forwardRef((function(t,e){var a=t.components,r=t.mdxType,p=t.originalType,i=t.parentName,h=o(t,["components","mdxType","originalType","parentName"]),m=s(a),c=r,g=m["".concat(i,".").concat(c)]||m[c]||u[c]||p;return a?l.createElement(g,n(n({ref:e},h),{},{components:a})):l.createElement(g,n({ref:e},h))}));function c(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var p=a.length,n=new Array(p);n[0]=m;var o={};for(var i in e)hasOwnProperty.call(e,i)&&(o[i]=e[i]);o.originalType=t,o.mdxType="string"==typeof t?t:r,n[1]=o;for(var s=2;s{a.r(e),a.d(e,{assets:()=>i,contentTitle:()=>n,default:()=>u,frontMatter:()=>p,metadata:()=>o,toc:()=>s});var l=a(7462),r=(a(7294),a(3905));const p={sidebar_position:2},n="Releases",o={unversionedId:"releases",id:"releases",title:"Releases",description:"Release v0.4.0",source:"@site/docs/terranetes-controller/releases.md",sourceDirName:".",slug:"/releases",permalink:"/terranetes-controller/releases",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/releases.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Quick start",permalink:"/terranetes-controller/quick_start"},next:{title:"Architecture",permalink:"/terranetes-controller/architecture"}},i={},s=[{value:"Release v0.4.0",id:"release-v040",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl",level:3},{value:"What's Changed",id:"whats-changed",level:3},{value:"Features",id:"features",level:3},{value:"Documentation",id:"documentation",level:3},{value:"BugFixes",id:"bugfixes",level:3},{value:"Dependencies",id:"dependencies",level:3},{value:"New Contributors",id:"new-contributors",level:2},{value:"Release v0.3.23",id:"release-v0323",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-1",level:3},{value:"\u2747\ufe0f FEATURES",id:"\ufe0f-features",level:3},{value:"What's Changed",id:"whats-changed-1",level:3},{value:"Release v0.3.22",id:"release-v0322",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-2",level:3},{value:"What's Changed",id:"whats-changed-2",level:3},{value:"Release v0.3.21",id:"release-v0321",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-3",level:3},{value:"\u2747\ufe0f FEATURES",id:"\ufe0f-features-1",level:3},{value:"\ud83d\udc1b BUGS",id:"-bugs",level:3},{value:"What's Changed",id:"whats-changed-3",level:3},{value:"Release v0.3.20",id:"release-v0320",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-4",level:3},{value:"\u2747\ufe0f FEATURES",id:"\ufe0f-features-2",level:3},{value:"\ud83d\udc1b BUGS",id:"-bugs-1",level:3},{value:"What's Changed",id:"whats-changed-4",level:3},{value:"Release v0.3.19",id:"release-v0319",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-5",level:3},{value:"\u2747\ufe0f FEATURES",id:"\ufe0f-features-3",level:3},{value:"What's Changed",id:"whats-changed-5",level:3},{value:"Release v0.3.18",id:"release-v0318",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-6",level:3},{value:"What's Changed",id:"whats-changed-6",level:3},{value:"Release v0.3.17",id:"release-v0317",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-7",level:3},{value:"What's Changed#",id:"whats-changed-7",level:3},{value:"Release v0.3.16",id:"release-v0316",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-8",level:3},{value:"\u2747\ufe0f FEATURES",id:"\ufe0f-features-4",level:3},{value:"\ud83d\udc1b BUGS",id:"-bugs-2",level:3},{value:"What's Changed",id:"whats-changed-8",level:3},{value:"Release v0.3.15",id:"release-v0315",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-9",level:3},{value:"\u2747\ufe0f Features",id:"\ufe0f-features-5",level:3},{value:"What's Changed",id:"whats-changed-9",level:3},{value:"Release v0.3.14",id:"release-v0314",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-10",level:3},{value:"\ud83d\udc1b Bug Fixes",id:"-bug-fixes",level:3},{value:"\u2747\ufe0f Features",id:"\ufe0f-features-6",level:3},{value:"What's Changed",id:"whats-changed-10",level:3},{value:"Release v0.3.13",id:"release-v0313",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-11",level:3},{value:"\ud83d\udc1b Bug Fixes",id:"-bug-fixes-1",level:3},{value:"\u2747\ufe0f Features",id:"\ufe0f-features-7",level:3},{value:"What's Changed",id:"whats-changed-11",level:3},{value:"Release v0.3.12",id:"release-v0312",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-12",level:3},{value:"Bug Fixes",id:"bug-fixes",level:3},{value:"What's Changed",id:"whats-changed-12",level:3},{value:"Release v0.3.11",id:"release-v0311",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-13",level:3},{value:"What's Changed",id:"whats-changed-13",level:3},{value:"Release v0.3.10",id:"release-v0310",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-14",level:3},{value:"Bug Fixes",id:"bug-fixes-1",level:3},{value:"What's Changed",id:"whats-changed-14",level:3},{value:"Release v0.3.9",id:"release-v039",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-15",level:3},{value:"What's Changed",id:"whats-changed-15",level:3},{value:"Release v0.3.8",id:"release-v038",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-16",level:3},{value:"Bug Fixes",id:"bug-fixes-2",level:3},{value:"What's Changed",id:"whats-changed-16",level:3},{value:"Release v0.3.7",id:"release-v037",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-17",level:3},{value:"New Features",id:"new-features",level:3},{value:"What's Changed",id:"whats-changed-17",level:3},{value:"Release v0.3.6",id:"release-v036",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-18",level:3},{value:"What's Changed",id:"whats-changed-18",level:3},{value:"Release v0.3.5",id:"release-v035",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-19",level:3},{value:"What's Changed",id:"whats-changed-19",level:3},{value:"Release v0.3.4",id:"release-v034",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-20",level:3},{value:"What's Changed",id:"whats-changed-20",level:3},{value:"Release v0.3.3",id:"release-v033",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-21",level:3},{value:"What's Changed",id:"whats-changed-21",level:3},{value:"Release v0.3.2",id:"release-v032",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-22",level:3},{value:"New Features",id:"new-features-1",level:3},{value:"Bug Fixes",id:"bug-fixes-3",level:3},{value:"What's Changed",id:"whats-changed-22",level:3},{value:"Release v0.3.1",id:"release-v031",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-23",level:3},{value:"New Features",id:"new-features-2",level:3},{value:"What's Changed",id:"whats-changed-23",level:3},{value:"Release v0.3.0",id:"release-v030",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-24",level:3},{value:"Breaking Change",id:"breaking-change",level:3},{value:"What's Changed",id:"whats-changed-24",level:3},{value:"Release v0.2.9",id:"release-v029",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-25",level:3},{value:"New Features",id:"new-features-3",level:3},{value:"Build",id:"build",level:3},{value:"Bug Fixes",id:"bug-fixes-4",level:3},{value:"What's Changed",id:"whats-changed-25",level:3},{value:"Release v0.2.8",id:"release-v028",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-26",level:3},{value:"What's Changed",id:"whats-changed-26",level:3},{value:"Release v0.2.7",id:"release-v027",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-27",level:3},{value:"New Features",id:"new-features-4",level:3},{value:"Bug Fixes",id:"bug-fixes-5",level:3},{value:"What's Changed",id:"whats-changed-27",level:3},{value:"Release v0.2.6",id:"release-v026",level:2},{value:"Terranetes CLI (tnctl)",id:"terranetes-cli-tnctl-28",level:3},{value:"New Features",id:"new-features-5",level:3},{value:"Bug Fixes",id:"bug-fixes-6",level:3},{value:"What's Changed",id:"whats-changed-28",level:3},{value:"Release v0.2.5",id:"release-v025",level:2},{value:"Bug Fixes",id:"bug-fixes-7",level:3},{value:"What's Changed",id:"whats-changed-29",level:3},{value:"Release v0.2.4",id:"release-v024",level:2},{value:"New Features",id:"new-features-6",level:3},{value:"Bug Fixes",id:"bug-fixes-8",level:3},{value:"What's Changed",id:"whats-changed-30",level:3},{value:"Release v0.2.3",id:"release-v023",level:2},{value:"New Features",id:"new-features-7",level:3},{value:"What's Changed",id:"whats-changed-31",level:3},{value:"Release v0.2.2",id:"release-v022",level:2},{value:"Bug Fixes",id:"bug-fixes-9",level:3},{value:"What's Changed",id:"whats-changed-32",level:3},{value:"Release v0.2.1",id:"release-v021",level:2},{value:"Bug Fixes",id:"bug-fixes-10",level:3},{value:"What's Changed",id:"whats-changed-33",level:3},{value:"Release v0.2.0",id:"release-v020",level:2},{value:"New Features",id:"new-features-8",level:3},{value:"Bug Fixes",id:"bug-fixes-11",level:3},{value:"Migration Required",id:"migration-required",level:3},{value:"What's Changed",id:"whats-changed-34",level:3},{value:"Release v0.1.6",id:"release-v016",level:2},{value:"New Features",id:"new-features-9",level:3},{value:"Bug Fixes",id:"bug-fixes-12",level:3},{value:"What's Changed",id:"whats-changed-35",level:3},{value:"New Contributors",id:"new-contributors-1",level:3},{value:"Release v0.1.5",id:"release-v015",level:2},{value:"Build",id:"build-1",level:3},{value:"What's Changed",id:"whats-changed-36",level:3},{value:"Release v0.1.4",id:"release-v014",level:2},{value:"New Features",id:"new-features-10",level:3},{value:"Build",id:"build-2",level:3},{value:"What's Changed",id:"whats-changed-37",level:3},{value:"Release v0.1.3",id:"release-v013",level:2},{value:"Bug Fixes",id:"bug-fixes-13",level:3},{value:"What's Changed",id:"whats-changed-38",level:3},{value:"Release v0.1.2",id:"release-v012",level:2},{value:"New Features",id:"new-features-11",level:3},{value:"Bug Fixes",id:"bug-fixes-14",level:3},{value:"Documentation",id:"documentation-1",level:3},{value:"What's Changed",id:"whats-changed-39",level:3},{value:"Release v0.1.1",id:"release-v011",level:2},{value:"Features",id:"features-1",level:3},{value:"What's Changed",id:"whats-changed-40",level:3},{value:"Release v0.1.0",id:"release-v010",level:2},{value:"New Features",id:"new-features-12",level:3},{value:"Bug Fixes",id:"bug-fixes-15",level:3},{value:"What's Changed",id:"whats-changed-41",level:3}],h={toc:s};function u(t){let{components:e,...a}=t;return(0,r.kt)("wrapper",(0,l.Z)({},h,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"releases"},"Releases"),(0,r.kt)("h2",{id:"release-v040"},"Release v0.4.0"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.4.0/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed"},"What's Changed"),(0,r.kt)("p",null,"This release introduces the concept of a CloudResource. Currently Configuration CRDs are one to one mappings to the Terraform module, throwing a myriad of options at the consumer. CloudResources & Revision augments the consumer interface to a vastly reduced entry point, removing the cognitive load on the developers (consumers), and allowing the platform team to instil their version of best practice, defaults and organizational policy before consumption."),(0,r.kt)("p",null,"For more details see ",(0,r.kt)("a",{parentName:"p",href:"https://terranetes.appvia.io/terranetes-controller/admin/cloudresource/"},"https://terranetes.appvia.io/terranetes-controller/admin/cloudresource/")),(0,r.kt)("h3",{id:"features"},"Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Added the new user model of CloudResources & Revisions, scoping the interface to the resource via a strict version controlled blueprint by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/824"},"https://github.com/appvia/terranetes-controller/pull/824")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Added Revision Command to provide a entrypoint for provisioning revisions by the platform team by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/847"},"https://github.com/appvia/terranetes-controller/pull/847")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Added a new CLI command to verify a Revision is runnable by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/866"},"https://github.com/appvia/terranetes-controller/pull/866")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Added a Create CloudResource Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/899"},"https://github.com/appvia/terranetes-controller/pull/899")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Convenience Aliases for Delete & Apply by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/868"},"https://github.com/appvia/terranetes-controller/pull/868")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - CLI Get Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/854"},"https://github.com/appvia/terranetes-controller/pull/854")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Cloud Resources Reconciles on Plan Changes by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/856"},"https://github.com/appvia/terranetes-controller/pull/856")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Additional EKS Preload Values by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/911"},"https://github.com/appvia/terranetes-controller/pull/911")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Cloud Resource Update Available by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/852"},"https://github.com/appvia/terranetes-controller/pull/852")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Create Workflow Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/853"},"https://github.com/appvia/terranetes-controller/pull/853")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Added to the Convert Command the ability to render into a Revision by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/855"},"https://github.com/appvia/terranetes-controller/pull/855")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Revisions in Use Metric by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/867"},"https://github.com/appvia/terranetes-controller/pull/867")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Update Proection for Revisions in Use by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/851"},"https://github.com/appvia/terranetes-controller/pull/851")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/992"},"https://github.com/appvia/terranetes-controller/pull/992")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/993"},"https://github.com/appvia/terranetes-controller/pull/993")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/999"},"https://github.com/appvia/terranetes-controller/pull/999"),"\ncontroller/pull/1011"),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1009"},"https://github.com/appvia/terranetes-controller/pull/1009")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1010"},"https://github.com/appvia/terranetes-controller/pull/1010")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Infracost Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1027"},"https://github.com/appvia/terranetes-controller/pull/1027")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1026"},"https://github.com/appvia/terranetes-controller/pull/1026")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1035"},"https://github.com/appvia/terranetes-controller/pull/1035")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1042"},"https://github.com/appvia/terranetes-controller/pull/1042")),(0,r.kt)("li",{parentName:"ul"},"[WF-3359]"," UpdateReadme by @celesteg1 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/979"},"https://github.com/appvia/terranetes-controller/pull/979")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Helm Release v0.4.0 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1050"},"https://github.com/appvia/terranetes-controller/pull/1050"))),(0,r.kt)("h3",{id:"documentation"},"Documentation"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Code Owners File by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1031"},"https://github.com/appvia/terranetes-controller/pull/1031")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Adding Examples by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1045"},"https://github.com/appvia/terranetes-controller/pull/1045")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Updating Examples by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1051"},"https://github.com/appvia/terranetes-controller/pull/1051"))),(0,r.kt)("h3",{id:"bugfixes"},"BugFixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Fixing Diagnostics by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1047"},"https://github.com/appvia/terranetes-controller/pull/1047")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Pod Name Retry by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1048"},"https://github.com/appvia/terranetes-controller/pull/1048")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Fixing Typo by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1049"},"https://github.com/appvia/terranetes-controller/pull/1049")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Create Cloud Resource CLI by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1052"},"https://github.com/appvia/terranetes-controller/pull/1052"))),(0,r.kt)("h3",{id:"dependencies"},"Dependencies"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[DEPS]"," - Updating Controller Runtime v0.16.0 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/985"},"https://github.com/appvia/terranetes-controller/pull/985")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/client-go from 0.28.0 to 0.28.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/990"},"https://github.com/appvia/terranetes-controller/pull/990")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.28.0 to 0.28.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/989"},"https://github.com/appvia/terranetes-controller/pull/989")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.44.331 to 1.44.332 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/987"},"https://github.com/appvia/terranetes-controller/pull/987")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.28.0 to 0.28.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/988"},"https://github.com/appvia/terranetes-controller/pull/988")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.44.332 to 1.44.334 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/994"},"https://github.com/appvia/terranetes-controller/pull/994")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.44.334 to 1.45.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/995"},"https://github.com/appvia/terranetes-controller/pull/995")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-runtime from 0.16.0 to 0.16.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/996"},"https://github.com/appvia/terranetes-controller/pull/996")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.0 to 1.45.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/997"},"https://github.com/appvia/terranetes-controller/pull/997")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/oauth2 from 0.11.0 to 0.12.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1000"},"https://github.com/appvia/terranetes-controller/pull/1000")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.1 to 1.45.5 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1004"},"https://github.com/appvia/terranetes-controller/pull/1004")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/tools from 0.12.0 to 0.13.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1001"},"https://github.com/appvia/terranetes-controller/pull/1001")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.5 to 1.45.6 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1005"},"https://github.com/appvia/terranetes-controller/pull/1005")),(0,r.kt)("li",{parentName:"ul"},"Bump actions/checkout from 3 to 4 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1006"},"https://github.com/appvia/terranetes-controller/pull/1006")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/build-push-action from 4.1.1 to 4.2.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1007"},"https://github.com/appvia/terranetes-controller/pull/1007")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/evanphx/json-patch from 5.6.0+incompatible to 5.7.0+incompatible by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-"},"https://github.com/appvia/terranetes-")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/code-generator from 0.28.1 to 0.28.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1016"},"https://github.com/appvia/terranetes-controller/pull/1016")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.6 to 1.45.9 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1017"},"https://github.com/appvia/terranetes-controller/pull/1017")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.28.1 to 0.28.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1015"},"https://github.com/appvia/terranetes-controller/pull/1015")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.28.1 to 0.28.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1019"},"https://github.com/appvia/terranetes-controller/pull/1019")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.9 to 1.45.10 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1018"},"https://github.com/appvia/terranetes-controller/pull/1018")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/login-action from 2 to 3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1024"},"https://github.com/appvia/terranetes-controller/pull/1024")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/setup-buildx-action from 2 to 3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1023"},"https://github.com/appvia/terranetes-controller/pull/1023")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/build-push-action from 4.2.1 to 5.0.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1022"},"https://github.com/appvia/terranetes-controller/pull/1022")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/metadata-action from 4.6.0 to 5.0.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1021"},"https://github.com/appvia/terranetes-controller/pull/1021")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.10 to 1.45.11 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1020"},"https://github.com/appvia/terranetes-controller/pull/1020")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.12.0 to 2.12.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1029"},"https://github.com/appvia/terranetes-controller/pull/1029")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.11 to 1.45.13 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1028"},"https://github.com/appvia/terranetes-controller/pull/1028")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.13 to 1.45.14 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1030"},"https://github.com/appvia/terranetes-controller/pull/1030")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/tidwall/gjson from 1.16.0 to 1.17.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1032"},"https://github.com/appvia/terranetes-controller/pull/1032")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.14 to 1.45.15 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1033"},"https://github.com/appvia/terranetes-controller/pull/1033")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.15 to 1.45.16 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1034"},"https://github.com/appvia/terranetes-controller/pull/1034")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.16 to 1.45.17 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1036"},"https://github.com/appvia/terranetes-controller/pull/1036")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.17 to 1.45.20 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1041"},"https://github.com/appvia/terranetes-controller/pull/1041")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.27.10 to 1.28.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1040"},"https://github.com/appvia/terranetes-controller/pull/1040")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/prometheus/client_golang from 1.16.0 to 1.17.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1038"},"https://github.com/appvia/terranetes-controller/pull/1038")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.20 to 1.45.22 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1044"},"https://github.com/appvia/terranetes-controller/pull/1044")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/aws/aws-sdk-go from 1.45.22 to 1.45.23 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/1046"},"https://github.com/appvia/terranetes-controller/pull/1046"))),(0,r.kt)("h2",{id:"new-contributors"},"New Contributors"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"@celesteg1 made their first contribution in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/979"},"https://github.com/appvia/terranetes-controller/pull/979"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.31...v0.4.0"},"https://github.com/appvia/terranetes-controller/compare/v0.3.31...v0.4.0")),(0,r.kt)("h2",{id:"release-v0323"},"Release v0.3.23"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-1"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.23/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"\ufe0f-features"},"\u2747\ufe0f FEATURES"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Remove Provider Constraint by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/722"},"https://github.com/appvia/terranetes-controller/pull/722")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Allowing for Remapping of ValueFrom Inputs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/723"},"https://github.com/appvia/terranetes-controller/pull/723")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Renaming ValueFrom Secret Name by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/724"},"https://github.com/appvia/terranetes-controller/pull/724"))),(0,r.kt)("h3",{id:"whats-changed-1"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Dummy Terraform Module by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/704"},"https://github.com/appvia/terranetes-controller/pull/704")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Dummy Terraform Module by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/717"},"https://github.com/appvia/terranetes-controller/pull/717")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Switching Dummy Module Requirements by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/719"},"https://github.com/appvia/terranetes-controller/pull/719")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Custom Backend Testing by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/720"},"https://github.com/appvia/terranetes-controller/pull/720")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/oauth2 from 0.7.0 to 0.8.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/721"},"https://github.com/appvia/terranetes-controller/pull/721")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Remove Provider Constraint by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/722"},"https://github.com/appvia/terranetes-controller/pull/722")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Allowing for Remapping of ValueFrom Inputs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/723"},"https://github.com/appvia/terranetes-controller/pull/723")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Renaming ValueFrom Secret Name by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/724"},"https://github.com/appvia/terranetes-controller/pull/724")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release for v0.3.23 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/725"},"https://github.com/appvia/terranetes-controller/pull/725")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Fixing Image Building in E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/726"},"https://github.com/appvia/terranetes-controller/pull/726")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Bumping Terraform Module Version (Disabled ACLs) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/727"},"https://github.com/appvia/terranetes-controller/pull/727"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.22...v0.3.23"},"https://github.com/appvia/terranetes-controller/compare/v0.3.22...v0.3.23")),(0,r.kt)("h2",{id:"release-v0322"},"Release v0.3.22"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-2"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.22/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-2"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.22 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/700"},"https://github.com/appvia/terranetes-controller/pull/700"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.21...v0.3.22"},"https://github.com/appvia/terranetes-controller/compare/v0.3.21...v0.3.22")),(0,r.kt)("h2",{id:"release-v0321"},"Release v0.3.21"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-3"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.21/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"\ufe0f-features-1"},"\u2747\ufe0f FEATURES"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Deletion of Namespace Protection Webhook by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/697"},"https://github.com/appvia/terranetes-controller/pull/697"))),(0,r.kt)("h3",{id:"-bugs"},"\ud83d\udc1b BUGS"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Azure Identity Binding by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/696"},"https://github.com/appvia/terranetes-controller/pull/696"))),(0,r.kt)("h3",{id:"whats-changed-3"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Azure Identity Binding by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/696"},"https://github.com/appvia/terranetes-controller/pull/696")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/694"},"https://github.com/appvia/terranetes-controller/pull/694")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/693"},"https://github.com/appvia/terranetes-controller/pull/693")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Infracost Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/692"},"https://github.com/appvia/terranetes-controller/pull/692")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Delection of Namespace Protection Webhook by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/697"},"https://github.com/appvia/terranetes-controller/pull/697")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.21 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/698"},"https://github.com/appvia/terranetes-controller/pull/698"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.20...v0.3.21"},"https://github.com/appvia/terranetes-controller/compare/v0.3.20...v0.3.21")),(0,r.kt)("h2",{id:"release-v0320"},"Release v0.3.20"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-4"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.20/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"\ufe0f-features-2"},"\u2747\ufe0f FEATURES"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Namespace Protection by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/688"},"https://github.com/appvia/terranetes-controller/pull/688")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Check Namespace Status by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/689"},"https://github.com/appvia/terranetes-controller/pull/689"))),(0,r.kt)("h3",{id:"-bugs-1"},"\ud83d\udc1b BUGS"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Terranetes Namespace Error Message by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/691"},"https://github.com/appvia/terranetes-controller/pull/691"))),(0,r.kt)("h3",{id:"whats-changed-4"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apimachinery from 0.27.0 to 0.27.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/683"},"https://github.com/appvia/terranetes-controller/pull/683")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/code-generator from 0.27.0 to 0.27.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/684"},"https://github.com/appvia/terranetes-controller/pull/684")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Namespace Protection by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/688"},"https://github.com/appvia/terranetes-controller/pull/688")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Check Namespace Status by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/689"},"https://github.com/appvia/terranetes-controller/pull/689")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.20 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/690"},"https://github.com/appvia/terranetes-controller/pull/690")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Terranetes Namespace Error Message by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/691"},"https://github.com/appvia/terranetes-controller/pull/691"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.19...v0.3.20"},"https://github.com/appvia/terranetes-controller/compare/v0.3.19...v0.3.20")),(0,r.kt)("h2",{id:"release-v0319"},"Release v0.3.19"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-5"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.19/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"\ufe0f-features-3"},"\u2747\ufe0f FEATURES"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Default Providers by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/676"},"https://github.com/appvia/terranetes-controller/pull/676"))),(0,r.kt)("h3",{id:"whats-changed-5"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apimachinery from 0.26.3 to 0.27.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/678"},"https://github.com/appvia/terranetes-controller/pull/678")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/prometheus/client_golang from 1.14.0 to 1.15.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/677"},"https://github.com/appvia/terranetes-controller/pull/677")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Default Providers by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/676"},"https://github.com/appvia/terranetes-controller/pull/676")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Golang Version 1.19-1.20 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/679"},"https://github.com/appvia/terranetes-controller/pull/679")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.19 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/680"},"https://github.com/appvia/terranetes-controller/pull/680"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.18...v0.3.19"},"https://github.com/appvia/terranetes-controller/compare/v0.3.18...v0.3.19")),(0,r.kt)("h2",{id:"release-v0318"},"Release v0.3.18"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-6"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.18/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-6"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.17 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/653"},"https://github.com/appvia/terranetes-controller/pull/653")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.18 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/675"},"https://github.com/appvia/terranetes-controller/pull/675"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.17...v0.3.18"},"https://github.com/appvia/terranetes-controller/compare/v0.3.17...v0.3.18")),(0,r.kt)("h2",{id:"release-v0317"},"Release v0.3.17"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-7"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.17/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-7"},"What's Changed#"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release for v0.3.16 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/611"},"https://github.com/appvia/terranetes-controller/pull/611")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/net from 0.6.0 to 0.7.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/631"},"https://github.com/appvia/terranetes-controller/pull/631"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.16...v0.3.17"},"https://github.com/appvia/terranetes-controller/compare/v0.3.16...v0.3.17")),(0,r.kt)("h2",{id:"release-v0316"},"Release v0.3.16"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-8"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.16/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"\ufe0f-features-4"},"\u2747\ufe0f FEATURES"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Updated the infracosts ci image to ci-0.10.17 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/607"},"https://github.com/appvia/terranetes-controller/pull/607"))),(0,r.kt)("h3",{id:"-bugs-2"},"\ud83d\udc1b BUGS"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixes a bug from v0.3.15 where the CRD definition was not updated in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/608"},"https://github.com/appvia/terranetes-controller/pull/608"))),(0,r.kt)("h3",{id:"whats-changed-8"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.15 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/602"},"https://github.com/appvia/terranetes-controller/pull/602")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/oauth2 from 0.4.0 to 0.5.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/603"},"https://github.com/appvia/terranetes-controller/pull/603")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/tools from 0.5.0 to 0.6.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/604"},"https://github.com/appvia/terranetes-controller/pull/604")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.8.0 to 2.8.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/606"},"https://github.com/appvia/terranetes-controller/pull/606")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/hashicorp/go-getter from 1.6.2 to 1.7.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/605"},"https://github.com/appvia/terranetes-controller/pull/605")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Infracost Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/607"},"https://github.com/appvia/terranetes-controller/pull/607")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Updating the Boilerplate by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/608"},"https://github.com/appvia/terranetes-controller/pull/608"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.15...v0.3.16"},"https://github.com/appvia/terranetes-controller/compare/v0.3.15...v0.3.16")),(0,r.kt)("h2",{id:"release-v0315"},"Release v0.3.15"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-9"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.15/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"\ufe0f-features-5"},"\u2747\ufe0f Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Default Secrets into Policy by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/600"},"https://github.com/appvia/terranetes-controller/pull/600"))),(0,r.kt)("h3",{id:"whats-changed-9"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.14 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/591"},"https://github.com/appvia/terranetes-controller/pull/591")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Makefile Fix Typo by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/592"},"https://github.com/appvia/terranetes-controller/pull/592")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.50.1 to 1.51.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/593"},"https://github.com/appvia/terranetes-controller/pull/593")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-tools from 0.11.2 to 0.11.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/595"},"https://github.com/appvia/terranetes-controller/pull/595")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.51.0 to 1.51.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/596"},"https://github.com/appvia/terranetes-controller/pull/596")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/build-push-action from 3.3.0 to 4.0.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/594"},"https://github.com/appvia/terranetes-controller/pull/594")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-runtime from 0.14.2 to 0.14.4 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/597"},"https://github.com/appvia/terranetes-controller/pull/597")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/599"},"https://github.com/appvia/terranetes-controller/pull/599")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Default Secrets into Policy by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/600"},"https://github.com/appvia/terranetes-controller/pull/600")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Changing to v3 Save Github Actions by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/601"},"https://github.com/appvia/terranetes-controller/pull/601"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.14...v0.3.15"},"https://github.com/appvia/terranetes-controller/compare/v0.3.14...v0.3.15")),(0,r.kt)("h2",{id:"release-v0314"},"Release v0.3.14"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-10"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.14/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"-bug-fixes"},"\ud83d\udc1b Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added job-template flag by @richardbeumer in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/503"},"https://github.com/appvia/terranetes-controller/pull/503")),(0,r.kt)("li",{parentName:"ul"},"Remove the --name flag from tnctl logs as it is a required arg by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/520"},"https://github.com/appvia/terranetes-controller/pull/520")),(0,r.kt)("li",{parentName:"ul"},"Fixing Ready Condition Transition by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/535"},"https://github.com/appvia/terranetes-controller/pull/535")),(0,r.kt)("li",{parentName:"ul"},"Enable Webhooks Toggle by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/562"},"https://github.com/appvia/terranetes-controller/pull/562")),(0,r.kt)("li",{parentName:"ul"},"Reconcilation Annontation Predicate moved into Ensure Func by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/563"},"https://github.com/appvia/terranetes-controller/pull/563")),(0,r.kt)("li",{parentName:"ul"},"Disable Infracosts Update Check by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/565"},"https://github.com/appvia/terranetes-controller/pull/565"))),(0,r.kt)("h3",{id:"\ufe0f-features-6"},"\u2747\ufe0f Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/499"},"https://github.com/appvia/terranetes-controller/pull/499")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/498"},"https://github.com/appvia/terranetes-controller/pull/498")),(0,r.kt)("li",{parentName:"ul"},"Kubernetes Backend Secret Labels by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/533"},"https://github.com/appvia/terranetes-controller/pull/533")),(0,r.kt)("li",{parentName:"ul"},"Kubernetes State Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/534"},"https://github.com/appvia/terranetes-controller/pull/534")),(0,r.kt)("li",{parentName:"ul"},"Retry Logic for Pod Logs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/542"},"https://github.com/appvia/terranetes-controller/pull/542")),(0,r.kt)("li",{parentName:"ul"},"Lookup Providers in cluster for CLI Search by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/560"},"https://github.com/appvia/terranetes-controller/pull/560")),(0,r.kt)("li",{parentName:"ul"},"Retry CLI by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/568"},"https://github.com/appvia/terranetes-controller/pull/568")),(0,r.kt)("li",{parentName:"ul"},"Provider Secret Validation by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/575"},"https://github.com/appvia/terranetes-controller/pull/575")),(0,r.kt)("li",{parentName:"ul"},"Terraform Image Update to v1.3.7 by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/546"},"https://github.com/appvia/terranetes-controller/pull/546")),(0,r.kt)("li",{parentName:"ul"},"Changing to CI Infracost Image by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/577"},"https://github.com/appvia/terranetes-controller/pull/577")),(0,r.kt)("li",{parentName:"ul"},"Checkov Image Update to v2.2.299 by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/581"},"https://github.com/appvia/terranetes-controller/pull/581"))),(0,r.kt)("h3",{id:"whats-changed-10"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Helm Release v0.3.14 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/584"},"https://github.com/appvia/terranetes-controller/pull/584"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.13...v0.3.14"},"https://github.com/appvia/terranetes-controller/compare/v0.3.13...v0.3.14")),(0,r.kt)("h2",{id:"release-v0313"},"Release v0.3.13"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-11"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.13/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"-bug-fixes-1"},"\ud83d\udc1b Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Checkov Policies Zero Matches by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/496"},"https://github.com/appvia/terranetes-controller/pull/496")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Wrap log watcher Pod with error handling and retry logic by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/493"},"https://github.com/appvia/terranetes-controller/pull/493"))),(0,r.kt)("h3",{id:"\ufe0f-features-7"},"\u2747\ufe0f Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/499"},"https://github.com/appvia/terranetes-controller/pull/499")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/498"},"https://github.com/appvia/terranetes-controller/pull/498"))),(0,r.kt)("h3",{id:"whats-changed-11"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.5.0 to 2.5.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/495"},"https://github.com/appvia/terranetes-controller/pull/495")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Wrap log watcher Pod with error handling and retry logic by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/493"},"https://github.com/appvia/terranetes-controller/pull/493")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/tidwall/gjson from 1.14.3 to 1.14.4 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/497"},"https://github.com/appvia/terranetes-controller/pull/497")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Checkov Policies Zero Matches by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/496"},"https://github.com/appvia/terranetes-controller/pull/496")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/499"},"https://github.com/appvia/terranetes-controller/pull/499")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/498"},"https://github.com/appvia/terranetes-controller/pull/498")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart Changes for Release v0.3.13 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/500"},"https://github.com/appvia/terranetes-controller/pull/500"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.12...v0.3.13"},"https://github.com/appvia/terranetes-controller/compare/v0.3.12...v0.3.13")),(0,r.kt)("h2",{id:"release-v0312"},"Release v0.3.12"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-12"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.12/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"bug-fixes"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed an issue in the CLI not showing Checkov policies when infracost disabled by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/488"},"https://github.com/appvia/terranetes-controller/pull/488"))),(0,r.kt)("h3",{id:"whats-changed-12"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart Release Fix by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/471"},"https://github.com/appvia/terranetes-controller/pull/471")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Security Policy by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/473"},"https://github.com/appvia/terranetes-controller/pull/473")),(0,r.kt)("li",{parentName:"ul"},"Bump azure/setup-kubectl from 2.0 to 3.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/474"},"https://github.com/appvia/terranetes-controller/pull/474")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/metadata-action from 4.0.1 to 4.1.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/476"},"https://github.com/appvia/terranetes-controller/pull/476")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/tools from 0.2.0 to 0.3.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/480"},"https://github.com/appvia/terranetes-controller/pull/480")),(0,r.kt)("li",{parentName:"ul"},"Bump helm/chart-releaser-action from 1.4.0 to 1.4.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/478"},"https://github.com/appvia/terranetes-controller/pull/478")),(0,r.kt)("li",{parentName:"ul"},"Bump docker/build-push-action from 3.0.0 to 3.2.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/475"},"https://github.com/appvia/terranetes-controller/pull/475")),(0,r.kt)("li",{parentName:"ul"},"Bump helm/chart-testing-action from 2.2.1 to 2.3.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/477"},"https://github.com/appvia/terranetes-controller/pull/477")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.24.0 to 1.24.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/479"},"https://github.com/appvia/terranetes-controller/pull/479")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.25.3 to 0.25.4 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/481"},"https://github.com/appvia/terranetes-controller/pull/481")),(0,r.kt)("li",{parentName:"ul"},"Bump actions/download-artifact from 2 to 3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/485"},"https://github.com/appvia/terranetes-controller/pull/485")),(0,r.kt)("li",{parentName:"ul"},"Bump actions/dependency-review-action from 1 to 3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/486"},"https://github.com/appvia/terranetes-controller/pull/486")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.25.3 to 0.25.4 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/487"},"https://github.com/appvia/terranetes-controller/pull/487")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Checkov Policies on Describe by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/488"},"https://github.com/appvia/terranetes-controller/pull/488")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart Updates for v0.3.12 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/489"},"https://github.com/appvia/terranetes-controller/pull/489")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Pegging the Artifact Upload to @v2.2.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/491"},"https://github.com/appvia/terranetes-controller/pull/491")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Action Throw Upload Errors by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/492"},"https://github.com/appvia/terranetes-controller/pull/492"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.11...v0.3.12"},"https://github.com/appvia/terranetes-controller/compare/v0.3.11...v0.3.12")),(0,r.kt)("h2",{id:"release-v0311"},"Release v0.3.11"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-13"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.11/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-13"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Removing Tag Badge by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/431"},"https://github.com/appvia/terranetes-controller/pull/431")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Golang 1.19 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/432"},"https://github.com/appvia/terranetes-controller/pull/432")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Removing Deprecated Linters by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/433"},"https://github.com/appvia/terranetes-controller/pull/433")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Fixing CLI Reference Docs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/434"},"https://github.com/appvia/terranetes-controller/pull/434")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Infracost Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/435"},"https://github.com/appvia/terranetes-controller/pull/435")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/437"},"https://github.com/appvia/terranetes-controller/pull/437")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/436"},"https://github.com/appvia/terranetes-controller/pull/436")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Github Action Update (Upload Artifacts) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/438"},"https://github.com/appvia/terranetes-controller/pull/438")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Github Actions Upgrade by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/439"},"https://github.com/appvia/terranetes-controller/pull/439")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/spf13/cobra from 1.5.0 to 1.6.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/440"},"https://github.com/appvia/terranetes-controller/pull/440")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.21.1 to 1.22.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/441"},"https://github.com/appvia/terranetes-controller/pull/441")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.3.0 to 2.3.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/443"},"https://github.com/appvia/terranetes-controller/pull/443")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/code-generator from 0.25.2 to 0.25.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/447"},"https://github.com/appvia/terranetes-controller/pull/447")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apimachinery from 0.25.2 to 0.25.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/445"},"https://github.com/appvia/terranetes-controller/pull/445")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/client-go from 0.25.2 to 0.25.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/444"},"https://github.com/appvia/terranetes-controller/pull/444")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/api from 0.25.2 to 0.25.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/449"},"https://github.com/appvia/terranetes-controller/pull/449")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.25.2 to 0.25.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/446"},"https://github.com/appvia/terranetes-controller/pull/446")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.25.2 to 0.25.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/448"},"https://github.com/appvia/terranetes-controller/pull/448")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/450"},"https://github.com/appvia/terranetes-controller/pull/450")),(0,r.kt)("li",{parentName:"ul"},"Bump golang.org/x/tools from 0.1.12 to 0.2.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/451"},"https://github.com/appvia/terranetes-controller/pull/451")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.3.1 to 2.4.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/453"},"https://github.com/appvia/terranetes-controller/pull/453")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.50.0 to 1.50.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/454"},"https://github.com/appvia/terranetes-controller/pull/454")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/stretchr/testify from 1.8.0 to 1.8.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/452"},"https://github.com/appvia/terranetes-controller/pull/452")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/spf13/cobra from 1.6.0 to 1.6.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/455"},"https://github.com/appvia/terranetes-controller/pull/455")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/456"},"https://github.com/appvia/terranetes-controller/pull/456")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.22.1 to 1.23.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/457"},"https://github.com/appvia/terranetes-controller/pull/457")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Infracost Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/458"},"https://github.com/appvia/terranetes-controller/pull/458")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/459"},"https://github.com/appvia/terranetes-controller/pull/459")),(0,r.kt)("li",{parentName:"ul"},"[TESTS]"," - Fixing Unit Test by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/460"},"https://github.com/appvia/terranetes-controller/pull/460")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Updating Cosign Action by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/461"},"https://github.com/appvia/terranetes-controller/pull/461")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/462"},"https://github.com/appvia/terranetes-controller/pull/462")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/prometheus/client_golang from 1.13.0 to 1.13.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/463"},"https://github.com/appvia/terranetes-controller/pull/463")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.23.0 to 1.24.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/464"},"https://github.com/appvia/terranetes-controller/pull/464")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.4.0 to 2.5.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/465"},"https://github.com/appvia/terranetes-controller/pull/465")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-runtime from 0.13.0 to 0.13.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/466"},"https://github.com/appvia/terranetes-controller/pull/466")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/468"},"https://github.com/appvia/terranetes-controller/pull/468")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/467"},"https://github.com/appvia/terranetes-controller/pull/467")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/prometheus/client_golang from 1.13.1 to 1.14.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/469"},"https://github.com/appvia/terranetes-controller/pull/469")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart for v0.3.11 Release by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/470"},"https://github.com/appvia/terranetes-controller/pull/470"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.10...v0.3.11"},"https://github.com/appvia/terranetes-controller/compare/v0.3.10...v0.3.11")),(0,r.kt)("h2",{id:"release-v0310"},"Release v0.3.10"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-14"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.10/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"bug-fixes-1"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed an issue where the logs where not being shown when an error was encountered in the terranetes init by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/396"},"https://github.com/appvia/terranetes-controller/pull/396")),(0,r.kt)("li",{parentName:"ul"},"Fixed an issue in tnctl which wasn't find the logs correctly in the tnctl log by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/401"},"https://github.com/appvia/terranetes-controller/pull/401"))),(0,r.kt)("h3",{id:"whats-changed-14"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release for v0.3.9 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/390"},"https://github.com/appvia/terranetes-controller/pull/390")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Updating the Readme by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/391"},"https://github.com/appvia/terranetes-controller/pull/391")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Release Dependency Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/392"},"https://github.com/appvia/terranetes-controller/pull/392")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Additional Secrets by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/395"},"https://github.com/appvia/terranetes-controller/pull/395")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Executor Service Account to terranetes-executor by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/394"},"https://github.com/appvia/terranetes-controller/pull/394")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Init Errors Showing in Logs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/396"},"https://github.com/appvia/terranetes-controller/pull/396")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Fixing Typo on Makefile Comment by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/399"},"https://github.com/appvia/terranetes-controller/pull/399")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-runtime from 0.12.3 to 0.13.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/393"},"https://github.com/appvia/terranetes-controller/pull/393")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Logs Command Fixes by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/401"},"https://github.com/appvia/terranetes-controller/pull/401")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Fixing Namespace Creation in E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/402"},"https://github.com/appvia/terranetes-controller/pull/402")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Cleanup on E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/403"},"https://github.com/appvia/terranetes-controller/pull/403")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Infracost Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/404"},"https://github.com/appvia/terranetes-controller/pull/404")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Updating dependencies by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/400"},"https://github.com/appvia/terranetes-controller/pull/400")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Checkov Image Update by @github-actions in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/405"},"https://github.com/appvia/terranetes-controller/pull/405")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/AlecAivazis/survey/v2 from 2.3.5 to 2.3.6 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/406"},"https://github.com/appvia/terranetes-controller/pull/406")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apimachinery from 0.25.0 to 0.25.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/409"},"https://github.com/appvia/terranetes-controller/pull/409")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/code-generator from 0.25.0 to 0.25.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/411"},"https://github.com/appvia/terranetes-controller/pull/411")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/api from 0.25.0 to 0.25.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/410"},"https://github.com/appvia/terranetes-controller/pull/410")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.25.0 to 0.25.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/408"},"https://github.com/appvia/terranetes-controller/pull/408")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/ginkgo/v2 from 2.1.6 to 2.2.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/413"},"https://github.com/appvia/terranetes-controller/pull/413")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.25.0 to 0.25.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/414"},"https://github.com/appvia/terranetes-controller/pull/414")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apimachinery from 0.25.1 to 0.25.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/416"},"https://github.com/appvia/terranetes-controller/pull/416")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/code-generator from 0.25.1 to 0.25.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/418"},"https://github.com/appvia/terranetes-controller/pull/418")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.25.1 to 0.25.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/415"},"https://github.com/appvia/terranetes-controller/pull/415")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.25.1 to 0.25.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/419"},"https://github.com/appvia/terranetes-controller/pull/419")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/go-swagger/go-swagger from 0.30.2 to 0.30.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/421"},"https://github.com/appvia/terranetes-controller/pull/421")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-tools from 0.9.2 to 0.10.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/417"},"https://github.com/appvia/terranetes-controller/pull/417")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/tcnksm/ghr from 0.15.0 to 0.16.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/422"},"https://github.com/appvia/terranetes-controller/pull/422")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.49.0 to 1.50.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/424"},"https://github.com/appvia/terranetes-controller/pull/424")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Docker Ignore File by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/423"},"https://github.com/appvia/terranetes-controller/pull/423")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Ensure Legacy ServiceAccount by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/425"},"https://github.com/appvia/terranetes-controller/pull/425")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Deletion Event by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/427"},"https://github.com/appvia/terranetes-controller/pull/427")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.10 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/428"},"https://github.com/appvia/terranetes-controller/pull/428"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.9...v0.3.10"},"https://github.com/appvia/terranetes-controller/compare/v0.3.9...v0.3.10")),(0,r.kt)("h2",{id:"release-v039"},"Release v0.3.9"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-15"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.9/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-15"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Fix Badge Format by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/367"},"https://github.com/appvia/terranetes-controller/pull/367")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart Release v0.3.8 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/366"},"https://github.com/appvia/terranetes-controller/pull/366")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Fixing Versions Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/369"},"https://github.com/appvia/terranetes-controller/pull/369")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Bridgecrew Image Versions by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/373"},"https://github.com/appvia/terranetes-controller/pull/373")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Adding Google Project ID by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/386"},"https://github.com/appvia/terranetes-controller/pull/386"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.8...v0.3.9"},"https://github.com/appvia/terranetes-controller/compare/v0.3.8...v0.3.9")),(0,r.kt)("h2",{id:"release-v038"},"Release v0.3.8"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-16"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.8/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"bug-fixes-2"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed an issue in the drift controller which was not correctly calculating the total running by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/362"},"https://github.com/appvia/terranetes-controller/pull/362"))),(0,r.kt)("h3",{id:"whats-changed-16"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Drift Threshold by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/362"},"https://github.com/appvia/terranetes-controller/pull/362")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release Chart for v0.3.7 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/355"},"https://github.com/appvia/terranetes-controller/pull/355")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Versions Workflow Bugfix by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/356"},"https://github.com/appvia/terranetes-controller/pull/356")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Versions Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/357"},"https://github.com/appvia/terranetes-controller/pull/357")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Split badges in README onto new lines by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/365"},"https://github.com/appvia/terranetes-controller/pull/365"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.7...v0.3.8"},"https://github.com/appvia/terranetes-controller/compare/v0.3.7...v0.3.8")),(0,r.kt)("h2",{id:"release-v037"},"Release v0.3.7"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-17"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.7/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"new-features"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added the ability to source in Checkov policies from central repository by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/340"},"https://github.com/appvia/terranetes-controller/pull/340")),(0,r.kt)("li",{parentName:"ul"},"Added prometheus API metrics by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/332"},"https://github.com/appvia/terranetes-controller/pull/332")),(0,r.kt)("li",{parentName:"ul"},"Bumped the version of Infracost to v0.10.10 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/336"},"https://github.com/appvia/terranetes-controller/pull/336")),(0,r.kt)("li",{parentName:"ul"},"Bumped the version of Checkov to 2.1.137 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/337"},"https://github.com/appvia/terranetes-controller/pull/337"))),(0,r.kt)("h3",{id:"whats-changed-17"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Terraform Variables by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/354"},"https://github.com/appvia/terranetes-controller/pull/354")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Terraform Image Version Downgrade (1.2.7 -> 1.2.5) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/353"},"https://github.com/appvia/terranetes-controller/pull/353")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Adding Diagnostics to E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/352"},"https://github.com/appvia/terranetes-controller/pull/352")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Bug Fixes in E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/351"},"https://github.com/appvia/terranetes-controller/pull/351")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Image Version Automation by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/349"},"https://github.com/appvia/terranetes-controller/pull/349")),(0,r.kt)("li",{parentName:"ul"},"[CLEAN]"," - Dropping Checkov Variables Options by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/348"},"https://github.com/appvia/terranetes-controller/pull/348")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Adding Image Scanning by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/334"},"https://github.com/appvia/terranetes-controller/pull/334")),(0,r.kt)("li",{parentName:"ul"},"[CLEAN]"," - Cleaning the Job Template by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/347"},"https://github.com/appvia/terranetes-controller/pull/347")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Watching Destroy Logs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/339"},"https://github.com/appvia/terranetes-controller/pull/339")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Central Security Policy by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/346"},"https://github.com/appvia/terranetes-controller/pull/346")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Publishing an Image for CLI by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/333"},"https://github.com/appvia/terranetes-controller/pull/333")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Upgrading Base Image (Alpine 3.15 -> 3.16) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/335"},"https://github.com/appvia/terranetes-controller/pull/335")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding API Server Metrics by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/332"},"https://github.com/appvia/terranetes-controller/pull/332")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Checkov Version (2.1.104 -> 2.1.137) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/337"},"https://github.com/appvia/terranetes-controller/pull/337")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Terraform Version (v1.2.5 - v1.2.7) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/338"},"https://github.com/appvia/terranetes-controller/pull/338")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Setting a Default Namespace by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/343"},"https://github.com/appvia/terranetes-controller/pull/343")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Infracost Version (v0.10.9 -> v0.10.10) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/336"},"https://github.com/appvia/terranetes-controller/pull/336")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Checkov Configuraion Optional by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/342"},"https://github.com/appvia/terranetes-controller/pull/342")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Changing the Policy Source Field by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/341"},"https://github.com/appvia/terranetes-controller/pull/341")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - External Checkov Source by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/340"},"https://github.com/appvia/terranetes-controller/pull/340")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/apiextensions-apiserver from 0.24.3 to 0.24.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/324"},"https://github.com/appvia/terranetes-controller/pull/324")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/cli-runtime from 0.24.3 to 0.24.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/325"},"https://github.com/appvia/terranetes-controller/pull/325")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/api from 0.24.3 to 0.24.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/329"},"https://github.com/appvia/terranetes-controller/pull/329")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/client-go from 0.24.3 to 0.24.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/328"},"https://github.com/appvia/terranetes-controller/pull/328")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/tcnksm/ghr from 0.14.0 to 0.15.0 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/327"},"https://github.com/appvia/terranetes-controller/pull/327")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/tidwall/gjson from 1.14.2 to 1.14.3 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/322"},"https://github.com/appvia/terranetes-controller/pull/322")),(0,r.kt)("li",{parentName:"ul"},"[CLEANUP]"," - Dependencies by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/320"},"https://github.com/appvia/terranetes-controller/pull/320")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Updating Configuration Example by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/350"},"https://github.com/appvia/terranetes-controller/pull/350")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Adding Private Module Example by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/345"},"https://github.com/appvia/terranetes-controller/pull/345")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Readme Update by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/323"},"https://github.com/appvia/terranetes-controller/pull/323")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - GHCR badge by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/321"},"https://github.com/appvia/terranetes-controller/pull/321"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.6...v0.3.7"},"https://github.com/appvia/terranetes-controller/compare/v0.3.6...v0.3.7")),(0,r.kt)("h2",{id:"release-v036"},"Release v0.3.6"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-18"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.6/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-18"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.5 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/317"},"https://github.com/appvia/terranetes-controller/pull/317")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Convert Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/318"},"https://github.com/appvia/terranetes-controller/pull/318")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Convert Configuration Source by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/319"},"https://github.com/appvia/terranetes-controller/pull/319"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.5...v0.3.6"},"https://github.com/appvia/terranetes-controller/compare/v0.3.5...v0.3.6")),(0,r.kt)("h2",{id:"release-v035"},"Release v0.3.5"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-19"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.5/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-19"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/315"},"https://github.com/appvia/terranetes-controller/pull/315")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Redirect Search Output by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/316"},"https://github.com/appvia/terranetes-controller/pull/316"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.4...v0.3.5"},"https://github.com/appvia/terranetes-controller/compare/v0.3.4...v0.3.5")),(0,r.kt)("h2",{id:"release-v034"},"Release v0.3.4"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-20"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.4/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-20"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Updating Development Docs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/299"},"https://github.com/appvia/terranetes-controller/pull/299")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Support Binaries & CLI by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/301"},"https://github.com/appvia/terranetes-controller/pull/301")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Trigger Development E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/304"},"https://github.com/appvia/terranetes-controller/pull/304")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Example Provider Secrets by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/307"},"https://github.com/appvia/terranetes-controller/pull/307")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Updating Readme by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/312"},"https://github.com/appvia/terranetes-controller/pull/312")),(0,r.kt)("li",{parentName:"ul"},"Update README.md by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/313"},"https://github.com/appvia/terranetes-controller/pull/313"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.3...v0.3.4"},"https://github.com/appvia/terranetes-controller/compare/v0.3.3...v0.3.4")),(0,r.kt)("h2",{id:"release-v033"},"Release v0.3.3"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-21"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.3/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-21"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.2 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/288"},"https://github.com/appvia/terranetes-controller/pull/288")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bugfix Helm Template (Policies & Providers) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/290"},"https://github.com/appvia/terranetes-controller/pull/290")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.47.2 to 1.47.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/291"},"https://github.com/appvia/terranetes-controller/pull/291")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Configuration Interface by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/292"},"https://github.com/appvia/terranetes-controller/pull/292"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.2...v0.3.3"},"https://github.com/appvia/terranetes-controller/compare/v0.3.2...v0.3.3")),(0,r.kt)("h2",{id:"release-v032"},"Release v0.3.2"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-22"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.2/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"new-features-1"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The ability to generate the kubectl plugin by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/286"},"https://github.com/appvia/terranetes-controller/pull/286"))),(0,r.kt)("h3",{id:"bug-fixes-3"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed the issues where a $HOME/.tnctl/config.yaml not present would throw an error by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/284"},"https://github.com/appvia/terranetes-controller/pull/284"))),(0,r.kt)("h3",{id:"whats-changed-22"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Update README.md by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/278"},"https://github.com/appvia/terranetes-controller/pull/278")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Updating Controller Version String by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/280"},"https://github.com/appvia/terranetes-controller/pull/280")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Install Official Chart by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/279"},"https://github.com/appvia/terranetes-controller/pull/279")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Use Chart Option by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/281"},"https://github.com/appvia/terranetes-controller/pull/281")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Check Suite Script by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/282"},"https://github.com/appvia/terranetes-controller/pull/282")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - CLI Configuration by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/284"},"https://github.com/appvia/terranetes-controller/pull/284")),(0,r.kt)("li",{parentName:"ul"},"[TESTS]"," - Update CLI Tests for Sources Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/285"},"https://github.com/appvia/terranetes-controller/pull/285")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Kubectl Plugin Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/286"},"https://github.com/appvia/terranetes-controller/pull/286")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Using Repository Name in Search by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/287"},"https://github.com/appvia/terranetes-controller/pull/287"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.1...v0.3.2"},"https://github.com/appvia/terranetes-controller/compare/v0.3.1...v0.3.2")),(0,r.kt)("h2",{id:"release-v031"},"Release v0.3.1"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-23"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.1/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"new-features-2"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added support for custom terraform state backends by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/276"},"https://github.com/appvia/terranetes-controller/pull/276")),(0,r.kt)("li",{parentName:"ul"},"Added support to the Helm chart to specify the ",(0,r.kt)("inlineCode",{parentName:"li"},"spec.summary")," field in Provider by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/275"},"https://github.com/appvia/terranetes-controller/pull/275"))),(0,r.kt)("h3",{id:"whats-changed-23"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Architecture Images by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/274"},"https://github.com/appvia/terranetes-controller/pull/274")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Support Summaries on Provider Helm Chart by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/275"},"https://github.com/appvia/terranetes-controller/pull/275")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Custom State Backend by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/276"},"https://github.com/appvia/terranetes-controller/pull/276")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Helm Release for v0.3.1 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/277"},"https://github.com/appvia/terranetes-controller/pull/277"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.3.0...v0.3.1"},"https://github.com/appvia/terranetes-controller/compare/v0.3.0...v0.3.1")),(0,r.kt)("h2",{id:"release-v030"},"Release v0.3.0"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-24"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.3.0/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"breaking-change"},"Breaking Change"),(0,r.kt)("p",null,"Note the project was renamed from teraform-controller to terranetes-controller"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"All the CRD have stayed the same - so no need to alter any Provides, Policies or Configurations."),(0,r.kt)("li",{parentName:"ul"},"The helm chart and name of the project inside has changed though")),(0,r.kt)("p",null,"To upgrade - the easiest solution would be to delete the old helm chart and install the latest one. There are no changes from v0.2.9, all commits are related to name changes."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# We are assuming here the controller is installed via helm in 'terraform-system' namespace.\n$ helm ls -n terraform-system\n# Remove the chart\n$ helm -n terraform-system uninstall terraform-controller\n\n# Add the new Helm chart repository\n$ helm repo remove appvia\n$ helm repo add appvia https://terranetes-controller.appvia.io\n$ helm repo update\n$ helm install -n terraform-system terranetes-controller appvia/terranetes-controller --create-namespace \\\n --values YOUR_VALUES_IF_ANY\n# kubectl -n terraform-system get po\n")),(0,r.kt)("p",null,"If you are managing the deployments outside of Helm, you simply need to use the updated images"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"ghcr.io/appvia/terranetes-controller:v0.3.0 (on deployment)"),(0,r.kt)("li",{parentName:"ul"},"ghcr.io/appvia/terranetes-executor:v0.3.0 (on command line --executor-image)")),(0,r.kt)("h3",{id:"whats-changed-24"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[NAMING]"," - Renaming to Terranetes Controller by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/268"},"https://github.com/appvia/terranetes-controller/pull/268")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Adding Workflow Dispatch - CodeQL by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/267"},"https://github.com/appvia/terranetes-controller/pull/267")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - CodeQL Badge by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/266"},"https://github.com/appvia/terranetes-controller/pull/266")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bumping the Helm Chart by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/270"},"https://github.com/appvia/terranetes-controller/pull/270")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Workflow Fix - Docker Images by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/271"},"https://github.com/appvia/terranetes-controller/pull/271")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Fixing Naming on Docker Images by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/272"},"https://github.com/appvia/terranetes-controller/pull/272")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.3.0 Chart by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/273"},"https://github.com/appvia/terranetes-controller/pull/273"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.9...v0.3.0"},"https://github.com/appvia/terranetes-controller/compare/v0.2.9...v0.3.0")),(0,r.kt)("h2",{id:"release-v029"},"Release v0.2.9"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-25"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.9/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"new-features-3"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added code analysis by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/205"},"https://github.com/appvia/terranetes-controller/pull/205")),(0,r.kt)("li",{parentName:"ul"},"Added Provider Summary Field by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/247"},"https://github.com/appvia/terranetes-controller/pull/247")),(0,r.kt)("li",{parentName:"ul"},"Bumping Version Checkov 2.1.67 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/251"},"https://github.com/appvia/terranetes-controller/pull/251")),(0,r.kt)("li",{parentName:"ul"},"Bumping Infracost Version 0.10.7, 0.10.8 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/250"},"https://github.com/appvia/terranetes-controller/pull/250")),(0,r.kt)("li",{parentName:"ul"},"Terraform Version v1.2.5 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/252"},"https://github.com/appvia/terranetes-controller/pull/252")),(0,r.kt)("li",{parentName:"ul"},"Added the abiliy to apply executor permissions to namespace service account, making it quicker to rollout multiple injected provided Service by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/260"},"https://github.com/appvia/terranetes-controller/pull/260")),(0,r.kt)("li",{parentName:"ul"},"Started off the basis of error detection to ease diagnosis by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/259"},"https://github.com/appvia/terranetes-controller/pull/259")),(0,r.kt)("li",{parentName:"ul"},"Added the ability to deploy Providers via Helm by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/261"},"https://github.com/appvia/terranetes-controller/pull/261")),(0,r.kt)("li",{parentName:"ul"},"Added the ability to deploy Policies via Helm by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/262"},"https://github.com/appvia/terranetes-controller/pull/262"))),(0,r.kt)("h3",{id:"build"},"Build"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added Code of Conduct by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/242"},"https://github.com/appvia/terranetes-controller/pull/242")),(0,r.kt)("li",{parentName:"ul"},"Added Issue templates by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/243"},"https://github.com/appvia/terranetes-controller/pull/243"))),(0,r.kt)("h3",{id:"bug-fixes-4"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed the sync status of a remove to say 'Deleting' by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/253"},"https://github.com/appvia/terranetes-controller/pull/253")),(0,r.kt)("li",{parentName:"ul"},"Sanity Checking Query Parameters by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/255"},"https://github.com/appvia/terranetes-controller/pull/255"))),(0,r.kt)("h3",{id:"whats-changed-25"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart Release v0.2.8 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/233"},"https://github.com/appvia/terranetes-controller/pull/233")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding CodeQL Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/205"},"https://github.com/appvia/terranetes-controller/pull/205")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Add Code of Conduct by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/242"},"https://github.com/appvia/terranetes-controller/pull/242")),(0,r.kt)("li",{parentName:"ul"},"[GITHUB]"," - Add Issue templates by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/243"},"https://github.com/appvia/terranetes-controller/pull/243")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.46.2 to 1.47.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/246"},"https://github.com/appvia/terranetes-controller/pull/246")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/sirupsen/logrus from 1.8.1 to 1.9.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/245"},"https://github.com/appvia/terranetes-controller/pull/245")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Provider Summary Field by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/247"},"https://github.com/appvia/terranetes-controller/pull/247")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.19.0 to 1.20.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/248"},"https://github.com/appvia/terranetes-controller/pull/248")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bumping Version Checkov 2.1.67 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/251"},"https://github.com/appvia/terranetes-controller/pull/251")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bumping Infracost Version 0.10.7, 0.10.8 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/250"},"https://github.com/appvia/terranetes-controller/pull/250")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Terraform Version v1.2.5 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/252"},"https://github.com/appvia/terranetes-controller/pull/252")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Resource Status when deleting by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/253"},"https://github.com/appvia/terranetes-controller/pull/253")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Sanity Checking Query Parameters by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/255"},"https://github.com/appvia/terranetes-controller/pull/255")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/golangci/golangci-lint from 1.47.1 to 1.47.2 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/256"},"https://github.com/appvia/terranetes-controller/pull/256")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - User Inputs Parameter Checking by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/258"},"https://github.com/appvia/terranetes-controller/pull/258")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Detection of Errors by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/259"},"https://github.com/appvia/terranetes-controller/pull/259")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Service Account Permissions - Executors by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/260"},"https://github.com/appvia/terranetes-controller/pull/260")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Deploy Providers via Helm by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/261"},"https://github.com/appvia/terranetes-controller/pull/261")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Deploy Policies via Helm Chart by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/262"},"https://github.com/appvia/terranetes-controller/pull/262")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.2.9 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/263"},"https://github.com/appvia/terranetes-controller/pull/263")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Github Release Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/264"},"https://github.com/appvia/terranetes-controller/pull/264")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Refuse to continue by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/265"},"https://github.com/appvia/terranetes-controller/pull/265"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.8...v0.2.9"},"https://github.com/appvia/terranetes-controller/compare/v0.2.8...v0.2.9")),(0,r.kt)("h2",{id:"release-v028"},"Release v0.2.8"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-26"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.8/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"whats-changed-26"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Helm Release (v0.2.7) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/224"},"https://github.com/appvia/terranetes-controller/pull/224")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Release Workflow Fix by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/225"},"https://github.com/appvia/terranetes-controller/pull/225")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Fixing Application Bump by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/226"},"https://github.com/appvia/terranetes-controller/pull/226")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Adding Logs Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/227"},"https://github.com/appvia/terranetes-controller/pull/227")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Build Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/230"},"https://github.com/appvia/terranetes-controller/pull/230")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Build Command Resource Name by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/231"},"https://github.com/appvia/terranetes-controller/pull/231")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Fixing Logs Command for Plans by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/232"},"https://github.com/appvia/terranetes-controller/pull/232"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.7...v0.2.8"},"https://github.com/appvia/terranetes-controller/compare/v0.2.7...v0.2.8")),(0,r.kt)("h2",{id:"release-v027"},"Release v0.2.7"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-27"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.7/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"new-features-4"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Provides the ability to remap connection secrets ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/222"},"https://github.com/appvia/terranetes-controller/pull/222"))),(0,r.kt)("h3",{id:"bug-fixes-5"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixes a template error in the ",(0,r.kt)("inlineCode",{parentName:"li"},"tnctl describe")," command which was causing a error ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/219"},"https://github.com/appvia/terranetes-controller/pull/219")),(0,r.kt)("li",{parentName:"ul"},"Fixes the streaming of the logs in the developer namespace we stream in real time rather than waiting for completion ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/215"},"https://github.com/appvia/terranetes-controller/pull/215"))),(0,r.kt)("h3",{id:"whats-changed-27"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bumping Version of Chart by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/213"},"https://github.com/appvia/terranetes-controller/pull/213")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Release Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/214"},"https://github.com/appvia/terranetes-controller/pull/214")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Streaming Logs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/215"},"https://github.com/appvia/terranetes-controller/pull/215")),(0,r.kt)("li",{parentName:"ul"},"[TESTING]"," - Adding Unit Tests for CLI by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/216"},"https://github.com/appvia/terranetes-controller/pull/216")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-runtime from 0.12.2 to 0.12.3 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/217"},"https://github.com/appvia/terranetes-controller/pull/217")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Workflow Override by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/218"},"https://github.com/appvia/terranetes-controller/pull/218")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - CLI Describe Template by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/219"},"https://github.com/appvia/terranetes-controller/pull/219")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Build Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/221"},"https://github.com/appvia/terranetes-controller/pull/221")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Describe Command by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/220"},"https://github.com/appvia/terranetes-controller/pull/220")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Secret Renaming by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/222"},"https://github.com/appvia/terranetes-controller/pull/222"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.6...v0.2.7"},"https://github.com/appvia/terranetes-controller/compare/v0.2.6...v0.2.7")),(0,r.kt)("h2",{id:"release-v026"},"Release v0.2.6"),(0,r.kt)("h3",{id:"terranetes-cli-tnctl-28"},"Terranetes CLI (tnctl)"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-darwin-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-darwin-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-darwin-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-darwin-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-linux-amd64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-linux-amd64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-linux-arm64"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-linux-arm64")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-windows-amd64.exe"},"https://github.com/appvia/terranetes-controller/releases/download/v0.2.6/tnctl-windows-amd64.exe"))),(0,r.kt)("h3",{id:"new-features-5"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added a terranetes CLI (tnctl) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/187"},"http://github.com/appvia/terranetes-controller/pull/187")),(0,r.kt)("li",{parentName:"ul"},"Exposed the Costs and Policy evaluations to user by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/180"},"http://github.com/appvia/terranetes-controller/pull/180")),(0,r.kt)("li",{parentName:"ul"},"Added additional Executor Secrets by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/204"},"http://github.com/appvia/terranetes-controller/pull/204"))),(0,r.kt)("h3",{id:"bug-fixes-6"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Changed the default port for the webhooks to 10250 which by default is available for callback on most cloud vendored kubernetes by @gambol99 in by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/206"},"http://github.com/appvia/terranetes-controller/pull/206"))),(0,r.kt)("h3",{id:"whats-changed-28"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Fixing LFAGS (#212) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/212"},"http://github.com/appvia/terranetes-controller/pull/212")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - CLI Docs Generation (#210) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/210"},"http://github.com/appvia/terranetes-controller/pull/210")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Generate CLI Docs (#208) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/208"},"http://github.com/appvia/terranetes-controller/pull/208")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Workflow Creation (#207) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/207"},"http://github.com/appvia/terranetes-controller/pull/207")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Additional Controller Secrets (#204) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/204"},"http://github.com/appvia/terranetes-controller/pull/204")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - CLI Configuration Override (#203) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/203"},"http://github.com/appvia/terranetes-controller/pull/203")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Terraform Registry Namespace (#202) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/202"},"http://github.com/appvia/terranetes-controller/pull/202")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Sensitive Inputs (#201) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/201"},"http://github.com/appvia/terranetes-controller/pull/201")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Terranetes Search CLI by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/187"},"http://github.com/appvia/terranetes-controller/pull/187")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Github Repository Listing by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/198"},"http://github.com/appvia/terranetes-controller/pull/198")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Infracost Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/199"},"http://github.com/appvia/terranetes-controller/pull/199")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Costs on Pull Requests by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/197"},"http://github.com/appvia/terranetes-controller/pull/197")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Fixing Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/195"},"http://github.com/appvia/terranetes-controller/pull/195")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Adding the Workflow ID by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/196"},"http://github.com/appvia/terranetes-controller/pull/196")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Run on Merge by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/194"},"http://github.com/appvia/terranetes-controller/pull/194")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Dropping the Readme Check by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/193"},"http://github.com/appvia/terranetes-controller/pull/193")),(0,r.kt)("li",{parentName:"ul"},"[CLI]"," - Removing Questions by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/192"},"http://github.com/appvia/terranetes-controller/pull/192")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Adding Checkov Example by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/191"},"http://github.com/appvia/terranetes-controller/pull/191")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Fixing Handler Lookup (#190) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/190"},"http://github.com/appvia/terranetes-controller/pull/190")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Terranetes CLI (#187) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/187"},"http://github.com/appvia/terranetes-controller/pull/187")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump sigs.k8s.io/controller-tools from 0.9.1 to 0.9.2 (#189) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/189"},"http://github.com/appvia/terranetes-controller/pull/189")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump github.com/stretchr/testify from 1.7.5 to 1.8.0 (#188) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/188"},"http://github.com/appvia/terranetes-controller/pull/188")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump sigs.k8s.io/controller-tools from 0.9.0 to 0.9.1 (#186) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/186"},"http://github.com/appvia/terranetes-controller/pull/186")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump sigs.k8s.io/controller-runtime from 0.12.1 to 0.12.2 (#185) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/185"},"http://github.com/appvia/terranetes-controller/pull/185")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump github.com/stretchr/testify from 1.7.4 to 1.7.5 (#184) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/184"},"http://github.com/appvia/terranetes-controller/pull/184")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump github.com/stretchr/testify from 1.7.2 to 1.7.4 (#181) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/181"},"http://github.com/appvia/terranetes-controller/pull/181")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Helm Chart Linting (#183) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/183"},"http://github.com/appvia/terranetes-controller/pull/183")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump github.com/spf13/cobra from 1.4.0 to 1.5.0 (#182) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/182"},"http://github.com/appvia/terranetes-controller/pull/182")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Exposing Integrations (#180) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/180"},"http://github.com/appvia/terranetes-controller/pull/180")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump k8s.io/apiextensions-apiserver from 0.24.1 to 0.24.2 (#176) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/176"},"http://github.com/appvia/terranetes-controller/pull/176")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump k8s.io/code-generator from 0.24.1 to 0.24.2 (#177) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/177"},"http://github.com/appvia/terranetes-controller/pull/177")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump k8s.io/client-go from 0.24.1 to 0.24.2 (#175) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/175"},"http://github.com/appvia/terranetes-controller/pull/175")),(0,r.kt)("li",{parentName:"ul"},"[IMAGES]"," - Image Versions (#174) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/174"},"http://github.com/appvia/terranetes-controller/pull/174")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Improvements to E2E (#173) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/173"},"http://github.com/appvia/terranetes-controller/pull/173")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," Bump k8s.io/apiextensions-apiserver from 0.24.0 to 0.24.1 (#169) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/169"},"http://github.com/appvia/terranetes-controller/pull/169")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Update README.md (#209) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/209"},"http://github.com/appvia/terranetes-controller/pull/209")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Webhooks Port (#206) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/206"},"http://github.com/appvia/terranetes-controller/pull/206")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Controller Version (#170) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/170"},"http://github.com/appvia/terranetes-controller/pull/170")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - CHart Version v0.2.12 (#168) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"http://github.com/appvia/terranetes-controller/pull/168"},"http://github.com/appvia/terranetes-controller/pull/168"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.5...v0.2.6"},"https://github.com/appvia/terranetes-controller/compare/v0.2.5...v0.2.6")),(0,r.kt)("h2",{id:"release-v025"},"Release v0.2.5"),(0,r.kt)("h3",{id:"bug-fixes-7"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Configuration Secrets Removal"),": the configuration secret in the controller namespace were not being deleted on deletion of the Configuration, fixed by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/165"},"https://github.com/appvia/terranetes-controller/pull/165"))),(0,r.kt)("h3",{id:"whats-changed-29"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[E2E]"," Infracost E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/161"},"https://github.com/appvia/terranetes-controller/pull/161")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release v0.2.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/162"},"https://github.com/appvia/terranetes-controller/pull/162")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Deployment Key Secret by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/163"},"https://github.com/appvia/terranetes-controller/pull/163")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Bumping the Infracost Version to v0.10.3 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/164"},"https://github.com/appvia/terranetes-controller/pull/164")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Ensuring Removal of Configuration Secrets by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/165"},"https://github.com/appvia/terranetes-controller/pull/165")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release for v0.2.5 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/167"},"https://github.com/appvia/terranetes-controller/pull/167"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.4...v0.2.5"},"https://github.com/appvia/terranetes-controller/compare/v0.2.4...v0.2.5")),(0,r.kt)("h2",{id:"release-v024"},"Release v0.2.4"),(0,r.kt)("h3",{id:"new-features-6"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Provider Configuration"),": you can now specify additional configuration to the terraform providers via spec.configuration by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/154"},"https://github.com/appvia/terranetes-controller/pull/154"))),(0,r.kt)("h3",{id:"bug-fixes-8"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Configuration Authentication"),": fixed a bug when using a source that required authentication by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/159"},"https://github.com/appvia/terranetes-controller/pull/159")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"SSH Key"),": fixed a bug in the source command that was incorrectly processing the ref options by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/159"},"https://github.com/appvia/terranetes-controller/pull/159")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Prometheus Metrics"),": the helm chart was accidently adding prometheus metrics twice, helm ignored this but flux through issues, fix by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/162"},"https://github.com/appvia/terranetes-controller/pull/162"))),(0,r.kt)("h3",{id:"whats-changed-30"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Chart Version v0.2.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/162"},"https://github.com/appvia/terranetes-controller/pull/162")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Private Repositories & SSH Key by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/156"},"https://github.com/appvia/terranetes-controller/pull/156")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Provider Configuration by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/154"},"https://github.com/appvia/terranetes-controller/pull/154")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Configuration Authentication by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/159"},"https://github.com/appvia/terranetes-controller/pull/159"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.3...v0.2.4"},"https://github.com/appvia/terranetes-controller/compare/v0.2.3...v0.2.4")),(0,r.kt)("h2",{id:"release-v023"},"Release v0.2.3"),(0,r.kt)("h3",{id:"new-features-7"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Expanded the provider list to include the official providers, by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/149"},"https://github.com/appvia/terranetes-controller/pull/149"))),(0,r.kt)("h3",{id:"whats-changed-31"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Release Helm Chart v0.2.2 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/148"},"https://github.com/appvia/terranetes-controller/pull/148")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Provider List by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/149"},"https://github.com/appvia/terranetes-controller/pull/149"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.2...v0.2.3"},"https://github.com/appvia/terranetes-controller/compare/v0.2.2...v0.2.3")),(0,r.kt)("h2",{id:"release-v022"},"Release v0.2.2"),(0,r.kt)("h3",{id:"bug-fixes-9"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Checkov Results by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/146"},"https://github.com/appvia/terranetes-controller/pull/146"))),(0,r.kt)("h3",{id:"whats-changed-32"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[TESTS]"," - Configuration Controller Unit Tests by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/143"},"https://github.com/appvia/terranetes-controller/pull/143")),(0,r.kt)("li",{parentName:"ul"},"Use GHCR by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/127"},"https://github.com/appvia/terranetes-controller/pull/127")),(0,r.kt)("li",{parentName:"ul"},"[LOGGING]"," - Display the version by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/144"},"https://github.com/appvia/terranetes-controller/pull/144")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Checkov Results by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/146"},"https://github.com/appvia/terranetes-controller/pull/146")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Update README.md by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/147"},"https://github.com/appvia/terranetes-controller/pull/147"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.1...v0.2.2"},"https://github.com/appvia/terranetes-controller/compare/v0.2.1...v0.2.2")),(0,r.kt)("h2",{id:"release-v021"},"Release v0.2.1"),(0,r.kt)("h3",{id:"bug-fixes-10"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixing a bug in the parsing of the infracost report which was introduced in v0.1.6 release by ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/96"},"https://github.com/appvia/terranetes-controller/pull/96"),". We were expecting a float64 when actually it's a string")),(0,r.kt)("h3",{id:"whats-changed-33"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Helm Release for v0.2.0 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/137"},"https://github.com/appvia/terranetes-controller/pull/137"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.2.0...v0.2.1"},"https://github.com/appvia/terranetes-controller/compare/v0.2.0...v0.2.1")),(0,r.kt)("h2",{id:"release-v020"},"Release v0.2.0"),(0,r.kt)("h3",{id:"new-features-8"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Provider Scope moved to Cluster")," has been moved to teh cluster scope and away from a namespace resource. ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/116"},"#116")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Drift Detection")," provides the ability to automatically detect configurations which have drifted from the expected state ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/131"},"#131")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Adding Terraform Version to Status")," is not exporsed on the terraform state ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/131"},"#131")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Overall Configuration State")," now provides a synchronization overview of the configuration.")),(0,r.kt)("h3",{id:"bug-fixes-11"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Approval Annotation by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/133"},"https://github.com/appvia/terranetes-controller/pull/133")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Fixing Method Name Typo by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/121"},"https://github.com/appvia/terranetes-controller/pull/121"))),(0,r.kt)("h3",{id:"migration-required"},"Migration Required"),(0,r.kt)("p",null,"Would involve deleting all the current providers, their CRD and them applying them again without the namespace."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# scope the deployment down\n$ kubectl -n terraform-system scale deployment terranetes-controller --replicas=0\n# delete the old provider\n$ kubectl -n terraform-system get provider -o yaml > saved.1\n# Deploy the v0.1.7 version, just change the replicas to 0\n$ vim # change the top replicaCount -> replicaCount: 0\n# Perform the upgrade - no changes to the configurations are required. The namespace field in the spec.providerRef is simply ignored.\n$ helm upgrade -n terraform-system terranetes-controller appvia/terranetes-controller --values \n# Apply the providers again\n$ kubectl apply -f saved.1\n# Change the replicaCount back to 1 and rerun the helm upgrade\n")),(0,r.kt)("h3",{id:"whats-changed-34"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Provider Scope moved to Cluster by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/116"},"https://github.com/appvia/terranetes-controller/pull/116")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - CI Workflow by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/135"},"https://github.com/appvia/terranetes-controller/pull/135")),(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Drift Detection E2E by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/134"},"https://github.com/appvia/terranetes-controller/pull/134")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Approval Annotation by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/133"},"https://github.com/appvia/terranetes-controller/pull/133")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Drift Detection by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/131"},"https://github.com/appvia/terranetes-controller/pull/131")),(0,r.kt)("li",{parentName:"ul"},"[GENERAL]"," - Moving Utility Method into common by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/130"},"https://github.com/appvia/terranetes-controller/pull/130")),(0,r.kt)("li",{parentName:"ul"},"[CLEAN]"," - Template Unit Tests by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/129"},"https://github.com/appvia/terranetes-controller/pull/129")),(0,r.kt)("li",{parentName:"ul"},"[LOGGING]"," - Condition Logging by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/128"},"https://github.com/appvia/terranetes-controller/pull/128")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump gotest.tools/gotestsum from 1.8.0 to 1.8.1 by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/126"},"https://github.com/appvia/terranetes-controller/pull/126")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Terraform Version to Status by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/124"},"https://github.com/appvia/terranetes-controller/pull/124")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Linting Timeout"),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Clean Status by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/122"},"https://github.com/appvia/terranetes-controller/pull/122")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Fixing Method Name Typo by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/121"},"https://github.com/appvia/terranetes-controller/pull/121")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Labels to Executors"),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Pod Labels by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/119"},"https://github.com/appvia/terranetes-controller/pull/119")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump github.com/stretchr/testify from 1.7.1 to 1.7.2 by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/117"},"https://github.com/appvia/terranetes-controller/pull/117")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump mvdan.cc/sh/v3 from 3.4.3 to 3.5.1 by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/108"},"https://github.com/appvia/terranetes-controller/pull/108")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump k8s.io/code-generator from 0.24.0 to 0.24.1 by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/107"},"https://github.com/appvia/terranetes-controller/pull/107")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump github.com/golangci/golangci-lint from 1.45.2 to 1.46.2 ","[#97]",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/97"},"https://github.com/appvia/terranetes-controller/pull/97")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump github.com/evanphx/json-patch from 4.12.0+incompatible to 5.6.0+incompatible by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/109"},"https://github.com/appvia/terranetes-controller/pull/109")),(0,r.kt)("li",{parentName:"ul"},"[DEPENDABOT]"," - Bump github.com/felixge/httpsnoop from 1.0.2 to 1.0.3 by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/110"},"https://github.com/appvia/terranetes-controller/pull/110")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Development Docs by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/136"},"https://github.com/appvia/terranetes-controller/pull/136")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Readme Change by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/118"},"https://github.com/appvia/terranetes-controller/pull/118")),(0,r.kt)("li",{parentName:"ul"},"[API]"," - Description on API Types by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/114"},"https://github.com/appvia/terranetes-controller/pull/114")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Dependabot Target Branch by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/113"},"https://github.com/appvia/terranetes-controller/pull/113")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Updating Architecture Image by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/115"},"https://github.com/appvia/terranetes-controller/pull/115")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Latest Workflow Change by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/112"},"https://github.com/appvia/terranetes-controller/pull/112")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - ","[DEPENDABOT]"," - Bumping Version of Chart by @gambol99 ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/111"},"https://github.com/appvia/terranetes-controller/pull/111"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.6...v0.2.0"},"https://github.com/appvia/terranetes-controller/compare/v0.1.6...v0.2.0")),(0,r.kt)("h2",{id:"release-v016"},"Release v0.1.6"),(0,r.kt)("h3",{id:"new-features-9"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Configuration Cost Metrics")," adds the predicted costs of the configuration as exposed prometheus metrics; by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/96"},"https://github.com/appvia/terranetes-controller/pull/96")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"ValueFrom fields")," allows to source sensitive variables from kubernetes secrets rather exposing on the spec; by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/103"},"https://github.com/appvia/terranetes-controller/pull/103"))),(0,r.kt)("h3",{id:"bug-fixes-12"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Terraform State Decoding by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/104"},"https://github.com/appvia/terranetes-controller/pull/104")),(0,r.kt)("li",{parentName:"ul"},"Exposing the Metrics by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/95"},"https://github.com/appvia/terranetes-controller/pull/95")),(0,r.kt)("li",{parentName:"ul"},"Adding the UID Labels - adding the UIDs on the labels for resources to make pinpointing the source configuration easier. By @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/100"},"https://github.com/appvia/terranetes-controller/pull/100"))),(0,r.kt)("h3",{id:"whats-changed-35"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Adding Dependabot Config by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/70"},"https://github.com/appvia/terranetes-controller/pull/70")),(0,r.kt)("li",{parentName:"ul"},"Bump github.com/onsi/gomega from 1.18.1 to 1.19.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/71"},"https://github.com/appvia/terranetes-controller/pull/71")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Changing Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/83"},"https://github.com/appvia/terranetes-controller/pull/83")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Minior Changes by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/84"},"https://github.com/appvia/terranetes-controller/pull/84")),(0,r.kt)("li",{parentName:"ul"},"[BUILD]"," - Ginkgo Update by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/80"},"https://github.com/appvia/terranetes-controller/pull/80")),(0,r.kt)("li",{parentName:"ul"},"Update features in README linking to docs by @KashifSaadat in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/81"},"https://github.com/appvia/terranetes-controller/pull/81")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Adding Architecture Image by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/85"},"https://github.com/appvia/terranetes-controller/pull/85")),(0,r.kt)("li",{parentName:"ul"},"Update README.md by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/87"},"https://github.com/appvia/terranetes-controller/pull/87")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Ignore Existing Releases by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/88"},"https://github.com/appvia/terranetes-controller/pull/88")),(0,r.kt)("li",{parentName:"ul"},"Update README.md by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/89"},"https://github.com/appvia/terranetes-controller/pull/89")),(0,r.kt)("li",{parentName:"ul"},"lookup bash executable instead by @myjaffoo in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/90"},"https://github.com/appvia/terranetes-controller/pull/90")),(0,r.kt)("li",{parentName:"ul"},"Bump sigs.k8s.io/controller-tools from 0.8.0 to 0.9.0 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/92"},"https://github.com/appvia/terranetes-controller/pull/92")),(0,r.kt)("li",{parentName:"ul"},"Bump gotest.tools/gotestsum from 1.8.0 to 1.8.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/91"},"https://github.com/appvia/terranetes-controller/pull/91")),(0,r.kt)("li",{parentName:"ul"},"Bump k8s.io/client-go from 0.23.5 to 0.24.1 by @dependabot in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/78"},"https://github.com/appvia/terranetes-controller/pull/78")),(0,r.kt)("li",{parentName:"ul"},"[DEPS]"," - Updating the Dependencies by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/94"},"https://github.com/appvia/terranetes-controller/pull/94")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Terraform State Decoding by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/104"},"https://github.com/appvia/terranetes-controller/pull/104")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bumping Application Version by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/106"},"https://github.com/appvia/terranetes-controller/pull/106")),(0,r.kt)("li",{parentName:"ul"},"[RELEASE]"," - Release v0.1.6 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/86"},"https://github.com/appvia/terranetes-controller/pull/86"))),(0,r.kt)("h3",{id:"new-contributors-1"},"New Contributors"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"@KashifSaadat made their first contribution in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/81"},"https://github.com/appvia/terranetes-controller/pull/81")),(0,r.kt)("li",{parentName:"ul"},"@myjaffoo made their first contribution in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/90"},"https://github.com/appvia/terranetes-controller/pull/90"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.5...v0.1.6"},"https://github.com/appvia/terranetes-controller/compare/v0.1.5...v0.1.6")),(0,r.kt)("h2",{id:"release-v015"},"Release v0.1.5"),(0,r.kt)("h3",{id:"build-1"},"Build"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed up the chart directory structure in order to properly support the helm tools and deployment ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/67"},"#67"))),(0,r.kt)("h3",{id:"whats-changed-36"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Directory Structure by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/67"},"https://github.com/appvia/terranetes-controller/pull/67")),(0,r.kt)("li",{parentName:"ul"},"[HELM]"," - Bumping Helm Releaser Version by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/68"},"https://github.com/appvia/terranetes-controller/pull/68"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.4...v0.1.5"},"https://github.com/appvia/terranetes-controller/compare/v0.1.4...v0.1.5")),(0,r.kt)("h2",{id:"release-v014"},"Release v0.1.4"),(0,r.kt)("h3",{id:"new-features-10"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Disable Terraform Version Override ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/50"},"#50")," Currently all configurations have the ability to override the terraform version on their spec (this effectively overrides the terraform image tag). There might be times where you want this disabled though. This PR adds the ability to the platform teams to switch off the feature (which is enabled by default)."),(0,r.kt)("li",{parentName:"ul"},"Module Selector (#58): The current module constraint is global, adding a selector here you can target specific resources or namespaces and provides a means for additional permissions. Note as with all selectors here, a empty selector indicates it applies to all."),(0,r.kt)("li",{parentName:"ul"},"External Checks for Checkov ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/64"},"#64"),": Adding the ability to source in external checks to be included in the scan.")),(0,r.kt)("h3",{id:"build-2"},"Build"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Workflow Speed ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/61"},"#61"),": sped up the execution time of the images by breaking them up"),(0,r.kt)("li",{parentName:"ul"},"Deduplicating the E2E ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/63"},"#63"),": Much of the E2E is the we can dedup the workflow and reuse across all the providers"),(0,r.kt)("li",{parentName:"ul"},"Constraint Checks ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/65"},"#65"),": adding Constraint Checks"),(0,r.kt)("li",{parentName:"ul"},"Added E2E for Azure"),(0,r.kt)("li",{parentName:"ul"},"Adding E2E for Google ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/issues/42"},"#42"))),(0,r.kt)("h3",{id:"whats-changed-37"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[E2E]"," - Adding Azure E2E by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/54"},"https://github.com/appvia/terranetes-controller/pull/54")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Resource Lock by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/57"},"https://github.com/appvia/terranetes-controller/pull/57")),(0,r.kt)("li",{parentName:"ul"},"[RELEASE]"," v0.1.4 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/59"},"https://github.com/appvia/terranetes-controller/pull/59"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.3...v0.1.4"},"https://github.com/appvia/terranetes-controller/compare/v0.1.3...v0.1.4")),(0,r.kt)("h2",{id:"release-v013"},"Release v0.1.3"),(0,r.kt)("h3",{id:"bug-fixes-13"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed an issue with the API type for Provider. An enum was stopping an Azure provider from being added as it had ",(0,r.kt)("inlineCode",{parentName:"li"},"azure")," not ",(0,r.kt)("inlineCode",{parentName:"li"},"azurerm")," defined. ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/51"},"https://github.com/appvia/terranetes-controller/pull/51"))),(0,r.kt)("h3",{id:"whats-changed-38"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Reuse E2E Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/46"},"https://github.com/appvia/terranetes-controller/pull/46")),(0,r.kt)("li",{parentName:"ul"},"Update README.md by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/48"},"https://github.com/appvia/terranetes-controller/pull/48")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Fixing the README links by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/49"},"https://github.com/appvia/terranetes-controller/pull/49")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Provider Enum on API Types by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/51"},"https://github.com/appvia/terranetes-controller/pull/51"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.2...v0.1.3"},"https://github.com/appvia/terranetes-controller/compare/v0.1.2...v0.1.3")),(0,r.kt)("h2",{id:"release-v012"},"Release v0.1.2"),(0,r.kt)("h3",{id:"new-features-11"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"RBAC Support"),": Added support for RBAC on the Providers. This allows platform teams to specify a collection of selectors which are used to match namespace and resource labels to determine if the Configuration is permitted to use it. Click ",(0,r.kt)("a",{parentName:"li",href:"https://terranetes-controller.appvia.io/admin/providers#configure-rbac-for-providers"},"here")," for full details ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/29"},"https://github.com/appvia/terranetes-controller/pull/29")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Connection Secret Keys"),": added the ability for Configuration's to filter which keys from the terraform ouput they want to see in the connection secret. Click ",(0,r.kt)("a",{parentName:"li",href:"https://terranetes-controller.appvia.io/admin/providers"},"here")," for details. ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/34"},"https://github.com/appvia/terranetes-controller/pull/34")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("strong",{parentName:"li"},"Kubernetes Events"),": crucial events were being recorded in the status conditions only. This change raises those same conditions as Kubernetes events themselves which can be used to trigger off notifications. ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/31"},"https://github.com/appvia/terranetes-controller/pull/31"))),(0,r.kt)("h3",{id:"bug-fixes-14"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixed an issue where the service account from the provider was not correctly being set on the terraform ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/35"},"https://github.com/appvia/terranetes-controller/pull/35"))),(0,r.kt)("h3",{id:"documentation-1"},"Documentation"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Added a additional docs on the types types ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/26"},"https://github.com/appvia/terranetes-controller/pull/26")),(0,r.kt)("li",{parentName:"ul"},"Updated the repository readme ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/25"},"https://github.com/appvia/terranetes-controller/pull/25"))),(0,r.kt)("h3",{id:"whats-changed-39"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," Updating the README by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/25"},"https://github.com/appvia/terranetes-controller/pull/25")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," Updating the API Documentation by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/26"},"https://github.com/appvia/terranetes-controller/pull/26")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - E2E Workflow by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/33"},"https://github.com/appvia/terranetes-controller/pull/33")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Provider Service Accounts by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/35"},"https://github.com/appvia/terranetes-controller/pull/35")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Adding License File by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/38"},"https://github.com/appvia/terranetes-controller/pull/38")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Dependency Review by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/37"},"https://github.com/appvia/terranetes-controller/pull/37")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Connection Secret Keys by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/34"},"https://github.com/appvia/terranetes-controller/pull/34")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Kubernetes Events by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/31"},"https://github.com/appvia/terranetes-controller/pull/31")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Provider RBAC by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/29"},"https://github.com/appvia/terranetes-controller/pull/29")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Dependency Check by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/44"},"https://github.com/appvia/terranetes-controller/pull/44")),(0,r.kt)("li",{parentName:"ul"},"[RELEASE]"," - Version v0.1.2 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/45"},"https://github.com/appvia/terranetes-controller/pull/45"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.1...v0.1.2"},"https://github.com/appvia/terranetes-controller/compare/v0.1.1...v0.1.2")),(0,r.kt)("h2",{id:"release-v011"},"Release v0.1.1"),(0,r.kt)("h3",{id:"features-1"},"Features"),(0,r.kt)("p",null,"Introduced the ability for the platform administrators to enforce a security profile against the terraform modules."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-YAML"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: checkov\nspec:\n constraints:\n checkov:\n # See: https://www.checkov.io/5.Policy%20Index/terraform.html\n checks: []\n # See: https://www.checkov.io/5.Policy%20Index/terraform.html\n skipChecks: []\n")),(0,r.kt)("p",null,"Where necessary an exception can be added, targetting by namespace and resource labels; which will override the above."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-YAML"},"---\n# Create an exception to the above policy and force configurations\n# in the specific namespace to use this instead\n---\napiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: checkov-override\nspec:\n constraints:\n checkov:\n selector:\n namespace:\n matchExpressions:\n - key: kubernetes.io/metadata.name\n operator: In\n values: [apps2]\n # See: https://www.checkov.io/5.Policy%20Index/terraform.html\n skipChecks:\n - \n")),(0,r.kt)("h3",{id:"whats-changed-40"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Fixing Github Workflow (Release) by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/18"},"https://github.com/appvia/terranetes-controller/pull/18")),(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Decreasing Backoff Limit by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/19"},"https://github.com/appvia/terranetes-controller/pull/19")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Development Readme by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/21"},"https://github.com/appvia/terranetes-controller/pull/21")),(0,r.kt)("li",{parentName:"ul"},"[FIX]"," - Supported Providers by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/22"},"https://github.com/appvia/terranetes-controller/pull/22")),(0,r.kt)("li",{parentName:"ul"},"[FEATURE]"," - Adding Checkov Security Policy by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/20"},"https://github.com/appvia/terranetes-controller/pull/20")),(0,r.kt)("li",{parentName:"ul"},"Release v0.1.1 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/23"},"https://github.com/appvia/terranetes-controller/pull/23")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Fixing the Release Step by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/24"},"https://github.com/appvia/terranetes-controller/pull/24"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.1.0...v0.1.1"},"https://github.com/appvia/terranetes-controller/compare/v0.1.0...v0.1.1")),(0,r.kt)("h2",{id:"release-v010"},"Release v0.1.0"),(0,r.kt)("h3",{id:"new-features-12"},"New Features"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Changed to use multiple containers within a job rather then baking a executor with all the dependencies. This opens up the ability to change the versions, images and so forth."),(0,r.kt)("li",{parentName:"ul"},"Added the ability to specify the terraform version in the configuration"),(0,r.kt)("li",{parentName:"ul"},"Added the ability to override the job template completely for customization")),(0,r.kt)("h3",{id:"bug-fixes-15"},"Bug Fixes"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Fixes a helm chart which was recreating the ca secret")),(0,r.kt)("h3",{id:"whats-changed-41"},"What's Changed"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"[BUGFIX]"," - Autogenerate Certificate by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/12"},"https://github.com/appvia/terranetes-controller/pull/12")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Executor Docs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/13"},"https://github.com/appvia/terranetes-controller/pull/13")),(0,r.kt)("li",{parentName:"ul"},"Release v0.1.0 by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/10"},"https://github.com/appvia/terranetes-controller/pull/10")),(0,r.kt)("li",{parentName:"ul"},"[CI]"," - Kind Installation by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/16"},"https://github.com/appvia/terranetes-controller/pull/16")),(0,r.kt)("li",{parentName:"ul"},"[DOCS]"," - Adding Administrative Docs by @gambol99 in ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/appvia/terranetes-controller/pull/17"},"https://github.com/appvia/terranetes-controller/pull/17"))),(0,r.kt)("p",null,(0,r.kt)("strong",{parentName:"p"},"Full Changelog"),": ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-controller/compare/v0.0.4...v0.1.0"},"https://github.com/appvia/terranetes-controller/compare/v0.0.4...v0.1.0")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/546350c5.44d3602a.js b/assets/js/546350c5.af39e6df.js similarity index 60% rename from assets/js/546350c5.44d3602a.js rename to assets/js/546350c5.af39e6df.js index 9ac6d69d..639856de 100644 --- a/assets/js/546350c5.44d3602a.js +++ b/assets/js/546350c5.af39e6df.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[3469],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,i=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),d=s(r),m=o,f=d["".concat(i,".").concat(m)]||d[m]||p[m]||l;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,c=new Array(l);c[0]=d;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:o,c[1]=a;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>p,frontMatter:()=>l,metadata:()=>a,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl get cloudresource"},c=void 0,a={unversionedId:"cli/tnctl_get_cloudresource",id:"cli/tnctl_get_cloudresource",title:"tnctl get cloudresource",description:"tnctl get cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_get_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_get_cloudresource",permalink:"/terranetes-controller/cli/tnctl_get_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl get",permalink:"/terranetes-controller/cli/tnctl_get"},next:{title:"tnctl get configuration",permalink:"/terranetes-controller/cli/tnctl_get_configuration"}},i={},s=[{value:"tnctl get cloudresource",id:"tnctl-get-cloudresource",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-get-cloudresource"},"tnctl get cloudresource"),(0,o.kt)("p",null,"Used to retrieve cloudresource/s from the cluster"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl get cloudresource [OPTIONS] [NAME] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -A, --all-namespaces Retrieve cloud resources from all namespaces\n -h, --help help for cloudresource\n -n, --namespace string Namespace to retrieve the resource from\n -o, --output string The output format. Supported formats are: json|yaml|wide\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources")))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[3469],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,i=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),d=s(r),m=o,f=d["".concat(i,".").concat(m)]||d[m]||p[m]||l;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,c=new Array(l);c[0]=d;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:o,c[1]=a;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>p,frontMatter:()=>l,metadata:()=>a,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl get cloudresource"},c=void 0,a={unversionedId:"cli/tnctl_get_cloudresource",id:"cli/tnctl_get_cloudresource",title:"tnctl get cloudresource",description:"tnctl get cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_get_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_get_cloudresource",permalink:"/terranetes-controller/cli/tnctl_get_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl get",permalink:"/terranetes-controller/cli/tnctl_get"},next:{title:"tnctl get configuration",permalink:"/terranetes-controller/cli/tnctl_get_configuration"}},i={},s=[{value:"tnctl get cloudresource",id:"tnctl-get-cloudresource",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-get-cloudresource"},"tnctl get cloudresource"),(0,o.kt)("p",null,"Used to retrieve cloudresource/s from the cluster"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl get cloudresource [OPTIONS] [NAME] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -A, --all-namespaces Retrieve cloud resources from all namespaces\n -h, --help help for cloudresource\n -n, --namespace string Namespace to retrieve the resource from\n -o, --output string The output format. Supported formats are: json|yaml|wide\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/58acc4cf.f8cc39f4.js b/assets/js/58acc4cf.47fa09cd.js similarity index 56% rename from assets/js/58acc4cf.f8cc39f4.js rename to assets/js/58acc4cf.47fa09cd.js index c641795a..5ec165e4 100644 --- a/assets/js/58acc4cf.f8cc39f4.js +++ b/assets/js/58acc4cf.47fa09cd.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[199],{3905:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>m});var r=n(7294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var c=r.createContext({}),s=function(t){var e=r.useContext(c),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},p=function(t){var e=s(t.components);return r.createElement(c.Provider,{value:e},t.children)},u={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},d=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,l=t.originalType,c=t.parentName,p=i(t,["components","mdxType","originalType","parentName"]),d=s(n),m=a,f=d["".concat(c,".").concat(m)]||d[m]||u[m]||l;return n?r.createElement(f,o(o({ref:e},p),{},{components:n})):r.createElement(f,o({ref:e},p))}));function m(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var c in e)hasOwnProperty.call(e,c)&&(i[c]=e[c]);i.originalType=t,i.mdxType="string"==typeof t?t:a,o[1]=i;for(var s=2;s{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const l={title:"tnctl state"},o=void 0,i={unversionedId:"cli/tnctl_state",id:"cli/tnctl_state",title:"tnctl state",description:"tnctl state",source:"@site/docs/terranetes-controller/cli/tnctl_state.md",sourceDirName:"cli",slug:"/cli/tnctl_state",permalink:"/terranetes-controller/cli/tnctl_state",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_state.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl state"},sidebar:"tutorialSidebar",previous:{title:"tnctl search",permalink:"/terranetes-controller/cli/tnctl_search"},next:{title:"tnctl state clean",permalink:"/terranetes-controller/cli/tnctl_state_clean"}},c={},s=[{value:"tnctl state",id:"tnctl-state",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(t){let{components:e,...n}=t;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"tnctl-state"},"tnctl state"),(0,a.kt)("p",null,"Used to manage the Terraform Configuration state secrets"),(0,a.kt)("h3",{id:"synopsis"},"Synopsis"),(0,a.kt)("p",null,"When using the kubernetes backend to store the terraform state, this\ncommand provides the ability to list, clean and match up state secrets\nagainst the Configuration CRD which are using them."),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"}," -h, --help help for state\n")),(0,a.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,a.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_state_clean"},"tnctl state clean"),"\t - Cleans any orphaned state, cost, config or policy secrets"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_state_list"},"tnctl state list"),"\t - Listing all the configurations in the cluster and the current state")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[199],{3905:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>m});var r=n(7294);function a(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}var c=r.createContext({}),s=function(t){var e=r.useContext(c),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},p=function(t){var e=s(t.components);return r.createElement(c.Provider,{value:e},t.children)},u={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},d=r.forwardRef((function(t,e){var n=t.components,a=t.mdxType,l=t.originalType,c=t.parentName,p=i(t,["components","mdxType","originalType","parentName"]),d=s(n),m=a,f=d["".concat(c,".").concat(m)]||d[m]||u[m]||l;return n?r.createElement(f,o(o({ref:e},p),{},{components:n})):r.createElement(f,o({ref:e},p))}));function m(t,e){var n=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var l=n.length,o=new Array(l);o[0]=d;var i={};for(var c in e)hasOwnProperty.call(e,c)&&(i[c]=e[c]);i.originalType=t,i.mdxType="string"==typeof t?t:a,o[1]=i;for(var s=2;s{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const l={title:"tnctl state"},o=void 0,i={unversionedId:"cli/tnctl_state",id:"cli/tnctl_state",title:"tnctl state",description:"tnctl state",source:"@site/docs/terranetes-controller/cli/tnctl_state.md",sourceDirName:"cli",slug:"/cli/tnctl_state",permalink:"/terranetes-controller/cli/tnctl_state",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_state.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl state"},sidebar:"tutorialSidebar",previous:{title:"tnctl search",permalink:"/terranetes-controller/cli/tnctl_search"},next:{title:"tnctl state clean",permalink:"/terranetes-controller/cli/tnctl_state_clean"}},c={},s=[{value:"tnctl state",id:"tnctl-state",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(t){let{components:e,...n}=t;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"tnctl-state"},"tnctl state"),(0,a.kt)("p",null,"Used to manage the Terraform Configuration state secrets"),(0,a.kt)("h3",{id:"synopsis"},"Synopsis"),(0,a.kt)("p",null,"When using the kubernetes backend to store the terraform state, this\ncommand provides the ability to list, clean and match up state secrets\nagainst the Configuration CRD which are using them."),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"}," -h, --help help for state\n")),(0,a.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,a.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_state_clean"},"tnctl state clean"),"\t - Cleans any orphaned state, cost, config or policy secrets"),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_state_list"},"tnctl state list"),"\t - Listing all the configurations in the cluster and the current state")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/593f57b8.f395b814.js b/assets/js/593f57b8.bac19727.js similarity index 51% rename from assets/js/593f57b8.f395b814.js rename to assets/js/593f57b8.bac19727.js index de71497d..4e626c81 100644 --- a/assets/js/593f57b8.f395b814.js +++ b/assets/js/593f57b8.bac19727.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2737],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var a=r.createContext({}),u=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(a.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,l=e.mdxType,o=e.originalType,a=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=l,b=d["".concat(a,".").concat(m)]||d[m]||s[m]||o;return n?r.createElement(b,c(c({ref:t},p),{},{components:n})):r.createElement(b,c({ref:t},p))}));function m(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=n.length,c=new Array(o);c[0]=d;var i={};for(var a in t)hasOwnProperty.call(t,a)&&(i[a]=t[a]);i.originalType=e,i.mdxType="string"==typeof e?e:l,c[1]=i;for(var u=2;u{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>s,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var r=n(7462),l=(n(7294),n(3905));const o={title:"tnctl kubectl plugin"},c=void 0,i={unversionedId:"cli/tnctl_kubectl_plugin",id:"cli/tnctl_kubectl_plugin",title:"tnctl kubectl plugin",description:"tnctl kubectl plugin",source:"@site/docs/terranetes-controller/cli/tnctl_kubectl_plugin.md",sourceDirName:"cli",slug:"/cli/tnctl_kubectl_plugin",permalink:"/terranetes-controller/cli/tnctl_kubectl_plugin",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_kubectl_plugin.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl kubectl plugin"},sidebar:"tutorialSidebar",previous:{title:"tnctl kubectl",permalink:"/terranetes-controller/cli/tnctl_kubectl"},next:{title:"tnctl logs",permalink:"/terranetes-controller/cli/tnctl_logs"}},a={},u=[{value:"tnctl kubectl plugin",id:"tnctl-kubectl-plugin",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:u};function s(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-kubectl-plugin"},"tnctl kubectl plugin"),(0,l.kt)("p",null,"Generates the kubectl plugin integration"),(0,l.kt)("h3",{id:"synopsis"},"Synopsis"),(0,l.kt)("p",null,"This command is used to integrate the tnctl command as a kubectl\nplugin. It effectively generates a series of shortcuts that are\ncalled from kubectl. You need to ensure the scripts this command\ngenerates are included your $PATH, long with the location of the\ntnctl command."),(0,l.kt)("p",null,"Create the kubectl plugins (defaults to ${HOME}/bin)\n$ tnctl kubectl plugin"),(0,l.kt)("p",null,"Place the plugins scripts in another directory\n$ tnctl kubectl plugin -d ${GOPATH}/bin"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl kubectl plugin [OPTIONS] [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' -d, --directory string Directory to place the kubectl plugins shortcuts (default "/home/jest/bin")\n -h, --help help for plugin\n')),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_kubectl"},"tnctl kubectl"),"\t - Kubectl plugin related commands")))}s.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2737],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var a=r.createContext({}),u=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(a.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,l=e.mdxType,o=e.originalType,a=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=l,f=d["".concat(a,".").concat(m)]||d[m]||s[m]||o;return n?r.createElement(f,c(c({ref:t},p),{},{components:n})):r.createElement(f,c({ref:t},p))}));function m(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=n.length,c=new Array(o);c[0]=d;var i={};for(var a in t)hasOwnProperty.call(t,a)&&(i[a]=t[a]);i.originalType=e,i.mdxType="string"==typeof e?e:l,c[1]=i;for(var u=2;u{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>s,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var r=n(7462),l=(n(7294),n(3905));const o={title:"tnctl kubectl plugin"},c=void 0,i={unversionedId:"cli/tnctl_kubectl_plugin",id:"cli/tnctl_kubectl_plugin",title:"tnctl kubectl plugin",description:"tnctl kubectl plugin",source:"@site/docs/terranetes-controller/cli/tnctl_kubectl_plugin.md",sourceDirName:"cli",slug:"/cli/tnctl_kubectl_plugin",permalink:"/terranetes-controller/cli/tnctl_kubectl_plugin",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_kubectl_plugin.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl kubectl plugin"},sidebar:"tutorialSidebar",previous:{title:"tnctl kubectl",permalink:"/terranetes-controller/cli/tnctl_kubectl"},next:{title:"tnctl logs",permalink:"/terranetes-controller/cli/tnctl_logs"}},a={},u=[{value:"tnctl kubectl plugin",id:"tnctl-kubectl-plugin",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:u};function s(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-kubectl-plugin"},"tnctl kubectl plugin"),(0,l.kt)("p",null,"Generates the kubectl plugin integration"),(0,l.kt)("h3",{id:"synopsis"},"Synopsis"),(0,l.kt)("p",null,"This command is used to integrate the tnctl command as a kubectl\nplugin. It effectively generates a series of shortcuts that are\ncalled from kubectl. You need to ensure the scripts this command\ngenerates are included your $PATH, long with the location of the\ntnctl command."),(0,l.kt)("p",null,"Create the kubectl plugins (defaults to ${HOME}/bin)\n$ tnctl kubectl plugin"),(0,l.kt)("p",null,"Place the plugins scripts in another directory\n$ tnctl kubectl plugin -d ${GOPATH}/bin"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl kubectl plugin [OPTIONS] [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' -d, --directory string Directory to place the kubectl plugins shortcuts (default "/home/jest/bin")\n -h, --help help for plugin\n')),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_kubectl"},"tnctl kubectl"),"\t - Kubectl plugin related commands")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5b589de6.692f883a.js b/assets/js/5b589de6.692f883a.js new file mode 100644 index 00000000..09f6c53c --- /dev/null +++ b/assets/js/5b589de6.692f883a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[7533],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var i=r.createContext({}),p=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,l=e.mdxType,a=e.originalType,i=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),m=p(n),d=l,f=m["".concat(i,".").concat(d)]||m[d]||u[d]||a;return n?r.createElement(f,o(o({ref:t},s),{},{components:n})):r.createElement(f,o({ref:t},s))}));function d(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var a=n.length,o=new Array(a);o[0]=m;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:l,o[1]=c;for(var p=2;p{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>p});var r=n(7462),l=(n(7294),n(3905));const a={title:"tnctl get plan"},o=void 0,c={unversionedId:"cli/tnctl_get_plan",id:"cli/tnctl_get_plan",title:"tnctl get plan",description:"tnctl get plan",source:"@site/docs/terranetes-controller/cli/tnctl_get_plan.md",sourceDirName:"cli",slug:"/cli/tnctl_get_plan",permalink:"/terranetes-controller/cli/tnctl_get_plan",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get_plan.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get plan"},sidebar:"tutorialSidebar",previous:{title:"tnctl get context",permalink:"/terranetes-controller/cli/tnctl_get_context"},next:{title:"tnctl get policy",permalink:"/terranetes-controller/cli/tnctl_get_policy"}},i={},p=[{value:"tnctl get plan",id:"tnctl-get-plan",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function u(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-get-plan"},"tnctl get plan"),(0,l.kt)("p",null,"Used to retrieve plan/s from the cluster"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl get plan [OPTIONS] [NAME] [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"}," -A, --all-namespaces Retrieve cloud resources from all namespaces\n -h, --help help for plan\n -n, --namespace string Namespace to retrieve the resource from\n -o, --output string The output format. Supported formats are: json|yaml|wide\n")),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5b589de6.8e6634c4.js b/assets/js/5b589de6.8e6634c4.js deleted file mode 100644 index f3e1eac9..00000000 --- a/assets/js/5b589de6.8e6634c4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[7533],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var r=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var i=r.createContext({}),p=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,l=e.mdxType,o=e.originalType,i=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),d=p(n),m=l,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||o;return n?r.createElement(f,a(a({ref:t},s),{},{components:n})):r.createElement(f,a({ref:t},s))}));function m(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=n.length,a=new Array(o);a[0]=d;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:l,a[1]=c;for(var p=2;p{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>u,frontMatter:()=>o,metadata:()=>c,toc:()=>p});var r=n(7462),l=(n(7294),n(3905));const o={title:"tnctl get plan"},a=void 0,c={unversionedId:"cli/tnctl_get_plan",id:"cli/tnctl_get_plan",title:"tnctl get plan",description:"tnctl get plan",source:"@site/docs/terranetes-controller/cli/tnctl_get_plan.md",sourceDirName:"cli",slug:"/cli/tnctl_get_plan",permalink:"/terranetes-controller/cli/tnctl_get_plan",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get_plan.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get plan"},sidebar:"tutorialSidebar",previous:{title:"tnctl get context",permalink:"/terranetes-controller/cli/tnctl_get_context"},next:{title:"tnctl get policy",permalink:"/terranetes-controller/cli/tnctl_get_policy"}},i={},p=[{value:"tnctl get plan",id:"tnctl-get-plan",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function u(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-get-plan"},"tnctl get plan"),(0,l.kt)("p",null,"Used to retrieve plan/s from the cluster"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl get plan [OPTIONS] [NAME] [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"}," -A, --all-namespaces Retrieve cloud resources from all namespaces\n -h, --help help for plan\n -n, --namespace string Namespace to retrieve the resource from\n -o, --output string The output format. Supported formats are: json|yaml|wide\n")),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5eca4dc9.2d312a0c.js b/assets/js/5eca4dc9.2d312a0c.js deleted file mode 100644 index ba8a5f3a..00000000 --- a/assets/js/5eca4dc9.2d312a0c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6037],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(l[r]=e[r]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r])}return l}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,l=e.mdxType,a=e.originalType,i=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),f=s(r),m=l,d=f["".concat(i,".").concat(m)]||f[m]||u[m]||a;return r?n.createElement(d,o(o({ref:t},p),{},{components:r})):n.createElement(d,o({ref:t},p))}));function m(e,t){var r=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var a=r.length,o=new Array(a);o[0]=f;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:l,o[1]=c;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var n=r(7462),l=(r(7294),r(3905));const a={title:"tnctl"},o=void 0,c={unversionedId:"cli/tnctl",id:"cli/tnctl",title:"tnctl",description:"tnctl",source:"@site/docs/terranetes-controller/cli/tnctl.md",sourceDirName:"cli",slug:"/cli/tnctl",permalink:"/terranetes-controller/cli/tnctl",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl"},sidebar:"tutorialSidebar",previous:{title:"CLI Reference",permalink:"/terranetes-controller/category/cli-reference"},next:{title:"tnctl apply",permalink:"/terranetes-controller/cli/tnctl_apply"}},i={},s=[{value:"tnctl",id:"tnctl",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,l.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl"},"tnctl"),(0,l.kt)("p",null,"Terranetes CLI tool"),(0,l.kt)("h3",{id:"synopsis"},"Synopsis"),(0,l.kt)("p",null,"Provides a toolset for both the platform team and developers to work\nseemlessly with the terranetes framework. The CLI can be used to view,\napprove configurations, package up terraform modules for consumption and\npermit developers to search for resources to consume."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n -h, --help help for tnctl\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_apply"},"tnctl apply"),"\t - Used to apply from a file or stdin"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_approve"},"tnctl approve"),"\t - Approves either a configuration or cloudresource"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_completion"},"tnctl completion"),"\t - Generate the autocompletion script for the specified shell"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_config"},"tnctl config"),"\t - Used to manage the CLI configuration"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_convert"},"tnctl convert"),"\t - Used to convert between different formats"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_create"},"tnctl create"),"\t - Used to create a resource"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_delete"},"tnctl delete"),"\t - Used to delete resource by file or resource name"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_describe"},"tnctl describe"),"\t - Used to describe the current state of the configuration"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_kubectl"},"tnctl kubectl"),"\t - Kubectl plugin related commands"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_logs"},"tnctl logs"),"\t - Displays the latest logs for the resource"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_retry"},"tnctl retry"),"\t - Attempts to trigger the resource to retry"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_search"},"tnctl search"),"\t - Searches for cloud resources to consume"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_state"},"tnctl state"),"\t - Used to manage the Terraform Configuration state secrets"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_verify"},"tnctl verify"),"\t - Used to verify and validate resources")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5eca4dc9.6685c37d.js b/assets/js/5eca4dc9.6685c37d.js new file mode 100644 index 00000000..95719925 --- /dev/null +++ b/assets/js/5eca4dc9.6685c37d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6037],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(l[r]=e[r]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r])}return l}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,l=e.mdxType,a=e.originalType,i=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),f=s(r),m=l,d=f["".concat(i,".").concat(m)]||f[m]||u[m]||a;return r?n.createElement(d,o(o({ref:t},p),{},{components:r})):n.createElement(d,o({ref:t},p))}));function m(e,t){var r=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var a=r.length,o=new Array(a);o[0]=f;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:l,o[1]=c;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var n=r(7462),l=(r(7294),r(3905));const a={title:"tnctl"},o=void 0,c={unversionedId:"cli/tnctl",id:"cli/tnctl",title:"tnctl",description:"tnctl",source:"@site/docs/terranetes-controller/cli/tnctl.md",sourceDirName:"cli",slug:"/cli/tnctl",permalink:"/terranetes-controller/cli/tnctl",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl"},sidebar:"tutorialSidebar",previous:{title:"CLI Reference",permalink:"/terranetes-controller/category/cli-reference"},next:{title:"tnctl apply",permalink:"/terranetes-controller/cli/tnctl_apply"}},i={},s=[{value:"tnctl",id:"tnctl",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,l.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl"},"tnctl"),(0,l.kt)("p",null,"Terranetes CLI tool"),(0,l.kt)("h3",{id:"synopsis"},"Synopsis"),(0,l.kt)("p",null,"Provides a toolset for both the platform team and developers to work\nseemlessly with the terranetes framework. The CLI can be used to view,\napprove configurations, package up terraform modules for consumption and\npermit developers to search for resources to consume."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n -h, --help help for tnctl\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_apply"},"tnctl apply"),"\t - Used to apply from a file or stdin"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_approve"},"tnctl approve"),"\t - Approves either a configuration or cloudresource"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_completion"},"tnctl completion"),"\t - Generate the autocompletion script for the specified shell"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_config"},"tnctl config"),"\t - Used to manage the CLI configuration"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_convert"},"tnctl convert"),"\t - Used to convert between different formats"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_create"},"tnctl create"),"\t - Used to create a resource"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_delete"},"tnctl delete"),"\t - Used to delete resource by file or resource name"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_describe"},"tnctl describe"),"\t - Used to describe the current state of the configuration"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_kubectl"},"tnctl kubectl"),"\t - Kubectl plugin related commands"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_logs"},"tnctl logs"),"\t - Displays the latest logs for the resource"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_retry"},"tnctl retry"),"\t - Attempts to trigger the resource to retry"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_search"},"tnctl search"),"\t - Searches for cloud resources to consume"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_state"},"tnctl state"),"\t - Used to manage the Terraform Configuration state secrets"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_verify"},"tnctl verify"),"\t - Used to verify and validate resources")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/62d6a022.f56ec2b7.js b/assets/js/62d6a022.653fc16f.js similarity index 54% rename from assets/js/62d6a022.f56ec2b7.js rename to assets/js/62d6a022.653fc16f.js index 9996d57b..211197e5 100644 --- a/assets/js/62d6a022.f56ec2b7.js +++ b/assets/js/62d6a022.653fc16f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9217],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),f=s(n),g=o,d=f["".concat(c,".").concat(g)]||f[g]||p[g]||l;return n?r.createElement(d,i(i({ref:t},u),{},{components:n})):r.createElement(d,i({ref:t},u))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,i=new Array(l);i[0]=f;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a.mdxType="string"==typeof e?e:o,i[1]=a;for(var s=2;s{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>l,metadata:()=>a,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl logs configuration"},i=void 0,a={unversionedId:"cli/tnctl_logs_configuration",id:"cli/tnctl_logs_configuration",title:"tnctl logs configuration",description:"tnctl logs configuration",source:"@site/docs/terranetes-controller/cli/tnctl_logs_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_logs_configuration",permalink:"/terranetes-controller/cli/tnctl_logs_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_logs_configuration.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl logs configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl logs cloudresource",permalink:"/terranetes-controller/cli/tnctl_logs_cloudresource"},next:{title:"tnctl retry",permalink:"/terranetes-controller/cli/tnctl_retry"}},c={},s=[{value:"tnctl logs configuration",id:"tnctl-logs-configuration",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-logs-configuration"},"tnctl logs configuration"),(0,o.kt)("p",null,"Displays the latest logs for the given resource"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Retrieves and follows the logs from a cloudresource or native configuration"),(0,o.kt)("p",null,"Viewing the logs for a configuration\n$ tnctl logs configuration NAME --follow"),(0,o.kt)("p",null,"Viewing the logs for a cloudresource\n$ tnctl logs cloudresource NAME --follow"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl logs configuration NAME [OPTIONS] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -f, --follow Indicates we should follow the logs\n -h, --help help for configuration\n -n, --namespace string The namespace of the resource (default "default")\n --stage string Select the stage to show logs for, else defaults to the current state\n --timeout duration Indicates how long we should wait for logs to be available (default 3s)\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_logs"},"tnctl logs"),"\t - Displays the latest logs for the resource")))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9217],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),s=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=s(e.components);return r.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),f=s(n),g=o,d=f["".concat(c,".").concat(g)]||f[g]||p[g]||l;return n?r.createElement(d,i(i({ref:t},u),{},{components:n})):r.createElement(d,i({ref:t},u))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,i=new Array(l);i[0]=f;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a.mdxType="string"==typeof e?e:o,i[1]=a;for(var s=2;s{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>l,metadata:()=>a,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl logs configuration"},i=void 0,a={unversionedId:"cli/tnctl_logs_configuration",id:"cli/tnctl_logs_configuration",title:"tnctl logs configuration",description:"tnctl logs configuration",source:"@site/docs/terranetes-controller/cli/tnctl_logs_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_logs_configuration",permalink:"/terranetes-controller/cli/tnctl_logs_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_logs_configuration.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl logs configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl logs cloudresource",permalink:"/terranetes-controller/cli/tnctl_logs_cloudresource"},next:{title:"tnctl retry",permalink:"/terranetes-controller/cli/tnctl_retry"}},c={},s=[{value:"tnctl logs configuration",id:"tnctl-logs-configuration",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-logs-configuration"},"tnctl logs configuration"),(0,o.kt)("p",null,"Displays the latest logs for the given resource"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Retrieves and follows the logs from a cloudresource or native configuration"),(0,o.kt)("p",null,"Viewing the logs for a configuration\n$ tnctl logs configuration NAME --follow"),(0,o.kt)("p",null,"Viewing the logs for a cloudresource\n$ tnctl logs cloudresource NAME --follow"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl logs configuration NAME [OPTIONS] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -f, --follow Indicates we should follow the logs\n -h, --help help for configuration\n -n, --namespace string The namespace of the resource (default "default")\n --stage string Select the stage to show logs for, else defaults to the current state\n --timeout duration Indicates how long we should wait for logs to be available (default 3s)\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_logs"},"tnctl logs"),"\t - Displays the latest logs for the resource")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/65ae04a0.05f5dd15.js b/assets/js/65ae04a0.05f5dd15.js deleted file mode 100644 index a9023f76..00000000 --- a/assets/js/65ae04a0.05f5dd15.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6701],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(r),d=a,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||o;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:1},i="Provisioning a Resource",l={unversionedId:"developer/provision",id:"developer/provision",title:"Provisioning a Resource",description:"There are two interfaces for provisioning cloud resources in terranetes",source:"@site/docs/terranetes-controller/developer/provision.md",sourceDirName:"developer",slug:"/developer/provision",permalink:"/terranetes-controller/developer/provision",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/developer/provision.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Developer Docs",permalink:"/terranetes-controller/category/developer-docs"},next:{title:"Terranetes CLI",permalink:"/terranetes-controller/developer/tnctl"}},s={},p=[{value:"Example CloudResource",id:"example-cloudresource",level:2},{value:"1. Search the service currently available",id:"1-search-the-service-currently-available",level:3},{value:"2. View latest revision of the service",id:"2-view-latest-revision-of-the-service",level:3},{value:"3. Create a CloudResource from a revision",id:"3-create-a-cloudresource-from-a-revision",level:3},{value:"Example Configuration resource",id:"example-configuration-resource",level:2},{value:"Sections of the configuration resource",id:"sections-of-the-configuration-resource",level:2},{value:"Module reference",id:"module-reference",level:3},{value:"Provider reference",id:"provider-reference",level:3},{value:"Terraform variables",id:"terraform-variables",level:3}],c={toc:p};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"provisioning-a-resource"},"Provisioning a Resource"),(0,a.kt)("p",null,"There are two interfaces for provisioning cloud resources in terranetes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"The original ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," CRD."),(0,a.kt)("li",{parentName:"ul"},"The newer model of a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResource"),".")),(0,a.kt)("p",null,"The difference is largely around simplicity and control. While ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," are essentially a one-to-one mapping to the terraform module, the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," interface expose only a subset of the options, allowing platform teams to set defaults, inline their best practices, security or organizational policy. This arrangement has the added benefit of removing cognitive load surrounding the myriad of options a terraform module provides."),(0,a.kt)("h2",{id:"example-cloudresource"},"Example CloudResource"),(0,a.kt)("p",null,"Assuming ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," is being used,"),(0,a.kt)("h3",{id:"1-search-the-service-currently-available"},"1. Search the service currently available"),(0,a.kt)("p",null,"Query the cluster to discovery the resources available to self-serve."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl get plans\nNAME LATEST AGE\ndatabase v0.0.1 3s\n")),(0,a.kt)("h3",{id:"2-view-latest-revision-of-the-service"},"2. View latest revision of the service"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"kubectl get revision $(kubectl get plan database -o json | jq .status.latest.name -r) -o yaml\n")),(0,a.kt)("p",null,"The above will show you the options available on the plan."),(0,a.kt)("h3",{id:"3-create-a-cloudresource-from-a-revision"},"3. Create a CloudResource from a revision"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl create cloudresource database\n")),(0,a.kt)("h2",{id:"example-configuration-resource"},"Example Configuration resource"),(0,a.kt)("p",null,"Alternatively, if you are using ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations"),". Below is an example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'apiVersion: terraform.appvia.io/v1alpha1\nkind: Configuration\nmetadata:\n name: bucket\nspec:\n # ssh example: git::ssh://git@example.com/foo/bar\n module: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0\n\n providerRef:\n name: default\n\n writeConnectionSecretToRef:\n name: test\n\n # An optional reference to a secret containing credentials to retrieve\n # the git repository\n auth:\n name: \n\n # Terraform variables used to populate the module\n variables:\n # -- The name of the bucket. If omitted, Terraform will assign a random, unique name\n bucket: example-test-1234\n # -- The canned ACL to apply\n acl: private\n # -- Map containing versioning configuration\n versioning:\n enabled: true\n # --Whether Amazon S3 should block public ACLs for this bucket\n block_public_acls: true\n # -- Whether Amazon S3 should block public bucket policies for this bucket\n block_public_policy: true\n # -- Whether Amazon S3 should ignore public ACLs for this bucket\n ignore_public_acls: true\n # -- Whether Amazon S3 should restrict public bucket policies for this bucket\n restrict_public_buckets: true\n # -- Map containing server-side encryption configuration\n server_side_encryption_configuration:\n rule:\n apply_server_side_encryption_by_default:\n sse_algorithm: "aws:kms"\n bucket_key_enabled: true\n')),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"The source syntax ",(0,a.kt)("em",{parentName:"p"},"(spec.module)")," on releases ",(0,a.kt)("inlineCode",{parentName:"p"},"<= v0.2.5")," does not fully support suggested ",(0,a.kt)("a",{parentName:"p",href:"https://www.terraform.io/language/modules/sources#github"},"Github format"),". References to Github must use the ",(0,a.kt)("inlineCode",{parentName:"p"},"https://github.com/appvia/terraform-aws-rds?ref=TAG")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"git::ssh://git@github.com/appvia/terraform-aws-rds.git"),"."),(0,a.kt)("p",{parentName:"admonition"},"Following the syntax of ",(0,a.kt)("a",{parentName:"p",href:"https://www.terraform.io/language/modules/sources#generic-git-repository"},"Generic Git Repository"),".")),(0,a.kt)("h2",{id:"sections-of-the-configuration-resource"},"Sections of the configuration resource"),(0,a.kt)("p",null,"The configuration resource is comprised of the following sections."),(0,a.kt)("h3",{id:"module-reference"},"Module reference"),(0,a.kt)("p",null,"The module reference defines the source of the terraform module to run."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"The source reference uses the exact same format as terraform itself (the same library is used). For full details take a look at ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/hashicorp/go-getter"},"hashicorp/go-getter"),".")),(0,a.kt)("p",null,"For quick reference:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Using SSH the format would look like this: ",(0,a.kt)("inlineCode",{parentName:"li"},"git::ssh://git@example.com/foo/bar")),(0,a.kt)("li",{parentName:"ul"},"Using HTTPS the format would be: ",(0,a.kt)("inlineCode",{parentName:"li"},"https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0"))),(0,a.kt)("p",null,"You can also extract specific folders or files from the downloaded module by using the double slash: ",(0,a.kt)("inlineCode",{parentName:"p"},"[URL]//dir/file"),"."),(0,a.kt)("h3",{id:"provider-reference"},"Provider reference"),(0,a.kt)("p",null,"The provider reference is what links a configuration to the credentials used to speak to the cloud. Depending on the Kubernetes RBAC you currently posses you can retrieve a list of the current providers via ",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl get providers -n [NAMESPACE]\n")),(0,a.kt)("p",null,"Once you have the provider ",(0,a.kt)("inlineCode",{parentName:"p"},"name")," you use the reference in the configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n providerRef:\n name: \n")),(0,a.kt)("h3",{id:"terraform-variables"},"Terraform variables"),(0,a.kt)("p",null,"The variables section ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.variables")," is a free form map used to define all the variables the module can consume. These are converted to HCL and provided into the workflow via ",(0,a.kt)("inlineCode",{parentName:"p"},"-var-file")," on the ",(0,a.kt)("inlineCode",{parentName:"p"},"plan")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"apply")," stages."),(0,a.kt)("p",null,"For variables that are sensitive such as passwords it would be better to use the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.valueFrom")," field. This is a collection of references to kubernetes secrets that hold the values."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"ValueFrom fields is available from version >= v0.1.6\n::::"),(0,a.kt)("p",{parentName:"admonition"},"An example for an RDS module can be"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre"},"spec:\n valueFrom:\n - secret: db_password\n key: database_password\n optional: false\n")),(0,a.kt)("h3",{parentName:"admonition",id:"connection-secret-reference"},"Connection secret reference"),(0,a.kt)("p",{parentName:"admonition"},"The connection secret ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.writeConnectionSecretToRef")," is the name of a secret within the namespace where you want any Terraform outputs to be written. These outputs are converted to environment variable format, i.e., upper-cased and ready to be consumed by workloads using ",(0,a.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables"},"env and envFrom"),"."),(0,a.kt)("p",{parentName:"admonition"},"By default when a secret is defined all the outputs produced are written in environment variable form. If you want to filter this and only select specific keys from the terraform output you can include the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.writeConnectionSecretToRef.keys")," field as shown below."),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n writeConnectionSecretToRef:\n name: [NAME]\n keys:\n - name_of_key\n - name_of_key\n")),(0,a.kt)("h4",{parentName:"admonition",id:"secrets-remapping"},"Secrets Remapping"),(0,a.kt)("p",{parentName:"admonition"},"We use the resource outputs as the keys in the connection secret, so if a resource has a ",(0,a.kt)("inlineCode",{parentName:"p"},"database_endpoint")," output the secret will have a key named ",(0,a.kt)("inlineCode",{parentName:"p"},"DATABASE_ENDPOINT"),". You might want to rename one or more outputs for convenience however, for example change the ",(0,a.kt)("inlineCode",{parentName:"p"},"database_endpoint")," to ",(0,a.kt)("inlineCode",{parentName:"p"},"mysql_host"),". You can change the key like below"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Configuration|CloudResource\nmetadata:\n name: bucket\nspec:\n providerRef:\n name: aws\n writeConnectionSecretToRef:\n name: test\n keys:\n - database_endpoint:mysql_host # is renamed to MYSQL_HOST\n - database_port # is unchanged as DATABASE_PORT\n")),(0,a.kt)("h2",{parentName:"admonition",id:"viewing-the-changes"},"Viewing the changes"),(0,a.kt)("p",{parentName:"admonition"},"As a Configuration transitions through its plan, apply and destroy phases, a job is created in the namespace, and used to feedback the execution of the change. The jobs follows the naming format ",(0,a.kt)("inlineCode",{parentName:"p"},"[RESOURCE]-[GENERATION]-[plan|apply|destroy]"),". You can easily view the execution of a change by inspecting the pod's logs (",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl logs [POD]"),")."),(0,a.kt)("p",{parentName:"admonition"},"As an alternative to using kubectl commands, you can use ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/developer/tnctl"},"tnctl")," cli"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ tnctl logs -n NAMESPACE NAME\n")),(0,a.kt)("h2",{parentName:"admonition",id:"approving-a-plan"},"Approving a plan"),(0,a.kt)("p",{parentName:"admonition"},"By default, unless the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.enableAutoApproval")," is set to true, all Configurations require a manual approval. You can do this by toggling an annotation on the Configuration itself."),(0,a.kt)("p",{parentName:"admonition"},"To approve the Configuration or CloudResource ",(0,a.kt)("inlineCode",{parentName:"p"},"bucket"),":"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},'$ kubectl -n apps annotate configuration bucket "terraform.appvia.io/apply"=true --overwrite\n')),(0,a.kt)("p",{parentName:"admonition"},"Or"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},'$ kubectl -n apps annotate cloudresource bucket "terraform.appvia.io/apply"=true --overwrite\n')),(0,a.kt)("p",{parentName:"admonition"},"Or if using the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/developer/tnctl"},"tnctl")," cli, you can type"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ tnctl approve cloudresource|configuration -n NAMESPACE NAME\n")),(0,a.kt)("h2",{parentName:"admonition",id:"deleting-the-resource"},"Deleting the resource"),(0,a.kt)("p",{parentName:"admonition"},"You can delete the resource like any other Kubernetes resource (",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl delete configuration [NAME]"),"). One extra feature is the ability to orphan the cloud resources (i.e., delete the Kubernetes representation but DO NOT delete the cloud resources themselves)."),(0,a.kt)("p",{parentName:"admonition"},"For instance, you may need to migrate the configuration to another cluster. In that case:"),(0,a.kt)("ol",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ol"},"Annotate the Configuration with ",(0,a.kt)("inlineCode",{parentName:"li"},'kubectl annotate configuration [NAME] "terraform.appvia.io/orphan"=true')),(0,a.kt)("li",{parentName:"ol"},"Delete the Configuration resource as per normal. The resource will disappear but the cloud resources will remain."))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/65ae04a0.2d01e9e2.js b/assets/js/65ae04a0.2d01e9e2.js new file mode 100644 index 00000000..5c9c64e1 --- /dev/null +++ b/assets/js/65ae04a0.2d01e9e2.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6701],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),m=p(r),d=a,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||o;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:1},i="Provisioning a Resource",l={unversionedId:"developer/provision",id:"developer/provision",title:"Provisioning a Resource",description:"There are two interfaces for provisioning cloud resources in terranetes",source:"@site/docs/terranetes-controller/developer/provision.md",sourceDirName:"developer",slug:"/developer/provision",permalink:"/terranetes-controller/developer/provision",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/developer/provision.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Developer Docs",permalink:"/terranetes-controller/category/developer-docs"},next:{title:"Terranetes CLI",permalink:"/terranetes-controller/developer/tnctl"}},s={},p=[{value:"Example CloudResource",id:"example-cloudresource",level:2},{value:"1. Search the service currently available",id:"1-search-the-service-currently-available",level:3},{value:"2. View latest revision of the service",id:"2-view-latest-revision-of-the-service",level:3},{value:"3. Create a CloudResource from a revision",id:"3-create-a-cloudresource-from-a-revision",level:3},{value:"Example Configuration resource",id:"example-configuration-resource",level:2},{value:"Sections of the configuration resource",id:"sections-of-the-configuration-resource",level:2},{value:"Module reference",id:"module-reference",level:3},{value:"Provider reference",id:"provider-reference",level:3},{value:"Terraform variables",id:"terraform-variables",level:3}],c={toc:p};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"provisioning-a-resource"},"Provisioning a Resource"),(0,a.kt)("p",null,"There are two interfaces for provisioning cloud resources in terranetes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"The original ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," CRD."),(0,a.kt)("li",{parentName:"ul"},"The newer model of a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResource"),".")),(0,a.kt)("p",null,"The difference is largely around simplicity and control. While ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," are essentially a one-to-one mapping to the terraform module, the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," interface expose only a subset of the options, allowing platform teams to set defaults, inline their best practices, security or organizational policy. This arrangement has the added benefit of removing cognitive load surrounding the myriad of options a terraform module provides."),(0,a.kt)("h2",{id:"example-cloudresource"},"Example CloudResource"),(0,a.kt)("p",null,"Assuming ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," is being used,"),(0,a.kt)("h3",{id:"1-search-the-service-currently-available"},"1. Search the service currently available"),(0,a.kt)("p",null,"Query the cluster to discovery the resources available to self-serve."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl get plans\nNAME LATEST AGE\ndatabase v0.0.1 3s\n")),(0,a.kt)("h3",{id:"2-view-latest-revision-of-the-service"},"2. View latest revision of the service"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"kubectl get revision $(kubectl get plan database -o json | jq .status.latest.name -r) -o yaml\n")),(0,a.kt)("p",null,"The above will show you the options available on the plan."),(0,a.kt)("h3",{id:"3-create-a-cloudresource-from-a-revision"},"3. Create a CloudResource from a revision"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl create cloudresource database\n")),(0,a.kt)("h2",{id:"example-configuration-resource"},"Example Configuration resource"),(0,a.kt)("p",null,"Alternatively, if you are using ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations"),". Below is an example:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'apiVersion: terraform.appvia.io/v1alpha1\nkind: Configuration\nmetadata:\n name: bucket\nspec:\n # ssh example: git::ssh://git@example.com/foo/bar\n module: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0\n\n providerRef:\n name: default\n\n writeConnectionSecretToRef:\n name: test\n\n # An optional reference to a secret containing credentials to retrieve\n # the git repository\n auth:\n name: \n\n # Terraform variables used to populate the module\n variables:\n # -- The name of the bucket. If omitted, Terraform will assign a random, unique name\n bucket: example-test-1234\n # -- The canned ACL to apply\n acl: private\n # -- Map containing versioning configuration\n versioning:\n enabled: true\n # --Whether Amazon S3 should block public ACLs for this bucket\n block_public_acls: true\n # -- Whether Amazon S3 should block public bucket policies for this bucket\n block_public_policy: true\n # -- Whether Amazon S3 should ignore public ACLs for this bucket\n ignore_public_acls: true\n # -- Whether Amazon S3 should restrict public bucket policies for this bucket\n restrict_public_buckets: true\n # -- Map containing server-side encryption configuration\n server_side_encryption_configuration:\n rule:\n apply_server_side_encryption_by_default:\n sse_algorithm: "aws:kms"\n bucket_key_enabled: true\n')),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"The source syntax ",(0,a.kt)("em",{parentName:"p"},"(spec.module)")," on releases ",(0,a.kt)("inlineCode",{parentName:"p"},"<= v0.2.5")," does not fully support suggested ",(0,a.kt)("a",{parentName:"p",href:"https://www.terraform.io/language/modules/sources#github"},"Github format"),". References to Github must use the ",(0,a.kt)("inlineCode",{parentName:"p"},"https://github.com/appvia/terraform-aws-rds?ref=TAG")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"git::ssh://git@github.com/appvia/terraform-aws-rds.git"),"."),(0,a.kt)("p",{parentName:"admonition"},"Following the syntax of ",(0,a.kt)("a",{parentName:"p",href:"https://www.terraform.io/language/modules/sources#generic-git-repository"},"Generic Git Repository"),".")),(0,a.kt)("h2",{id:"sections-of-the-configuration-resource"},"Sections of the configuration resource"),(0,a.kt)("p",null,"The configuration resource is comprised of the following sections."),(0,a.kt)("h3",{id:"module-reference"},"Module reference"),(0,a.kt)("p",null,"The module reference defines the source of the terraform module to run."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"The source reference uses the exact same format as terraform itself (the same library is used). For full details take a look at ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/hashicorp/go-getter"},"hashicorp/go-getter"),".")),(0,a.kt)("p",null,"For quick reference:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Using SSH the format would look like this: ",(0,a.kt)("inlineCode",{parentName:"li"},"git::ssh://git@example.com/foo/bar")),(0,a.kt)("li",{parentName:"ul"},"Using HTTPS the format would be: ",(0,a.kt)("inlineCode",{parentName:"li"},"https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0"))),(0,a.kt)("p",null,"You can also extract specific folders or files from the downloaded module by using the double slash: ",(0,a.kt)("inlineCode",{parentName:"p"},"[URL]//dir/file"),"."),(0,a.kt)("h3",{id:"provider-reference"},"Provider reference"),(0,a.kt)("p",null,"The provider reference is what links a configuration to the credentials used to speak to the cloud. Depending on the Kubernetes RBAC you currently posses you can retrieve a list of the current providers via ",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl"),":"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl get providers -n [NAMESPACE]\n")),(0,a.kt)("p",null,"Once you have the provider ",(0,a.kt)("inlineCode",{parentName:"p"},"name")," you use the reference in the configuration:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n providerRef:\n name: \n")),(0,a.kt)("h3",{id:"terraform-variables"},"Terraform variables"),(0,a.kt)("p",null,"The variables section ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.variables")," is a free form map used to define all the variables the module can consume. These are converted to HCL and provided into the workflow via ",(0,a.kt)("inlineCode",{parentName:"p"},"-var-file")," on the ",(0,a.kt)("inlineCode",{parentName:"p"},"plan")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"apply")," stages."),(0,a.kt)("p",null,"For variables that are sensitive such as passwords it would be better to use the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.valueFrom")," field. This is a collection of references to kubernetes secrets that hold the values."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"ValueFrom fields is available from version >= v0.1.6\n::::"),(0,a.kt)("p",{parentName:"admonition"},"An example for an RDS module can be"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre"},"spec:\n valueFrom:\n - secret: db_password\n key: database_password\n optional: false\n")),(0,a.kt)("h3",{parentName:"admonition",id:"connection-secret-reference"},"Connection secret reference"),(0,a.kt)("p",{parentName:"admonition"},"The connection secret ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.writeConnectionSecretToRef")," is the name of a secret within the namespace where you want any Terraform outputs to be written. These outputs are converted to environment variable format, i.e., upper-cased and ready to be consumed by workloads using ",(0,a.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables"},"env and envFrom"),"."),(0,a.kt)("p",{parentName:"admonition"},"By default when a secret is defined all the outputs produced are written in environment variable form. If you want to filter this and only select specific keys from the terraform output you can include the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.writeConnectionSecretToRef.keys")," field as shown below."),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n writeConnectionSecretToRef:\n name: [NAME]\n keys:\n - name_of_key\n - name_of_key\n")),(0,a.kt)("h4",{parentName:"admonition",id:"secrets-remapping"},"Secrets Remapping"),(0,a.kt)("p",{parentName:"admonition"},"We use the resource outputs as the keys in the connection secret, so if a resource has a ",(0,a.kt)("inlineCode",{parentName:"p"},"database_endpoint")," output the secret will have a key named ",(0,a.kt)("inlineCode",{parentName:"p"},"DATABASE_ENDPOINT"),". You might want to rename one or more outputs for convenience however, for example change the ",(0,a.kt)("inlineCode",{parentName:"p"},"database_endpoint")," to ",(0,a.kt)("inlineCode",{parentName:"p"},"mysql_host"),". You can change the key like below"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Configuration|CloudResource\nmetadata:\n name: bucket\nspec:\n providerRef:\n name: aws\n writeConnectionSecretToRef:\n name: test\n keys:\n - database_endpoint:mysql_host # is renamed to MYSQL_HOST\n - database_port # is unchanged as DATABASE_PORT\n")),(0,a.kt)("h2",{parentName:"admonition",id:"viewing-the-changes"},"Viewing the changes"),(0,a.kt)("p",{parentName:"admonition"},"As a Configuration transitions through its plan, apply and destroy phases, a job is created in the namespace, and used to feedback the execution of the change. The jobs follows the naming format ",(0,a.kt)("inlineCode",{parentName:"p"},"[RESOURCE]-[GENERATION]-[plan|apply|destroy]"),". You can easily view the execution of a change by inspecting the pod's logs (",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl logs [POD]"),")."),(0,a.kt)("p",{parentName:"admonition"},"As an alternative to using kubectl commands, you can use ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/developer/tnctl"},"tnctl")," cli"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ tnctl logs -n NAMESPACE NAME\n")),(0,a.kt)("h2",{parentName:"admonition",id:"approving-a-plan"},"Approving a plan"),(0,a.kt)("p",{parentName:"admonition"},"By default, unless the ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.enableAutoApproval")," is set to true, all Configurations require a manual approval. You can do this by toggling an annotation on the Configuration itself."),(0,a.kt)("p",{parentName:"admonition"},"To approve the Configuration or CloudResource ",(0,a.kt)("inlineCode",{parentName:"p"},"bucket"),":"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},'$ kubectl -n apps annotate configuration bucket "terraform.appvia.io/apply"=true --overwrite\n')),(0,a.kt)("p",{parentName:"admonition"},"Or"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},'$ kubectl -n apps annotate cloudresource bucket "terraform.appvia.io/apply"=true --overwrite\n')),(0,a.kt)("p",{parentName:"admonition"},"Or if using the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/developer/tnctl"},"tnctl")," cli, you can type"),(0,a.kt)("pre",{parentName:"admonition"},(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ tnctl approve cloudresource|configuration -n NAMESPACE NAME\n")),(0,a.kt)("h2",{parentName:"admonition",id:"deleting-the-resource"},"Deleting the resource"),(0,a.kt)("p",{parentName:"admonition"},"You can delete the resource like any other Kubernetes resource (",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl delete configuration [NAME]"),"). One extra feature is the ability to orphan the cloud resources (i.e., delete the Kubernetes representation but DO NOT delete the cloud resources themselves)."),(0,a.kt)("p",{parentName:"admonition"},"For instance, you may need to migrate the configuration to another cluster. In that case:"),(0,a.kt)("ol",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ol"},"Annotate the Configuration with ",(0,a.kt)("inlineCode",{parentName:"li"},'kubectl annotate configuration [NAME] "terraform.appvia.io/orphan"=true')),(0,a.kt)("li",{parentName:"ol"},"Delete the Configuration resource as per normal. The resource will disappear but the cloud resources will remain."))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/65b1931a.21860503.js b/assets/js/65b1931a.b406dc2d.js similarity index 50% rename from assets/js/65b1931a.21860503.js rename to assets/js/65b1931a.b406dc2d.js index 3d17111f..1315714b 100644 --- a/assets/js/65b1931a.21860503.js +++ b/assets/js/65b1931a.b406dc2d.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5274],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),f=s(r),d=o,m=f["".concat(c,".").concat(d)]||f[d]||u[d]||l;return r?n.createElement(m,a(a({ref:t},p),{},{components:r})):n.createElement(m,a({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,a=new Array(l);a[0]=f;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl create workflow"},a=void 0,i={unversionedId:"cli/tnctl_create_workflow",id:"cli/tnctl_create_workflow",title:"tnctl create workflow",description:"tnctl create workflow",source:"@site/docs/terranetes-controller/cli/tnctl_create_workflow.md",sourceDirName:"cli",slug:"/cli/tnctl_create_workflow",permalink:"/terranetes-controller/cli/tnctl_create_workflow",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_create_workflow.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl create workflow"},sidebar:"tutorialSidebar",previous:{title:"tnctl create revision",permalink:"/terranetes-controller/cli/tnctl_create_revision"},next:{title:"tnctl delete",permalink:"/terranetes-controller/cli/tnctl_delete"}},c={},s=[{value:"tnctl create workflow",id:"tnctl-create-workflow",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-create-workflow"},"tnctl create workflow"),(0,o.kt)("p",null,"Generates a workflow used to lint, validate and publish the module"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Workflow provide an out of the box solution to generating ci\npipelines for your terraform modules. The pipelines are coded\nto enforce, linting, validation, documentation generation\nand security scanning. Also when enabled the pipeline will\nalso include a release."),(0,o.kt)("p",null,"Can be used to generate an opinionate pipeline for terraform modules.\nThe module command will generate a Github actions pipeline, integrating\nlinting, validating and security checks."),(0,o.kt)("p",null,"Generate a workflow for module\n$ tnctl create workflow PATH"),(0,o.kt)("p",null,"You can override the location of the template via the configuration\nfile ${HOME}/.tnctl/config.yaml (or TNCTL_CONFIG). Just add the\nfollowing"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"workflow: URL"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl create workflow PATH [OPTIONS] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --ensure-naming-linting Ensure the naming conventions of the repository (default true)\n -h, --help help for workflow\n --template string Repository to use for the template (default "git::ssh://git@github.com/appvia/terranetes-workflows?ref=master")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_create"},"tnctl create"),"\t - Used to create a resource")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5274],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),f=s(r),d=o,m=f["".concat(c,".").concat(d)]||f[d]||u[d]||l;return r?n.createElement(m,a(a({ref:t},p),{},{components:r})):n.createElement(m,a({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,a=new Array(l);a[0]=f;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl create workflow"},a=void 0,i={unversionedId:"cli/tnctl_create_workflow",id:"cli/tnctl_create_workflow",title:"tnctl create workflow",description:"tnctl create workflow",source:"@site/docs/terranetes-controller/cli/tnctl_create_workflow.md",sourceDirName:"cli",slug:"/cli/tnctl_create_workflow",permalink:"/terranetes-controller/cli/tnctl_create_workflow",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_create_workflow.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl create workflow"},sidebar:"tutorialSidebar",previous:{title:"tnctl create revision",permalink:"/terranetes-controller/cli/tnctl_create_revision"},next:{title:"tnctl delete",permalink:"/terranetes-controller/cli/tnctl_delete"}},c={},s=[{value:"tnctl create workflow",id:"tnctl-create-workflow",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-create-workflow"},"tnctl create workflow"),(0,o.kt)("p",null,"Generates a workflow used to lint, validate and publish the module"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Workflow provide an out of the box solution to generating ci\npipelines for your terraform modules. The pipelines are coded\nto enforce, linting, validation, documentation generation\nand security scanning. Also when enabled the pipeline will\nalso include a release."),(0,o.kt)("p",null,"Can be used to generate an opinionate pipeline for terraform modules.\nThe module command will generate a Github actions pipeline, integrating\nlinting, validating and security checks."),(0,o.kt)("p",null,"Generate a workflow for module\n$ tnctl create workflow PATH"),(0,o.kt)("p",null,"You can override the location of the template via the configuration\nfile ${HOME}/.tnctl/config.yaml (or TNCTL_CONFIG). Just add the\nfollowing"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"workflow: URL"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl create workflow PATH [OPTIONS] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --ensure-naming-linting Ensure the naming conventions of the repository (default true)\n -h, --help help for workflow\n --template string Repository to use for the template (default "git::ssh://git@github.com/appvia/terranetes-workflows?ref=master")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_create"},"tnctl create"),"\t - Used to create a resource")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6981e07d.3f7a2f39.js b/assets/js/6981e07d.3f7a2f39.js deleted file mode 100644 index 0e3b3281..00000000 --- a/assets/js/6981e07d.3f7a2f39.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5211],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=r.createContext({}),p=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(a.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,a=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),u=p(n),f=o,d=u["".concat(a,".").concat(f)]||u[f]||m[f]||l;return n?r.createElement(d,i(i({ref:t},s),{},{components:n})):r.createElement(d,i({ref:t},s))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,i=new Array(l);i[0]=u;var c={};for(var a in t)hasOwnProperty.call(t,a)&&(c[a]=t[a]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var p=2;p{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl completion"},i=void 0,c={unversionedId:"cli/tnctl_completion",id:"cli/tnctl_completion",title:"tnctl completion",description:"tnctl completion",source:"@site/docs/terranetes-controller/cli/tnctl_completion.md",sourceDirName:"cli",slug:"/cli/tnctl_completion",permalink:"/terranetes-controller/cli/tnctl_completion",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_completion.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl completion"},sidebar:"tutorialSidebar",previous:{title:"tnctl build",permalink:"/terranetes-controller/cli/tnctl_build"},next:{title:"tnctl completion bash",permalink:"/terranetes-controller/cli/tnctl_completion_bash"}},a={},p=[{value:"tnctl completion",id:"tnctl-completion",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-completion"},"tnctl completion"),(0,o.kt)("p",null,"Generate the autocompletion script for the specified shell"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Generate the autocompletion script for tnctl for the specified shell.\nSee each sub-command's help for details on how to use the generated script."),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for completion\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion_bash"},"tnctl completion bash"),"\t - Generate the autocompletion script for bash"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion_fish"},"tnctl completion fish"),"\t - Generate the autocompletion script for fish"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion_powershell"},"tnctl completion powershell"),"\t - Generate the autocompletion script for powershell"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion_zsh"},"tnctl completion zsh"),"\t - Generate the autocompletion script for zsh")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6981e07d.bce0d72e.js b/assets/js/6981e07d.bce0d72e.js new file mode 100644 index 00000000..b2cc6516 --- /dev/null +++ b/assets/js/6981e07d.bce0d72e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5211],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),p=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),u=p(n),f=o,d=u["".concat(c,".").concat(f)]||u[f]||m[f]||l;return n?r.createElement(d,i(i({ref:t},s),{},{components:n})):r.createElement(d,i({ref:t},s))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,i=new Array(l);i[0]=u;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a.mdxType="string"==typeof e?e:o,i[1]=a;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>a,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl completion"},i=void 0,a={unversionedId:"cli/tnctl_completion",id:"cli/tnctl_completion",title:"tnctl completion",description:"tnctl completion",source:"@site/docs/terranetes-controller/cli/tnctl_completion.md",sourceDirName:"cli",slug:"/cli/tnctl_completion",permalink:"/terranetes-controller/cli/tnctl_completion",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_completion.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl completion"},sidebar:"tutorialSidebar",previous:{title:"tnctl build",permalink:"/terranetes-controller/cli/tnctl_build"},next:{title:"tnctl completion bash",permalink:"/terranetes-controller/cli/tnctl_completion_bash"}},c={},p=[{value:"tnctl completion",id:"tnctl-completion",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-completion"},"tnctl completion"),(0,o.kt)("p",null,"Generate the autocompletion script for the specified shell"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Generate the autocompletion script for tnctl for the specified shell.\nSee each sub-command's help for details on how to use the generated script."),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for completion\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion_bash"},"tnctl completion bash"),"\t - Generate the autocompletion script for bash"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion_fish"},"tnctl completion fish"),"\t - Generate the autocompletion script for fish"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion_powershell"},"tnctl completion powershell"),"\t - Generate the autocompletion script for powershell"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion_zsh"},"tnctl completion zsh"),"\t - Generate the autocompletion script for zsh")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/73b38786.291fca86.js b/assets/js/73b38786.291fca86.js new file mode 100644 index 00000000..97f8ec70 --- /dev/null +++ b/assets/js/73b38786.291fca86.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8387],{3905:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>d});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),f=p(o),d=r,h=f["".concat(s,".").concat(d)]||f[d]||u[d]||a;return o?n.createElement(h,i(i({ref:t},c),{},{components:o})):n.createElement(h,i({ref:t},c))}));function d(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var p=2;p{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=o(7462),r=(o(7294),o(3905));const a={sidebar_position:1},i="What are workflows",l={unversionedId:"workflows/intro",id:"workflows/intro",title:"What are workflows",description:'\ud83d\udcac "In essence an opinion on a piece of paper"',source:"@site/docs/terranetes-controller/workflows/intro.md",sourceDirName:"workflows",slug:"/workflows/intro",permalink:"/terranetes-controller/workflows/intro",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/workflows/intro.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Workflows",permalink:"/terranetes-controller/category/workflows"},next:{title:"Platform Team",permalink:"/terranetes-controller/workflows/platform"}},s={},p=[{value:"What were the goals?",id:"what-were-the-goals",level:2},{value:"\ud83d\udfe2 An agnostic pipeline",id:"-an-agnostic-pipeline",level:4},{value:"\ud83d\udfe2 Fail early, fail fast",id:"-fail-early-fail-fast",level:4},{value:"\ud83d\udfe2 Bake nothing into the product",id:"-bake-nothing-into-the-product",level:4},{value:"\ud83d\udfe2 An opinionated workflow",id:"-an-opinionated-workflow",level:4},{value:"\ud83d\udfe2 Distribution is a problem",id:"-distribution-is-a-problem",level:4}],c={toc:p};function u(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,n.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"what-are-workflows"},"What are workflows"),(0,r.kt)("p",null,"\ud83d\udcac ",(0,r.kt)("em",{parentName:"p"},'"In essence an opinion on a piece of paper"')),(0,r.kt)("p",null,"Providing functionality and features isn't complicated; open source overflows with solutions to things. But providing a ",(0,r.kt)("strong",{parentName:"p"},"way of working")," is more useful. Workflows is a stamp of opinion of how devops can iterate, review and publish modules and developers can find, search and consume cloud resources. The workflow isn't revolutionary, it's deliberately simple. If you already have a good process feel free to ignore. Use it as a template, that's fine too. Or even better yet, raise a pull request and improve it."),(0,r.kt)("h2",{id:"what-were-the-goals"},"What were the goals?"),(0,r.kt)("p",null,"The following provides a glance overview of what we were trying to achieve."),(0,r.kt)("h4",{id:"-an-agnostic-pipeline"},"\ud83d\udfe2 ",(0,r.kt)("strong",{parentName:"h4"},"An agnostic pipeline")),(0,r.kt)("p",null,"It shouldn't matter if the terraform module is consumed by another pipeline or the terranetes controller. The suggested workflow should work for both."),(0,r.kt)("h4",{id:"-fail-early-fail-fast"},"\ud83d\udfe2 ",(0,r.kt)("strong",{parentName:"h4"},"Fail early, fail fast")),(0,r.kt)("p",null,"Technical controls are often too late in the game, i.e. at runtime. Admission control is a prime example of this, blocking the request on submission. At best this becomes an irritation and waste of time, as a user moves back and forth trying to bring the deployment inline with compliance. At worst it's potential downtime as you apply in one environment just to fail in another. While the technical control is always there we want to ensure those same checks are performed in the pipeline, known upfront and fail early."),(0,r.kt)("h4",{id:"-bake-nothing-into-the-product"},"\ud83d\udfe2 ",(0,r.kt)("strong",{parentName:"h4"},"Bake nothing into the product")),(0,r.kt)("p",null,"The workflow is there to 'encourage' good practice, act as a template rather then pigeon hole teams in."),(0,r.kt)("h4",{id:"-an-opinionated-workflow"},"\ud83d\udfe2 ",(0,r.kt)("strong",{parentName:"h4"},"An opinionated workflow")),(0,r.kt)("p",null,"Stitching together a good foundation, community tools and pipeline to iterate a terraform from creation, review and through to consumption. Were not reinventing the wheel just providing an out of the box solution."),(0,r.kt)("h4",{id:"-distribution-is-a-problem"},"\ud83d\udfe2 ",(0,r.kt)("strong",{parentName:"h4"},"Distribution is a problem")),(0,r.kt)("p",null,"Work in any large organization and duplication becomes a issue, with numerous modules rehashing the same functionality over and over. Before you know it you've got 20 modules all provisioning an S3 bucket. Beyond the comically waste of time, you now have a maintenance penality not to mention a lack of governance."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Which is being used, where?"),(0,r.kt)("li",{parentName:"ul"},"Which is compliant, follows company guidelines and so forth.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/73b38786.74f50fda.js b/assets/js/73b38786.74f50fda.js deleted file mode 100644 index 5d954713..00000000 --- a/assets/js/73b38786.74f50fda.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8387],{3905:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>d});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var s=n.createContext({}),p=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),f=p(o),d=r,h=f["".concat(s,".").concat(d)]||f[d]||u[d]||a;return o?n.createElement(h,i(i({ref:t},c),{},{components:o})):n.createElement(h,i({ref:t},c))}));function d(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=f;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:r,i[1]=l;for(var p=2;p{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=o(7462),r=(o(7294),o(3905));const a={sidebar_position:1},i="What are workflows",l={unversionedId:"workflows/intro",id:"workflows/intro",title:"What are workflows",description:'\ud83d\udcac "In essence an opinion on a piece of paper"',source:"@site/docs/terranetes-controller/workflows/intro.md",sourceDirName:"workflows",slug:"/workflows/intro",permalink:"/terranetes-controller/workflows/intro",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/workflows/intro.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Workflows",permalink:"/terranetes-controller/category/workflows"},next:{title:"Platform Team",permalink:"/terranetes-controller/workflows/platform"}},s={},p=[{value:"What were the goals?",id:"what-were-the-goals",level:2},{value:"\ud83d\udfe2 An agnostic pipeline",id:"-an-agnostic-pipeline",level:4},{value:"\ud83d\udfe2 Fail early, fail fast",id:"-fail-early-fail-fast",level:4},{value:"\ud83d\udfe2 Bake nothing into the product",id:"-bake-nothing-into-the-product",level:4},{value:"\ud83d\udfe2 An opinionated workflow",id:"-an-opinionated-workflow",level:4},{value:"\ud83d\udfe2 Distribution is a problem",id:"-distribution-is-a-problem",level:4}],c={toc:p};function u(e){let{components:t,...o}=e;return(0,r.kt)("wrapper",(0,n.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"what-are-workflows"},"What are workflows"),(0,r.kt)("p",null,"\ud83d\udcac ",(0,r.kt)("em",{parentName:"p"},'"In essence an opinion on a piece of paper"')),(0,r.kt)("p",null,"Providing functionality and features isn't complicated; open source overflows with solutions to things. But providing a ",(0,r.kt)("strong",{parentName:"p"},"way of working")," is more useful. Workflows is a stamp of opinion of how devops can iterate, review and publish modules and developers can find, search and consume cloud resources. The workflow isn't revolutionary, it's deliberately simple. If you already have a good process feel free to ignore. Use it as a template, that's fine too. Or even better yet, raise a pull request and improve it."),(0,r.kt)("h2",{id:"what-were-the-goals"},"What were the goals?"),(0,r.kt)("p",null,"The following provides a glance overview of what we were trying to achieve."),(0,r.kt)("h4",{id:"-an-agnostic-pipeline"},"\ud83d\udfe2 ",(0,r.kt)("strong",{parentName:"h4"},"An agnostic pipeline")),(0,r.kt)("p",null,"It shouldn't matter if the terraform module is consumed by another pipeline or the terranetes controller. The suggested workflow should work for both."),(0,r.kt)("h4",{id:"-fail-early-fail-fast"},"\ud83d\udfe2 ",(0,r.kt)("strong",{parentName:"h4"},"Fail early, fail fast")),(0,r.kt)("p",null,"Technical controls are often too late in the game, i.e. at runtime. Admission control is a prime example of this, blocking the request on submission. At best this becomes an irritation and waste of time, as a user moves back and forth trying to bring the deployment inline with compliance. At worst it's potential downtime as you apply in one environment just to fail in another. While the technical control is always there we want to ensure those same checks are performed in the pipeline, known upfront and fail early."),(0,r.kt)("h4",{id:"-bake-nothing-into-the-product"},"\ud83d\udfe2 ",(0,r.kt)("strong",{parentName:"h4"},"Bake nothing into the product")),(0,r.kt)("p",null,"The workflow is there to 'encourage' good practice, act as a template rather then pigeon hole teams in."),(0,r.kt)("h4",{id:"-an-opinionated-workflow"},"\ud83d\udfe2 ",(0,r.kt)("strong",{parentName:"h4"},"An opinionated workflow")),(0,r.kt)("p",null,"Stitching together a good foundation, community tools and pipeline to iterate a terraform from creation, review and through to consumption. Were not reinventing the wheel just providing an out of the box solution."),(0,r.kt)("h4",{id:"-distribution-is-a-problem"},"\ud83d\udfe2 ",(0,r.kt)("strong",{parentName:"h4"},"Distribution is a problem")),(0,r.kt)("p",null,"Work in any large organization and duplication becomes a issue, with numerous modules rehashing the same functionality over and over. Before you know it you've got 20 modules all provisioning an S3 bucket. Beyond the comically waste of time, you now have a maintenance penality not to mention a lack of governance."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Which is being used, where?"),(0,r.kt)("li",{parentName:"ul"},"Which is compliant, follows company guidelines and so forth.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/73b951d4.4b421cec.js b/assets/js/73b951d4.4b421cec.js deleted file mode 100644 index c8321ed2..00000000 --- a/assets/js/73b951d4.4b421cec.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[1609],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=l(r),d=a,f=m["".concat(c,".").concat(d)]||m[d]||u[d]||o;return r?n.createElement(f,s(s({ref:t},p),{},{components:r})):n.createElement(f,s({ref:t},p))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,s=new Array(o);s[0]=m;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:5,sidebar_class_name:"green"},s="Expose Costs",i={unversionedId:"admin/costs",id:"admin/costs",title:"Expose Costs",description:"The costs integration allows developers to see their associated costs before applying the terraform. This controller currently uses infracost to extract the predicted costs of a configuration, exposing the cost within the status of the Kubernetes object. It is viewable by running kubectl get configuration.",source:"@site/docs/terranetes-controller/admin/costs.md",sourceDirName:"admin",slug:"/admin/costs",permalink:"/terranetes-controller/admin/costs",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/costs.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:5,frontMatter:{sidebar_position:5,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Metrics",permalink:"/terranetes-controller/admin/observability/metrics"},next:{title:"Injecting Defaults",permalink:"/terranetes-controller/admin/defaults"}},c={},l=[{value:"View the predicted costs",id:"view-the-predicted-costs",level:2}],p={toc:l};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"expose-costs"},"Expose Costs"),(0,a.kt)("p",null,"The costs integration allows developers to see their associated costs before applying the terraform. This controller currently uses ",(0,a.kt)("a",{parentName:"p",href:"https://infracost.io"},"infracost")," to extract the predicted costs of a configuration, exposing the cost within the status of the Kubernetes object. It is viewable by running ",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl get configuration"),"."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"The costs here are predicted costs, not the actual costs/usage. While many costs can be calculated based on the resource specs alone, many other costs are based on usage. A simple example would be an S3 bucket that is free (predicted cost), but if you store 10TB inside it you will accumulate data storage costs that would not be visible based on your Terraform resource spec.")),(0,a.kt)("p",null,"To configure the integration:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Create a secret containing the Infracost API token."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl -n terraform-system create secret generic infracost \\\n --from-literal=INFRACOST_API_KEY=$INFRACOST_API_KEY\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Configure the controller to enable infracost by updating the controller flag."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"controller:\n costs:\n # The name of the secret you created in the controller namespace above\n name: infracost\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Update the helm chart."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ helm upgrade terranetes-controller charts/\n")))),(0,a.kt)("h2",{id:"view-the-predicted-costs"},"View the predicted costs"),(0,a.kt)("p",null,"The predicted cost of a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," is available on the CRD status and resource description."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl -n apps get configurations\nNAME MODULE SECRET RESOURCES ESTIMATED AGE\ninstance0 https://github.com/terraform-aws-modules/terraform-aws-ec2-instance.git $140.96 61s\ninstance1 https://github.com/terraform-aws-modules/terraform-aws-ec2-instance.git $1124.18 61s\ninstance2 https://github.com/terraform-aws-modules/terraform-aws-ec2-instance.git $136.288 61s\ninstance3 https://github.com/terraform-aws-modules/terraform-aws-ec2-instance.git $660.72 61s\n")),(0,a.kt)("p",null,"You may retrieve the further detail from the status fields as below."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},'$ k -n apps get configurations.terraform.appvia.io instance0 -o json | jq -r .status.costs\n{\n "enabled": true,\n "hourly": "$0.1930958904109589",\n "monthly": "$140.96"\n}\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/73b951d4.ae75e509.js b/assets/js/73b951d4.ae75e509.js new file mode 100644 index 00000000..d4d5a492 --- /dev/null +++ b/assets/js/73b951d4.ae75e509.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[1609],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=l(r),d=a,f=m["".concat(c,".").concat(d)]||m[d]||u[d]||o;return r?n.createElement(f,s(s({ref:t},p),{},{components:r})):n.createElement(f,s({ref:t},p))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,s=new Array(o);s[0]=m;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:5,sidebar_class_name:"green"},s="Expose Costs",i={unversionedId:"admin/costs",id:"admin/costs",title:"Expose Costs",description:"The costs integration allows developers to see their associated costs before applying the terraform. This controller currently uses infracost to extract the predicted costs of a configuration, exposing the cost within the status of the Kubernetes object. It is viewable by running kubectl get configuration.",source:"@site/docs/terranetes-controller/admin/costs.md",sourceDirName:"admin",slug:"/admin/costs",permalink:"/terranetes-controller/admin/costs",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/costs.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:5,frontMatter:{sidebar_position:5,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Metrics",permalink:"/terranetes-controller/admin/observability/metrics"},next:{title:"Injecting Defaults",permalink:"/terranetes-controller/admin/defaults"}},c={},l=[{value:"View the predicted costs",id:"view-the-predicted-costs",level:2}],p={toc:l};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"expose-costs"},"Expose Costs"),(0,a.kt)("p",null,"The costs integration allows developers to see their associated costs before applying the terraform. This controller currently uses ",(0,a.kt)("a",{parentName:"p",href:"https://infracost.io"},"infracost")," to extract the predicted costs of a configuration, exposing the cost within the status of the Kubernetes object. It is viewable by running ",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl get configuration"),"."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"The costs here are predicted costs, not the actual costs/usage. While many costs can be calculated based on the resource specs alone, many other costs are based on usage. A simple example would be an S3 bucket that is free (predicted cost), but if you store 10TB inside it you will accumulate data storage costs that would not be visible based on your Terraform resource spec.")),(0,a.kt)("p",null,"To configure the integration:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Create a secret containing the Infracost API token."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ kubectl -n terraform-system create secret generic infracost \\\n --from-literal=INFRACOST_API_KEY=$INFRACOST_API_KEY\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Configure the controller to enable infracost by updating the controller flag."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"controller:\n costs:\n # The name of the secret you created in the controller namespace above\n name: infracost\n"))),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Update the helm chart."),(0,a.kt)("pre",{parentName:"li"},(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"$ helm upgrade terranetes-controller charts/\n")))),(0,a.kt)("h2",{id:"view-the-predicted-costs"},"View the predicted costs"),(0,a.kt)("p",null,"The predicted cost of a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," is available on the CRD status and resource description."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl -n apps get configurations\nNAME MODULE SECRET RESOURCES ESTIMATED AGE\ninstance0 https://github.com/terraform-aws-modules/terraform-aws-ec2-instance.git $140.96 61s\ninstance1 https://github.com/terraform-aws-modules/terraform-aws-ec2-instance.git $1124.18 61s\ninstance2 https://github.com/terraform-aws-modules/terraform-aws-ec2-instance.git $136.288 61s\ninstance3 https://github.com/terraform-aws-modules/terraform-aws-ec2-instance.git $660.72 61s\n")),(0,a.kt)("p",null,"You may retrieve the further detail from the status fields as below."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},'$ k -n apps get configurations.terraform.appvia.io instance0 -o json | jq -r .status.costs\n{\n "enabled": true,\n "hourly": "$0.1930958904109589",\n "monthly": "$140.96"\n}\n')))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/75489bf9.27c0cf1c.js b/assets/js/75489bf9.27c0cf1c.js new file mode 100644 index 00000000..82372e1d --- /dev/null +++ b/assets/js/75489bf9.27c0cf1c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[4032],{3905:(e,t,s)=>{s.d(t,{Zo:()=>n,kt:()=>h});var r=s(7294);function a(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function p(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,r)}return s}function o(e){for(var t=1;t=0||(a[s]=e[s]);return a}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(a[s]=e[s])}return a}var i=r.createContext({}),l=function(e){var t=r.useContext(i),s=t;return e&&(s="function"==typeof e?e(t):o(o({},t),e)),s},n=function(e){var t=l(e.components);return r.createElement(i.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},y=r.forwardRef((function(e,t){var s=e.components,a=e.mdxType,p=e.originalType,i=e.parentName,n=c(e,["components","mdxType","originalType","parentName"]),y=l(s),h=a,k=y["".concat(i,".").concat(h)]||y[h]||d[h]||p;return s?r.createElement(k,o(o({ref:t},n),{},{components:s})):r.createElement(k,o({ref:t},n))}));function h(e,t){var s=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var p=s.length,o=new Array(p);o[0]=y;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:a,o[1]=c;for(var l=2;l{s.r(t),s.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>p,metadata:()=>c,toc:()=>l});var r=s(7462),a=(s(7294),s(3905));const p={title:"policies.terraform.appvia.io",linkTitle:"Policy",sidebar_position:1},o="Policy",c={unversionedId:"reference/policies.terraform.appvia.io",id:"reference/policies.terraform.appvia.io",title:"policies.terraform.appvia.io",description:"Policy is the schema for provider definitions in terraform controller",source:"@site/docs/terranetes-controller/reference/policies.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/policies.terraform.appvia.io",permalink:"/terranetes-controller/reference/policies.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/policies.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"policies.terraform.appvia.io",linkTitle:"Policy",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"plans.terraform.appvia.io",permalink:"/terranetes-controller/reference/plans.terraform.appvia.io"},next:{title:"providers.terraform.appvia.io",permalink:"/terranetes-controller/reference/providers.terraform.appvia.io"}},i={},l=[],n={toc:l};function d(e){let{components:t,...s}=e;return(0,a.kt)("wrapper",(0,r.Z)({},n,s,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"policy"},"Policy"),(0,a.kt)("p",{class:"crd-description"},"Policy is the schema for provider definitions in terraform controller"),(0,a.kt)("dl",{class:"crd-meta"},(0,a.kt)("dt",{class:"fullname"},"Full name:"),(0,a.kt)("dd",{class:"fullname"},"policies.terraform.appvia.io"),(0,a.kt)("dt",{class:"groupname"},"Group:"),(0,a.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,a.kt)("dt",{class:"singularname"},"Singular name:"),(0,a.kt)("dd",{class:"singularname"},"policy"),(0,a.kt)("dt",{class:"pluralname"},"Plural name:"),(0,a.kt)("dd",{class:"pluralname"},"policies"),(0,a.kt)("dt",{class:"scope"},"Scope:"),(0,a.kt)("dd",{class:"scope"},"Cluster"),(0,a.kt)("dt",{class:"versions"},"Versions:"),(0,a.kt)("dd",{class:"versions"},(0,a.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,a.kt)("div",{class:"crd-schema-version"},(0,a.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,a.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"PolicySpec defines the desired state of a provider")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints"},".spec.constraints")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Constraints provides a series or constraints that must be enforced on the selectored terraform configurations.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov"},".spec.constraints.checkov")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Checkov provides the ability to enforce a set of security standards on all configurations. These can be configured to target specific resources based on namespace and resource labels")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.checks"},".spec.constraints.checkov.checks")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Checks is a list of checks which should be applied against the configuration. Note, an empty list here implies checkov should run ALL checks. Please see ",(0,a.kt)("a",{href:"https://www.checkov.io/5.Policy%20Index/terraform.html"},"https://www.checkov.io/5.Policy%20Index/terraform.html"))))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.checks[*]"},".spec.constraints.checkov.checks[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external"},".spec.constraints.checkov.external")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"External is a collection of external checks which should be included in the scan. Each of the external sources and retrieved and sourced into /run/policy/NAME where they can be included as part of the scan")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external[*]"},".spec.constraints.checkov.external[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ExternalCheck defines the definition for an external check - this comprises of the source and any optional secret")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external[*].name"},".spec.constraints.checkov.external[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name provides a arbitrary name to the checks - note, this name is used as the directory name when we source the code")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external[*].secretRef"},".spec.constraints.checkov.external[*].secretRef")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"SecretRef is reference to secret which contains environment variables used by the source command to retrieve the code. This could be cloud credentials, ssh keys, git username and password etc")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external[*].secretRef.name"},".spec.constraints.checkov.external[*].secretRef.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"name is unique within a namespace to reference a secret resource.")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external[*].secretRef.namespace"},".spec.constraints.checkov.external[*].secretRef.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"namespace defines the space within which the secret name must be unique.")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external[*].url"},".spec.constraints.checkov.external[*].url")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"URL is the source external checks - this is usually a git repository. The notation for this is ",(0,a.kt)("a",{href:"https://github.com/hashicorp/go-getter"},"https://github.com/hashicorp/go-getter"))))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector"},".spec.constraints.checkov.selector")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Selector is the selector on the namespace or labels on the configuration. By leaving this fields empty you can implicitly selecting all configurations.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace"},".spec.constraints.checkov.selector.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Namespace is used to filter a configuration based on the namespace labels of where it exists")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchExpressions"},".spec.constraints.checkov.selector.namespace.matchExpressions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchExpressions[*]"},".spec.constraints.checkov.selector.namespace.matchExpressions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchExpressions[*].key"},".spec.constraints.checkov.selector.namespace.matchExpressions[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"key is the label key that the selector applies to.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchExpressions[*].operator"},".spec.constraints.checkov.selector.namespace.matchExpressions[*].operator")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchExpressions[*].values"},".spec.constraints.checkov.selector.namespace.matchExpressions[*].values")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,a.kt)("div",{class:"property depth-8"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchExpressions[*].values[*]"},".spec.constraints.checkov.selector.namespace.matchExpressions[*].values[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchLabels"},".spec.constraints.checkov.selector.namespace.matchLabels")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource"},".spec.constraints.checkov.selector.resource")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Resource provides the ability to filter a configuration based on it\u2019s labels")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchExpressions"},".spec.constraints.checkov.selector.resource.matchExpressions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchExpressions[*]"},".spec.constraints.checkov.selector.resource.matchExpressions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchExpressions[*].key"},".spec.constraints.checkov.selector.resource.matchExpressions[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"key is the label key that the selector applies to.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchExpressions[*].operator"},".spec.constraints.checkov.selector.resource.matchExpressions[*].operator")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchExpressions[*].values"},".spec.constraints.checkov.selector.resource.matchExpressions[*].values")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,a.kt)("div",{class:"property depth-8"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchExpressions[*].values[*]"},".spec.constraints.checkov.selector.resource.matchExpressions[*].values[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchLabels"},".spec.constraints.checkov.selector.resource.matchLabels")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.skipChecks"},".spec.constraints.checkov.skipChecks")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"SkipChecks is a collection of checkov checks which you can defined as skipped. The security scan will ignore any failures on these checks.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.skipChecks[*]"},".spec.constraints.checkov.skipChecks[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.source"},".spec.constraints.checkov.source")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Source indicates an external source for the checkov configurations")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.source.configuration"},".spec.constraints.checkov.source.configuration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Configuration is the configuration to use within the source directory")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.source.secretRef"},".spec.constraints.checkov.source.secretRef")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"SecretRef is reference to secret which contains environment variables used by the source command to retrieve the code. This could be cloud credentials, ssh keys, git username and password etc")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.source.secretRef.name"},".spec.constraints.checkov.source.secretRef.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"name is unique within a namespace to reference a secret resource.")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.source.secretRef.namespace"},".spec.constraints.checkov.source.secretRef.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"namespace defines the space within which the secret name must be unique.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.source.url"},".spec.constraints.checkov.source.url")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"URL is the source external checks - this is usually a git repository. The notation for this is ",(0,a.kt)("a",{href:"https://github.com/hashicorp/go-getter"},"https://github.com/hashicorp/go-getter"))))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules"},".spec.constraints.modules")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Modules provides the ability to control the source for all terraform modules. Allowing platform teams to control where the modules can be downloaded from.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.allowed"},".spec.constraints.modules.allowed")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Allowed is a collection of regexes which are applied to the source of the terraform configuration. The configuration MUST match one or more of the regexes in order to be allowed to run.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.allowed[*]"},".spec.constraints.modules.allowed[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector"},".spec.constraints.modules.selector")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Selector is the selector on the namespace or labels on the configuration. By leaving this field empty you are implicitly selecting all configurations.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace"},".spec.constraints.modules.selector.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Namespace is used to filter a configuration based on the namespace labels of where it exists")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchExpressions"},".spec.constraints.modules.selector.namespace.matchExpressions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchExpressions[*]"},".spec.constraints.modules.selector.namespace.matchExpressions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchExpressions[*].key"},".spec.constraints.modules.selector.namespace.matchExpressions[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"key is the label key that the selector applies to.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchExpressions[*].operator"},".spec.constraints.modules.selector.namespace.matchExpressions[*].operator")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchExpressions[*].values"},".spec.constraints.modules.selector.namespace.matchExpressions[*].values")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,a.kt)("div",{class:"property depth-8"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchExpressions[*].values[*]"},".spec.constraints.modules.selector.namespace.matchExpressions[*].values[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchLabels"},".spec.constraints.modules.selector.namespace.matchLabels")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource"},".spec.constraints.modules.selector.resource")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Resource provides the ability to filter a configuration based on it\u2019s labels")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchExpressions"},".spec.constraints.modules.selector.resource.matchExpressions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchExpressions[*]"},".spec.constraints.modules.selector.resource.matchExpressions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchExpressions[*].key"},".spec.constraints.modules.selector.resource.matchExpressions[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"key is the label key that the selector applies to.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchExpressions[*].operator"},".spec.constraints.modules.selector.resource.matchExpressions[*].operator")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchExpressions[*].values"},".spec.constraints.modules.selector.resource.matchExpressions[*].values")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,a.kt)("div",{class:"property depth-8"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchExpressions[*].values[*]"},".spec.constraints.modules.selector.resource.matchExpressions[*].values[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchLabels"},".spec.constraints.modules.selector.resource.matchLabels")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults"},".spec.defaults")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Defaults provides the ability to target specific terraform module based on namespace or resource labels and automatically inject variables into the configurations.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*]"},".spec.defaults[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"DefaultVariables provides platform administrators the ability to inject default variables into a configuration")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].secrets"},".spec.defaults[*].secrets")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Secrets is a collection of secrets which are used to inject variables into the configuration")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].secrets[*]"},".spec.defaults[*].secrets[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector"},".spec.defaults[*].selector")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Selector is used to determine which configurations the variables should be injected into")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.modules"},".spec.defaults[*].selector.modules")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Modules provides a collection of regexes which are used to match against the configuration module")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.modules[*]"},".spec.defaults[*].selector.modules[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace"},".spec.defaults[*].selector.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Namespace selectors all configurations under one or more namespaces, determined by the labeling on the namespace.")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchExpressions"},".spec.defaults[*].selector.namespace.matchExpressions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchExpressions[*]"},".spec.defaults[*].selector.namespace.matchExpressions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchExpressions[*].key"},".spec.defaults[*].selector.namespace.matchExpressions[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"key is the label key that the selector applies to.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchExpressions[*].operator"},".spec.defaults[*].selector.namespace.matchExpressions[*].operator")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchExpressions[*].values"},".spec.defaults[*].selector.namespace.matchExpressions[*].values")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,a.kt)("div",{class:"property depth-8"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchExpressions[*].values[*]"},".spec.defaults[*].selector.namespace.matchExpressions[*].values[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchLabels"},".spec.defaults[*].selector.namespace.matchLabels")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].variables"},".spec.defaults[*].variables")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Variables is a collection of variables to inject into the configuration")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.summary"},".spec.summary")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Summary is an optional field which can be used to define a summary of what the policy is configured to enforce.")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"PolicyStatus defines the observed state of a provider")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/75489bf9.ed88eef2.js b/assets/js/75489bf9.ed88eef2.js deleted file mode 100644 index c0e3d80a..00000000 --- a/assets/js/75489bf9.ed88eef2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[4032],{3905:(e,t,s)=>{s.d(t,{Zo:()=>n,kt:()=>h});var r=s(7294);function a(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function p(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,r)}return s}function o(e){for(var t=1;t=0||(a[s]=e[s]);return a}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(a[s]=e[s])}return a}var i=r.createContext({}),l=function(e){var t=r.useContext(i),s=t;return e&&(s="function"==typeof e?e(t):o(o({},t),e)),s},n=function(e){var t=l(e.components);return r.createElement(i.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},y=r.forwardRef((function(e,t){var s=e.components,a=e.mdxType,p=e.originalType,i=e.parentName,n=c(e,["components","mdxType","originalType","parentName"]),y=l(s),h=a,k=y["".concat(i,".").concat(h)]||y[h]||d[h]||p;return s?r.createElement(k,o(o({ref:t},n),{},{components:s})):r.createElement(k,o({ref:t},n))}));function h(e,t){var s=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var p=s.length,o=new Array(p);o[0]=y;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:a,o[1]=c;for(var l=2;l{s.r(t),s.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>d,frontMatter:()=>p,metadata:()=>c,toc:()=>l});var r=s(7462),a=(s(7294),s(3905));const p={title:"policies.terraform.appvia.io",linkTitle:"Policy",sidebar_position:1},o="Policy",c={unversionedId:"reference/policies.terraform.appvia.io",id:"reference/policies.terraform.appvia.io",title:"policies.terraform.appvia.io",description:"Policy is the schema for provider definitions in terraform controller",source:"@site/docs/terranetes-controller/reference/policies.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/policies.terraform.appvia.io",permalink:"/terranetes-controller/reference/policies.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/policies.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"policies.terraform.appvia.io",linkTitle:"Policy",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"plans.terraform.appvia.io",permalink:"/terranetes-controller/reference/plans.terraform.appvia.io"},next:{title:"providers.terraform.appvia.io",permalink:"/terranetes-controller/reference/providers.terraform.appvia.io"}},i={},l=[],n={toc:l};function d(e){let{components:t,...s}=e;return(0,a.kt)("wrapper",(0,r.Z)({},n,s,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"policy"},"Policy"),(0,a.kt)("p",{class:"crd-description"},"Policy is the schema for provider definitions in terraform controller"),(0,a.kt)("dl",{class:"crd-meta"},(0,a.kt)("dt",{class:"fullname"},"Full name:"),(0,a.kt)("dd",{class:"fullname"},"policies.terraform.appvia.io"),(0,a.kt)("dt",{class:"groupname"},"Group:"),(0,a.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,a.kt)("dt",{class:"singularname"},"Singular name:"),(0,a.kt)("dd",{class:"singularname"},"policy"),(0,a.kt)("dt",{class:"pluralname"},"Plural name:"),(0,a.kt)("dd",{class:"pluralname"},"policies"),(0,a.kt)("dt",{class:"scope"},"Scope:"),(0,a.kt)("dd",{class:"scope"},"Cluster"),(0,a.kt)("dt",{class:"versions"},"Versions:"),(0,a.kt)("dd",{class:"versions"},(0,a.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,a.kt)("div",{class:"crd-schema-version"},(0,a.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,a.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"PolicySpec defines the desired state of a provider")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints"},".spec.constraints")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Constraints provides a series or constraints that must be enforced on the selectored terraform configurations.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov"},".spec.constraints.checkov")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Checkov provides the ability to enforce a set of security standards on all configurations. These can be configured to target specific resources based on namespace and resource labels")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.checks"},".spec.constraints.checkov.checks")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Checks is a list of checks which should be applied against the configuration. Note, an empty list here implies checkov should run ALL checks. Please see ",(0,a.kt)("a",{href:"https://www.checkov.io/5.Policy%20Index/terraform.html"},"https://www.checkov.io/5.Policy%20Index/terraform.html"))))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.checks[*]"},".spec.constraints.checkov.checks[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external"},".spec.constraints.checkov.external")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"External is a collection of external checks which should be included in the scan. Each of the external sources and retrieved and sourced into /run/policy/NAME where they can be included as part of the scan")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external[*]"},".spec.constraints.checkov.external[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ExternalCheck defines the definition for an external check - this comprises of the source and any optional secret")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external[*].name"},".spec.constraints.checkov.external[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name provides a arbitrary name to the checks - note, this name is used as the directory name when we source the code")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external[*].secretRef"},".spec.constraints.checkov.external[*].secretRef")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"SecretRef is reference to secret which contains environment variables used by the source command to retrieve the code. This could be cloud credentials, ssh keys, git username and password etc")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external[*].secretRef.name"},".spec.constraints.checkov.external[*].secretRef.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"name is unique within a namespace to reference a secret resource.")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external[*].secretRef.namespace"},".spec.constraints.checkov.external[*].secretRef.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"namespace defines the space within which the secret name must be unique.")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.external[*].url"},".spec.constraints.checkov.external[*].url")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"URL is the source external checks - this is usually a git repository. The notation for this is ",(0,a.kt)("a",{href:"https://github.com/hashicorp/go-getter"},"https://github.com/hashicorp/go-getter"))))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector"},".spec.constraints.checkov.selector")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Selector is the selector on the namespace or labels on the configuration. By leaving this fields empty you can implicitly selecting all configurations.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace"},".spec.constraints.checkov.selector.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Namespace is used to filter a configuration based on the namespace labels of where it exists")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchExpressions"},".spec.constraints.checkov.selector.namespace.matchExpressions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchExpressions[*]"},".spec.constraints.checkov.selector.namespace.matchExpressions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchExpressions[*].key"},".spec.constraints.checkov.selector.namespace.matchExpressions[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"key is the label key that the selector applies to.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchExpressions[*].operator"},".spec.constraints.checkov.selector.namespace.matchExpressions[*].operator")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchExpressions[*].values"},".spec.constraints.checkov.selector.namespace.matchExpressions[*].values")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,a.kt)("div",{class:"property depth-8"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchExpressions[*].values[*]"},".spec.constraints.checkov.selector.namespace.matchExpressions[*].values[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.namespace.matchLabels"},".spec.constraints.checkov.selector.namespace.matchLabels")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource"},".spec.constraints.checkov.selector.resource")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Resource provides the ability to filter a configuration based on it\u2019s labels")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchExpressions"},".spec.constraints.checkov.selector.resource.matchExpressions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchExpressions[*]"},".spec.constraints.checkov.selector.resource.matchExpressions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchExpressions[*].key"},".spec.constraints.checkov.selector.resource.matchExpressions[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"key is the label key that the selector applies to.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchExpressions[*].operator"},".spec.constraints.checkov.selector.resource.matchExpressions[*].operator")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchExpressions[*].values"},".spec.constraints.checkov.selector.resource.matchExpressions[*].values")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,a.kt)("div",{class:"property depth-8"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchExpressions[*].values[*]"},".spec.constraints.checkov.selector.resource.matchExpressions[*].values[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.selector.resource.matchLabels"},".spec.constraints.checkov.selector.resource.matchLabels")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.skipChecks"},".spec.constraints.checkov.skipChecks")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"SkipChecks is a collection of checkov checks which you can defined as skipped. The security scan will ignore any failures on these checks.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.skipChecks[*]"},".spec.constraints.checkov.skipChecks[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.source"},".spec.constraints.checkov.source")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Source indicates an external source for the checkov configurations")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.source.configuration"},".spec.constraints.checkov.source.configuration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Configuration is the configuration to use within the source directory")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.source.secretRef"},".spec.constraints.checkov.source.secretRef")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"SecretRef is reference to secret which contains environment variables used by the source command to retrieve the code. This could be cloud credentials, ssh keys, git username and password etc")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.source.secretRef.name"},".spec.constraints.checkov.source.secretRef.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"name is unique within a namespace to reference a secret resource.")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.source.secretRef.namespace"},".spec.constraints.checkov.source.secretRef.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"namespace defines the space within which the secret name must be unique.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.checkov.source.url"},".spec.constraints.checkov.source.url")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"URL is the source external checks - this is usually a git repository. The notation for this is ",(0,a.kt)("a",{href:"https://github.com/hashicorp/go-getter"},"https://github.com/hashicorp/go-getter"))))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules"},".spec.constraints.modules")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Modules provides the ability to control the source for all terraform modules. Allowing platform teams to control where the modules can be downloaded from.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.allowed"},".spec.constraints.modules.allowed")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Allowed is a collection of regexes which are applied to the source of the terraform configuration. The configuration MUST match one or more of the regexes in order to be allowed to run.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.allowed[*]"},".spec.constraints.modules.allowed[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector"},".spec.constraints.modules.selector")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Selector is the selector on the namespace or labels on the configuration. By leaving this field empty you are implicitly selecting all configurations.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace"},".spec.constraints.modules.selector.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Namespace is used to filter a configuration based on the namespace labels of where it exists")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchExpressions"},".spec.constraints.modules.selector.namespace.matchExpressions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchExpressions[*]"},".spec.constraints.modules.selector.namespace.matchExpressions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchExpressions[*].key"},".spec.constraints.modules.selector.namespace.matchExpressions[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"key is the label key that the selector applies to.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchExpressions[*].operator"},".spec.constraints.modules.selector.namespace.matchExpressions[*].operator")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchExpressions[*].values"},".spec.constraints.modules.selector.namespace.matchExpressions[*].values")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,a.kt)("div",{class:"property depth-8"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchExpressions[*].values[*]"},".spec.constraints.modules.selector.namespace.matchExpressions[*].values[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.namespace.matchLabels"},".spec.constraints.modules.selector.namespace.matchLabels")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource"},".spec.constraints.modules.selector.resource")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Resource provides the ability to filter a configuration based on it\u2019s labels")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchExpressions"},".spec.constraints.modules.selector.resource.matchExpressions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchExpressions[*]"},".spec.constraints.modules.selector.resource.matchExpressions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchExpressions[*].key"},".spec.constraints.modules.selector.resource.matchExpressions[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"key is the label key that the selector applies to.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchExpressions[*].operator"},".spec.constraints.modules.selector.resource.matchExpressions[*].operator")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchExpressions[*].values"},".spec.constraints.modules.selector.resource.matchExpressions[*].values")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,a.kt)("div",{class:"property depth-8"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchExpressions[*].values[*]"},".spec.constraints.modules.selector.resource.matchExpressions[*].values[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.constraints.modules.selector.resource.matchLabels"},".spec.constraints.modules.selector.resource.matchLabels")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults"},".spec.defaults")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Defaults provides the ability to target specific terraform module based on namespace or resource labels and automatically inject variables into the configurations.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*]"},".spec.defaults[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"DefaultVariables provides platform administrators the ability to inject default variables into a configuration")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].secrets"},".spec.defaults[*].secrets")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Secrets is a collection of secrets which are used to inject variables into the configuration")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].secrets[*]"},".spec.defaults[*].secrets[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector"},".spec.defaults[*].selector")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Selector is used to determine which configurations the variables should be injected into")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.modules"},".spec.defaults[*].selector.modules")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Modules provides a collection of regexes which are used to match against the configuration module")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.modules[*]"},".spec.defaults[*].selector.modules[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace"},".spec.defaults[*].selector.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Namespace selectors all configurations under one or more namespaces, determined by the labeling on the namespace.")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchExpressions"},".spec.defaults[*].selector.namespace.matchExpressions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-6"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchExpressions[*]"},".spec.defaults[*].selector.namespace.matchExpressions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchExpressions[*].key"},".spec.defaults[*].selector.namespace.matchExpressions[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"key is the label key that the selector applies to.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchExpressions[*].operator"},".spec.defaults[*].selector.namespace.matchExpressions[*].operator")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,a.kt)("div",{class:"property depth-7"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchExpressions[*].values"},".spec.defaults[*].selector.namespace.matchExpressions[*].values")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,a.kt)("div",{class:"property depth-8"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchExpressions[*].values[*]"},".spec.defaults[*].selector.namespace.matchExpressions[*].values[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-5"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].selector.namespace.matchLabels"},".spec.defaults[*].selector.namespace.matchLabels")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.defaults[*].variables"},".spec.defaults[*].variables")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Variables is a collection of variables to inject into the configuration")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.summary"},".spec.summary")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Summary is an optional field which can be used to define a summary of what the policy is configured to enforce.")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"PolicyStatus defines the observed state of a provider")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/76a64aa0.0e0f1c36.js b/assets/js/76a64aa0.e4ca46af.js similarity index 60% rename from assets/js/76a64aa0.0e0f1c36.js rename to assets/js/76a64aa0.e4ca46af.js index e464da8d..13654a73 100644 --- a/assets/js/76a64aa0.0e0f1c36.js +++ b/assets/js/76a64aa0.e4ca46af.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8443],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=r.createContext({}),p=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(a.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,a=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,d=u["".concat(a,".").concat(m)]||u[m]||f[m]||l;return n?r.createElement(d,c(c({ref:t},s),{},{components:n})):r.createElement(d,c({ref:t},s))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,c=new Array(l);c[0]=u;var i={};for(var a in t)hasOwnProperty.call(t,a)&&(i[a]=t[a]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var p=2;p{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>f,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl config"},c=void 0,i={unversionedId:"cli/tnctl_config",id:"cli/tnctl_config",title:"tnctl config",description:"tnctl config",source:"@site/docs/terranetes-controller/cli/tnctl_config.md",sourceDirName:"cli",slug:"/cli/tnctl_config",permalink:"/terranetes-controller/cli/tnctl_config",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_config.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl config"},sidebar:"tutorialSidebar",previous:{title:"tnctl completion zsh",permalink:"/terranetes-controller/cli/tnctl_completion_zsh"},next:{title:"tnctl config sources",permalink:"/terranetes-controller/cli/tnctl_config_sources"}},a={},p=[{value:"tnctl config",id:"tnctl-config",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function f(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-config"},"tnctl config"),(0,o.kt)("p",null,"Used to manage the CLI configuration"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl config COMMAND [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for config\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources"},"tnctl config sources"),"\t - Used to manage the sources of the terraform modules"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_view"},"tnctl config view"),"\t - Shows the current configuration of the CLI")))}f.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8443],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=r.createContext({}),p=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(a.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,a=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=p(n),m=o,d=u["".concat(a,".").concat(m)]||u[m]||f[m]||l;return n?r.createElement(d,c(c({ref:t},s),{},{components:n})):r.createElement(d,c({ref:t},s))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,c=new Array(l);c[0]=u;var i={};for(var a in t)hasOwnProperty.call(t,a)&&(i[a]=t[a]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var p=2;p{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>f,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl config"},c=void 0,i={unversionedId:"cli/tnctl_config",id:"cli/tnctl_config",title:"tnctl config",description:"tnctl config",source:"@site/docs/terranetes-controller/cli/tnctl_config.md",sourceDirName:"cli",slug:"/cli/tnctl_config",permalink:"/terranetes-controller/cli/tnctl_config",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_config.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl config"},sidebar:"tutorialSidebar",previous:{title:"tnctl completion zsh",permalink:"/terranetes-controller/cli/tnctl_completion_zsh"},next:{title:"tnctl config sources",permalink:"/terranetes-controller/cli/tnctl_config_sources"}},a={},p=[{value:"tnctl config",id:"tnctl-config",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function f(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-config"},"tnctl config"),(0,o.kt)("p",null,"Used to manage the CLI configuration"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl config COMMAND [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for config\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources"},"tnctl config sources"),"\t - Used to manage the sources of the terraform modules"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_view"},"tnctl config view"),"\t - Shows the current configuration of the CLI")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/78fe1062.7fade4b1.js b/assets/js/78fe1062.7fade4b1.js deleted file mode 100644 index abeb9d02..00000000 --- a/assets/js/78fe1062.7fade4b1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[867],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(r),d=i,v=p["".concat(s,".").concat(d)]||p[d]||f[d]||o;return r?n.createElement(v,a(a({ref:t},u),{},{components:r})):n.createElement(v,a({ref:t},u))}));function d(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,a[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>f,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(7462),i=(r(7294),r(3905));const o={title:"tnctl verify revision"},a=void 0,l={unversionedId:"cli/tnctl_verify_revision",id:"cli/tnctl_verify_revision",title:"tnctl verify revision",description:"tnctl verify revision",source:"@site/docs/terranetes-controller/cli/tnctl_verify_revision.md",sourceDirName:"cli",slug:"/cli/tnctl_verify_revision",permalink:"/terranetes-controller/cli/tnctl_verify_revision",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_verify_revision.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl verify revision"},sidebar:"tutorialSidebar",previous:{title:"tnctl verify",permalink:"/terranetes-controller/cli/tnctl_verify"},next:{title:"tnctl workflow",permalink:"/terranetes-controller/cli/tnctl_workflow"}},s={},c=[{value:"tnctl verify revision",id:"tnctl-verify-revision",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:c};function f(e){let{components:t,...r}=e;return(0,i.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"tnctl-verify-revision"},"tnctl verify revision"),(0,i.kt)("p",null,"Performs a series of checks against a Revision to ensure it is ready for use"),(0,i.kt)("h3",{id:"synopsis"},"Synopsis"),(0,i.kt)("p",null,"Performs a series of checks against the Revision to ensure the configuration is\nvalid and it will work with the within the cluster. This command uses the current\nkubeconfig context to retrieve details such as Provider/s, Policies and Contexts."),(0,i.kt)("p",null,"Verify the revision will work in the cluster\n$ tnctl verify revision revision.yaml"),(0,i.kt)("p",null,"We can also include additional files such as Contexts, Policies and Plans. This can\nbe useful if you want to test a revision against a specific context or policy, before\napplying it to the cluster.\n$ tnctl verify revision revision.yaml --source-dir /path/to/files"),(0,i.kt)("p",null,"When validating the module against the Checkov security policy, by default you\nscan the module rather than the terraform plan. While the module scan does pick\nmany issues some validation errors will only appear during the plan stage. You\nshould consider using the '--use-terraform-plan' flag. Note, this requires\nyou have the appropriate cloud credentials configured within your terminal\nenvironment.\n$ tnctl verify revision revision.yaml --use-terraform-plan"),(0,i.kt)("p",null,"To speed up multiple iterations of this command it's useful to use the --directory\nflag. This instructs the command to reuse the directory, rather then creating a\nan ephemeral one each time (and downloading, terraform provider, if --use-terraform-plan\nis enabled, and so forth). Note, the --directory flag will create files in the\ndirectory, so ensure there's no terraform files already there.\n$ tnctl verify revision revision.yaml --directory /path/to/directory"),(0,i.kt)("p",null,"Once verification has completed, you can continue to assure the Revision by running\nit against terraform itself\n$ tnctl convert revision revision.yaml | terraform plan -out plan.out"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"tnctl verify revision [OPTIONS] FILE [flags]\n")),(0,i.kt)("h3",{id:"options"},"Options"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"}," --checkov-image string The docker image of checkov to use when validating the security policy\n -d, --directory string Path to a directory to store temporary files\n -h, --help help for revision\n -s, --source-dir string Path to a directory containing additional (or overrides) files i.e. Contexts, Policies, Plans etc\n --terraform-image string The docker image of terraform to use when generating a plan\n --use-cluster Indicates if we should retrieve configuration from the current kubeconfig (default true)\n --use-terraform-plan Indicates if we should use a terraform plan to verify the security policy\n")),(0,i.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,i.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"../tnctl_verify"},"tnctl verify"),"\t - Used to verify and validate resources")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/78fe1062.948f2343.js b/assets/js/78fe1062.948f2343.js new file mode 100644 index 00000000..28e50683 --- /dev/null +++ b/assets/js/78fe1062.948f2343.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[867],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(r),d=i,v=p["".concat(s,".").concat(d)]||p[d]||f[d]||o;return r?n.createElement(v,a(a({ref:t},u),{},{components:r})):n.createElement(v,a({ref:t},u))}));function d(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,a=new Array(o);a[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:i,a[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>f,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(7462),i=(r(7294),r(3905));const o={title:"tnctl verify revision"},a=void 0,l={unversionedId:"cli/tnctl_verify_revision",id:"cli/tnctl_verify_revision",title:"tnctl verify revision",description:"tnctl verify revision",source:"@site/docs/terranetes-controller/cli/tnctl_verify_revision.md",sourceDirName:"cli",slug:"/cli/tnctl_verify_revision",permalink:"/terranetes-controller/cli/tnctl_verify_revision",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_verify_revision.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl verify revision"},sidebar:"tutorialSidebar",previous:{title:"tnctl verify",permalink:"/terranetes-controller/cli/tnctl_verify"},next:{title:"tnctl workflow",permalink:"/terranetes-controller/cli/tnctl_workflow"}},s={},c=[{value:"tnctl verify revision",id:"tnctl-verify-revision",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:c};function f(e){let{components:t,...r}=e;return(0,i.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"tnctl-verify-revision"},"tnctl verify revision"),(0,i.kt)("p",null,"Performs a series of checks against a Revision to ensure it is ready for use"),(0,i.kt)("h3",{id:"synopsis"},"Synopsis"),(0,i.kt)("p",null,"Performs a series of checks against the Revision to ensure the configuration is\nvalid and it will work with the within the cluster. This command uses the current\nkubeconfig context to retrieve details such as Provider/s, Policies and Contexts."),(0,i.kt)("p",null,"Verify the revision will work in the cluster\n$ tnctl verify revision revision.yaml"),(0,i.kt)("p",null,"We can also include additional files such as Contexts, Policies and Plans. This can\nbe useful if you want to test a revision against a specific context or policy, before\napplying it to the cluster.\n$ tnctl verify revision revision.yaml --source-dir /path/to/files"),(0,i.kt)("p",null,"When validating the module against the Checkov security policy, by default you\nscan the module rather than the terraform plan. While the module scan does pick\nmany issues some validation errors will only appear during the plan stage. You\nshould consider using the '--use-terraform-plan' flag. Note, this requires\nyou have the appropriate cloud credentials configured within your terminal\nenvironment.\n$ tnctl verify revision revision.yaml --use-terraform-plan"),(0,i.kt)("p",null,"To speed up multiple iterations of this command it's useful to use the --directory\nflag. This instructs the command to reuse the directory, rather then creating a\nan ephemeral one each time (and downloading, terraform provider, if --use-terraform-plan\nis enabled, and so forth). Note, the --directory flag will create files in the\ndirectory, so ensure there's no terraform files already there.\n$ tnctl verify revision revision.yaml --directory /path/to/directory"),(0,i.kt)("p",null,"Once verification has completed, you can continue to assure the Revision by running\nit against terraform itself\n$ tnctl convert revision revision.yaml | terraform plan -out plan.out"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"tnctl verify revision [OPTIONS] FILE [flags]\n")),(0,i.kt)("h3",{id:"options"},"Options"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"}," --checkov-image string The docker image of checkov to use when validating the security policy\n -d, --directory string Path to a directory to store temporary files\n -h, --help help for revision\n -s, --source-dir string Path to a directory containing additional (or overrides) files i.e. Contexts, Policies, Plans etc\n --terraform-image string The docker image of terraform to use when generating a plan\n --use-cluster Indicates if we should retrieve configuration from the current kubeconfig (default true)\n --use-terraform-plan Indicates if we should use a terraform plan to verify the security policy\n")),(0,i.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,i.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"../tnctl_verify"},"tnctl verify"),"\t - Used to verify and validate resources")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7b6e6716.93606159.js b/assets/js/7b6e6716.93606159.js deleted file mode 100644 index 9c62bc87..00000000 --- a/assets/js/7b6e6716.93606159.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9748],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),i=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=i(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),f=i(r),d=o,v=f["".concat(c,".").concat(d)]||f[d]||u[d]||a;return r?n.createElement(v,l(l({ref:t},s),{},{components:r})):n.createElement(v,l({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=f;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p.mdxType="string"==typeof e?e:o,l[1]=p;for(var i=2;i{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>i});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl approve"},l=void 0,p={unversionedId:"cli/tnctl_approve",id:"cli/tnctl_approve",title:"tnctl approve",description:"tnctl approve",source:"@site/docs/terranetes-controller/cli/tnctl_approve.md",sourceDirName:"cli",slug:"/cli/tnctl_approve",permalink:"/terranetes-controller/cli/tnctl_approve",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_approve.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl approve"},sidebar:"tutorialSidebar",previous:{title:"tnctl apply",permalink:"/terranetes-controller/cli/tnctl_apply"},next:{title:"tnctl approve cloudresource",permalink:"/terranetes-controller/cli/tnctl_approve_cloudresource"}},c={},i=[{value:"tnctl approve",id:"tnctl-approve",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:i};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-approve"},"tnctl approve"),(0,o.kt)("p",null,"Approves either a configuration or cloudresource"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Used to approve a terraform configuration and permit the\nconfiguration to move into the apply stage. This command\neffectively changes the terraform.appvia.io/apply annotation\nfrom 'false' to 'true'."),(0,o.kt)("p",null,"Approve one or more configurations\n$ tnctl approve configuration NAME"),(0,o.kt)("p",null,"Approve one or more cloudresource\n$ tnctl approve cloudresource NAME"),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for approve\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_approve_cloudresource"},"tnctl approve cloudresource"),"\t - Approves a cloudresource for release"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_approve_configuration"},"tnctl approve configuration"),"\t - Approves a configuration for release")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7b6e6716.c912450a.js b/assets/js/7b6e6716.c912450a.js new file mode 100644 index 00000000..67ce0e49 --- /dev/null +++ b/assets/js/7b6e6716.c912450a.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9748],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),c=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),f=c(r),d=o,v=f["".concat(i,".").concat(d)]||f[d]||u[d]||a;return r?n.createElement(v,l(l({ref:t},s),{},{components:r})):n.createElement(v,l({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=f;var p={};for(var i in t)hasOwnProperty.call(t,i)&&(p[i]=t[i]);p.originalType=e,p.mdxType="string"==typeof e?e:o,l[1]=p;for(var c=2;c{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl approve"},l=void 0,p={unversionedId:"cli/tnctl_approve",id:"cli/tnctl_approve",title:"tnctl approve",description:"tnctl approve",source:"@site/docs/terranetes-controller/cli/tnctl_approve.md",sourceDirName:"cli",slug:"/cli/tnctl_approve",permalink:"/terranetes-controller/cli/tnctl_approve",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_approve.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl approve"},sidebar:"tutorialSidebar",previous:{title:"tnctl apply",permalink:"/terranetes-controller/cli/tnctl_apply"},next:{title:"tnctl approve cloudresource",permalink:"/terranetes-controller/cli/tnctl_approve_cloudresource"}},i={},c=[{value:"tnctl approve",id:"tnctl-approve",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:c};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-approve"},"tnctl approve"),(0,o.kt)("p",null,"Approves either a configuration or cloudresource"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Used to approve a terraform configuration and permit the\nconfiguration to move into the apply stage. This command\neffectively changes the terraform.appvia.io/apply annotation\nfrom 'false' to 'true'."),(0,o.kt)("p",null,"Approve one or more configurations\n$ tnctl approve configuration NAME"),(0,o.kt)("p",null,"Approve one or more cloudresource\n$ tnctl approve cloudresource NAME"),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for approve\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_approve_cloudresource"},"tnctl approve cloudresource"),"\t - Approves a cloudresource for release"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_approve_configuration"},"tnctl approve configuration"),"\t - Approves a configuration for release")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7c405bef.7b803bc4.js b/assets/js/7c405bef.7b803bc4.js deleted file mode 100644 index 3013b601..00000000 --- a/assets/js/7c405bef.7b803bc4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5610],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(r),m=a,h=p["".concat(s,".").concat(m)]||p[m]||d[m]||o;return r?n.createElement(h,i(i({ref:t},u),{},{components:r})):n.createElement(h,i({ref:t},u))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:1},i="Terranetes CLI",l={unversionedId:"developer/tnctl",id:"developer/tnctl",title:"Terranetes CLI",description:"Terranetes comes bundled with a tnctl command (see Releases for downloads) which has ability to search for cloud resources. The search subcommand supports iterating through",source:"@site/docs/terranetes-controller/developer/tnctl.md",sourceDirName:"developer",slug:"/developer/tnctl",permalink:"/terranetes-controller/developer/tnctl",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/developer/tnctl.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Provisioning a Resource",permalink:"/terranetes-controller/developer/provision"},next:{title:"Using Private Repositories",permalink:"/terranetes-controller/developer/private"}},s={},c=[{value:"How to search",id:"how-to-search",level:2},{value:"Adding Sources",id:"adding-sources",level:2},{value:"Adding your Github organization",id:"adding-your-github-organization",level:3},{value:"Adding the Terraform Registry",id:"adding-the-terraform-registry",level:3},{value:"Integrate with Kubectl",id:"integrate-with-kubectl",level:2},{value:"Watching Logs",id:"watching-logs",level:2},{value:"Describing Configurations",id:"describing-configurations",level:2}],u={toc:c};function d(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"terranetes-cli"},"Terranetes CLI"),(0,a.kt)("p",null,"Terranetes comes bundled with a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl"},"tnctl")," command ",(0,a.kt)("em",{parentName:"p"},"(see ",(0,a.kt)("a",{parentName:"em",href:"/terranetes-controller/releases"},"Releases")," for downloads)")," which has ability to search for cloud resources. The ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl_search"},"search")," subcommand supports iterating through"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://registry.terraform.io"},"Terraform registry"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com"},"Github")," repositories and releases of any organization and or user.")),(0,a.kt)("h2",{id:"how-to-search"},"How to search"),(0,a.kt)("p",null,"Once one or more sources have been configured you can search for cloud resources via"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl search [TERMS]\n")),(0,a.kt)("p",null,"Looking for a ",(0,a.kt)("inlineCode",{parentName:"p"},"database")," module on ",(0,a.kt)("inlineCode",{parentName:"p"},"aws"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ tnctl search database\n? What cloud provider should we scope the search to? aws\n? Which resource do you want to provision?\n \u25b8[TF] terraform-aws-modules/dms\n [TF] babbel/secretsmanager-for-database-url\n [TF] terraform-aws-modules/dms\n [TF] connect-group/rds-finalsnapshot\n [TF] azavea/postgresql-rds\n [TF] franviera92/aurora\n [TF] bridgecrewio/secured-postgresql-rds\n [TF] felipefrizzo/rds-mysql\n [TF] felipefrizzo/rds-postgres\n [TF] devops4me/postgres-rds\n [TF] jessiehernandez/autorotated-database-credentials\n [TF] mnanchev/database-migration-service\n [TF] aleks-fofanov/rds-lambda-db-provisioner\n [TF] jessiehernandez/database-credentials-rotator\n\u2193 [TF] offensive-terraform/rds-snapshot-publicly-exposed\n\nName: dms\nNamespace: terraform-aws-modules\nModule: https://github.com/terraform-aws-modules/terraform-aws-dms\nSource: https://registry.terraform.io/namespaces/terraform-aws-modules\nCreated: 2022-06-23 17:41:50.716218 +0000 UTC\nDownloads: 16436\n\nTerraform module which creates AWS DMS (Database Migration Service) resources\n")),(0,a.kt)("p",null,"Next you will be prompted to choose the"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Tagged version"),(0,a.kt)("li",{parentName:"ul"},"Asked for any ",(0,a.kt)("strong",{parentName:"li"},"required")," inputs ",(0,a.kt)("em",{parentName:"li"},"(i.e. names, storages size and so forth)"))),(0,a.kt)("p",null,"The final piece will render a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," CRD ready to be consumed in your deployment pipeline."),(0,a.kt)("h2",{id:"adding-sources"},"Adding Sources"),(0,a.kt)("p",null,"You can add a source to the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl"},"tnctl")," command via ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl_config_sources"},"tnctl config sources")," command. For example to add"),(0,a.kt)("h3",{id:"adding-your-github-organization"},"Adding your Github organization"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl config sources add https://github.com/appvia\n")),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"If any of the terraform modules are in private repositories you must export your Github token via export GITHUB_TOKEN=TOKEN")),(0,a.kt)("h3",{id:"adding-the-terraform-registry"},"Adding the Terraform Registry"),(0,a.kt)("p",null,"You can add the Terraform registry via"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl config sources add https://registry.terraform.io\n")),(0,a.kt)("p",null,"Alternately you can scope the registry to a specific namespace"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl config sources add https://registry.terraform.io/namespaces/terraform-aws-modules\n")),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"You can add as many sources are you needs. The ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl_search"},"search")," will aggregate the results and present it findings as one.")),(0,a.kt)("h2",{id:"integrate-with-kubectl"},"Integrate with Kubectl"),(0,a.kt)("p",null,"You can integrate tnctl with Kubectl i.e. ",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl tnctl COMMAND"),"."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"Kubectl can recognize plugins based on the name. Lets assume you place an executable script in your ",(0,a.kt)("inlineCode",{parentName:"p"},"$PATH")," named ",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl-hello-world"),". This script can be called via ",(0,a.kt)("inlineCode",{parentName:"p"},"$ kubectl hello world"),". All the ",(0,a.kt)("inlineCode",{parentName:"p"},"tnctl kubectl plugin")," does it create an collection of these alias scripts i.e kubectl-tnctl-describe, kubectl-tnctl-logs and so forth in the desired location.")),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Run the ",(0,a.kt)("inlineCode",{parentName:"li"},"tnctl kubectl plugin -d DIRECTORY")," command. The directory here is the location of where the alias scripts should be located."),(0,a.kt)("li",{parentName:"ol"},"Ensure the alias scripts are included in your environment ",(0,a.kt)("inlineCode",{parentName:"li"},"$PATH")),(0,a.kt)("li",{parentName:"ol"},"Ensure the ",(0,a.kt)("inlineCode",{parentName:"li"},"tnctl")," is included in your environment ",(0,a.kt)("inlineCode",{parentName:"li"},"$PATH"),"."),(0,a.kt)("li",{parentName:"ol"},"You can now use kubectl directory ",(0,a.kt)("em",{parentName:"li"},"(note tab completion is configured via kubectl, please review their docs)"),".")),(0,a.kt)("h2",{id:"watching-logs"},"Watching Logs"),(0,a.kt)("p",null,"When a Configuration is run a pod is created in the namespace used to watch the logs. You can perform the"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Retrieve the pods via ",(0,a.kt)("inlineCode",{parentName:"li"},"kubectl get pods")),(0,a.kt)("li",{parentName:"ol"},"Find the appropriate pod based on the Configuration name and generation."),(0,a.kt)("li",{parentName:"ol"},"Watch the logs via ",(0,a.kt)("inlineCode",{parentName:"li"},"kubectl logs NAME -f"))),(0,a.kt)("p",null,"A faster alternative is to use the ","[logs]","(/terranetes-controller/cli/tnctl_logs]"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Type ",(0,a.kt)("inlineCode",{parentName:"li"},"tnctl logs -n NAMESPACE NAME [-f--follow]")),(0,a.kt)("li",{parentName:"ol"},"If the kubectl plugin integration has been enabled, you can use ",(0,a.kt)("inlineCode",{parentName:"li"},"kubectl tnctl logs [-n NAMESPACE] NAME [-f|--follow]"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'$ tnctl logs [cloudresource|configuration] -n apps bucket -f\n[info] waiting for the job to be scheduled\n[info] watching build: bucket, generation: 1 for the job to be scheduled\n........\n=======================================================\n\'SETTING UP THE ENVIRONMENT\'\n=======================================================\ntime="2022-08-09T09:59:37Z" level=info msg="downloading the assets" dest=/data source="https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0"\ntime="2022-08-09T09:59:38Z" level=info msg="successfully downloaded the source" source="https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0"\ntime="2022-08-09T09:59:38Z" level=info msg="successfully executed the step"\n\nInitializing the backend...\n\nSuccessfully configured the backend "kubernetes"! Terraform will automatically\nuse this backend unless the backend configuration changes.\n...\n')),(0,a.kt)("h2",{id:"describing-configurations"},"Describing Configurations"),(0,a.kt)("p",null,"You can the use"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"tnctl describe [cloudresource|configuration] -n NAMESPACE [NAME]")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"kubectl tnctl describe [cloudresource|configuration] [-n NAMESPACE] [NAME]"))),(0,a.kt)("p",null,"to provide insight into costs and policy."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"[jest@starfury terranetes-controller]$ bin/tnctl describe [cloudresource|configuration] -n apps bucket\nName: bucket\nNamespace: apps\nCreated: 2022-08-09T09:59:28Z\nStatus: OutOfSync\nAnnotations:\n terraform.appvia.io/apply false\nLabels: None\n\nConditions:\n==========\nName Reason Message\nProvider ready Ready Provider ready\nTerraform Plan Ready Terraform plan is complete\nSecurity Policy ActionRequired Configuration has failed security policy, refusing to continue\nTerraform Apply ActionRequired Waiting for terraform apply annotation to be set to true\nReady NotDetermined\n\nConfiguration:\n=============\nAuthentication: None\nModule: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0\nProvider: aws\nSecret: apps/test\n\nCheckov Security Policy:\n=======================\nStatus: Configuration has passed 11 and failed on 3 checks.\n\nCKV_AWS_18 FAILED\n\u251c\u2500 Name: Ensure the S3 bucket has access logging enabled\n\u251c\u2500 Resource: aws_s3_bucket.this[0]\n\u2514\u2500 Guide: https://docs.bridgecrew.io/docs/s3_13-enable-logging\nCKV_AWS_144 FAILED\n\u251c\u2500 Name: Ensure that S3 bucket has cross-region replication enabled\n\u251c\u2500 Resource: aws_s3_bucket.this[0]\n\u2514\u2500 Guide: https://docs.bridgecrew.io/docs/ensure-that-s3-bucket-has-cross-region-replication-enabled\n...\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7c405bef.9e6af7b9.js b/assets/js/7c405bef.9e6af7b9.js new file mode 100644 index 00000000..cca0cbc0 --- /dev/null +++ b/assets/js/7c405bef.9e6af7b9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5610],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(r),m=a,h=p["".concat(s,".").concat(m)]||p[m]||d[m]||o;return r?n.createElement(h,i(i({ref:t},u),{},{components:r})):n.createElement(h,i({ref:t},u))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=p;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:1},i="Terranetes CLI",l={unversionedId:"developer/tnctl",id:"developer/tnctl",title:"Terranetes CLI",description:"Terranetes comes bundled with a tnctl command (see Releases for downloads) which has ability to search for cloud resources. The search subcommand supports iterating through",source:"@site/docs/terranetes-controller/developer/tnctl.md",sourceDirName:"developer",slug:"/developer/tnctl",permalink:"/terranetes-controller/developer/tnctl",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/developer/tnctl.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Provisioning a Resource",permalink:"/terranetes-controller/developer/provision"},next:{title:"Using Private Repositories",permalink:"/terranetes-controller/developer/private"}},s={},c=[{value:"How to search",id:"how-to-search",level:2},{value:"Adding Sources",id:"adding-sources",level:2},{value:"Adding your Github organization",id:"adding-your-github-organization",level:3},{value:"Adding the Terraform Registry",id:"adding-the-terraform-registry",level:3},{value:"Integrate with Kubectl",id:"integrate-with-kubectl",level:2},{value:"Watching Logs",id:"watching-logs",level:2},{value:"Describing Configurations",id:"describing-configurations",level:2}],u={toc:c};function d(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"terranetes-cli"},"Terranetes CLI"),(0,a.kt)("p",null,"Terranetes comes bundled with a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl"},"tnctl")," command ",(0,a.kt)("em",{parentName:"p"},"(see ",(0,a.kt)("a",{parentName:"em",href:"/terranetes-controller/releases"},"Releases")," for downloads)")," which has ability to search for cloud resources. The ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl_search"},"search")," subcommand supports iterating through"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://registry.terraform.io"},"Terraform registry"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://github.com"},"Github")," repositories and releases of any organization and or user.")),(0,a.kt)("h2",{id:"how-to-search"},"How to search"),(0,a.kt)("p",null,"Once one or more sources have been configured you can search for cloud resources via"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl search [TERMS]\n")),(0,a.kt)("p",null,"Looking for a ",(0,a.kt)("inlineCode",{parentName:"p"},"database")," module on ",(0,a.kt)("inlineCode",{parentName:"p"},"aws"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ tnctl search database\n? What cloud provider should we scope the search to? aws\n? Which resource do you want to provision?\n \u25b8[TF] terraform-aws-modules/dms\n [TF] babbel/secretsmanager-for-database-url\n [TF] terraform-aws-modules/dms\n [TF] connect-group/rds-finalsnapshot\n [TF] azavea/postgresql-rds\n [TF] franviera92/aurora\n [TF] bridgecrewio/secured-postgresql-rds\n [TF] felipefrizzo/rds-mysql\n [TF] felipefrizzo/rds-postgres\n [TF] devops4me/postgres-rds\n [TF] jessiehernandez/autorotated-database-credentials\n [TF] mnanchev/database-migration-service\n [TF] aleks-fofanov/rds-lambda-db-provisioner\n [TF] jessiehernandez/database-credentials-rotator\n\u2193 [TF] offensive-terraform/rds-snapshot-publicly-exposed\n\nName: dms\nNamespace: terraform-aws-modules\nModule: https://github.com/terraform-aws-modules/terraform-aws-dms\nSource: https://registry.terraform.io/namespaces/terraform-aws-modules\nCreated: 2022-06-23 17:41:50.716218 +0000 UTC\nDownloads: 16436\n\nTerraform module which creates AWS DMS (Database Migration Service) resources\n")),(0,a.kt)("p",null,"Next you will be prompted to choose the"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Tagged version"),(0,a.kt)("li",{parentName:"ul"},"Asked for any ",(0,a.kt)("strong",{parentName:"li"},"required")," inputs ",(0,a.kt)("em",{parentName:"li"},"(i.e. names, storages size and so forth)"))),(0,a.kt)("p",null,"The final piece will render a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," CRD ready to be consumed in your deployment pipeline."),(0,a.kt)("h2",{id:"adding-sources"},"Adding Sources"),(0,a.kt)("p",null,"You can add a source to the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl"},"tnctl")," command via ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl_config_sources"},"tnctl config sources")," command. For example to add"),(0,a.kt)("h3",{id:"adding-your-github-organization"},"Adding your Github organization"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl config sources add https://github.com/appvia\n")),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"If any of the terraform modules are in private repositories you must export your Github token via export GITHUB_TOKEN=TOKEN")),(0,a.kt)("h3",{id:"adding-the-terraform-registry"},"Adding the Terraform Registry"),(0,a.kt)("p",null,"You can add the Terraform registry via"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl config sources add https://registry.terraform.io\n")),(0,a.kt)("p",null,"Alternately you can scope the registry to a specific namespace"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl config sources add https://registry.terraform.io/namespaces/terraform-aws-modules\n")),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"You can add as many sources are you needs. The ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl_search"},"search")," will aggregate the results and present it findings as one.")),(0,a.kt)("h2",{id:"integrate-with-kubectl"},"Integrate with Kubectl"),(0,a.kt)("p",null,"You can integrate tnctl with Kubectl i.e. ",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl tnctl COMMAND"),"."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"Kubectl can recognize plugins based on the name. Lets assume you place an executable script in your ",(0,a.kt)("inlineCode",{parentName:"p"},"$PATH")," named ",(0,a.kt)("inlineCode",{parentName:"p"},"kubectl-hello-world"),". This script can be called via ",(0,a.kt)("inlineCode",{parentName:"p"},"$ kubectl hello world"),". All the ",(0,a.kt)("inlineCode",{parentName:"p"},"tnctl kubectl plugin")," does it create an collection of these alias scripts i.e kubectl-tnctl-describe, kubectl-tnctl-logs and so forth in the desired location.")),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Run the ",(0,a.kt)("inlineCode",{parentName:"li"},"tnctl kubectl plugin -d DIRECTORY")," command. The directory here is the location of where the alias scripts should be located."),(0,a.kt)("li",{parentName:"ol"},"Ensure the alias scripts are included in your environment ",(0,a.kt)("inlineCode",{parentName:"li"},"$PATH")),(0,a.kt)("li",{parentName:"ol"},"Ensure the ",(0,a.kt)("inlineCode",{parentName:"li"},"tnctl")," is included in your environment ",(0,a.kt)("inlineCode",{parentName:"li"},"$PATH"),"."),(0,a.kt)("li",{parentName:"ol"},"You can now use kubectl directory ",(0,a.kt)("em",{parentName:"li"},"(note tab completion is configured via kubectl, please review their docs)"),".")),(0,a.kt)("h2",{id:"watching-logs"},"Watching Logs"),(0,a.kt)("p",null,"When a Configuration is run a pod is created in the namespace used to watch the logs. You can perform the"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Retrieve the pods via ",(0,a.kt)("inlineCode",{parentName:"li"},"kubectl get pods")),(0,a.kt)("li",{parentName:"ol"},"Find the appropriate pod based on the Configuration name and generation."),(0,a.kt)("li",{parentName:"ol"},"Watch the logs via ",(0,a.kt)("inlineCode",{parentName:"li"},"kubectl logs NAME -f"))),(0,a.kt)("p",null,"A faster alternative is to use the ","[logs]","(/terranetes-controller/cli/tnctl_logs]"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Type ",(0,a.kt)("inlineCode",{parentName:"li"},"tnctl logs -n NAMESPACE NAME [-f--follow]")),(0,a.kt)("li",{parentName:"ol"},"If the kubectl plugin integration has been enabled, you can use ",(0,a.kt)("inlineCode",{parentName:"li"},"kubectl tnctl logs [-n NAMESPACE] NAME [-f|--follow]"))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'$ tnctl logs [cloudresource|configuration] -n apps bucket -f\n[info] waiting for the job to be scheduled\n[info] watching build: bucket, generation: 1 for the job to be scheduled\n........\n=======================================================\n\'SETTING UP THE ENVIRONMENT\'\n=======================================================\ntime="2022-08-09T09:59:37Z" level=info msg="downloading the assets" dest=/data source="https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0"\ntime="2022-08-09T09:59:38Z" level=info msg="successfully downloaded the source" source="https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0"\ntime="2022-08-09T09:59:38Z" level=info msg="successfully executed the step"\n\nInitializing the backend...\n\nSuccessfully configured the backend "kubernetes"! Terraform will automatically\nuse this backend unless the backend configuration changes.\n...\n')),(0,a.kt)("h2",{id:"describing-configurations"},"Describing Configurations"),(0,a.kt)("p",null,"You can the use"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"tnctl describe [cloudresource|configuration] -n NAMESPACE [NAME]")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("inlineCode",{parentName:"li"},"kubectl tnctl describe [cloudresource|configuration] [-n NAMESPACE] [NAME]"))),(0,a.kt)("p",null,"to provide insight into costs and policy."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"[jest@starfury terranetes-controller]$ bin/tnctl describe [cloudresource|configuration] -n apps bucket\nName: bucket\nNamespace: apps\nCreated: 2022-08-09T09:59:28Z\nStatus: OutOfSync\nAnnotations:\n terraform.appvia.io/apply false\nLabels: None\n\nConditions:\n==========\nName Reason Message\nProvider ready Ready Provider ready\nTerraform Plan Ready Terraform plan is complete\nSecurity Policy ActionRequired Configuration has failed security policy, refusing to continue\nTerraform Apply ActionRequired Waiting for terraform apply annotation to be set to true\nReady NotDetermined\n\nConfiguration:\n=============\nAuthentication: None\nModule: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0\nProvider: aws\nSecret: apps/test\n\nCheckov Security Policy:\n=======================\nStatus: Configuration has passed 11 and failed on 3 checks.\n\nCKV_AWS_18 FAILED\n\u251c\u2500 Name: Ensure the S3 bucket has access logging enabled\n\u251c\u2500 Resource: aws_s3_bucket.this[0]\n\u2514\u2500 Guide: https://docs.bridgecrew.io/docs/s3_13-enable-logging\nCKV_AWS_144 FAILED\n\u251c\u2500 Name: Ensure that S3 bucket has cross-region replication enabled\n\u251c\u2500 Resource: aws_s3_bucket.this[0]\n\u2514\u2500 Guide: https://docs.bridgecrew.io/docs/ensure-that-s3-bucket-has-cross-region-replication-enabled\n...\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7d5b2696.9cd6c856.js b/assets/js/7d5b2696.5358ad29.js similarity index 54% rename from assets/js/7d5b2696.9cd6c856.js rename to assets/js/7d5b2696.5358ad29.js index f10ccab4..5e65ac65 100644 --- a/assets/js/7d5b2696.9cd6c856.js +++ b/assets/js/7d5b2696.5358ad29.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9664],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),s=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,i=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=s(n),f=a,m=d["".concat(i,".").concat(f)]||d[f]||u[f]||l;return n?r.createElement(m,o(o({ref:t},p),{},{components:n})):r.createElement(m,o({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,o=new Array(l);o[0]=d;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:a,o[1]=c;for(var s=2;s{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const l={title:"tnctl state clean"},o=void 0,c={unversionedId:"cli/tnctl_state_clean",id:"cli/tnctl_state_clean",title:"tnctl state clean",description:"tnctl state clean",source:"@site/docs/terranetes-controller/cli/tnctl_state_clean.md",sourceDirName:"cli",slug:"/cli/tnctl_state_clean",permalink:"/terranetes-controller/cli/tnctl_state_clean",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_state_clean.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl state clean"},sidebar:"tutorialSidebar",previous:{title:"tnctl state",permalink:"/terranetes-controller/cli/tnctl_state"},next:{title:"tnctl state list",permalink:"/terranetes-controller/cli/tnctl_state_list"}},i={},s=[{value:"tnctl state clean",id:"tnctl-state-clean",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"tnctl-state-clean"},"tnctl state clean"),(0,a.kt)("p",null,"Cleans any orphaned state, cost, config or policy secrets"),(0,a.kt)("h3",{id:"synopsis"},"Synopsis"),(0,a.kt)("p",null,"The clean command will clean any orphaned state, cost, config or policy secrets.\nThese are kubernetes secrets which are not associated with a configuration."),(0,a.kt)("h1",{id:"clean-all-orphaned-secrets-you-will-be-prompted-to-confirm"},"Clean all orphaned secrets (you will be prompted to confirm)"),(0,a.kt)("p",null,"$ tnctl state clean"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"tnctl state clean [OPTIONS] [flags]\n")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},' --controller-namespace string The namespace the controller is running in (default "terraform-system")\n --force Force the deletion of the secrets\n -h, --help help for clean\n')),(0,a.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,a.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_state"},"tnctl state"),"\t - Used to manage the Terraform Configuration state secrets")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9664],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i=r.createContext({}),s=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=s(e.components);return r.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,i=e.parentName,p=c(e,["components","mdxType","originalType","parentName"]),d=s(n),f=a,m=d["".concat(i,".").concat(f)]||d[f]||u[f]||l;return n?r.createElement(m,o(o({ref:t},p),{},{components:n})):r.createElement(m,o({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,o=new Array(l);o[0]=d;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:a,o[1]=c;for(var s=2;s{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const l={title:"tnctl state clean"},o=void 0,c={unversionedId:"cli/tnctl_state_clean",id:"cli/tnctl_state_clean",title:"tnctl state clean",description:"tnctl state clean",source:"@site/docs/terranetes-controller/cli/tnctl_state_clean.md",sourceDirName:"cli",slug:"/cli/tnctl_state_clean",permalink:"/terranetes-controller/cli/tnctl_state_clean",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_state_clean.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl state clean"},sidebar:"tutorialSidebar",previous:{title:"tnctl state",permalink:"/terranetes-controller/cli/tnctl_state"},next:{title:"tnctl state list",permalink:"/terranetes-controller/cli/tnctl_state_list"}},i={},s=[{value:"tnctl state clean",id:"tnctl-state-clean",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"tnctl-state-clean"},"tnctl state clean"),(0,a.kt)("p",null,"Cleans any orphaned state, cost, config or policy secrets"),(0,a.kt)("h3",{id:"synopsis"},"Synopsis"),(0,a.kt)("p",null,"The clean command will clean any orphaned state, cost, config or policy secrets.\nThese are kubernetes secrets which are not associated with a configuration."),(0,a.kt)("h1",{id:"clean-all-orphaned-secrets-you-will-be-prompted-to-confirm"},"Clean all orphaned secrets (you will be prompted to confirm)"),(0,a.kt)("p",null,"$ tnctl state clean"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"tnctl state clean [OPTIONS] [flags]\n")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},' --controller-namespace string The namespace the controller is running in (default "terraform-system")\n --force Force the deletion of the secrets\n -h, --help help for clean\n')),(0,a.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,a.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl_state"},"tnctl state"),"\t - Used to manage the Terraform Configuration state secrets")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7f5abaf4.338325cb.js b/assets/js/7f5abaf4.338325cb.js deleted file mode 100644 index a695e92c..00000000 --- a/assets/js/7f5abaf4.338325cb.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9615],{3905:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>d});var o=t(7294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(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 i(e){for(var r=1;r=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var s=o.createContext({}),c=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},u=function(e){var r=c(e.components);return o.createElement(s.Provider,{value:r},e.children)},p={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},m=o.forwardRef((function(e,r){var t=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=c(t),d=n,_=m["".concat(s,".").concat(d)]||m[d]||p[d]||a;return t?o.createElement(_,i(i({ref:r},u),{},{components:t})):o.createElement(_,i({ref:r},u))}));function d(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var a=t.length,i=new Array(a);i[0]=m;var l={};for(var s in r)hasOwnProperty.call(r,s)&&(l[s]=r[s]);l.originalType=e,l.mdxType="string"==typeof e?e:n,i[1]=l;for(var c=2;c{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var o=t(7462),n=(t(7294),t(3905));const a={},i="Metrics",l={unversionedId:"admin/observability/metrics",id:"admin/observability/metrics",title:"Metrics",description:"The controller exposes a number of prometheus metrics that can be utilized for tracking operational conditions and usage metrics (i.e. configurations).",source:"@site/docs/terranetes-controller/admin/observability/metrics.md",sourceDirName:"admin/observability",slug:"/admin/observability/metrics",permalink:"/terranetes-controller/admin/observability/metrics",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/observability/metrics.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Observability",permalink:"/terranetes-controller/category/observability"},next:{title:"Expose Costs",permalink:"/terranetes-controller/admin/costs"}},s={},c=[{value:"Viewing the metrics",id:"viewing-the-metrics",level:3},{value:"Predicted Cost Metrics",id:"predicted-cost-metrics",level:3},{value:"Controller Metrics",id:"controller-metrics",level:3},{value:"Webhook Metrics",id:"webhook-metrics",level:3}],u={toc:c};function p(e){let{components:r,...t}=e;return(0,n.kt)("wrapper",(0,o.Z)({},u,t,{components:r,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"metrics"},"Metrics"),(0,n.kt)("p",null,"The controller exposes a number of prometheus metrics that can be utilized for tracking operational conditions and usage metrics (i.e. configurations)."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Track the reconciliation of the resources and their current status."),(0,n.kt)("li",{parentName:"ul"},"Track the error and success rates of the controllers."),(0,n.kt)("li",{parentName:"ul"},"Track the associated costs to each of the configurations ",(0,n.kt)("em",{parentName:"li"},"(assuming the integration is enabled)"),".")),(0,n.kt)("p",null,"By default these are exposed on port ",(0,n.kt)("inlineCode",{parentName:"p"},"9090")," though you can change this in the helm chart via"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"controller:\n metricsPort: PORT\n")),(0,n.kt)("h3",{id:"viewing-the-metrics"},"Viewing the metrics"),(0,n.kt)("p",null,"You can port forward into the controller and curl the metrics endpoint."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl -n terraform-system port-forward 9090\n# And then curl the metrics from another terminal\n$ curl http://localhost:9090/metrics\n")),(0,n.kt)("p",null,"This maps to the ",(0,n.kt)("inlineCode",{parentName:"p"},"--metrics-port PORT")," command line argument if not using the chart."),(0,n.kt)("h3",{id:"predicted-cost-metrics"},"Predicted Cost Metrics"),(0,n.kt)("p",null,"When the integration is enabled all ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," automatically expose their predicted monthly and hourly costs. Allowing the platform team to dashboard usage and or alerting on high figures. The metrics will take the form"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},'configuration_hourly_cost_total{namespace="NAMESPACE", name="NAME"} = \nconfiguration_monthly_cost_total{namespace="NAMESPACE", name="NAME"} = \n')),(0,n.kt)("h3",{id:"controller-metrics"},"Controller Metrics"),(0,n.kt)("p",null,"The ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/kubernetes-sigs/controller-runtime"},"controller-runtime")," exposes a number of metrics by default, covering success, requeue and error counters, to duration of reconciliation's and more."),(0,n.kt)("p",null,"Perhaps most useful from an alerting perspective are the error counters; an example for which is given below"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},'controller_runtime_reconcile_total{controller="configuration.terraform.appvia.io",result="error"} 0\ncontroller_runtime_reconcile_total{controller="configuration.terraform.appvia.io",result="requeue"} 0\ncontroller_runtime_reconcile_total{controller="configuration.terraform.appvia.io",result="requeue_after"} 0\ncontroller_runtime_reconcile_total{controller="configuration.terraform.appvia.io",result="success"} 0\ncontroller_runtime_reconcile_total{controller="provider.terraform.appvia.io",result="error"} 0\ncontroller_runtime_reconcile_total{controller="provider.terraform.appvia.io",result="requeue"} 0\ncontroller_runtime_reconcile_total{controller="provider.terraform.appvia.io",result="requeue_after"} 0\ncontroller_runtime_reconcile_total{controller="provider.terraform.appvia.io",result="success"} 2\n')),(0,n.kt)("p",null,"That can be used to notify the platform team if the controller is experiencing issues."),(0,n.kt)("h3",{id:"webhook-metrics"},"Webhook Metrics"),(0,n.kt)("p",null,"The terraform controller uses a number of ",(0,n.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/"},"validating and mutating webhooks")," to ensure the integrity of the resources."),(0,n.kt)("p",null,"Similar to controller metrics these are exposed out of the box via the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/kubernetes-sigs/controller-runtime"},"controller runtime")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},'[jest@starfury terranetes-controller]$ curl -s http://localhost:9090/metrics | grep webhook\n# HELP controller_runtime_webhook_latency_seconds Histogram of the latency of processing admission requests\n# TYPE controller_runtime_webhook_latency_seconds histogram\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.005"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.01"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.025"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.05"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.1"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.25"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.5"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="1"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="2.5"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="5"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="10"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="+Inf"} 2\ncontroller_runtime_webhook_latency_seconds_sum{webhook="/validate/terraform.appvia.io/providers"} 0.001305876\ncontroller_runtime_webhook_latency_seconds_count{webhook="/validate/terraform.appvia.io/providers"} 2\n# HELP controller_runtime_webhook_requests_in_flight Current number of admission requests being served.\n# TYPE controller_runtime_webhook_requests_in_flight gauge\ncontroller_runtime_webhook_requests_in_flight{webhook="/mutate/terraform.appvia.io/configurations"} 0\ncontroller_runtime_webhook_requests_in_flight{webhook="/validate/terraform.appvia.io/configurations"} 0\ncontroller_runtime_webhook_requests_in_flight{webhook="/validate/terraform.appvia.io/policies"} 0\ncontroller_runtime_webhook_requests_in_flight{webhook="/validate/terraform.appvia.io/providers"} 0\n# HELP controller_runtime_webhook_requests_total Total number of admission requests by HTTP status code.\n# TYPE controller_runtime_webhook_requests_total counter\ncontroller_runtime_webhook_requests_total{code="200",webhook="/mutate/terraform.appvia.io/configurations"} 0\ncontroller_runtime_webhook_requests_total{code="200",webhook="/validate/terraform.appvia.io/configurations"} 0\ncontroller_runtime_webhook_requests_total{code="200",webhook="/validate/terraform.appvia.io/policies"} 0\ncontroller_runtime_webhook_requests_total{code="200",webhook="/validate/terraform.appvia.io/providers"} 2\ncontroller_runtime_webhook_requests_total{code="500",webhook="/mutate/terraform.appvia.io/configurations"} 0\ncontroller_runtime_webhook_requests_total{code="500",webhook="/validate/terraform.appvia.io/configurations"} 0\ncontroller_runtime_webhook_requests_total{code="500",webhook="/validate/terraform.appvia.io/policies"} 0\ncontroller_runtime_webhook_requests_total{code="500",webhook="/validate/terraform.appvia.io/providers"} 0\n')))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7f5abaf4.b52ae588.js b/assets/js/7f5abaf4.b52ae588.js new file mode 100644 index 00000000..591f1f7b --- /dev/null +++ b/assets/js/7f5abaf4.b52ae588.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9615],{3905:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>d});var o=t(7294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(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 i(e){for(var r=1;r=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var s=o.createContext({}),c=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},u=function(e){var r=c(e.components);return o.createElement(s.Provider,{value:r},e.children)},p={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},m=o.forwardRef((function(e,r){var t=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=c(t),d=n,_=m["".concat(s,".").concat(d)]||m[d]||p[d]||a;return t?o.createElement(_,i(i({ref:r},u),{},{components:t})):o.createElement(_,i({ref:r},u))}));function d(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var a=t.length,i=new Array(a);i[0]=m;var l={};for(var s in r)hasOwnProperty.call(r,s)&&(l[s]=r[s]);l.originalType=e,l.mdxType="string"==typeof e?e:n,i[1]=l;for(var c=2;c{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var o=t(7462),n=(t(7294),t(3905));const a={},i="Metrics",l={unversionedId:"admin/observability/metrics",id:"admin/observability/metrics",title:"Metrics",description:"The controller exposes a number of prometheus metrics that can be utilized for tracking operational conditions and usage metrics (i.e. configurations).",source:"@site/docs/terranetes-controller/admin/observability/metrics.md",sourceDirName:"admin/observability",slug:"/admin/observability/metrics",permalink:"/terranetes-controller/admin/observability/metrics",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/observability/metrics.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{},sidebar:"tutorialSidebar",previous:{title:"Observability",permalink:"/terranetes-controller/category/observability"},next:{title:"Expose Costs",permalink:"/terranetes-controller/admin/costs"}},s={},c=[{value:"Viewing the metrics",id:"viewing-the-metrics",level:3},{value:"Predicted Cost Metrics",id:"predicted-cost-metrics",level:3},{value:"Controller Metrics",id:"controller-metrics",level:3},{value:"Webhook Metrics",id:"webhook-metrics",level:3}],u={toc:c};function p(e){let{components:r,...t}=e;return(0,n.kt)("wrapper",(0,o.Z)({},u,t,{components:r,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"metrics"},"Metrics"),(0,n.kt)("p",null,"The controller exposes a number of prometheus metrics that can be utilized for tracking operational conditions and usage metrics (i.e. configurations)."),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Track the reconciliation of the resources and their current status."),(0,n.kt)("li",{parentName:"ul"},"Track the error and success rates of the controllers."),(0,n.kt)("li",{parentName:"ul"},"Track the associated costs to each of the configurations ",(0,n.kt)("em",{parentName:"li"},"(assuming the integration is enabled)"),".")),(0,n.kt)("p",null,"By default these are exposed on port ",(0,n.kt)("inlineCode",{parentName:"p"},"9090")," though you can change this in the helm chart via"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-yaml"},"controller:\n metricsPort: PORT\n")),(0,n.kt)("h3",{id:"viewing-the-metrics"},"Viewing the metrics"),(0,n.kt)("p",null,"You can port forward into the controller and curl the metrics endpoint."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl -n terraform-system port-forward 9090\n# And then curl the metrics from another terminal\n$ curl http://localhost:9090/metrics\n")),(0,n.kt)("p",null,"This maps to the ",(0,n.kt)("inlineCode",{parentName:"p"},"--metrics-port PORT")," command line argument if not using the chart."),(0,n.kt)("h3",{id:"predicted-cost-metrics"},"Predicted Cost Metrics"),(0,n.kt)("p",null,"When the integration is enabled all ",(0,n.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," automatically expose their predicted monthly and hourly costs. Allowing the platform team to dashboard usage and or alerting on high figures. The metrics will take the form"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},'configuration_hourly_cost_total{namespace="NAMESPACE", name="NAME"} = \nconfiguration_monthly_cost_total{namespace="NAMESPACE", name="NAME"} = \n')),(0,n.kt)("h3",{id:"controller-metrics"},"Controller Metrics"),(0,n.kt)("p",null,"The ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/kubernetes-sigs/controller-runtime"},"controller-runtime")," exposes a number of metrics by default, covering success, requeue and error counters, to duration of reconciliation's and more."),(0,n.kt)("p",null,"Perhaps most useful from an alerting perspective are the error counters; an example for which is given below"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},'controller_runtime_reconcile_total{controller="configuration.terraform.appvia.io",result="error"} 0\ncontroller_runtime_reconcile_total{controller="configuration.terraform.appvia.io",result="requeue"} 0\ncontroller_runtime_reconcile_total{controller="configuration.terraform.appvia.io",result="requeue_after"} 0\ncontroller_runtime_reconcile_total{controller="configuration.terraform.appvia.io",result="success"} 0\ncontroller_runtime_reconcile_total{controller="provider.terraform.appvia.io",result="error"} 0\ncontroller_runtime_reconcile_total{controller="provider.terraform.appvia.io",result="requeue"} 0\ncontroller_runtime_reconcile_total{controller="provider.terraform.appvia.io",result="requeue_after"} 0\ncontroller_runtime_reconcile_total{controller="provider.terraform.appvia.io",result="success"} 2\n')),(0,n.kt)("p",null,"That can be used to notify the platform team if the controller is experiencing issues."),(0,n.kt)("h3",{id:"webhook-metrics"},"Webhook Metrics"),(0,n.kt)("p",null,"The terraform controller uses a number of ",(0,n.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/"},"validating and mutating webhooks")," to ensure the integrity of the resources."),(0,n.kt)("p",null,"Similar to controller metrics these are exposed out of the box via the ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/kubernetes-sigs/controller-runtime"},"controller runtime")),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-shell"},'[jest@starfury terranetes-controller]$ curl -s http://localhost:9090/metrics | grep webhook\n# HELP controller_runtime_webhook_latency_seconds Histogram of the latency of processing admission requests\n# TYPE controller_runtime_webhook_latency_seconds histogram\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.005"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.01"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.025"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.05"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.1"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.25"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="0.5"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="1"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="2.5"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="5"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="10"} 2\ncontroller_runtime_webhook_latency_seconds_bucket{webhook="/validate/terraform.appvia.io/providers",le="+Inf"} 2\ncontroller_runtime_webhook_latency_seconds_sum{webhook="/validate/terraform.appvia.io/providers"} 0.001305876\ncontroller_runtime_webhook_latency_seconds_count{webhook="/validate/terraform.appvia.io/providers"} 2\n# HELP controller_runtime_webhook_requests_in_flight Current number of admission requests being served.\n# TYPE controller_runtime_webhook_requests_in_flight gauge\ncontroller_runtime_webhook_requests_in_flight{webhook="/mutate/terraform.appvia.io/configurations"} 0\ncontroller_runtime_webhook_requests_in_flight{webhook="/validate/terraform.appvia.io/configurations"} 0\ncontroller_runtime_webhook_requests_in_flight{webhook="/validate/terraform.appvia.io/policies"} 0\ncontroller_runtime_webhook_requests_in_flight{webhook="/validate/terraform.appvia.io/providers"} 0\n# HELP controller_runtime_webhook_requests_total Total number of admission requests by HTTP status code.\n# TYPE controller_runtime_webhook_requests_total counter\ncontroller_runtime_webhook_requests_total{code="200",webhook="/mutate/terraform.appvia.io/configurations"} 0\ncontroller_runtime_webhook_requests_total{code="200",webhook="/validate/terraform.appvia.io/configurations"} 0\ncontroller_runtime_webhook_requests_total{code="200",webhook="/validate/terraform.appvia.io/policies"} 0\ncontroller_runtime_webhook_requests_total{code="200",webhook="/validate/terraform.appvia.io/providers"} 2\ncontroller_runtime_webhook_requests_total{code="500",webhook="/mutate/terraform.appvia.io/configurations"} 0\ncontroller_runtime_webhook_requests_total{code="500",webhook="/validate/terraform.appvia.io/configurations"} 0\ncontroller_runtime_webhook_requests_total{code="500",webhook="/validate/terraform.appvia.io/policies"} 0\ncontroller_runtime_webhook_requests_total{code="500",webhook="/validate/terraform.appvia.io/providers"} 0\n')))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/815f509d.a3541e40.js b/assets/js/815f509d.93677533.js similarity index 52% rename from assets/js/815f509d.a3541e40.js rename to assets/js/815f509d.93677533.js index 24b6afd7..3c26fd85 100644 --- a/assets/js/815f509d.a3541e40.js +++ b/assets/js/815f509d.93677533.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5160],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=s(r),m=o,f=d["".concat(i,".").concat(m)]||d[m]||p[m]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:o,c[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl create cloudresource"},c=void 0,l={unversionedId:"cli/tnctl_create_cloudresource",id:"cli/tnctl_create_cloudresource",title:"tnctl create cloudresource",description:"tnctl create cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_create_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_create_cloudresource",permalink:"/terranetes-controller/cli/tnctl_create_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_create_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl create cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl create",permalink:"/terranetes-controller/cli/tnctl_create"},next:{title:"tnctl create configuration",permalink:"/terranetes-controller/cli/tnctl_create_configuration"}},i={},s=[{value:"tnctl create cloudresource",id:"tnctl-create-cloudresource",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-create-cloudresource"},"tnctl create cloudresource"),(0,o.kt)("p",null,"Used to create a cloud resource from a plan"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Create a terranetes revision from a terraform module. The command will\nretrieve the module code if required, parse the attributes from the code\nand build a plan."),(0,o.kt)("p",null,"Create a terranetes revision from the current directory\n$ tnctl create revision ."),(0,o.kt)("p",null,"Create a terranetes revision from a terraform module in a git repository\n$ tnctl create revision -n test.01 -m ",(0,o.kt)("a",{parentName:"p",href:"https://examples.com/terraform-module.git?ref=v1.0.0"},"https://examples.com/terraform-module.git?ref=v1.0.0")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl create cloudresource [OPTIONS] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -f, --filename string The name of the file to write the cloud resource to\n -h, --help help for cloudresource\n --plan string The name of the plan to use\n --revision string The semvar version of this revision\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_create"},"tnctl create"),"\t - Used to create a resource")))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5160],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=s(r),m=o,f=d["".concat(i,".").concat(m)]||d[m]||p[m]||a;return r?n.createElement(f,c(c({ref:t},u),{},{components:r})):n.createElement(f,c({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,c=new Array(a);c[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:o,c[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl create cloudresource"},c=void 0,l={unversionedId:"cli/tnctl_create_cloudresource",id:"cli/tnctl_create_cloudresource",title:"tnctl create cloudresource",description:"tnctl create cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_create_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_create_cloudresource",permalink:"/terranetes-controller/cli/tnctl_create_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_create_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl create cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl create",permalink:"/terranetes-controller/cli/tnctl_create"},next:{title:"tnctl create configuration",permalink:"/terranetes-controller/cli/tnctl_create_configuration"}},i={},s=[{value:"tnctl create cloudresource",id:"tnctl-create-cloudresource",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-create-cloudresource"},"tnctl create cloudresource"),(0,o.kt)("p",null,"Used to create a cloud resource from a plan"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Create a terranetes revision from a terraform module. The command will\nretrieve the module code if required, parse the attributes from the code\nand build a plan."),(0,o.kt)("p",null,"Create a terranetes revision from the current directory\n$ tnctl create revision ."),(0,o.kt)("p",null,"Create a terranetes revision from a terraform module in a git repository\n$ tnctl create revision -n test.01 -m ",(0,o.kt)("a",{parentName:"p",href:"https://examples.com/terraform-module.git?ref=v1.0.0"},"https://examples.com/terraform-module.git?ref=v1.0.0")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl create cloudresource [OPTIONS] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -f, --filename string The name of the file to write the cloud resource to\n -h, --help help for cloudresource\n --plan string The name of the plan to use\n --revision string The semvar version of this revision\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_create"},"tnctl create"),"\t - Used to create a resource")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/81fc0eae.4cba3626.js b/assets/js/81fc0eae.d1815302.js similarity index 58% rename from assets/js/81fc0eae.4cba3626.js rename to assets/js/81fc0eae.d1815302.js index 561feae5..526b8134 100644 --- a/assets/js/81fc0eae.4cba3626.js +++ b/assets/js/81fc0eae.d1815302.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[1458],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(l[r]=e[r]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r])}return l}var i=n.createContext({}),c=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,l=e.mdxType,a=e.originalType,i=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),d=c(r),f=l,m=d["".concat(i,".").concat(f)]||d[f]||u[f]||a;return r?n.createElement(m,o(o({ref:t},s),{},{components:r})):n.createElement(m,o({ref:t},s))}));function f(e,t){var r=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var a=r.length,o=new Array(a);o[0]=d;var p={};for(var i in t)hasOwnProperty.call(t,i)&&(p[i]=t[i]);p.originalType=e,p.mdxType="string"==typeof e?e:l,o[1]=p;for(var c=2;c{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var n=r(7462),l=(r(7294),r(3905));const a={title:"tnctl apply"},o=void 0,p={unversionedId:"cli/tnctl_apply",id:"cli/tnctl_apply",title:"tnctl apply",description:"tnctl apply",source:"@site/docs/terranetes-controller/cli/tnctl_apply.md",sourceDirName:"cli",slug:"/cli/tnctl_apply",permalink:"/terranetes-controller/cli/tnctl_apply",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_apply.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl apply"},sidebar:"tutorialSidebar",previous:{title:"tnctl",permalink:"/terranetes-controller/cli/tnctl"},next:{title:"tnctl approve",permalink:"/terranetes-controller/cli/tnctl_approve"}},i={},c=[{value:"tnctl apply",id:"tnctl-apply",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:c};function u(e){let{components:t,...r}=e;return(0,l.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-apply"},"tnctl apply"),(0,l.kt)("p",null,"Used to apply from a file or stdin"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl apply [OPTIONS] [-f PATH...] [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --dry-run string Must be "none", "server", or "client". If client strategy, only print the object that would be sent, without sending it\n -f, --file strings Path to file to apply\n --force If true, immediately remove resources from API and bypass graceful deletion\n -h, --help help for apply\n -n, --namespace string Namespace the resources will applied to\n')),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[1458],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(l[r]=e[r]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r])}return l}var i=n.createContext({}),c=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},s=function(e){var t=c(e.components);return n.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,l=e.mdxType,a=e.originalType,i=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),d=c(r),f=l,m=d["".concat(i,".").concat(f)]||d[f]||u[f]||a;return r?n.createElement(m,o(o({ref:t},s),{},{components:r})):n.createElement(m,o({ref:t},s))}));function f(e,t){var r=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var a=r.length,o=new Array(a);o[0]=d;var p={};for(var i in t)hasOwnProperty.call(t,i)&&(p[i]=t[i]);p.originalType=e,p.mdxType="string"==typeof e?e:l,o[1]=p;for(var c=2;c{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>p,toc:()=>c});var n=r(7462),l=(r(7294),r(3905));const a={title:"tnctl apply"},o=void 0,p={unversionedId:"cli/tnctl_apply",id:"cli/tnctl_apply",title:"tnctl apply",description:"tnctl apply",source:"@site/docs/terranetes-controller/cli/tnctl_apply.md",sourceDirName:"cli",slug:"/cli/tnctl_apply",permalink:"/terranetes-controller/cli/tnctl_apply",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_apply.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl apply"},sidebar:"tutorialSidebar",previous:{title:"tnctl",permalink:"/terranetes-controller/cli/tnctl"},next:{title:"tnctl approve",permalink:"/terranetes-controller/cli/tnctl_approve"}},i={},c=[{value:"tnctl apply",id:"tnctl-apply",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:c};function u(e){let{components:t,...r}=e;return(0,l.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-apply"},"tnctl apply"),(0,l.kt)("p",null,"Used to apply from a file or stdin"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl apply [OPTIONS] [-f PATH...] [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --dry-run string Must be "none", "server", or "client". If client strategy, only print the object that would be sent, without sending it\n -f, --file strings Path to file to apply\n --force If true, immediately remove resources from API and bypass graceful deletion\n -h, --help help for apply\n -n, --namespace string Namespace the resources will applied to\n')),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/82fb7bb7.325191e6.js b/assets/js/82fb7bb7.eeb610cf.js similarity index 63% rename from assets/js/82fb7bb7.325191e6.js rename to assets/js/82fb7bb7.eeb610cf.js index 1ca76128..7e61881c 100644 --- a/assets/js/82fb7bb7.325191e6.js +++ b/assets/js/82fb7bb7.eeb610cf.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9323],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),s=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(a.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,a=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),f=s(r),m=o,d=f["".concat(a,".").concat(m)]||f[m]||p[m]||c;return r?n.createElement(d,l(l({ref:t},u),{},{components:r})):n.createElement(d,l({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,l=new Array(c);l[0]=f;var i={};for(var a in t)hasOwnProperty.call(t,a)&&(i[a]=t[a]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>c,metadata:()=>i,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl config sources remove"},l=void 0,i={unversionedId:"cli/tnctl_config_sources_remove",id:"cli/tnctl_config_sources_remove",title:"tnctl config sources remove",description:"tnctl config sources remove",source:"@site/docs/terranetes-controller/cli/tnctl_config_sources_remove.md",sourceDirName:"cli",slug:"/cli/tnctl_config_sources_remove",permalink:"/terranetes-controller/cli/tnctl_config_sources_remove",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_config_sources_remove.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl config sources remove"},sidebar:"tutorialSidebar",previous:{title:"tnctl config sources list",permalink:"/terranetes-controller/cli/tnctl_config_sources_list"},next:{title:"tnctl config view",permalink:"/terranetes-controller/cli/tnctl_config_view"}},a={},s=[{value:"tnctl config sources remove",id:"tnctl-config-sources-remove",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-config-sources-remove"},"tnctl config sources remove"),(0,o.kt)("p",null,"Removes a terraform module source to the configuration"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl config sources remove SOURCE [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for remove\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources"},"tnctl config sources"),"\t - Used to manage the sources of the terraform modules")))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9323],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),s=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(a.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,a=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),f=s(r),m=o,d=f["".concat(a,".").concat(m)]||f[m]||p[m]||c;return r?n.createElement(d,l(l({ref:t},u),{},{components:r})):n.createElement(d,l({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,l=new Array(c);l[0]=f;var i={};for(var a in t)hasOwnProperty.call(t,a)&&(i[a]=t[a]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>c,metadata:()=>i,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl config sources remove"},l=void 0,i={unversionedId:"cli/tnctl_config_sources_remove",id:"cli/tnctl_config_sources_remove",title:"tnctl config sources remove",description:"tnctl config sources remove",source:"@site/docs/terranetes-controller/cli/tnctl_config_sources_remove.md",sourceDirName:"cli",slug:"/cli/tnctl_config_sources_remove",permalink:"/terranetes-controller/cli/tnctl_config_sources_remove",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_config_sources_remove.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl config sources remove"},sidebar:"tutorialSidebar",previous:{title:"tnctl config sources list",permalink:"/terranetes-controller/cli/tnctl_config_sources_list"},next:{title:"tnctl config view",permalink:"/terranetes-controller/cli/tnctl_config_view"}},a={},s=[{value:"tnctl config sources remove",id:"tnctl-config-sources-remove",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-config-sources-remove"},"tnctl config sources remove"),(0,o.kt)("p",null,"Removes a terraform module source to the configuration"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl config sources remove SOURCE [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for remove\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources"},"tnctl config sources"),"\t - Used to manage the sources of the terraform modules")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/850cb230.0735df60.js b/assets/js/850cb230.0735df60.js deleted file mode 100644 index ab6a0f8a..00000000 --- a/assets/js/850cb230.0735df60.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[1815],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),u=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),f=u(r),d=o,m=f["".concat(l,".").concat(d)]||f[d]||p[d]||a;return r?n.createElement(m,i(i({ref:t},s),{},{components:r})):n.createElement(m,i({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl create configuration"},i=void 0,c={unversionedId:"cli/tnctl_create_configuration",id:"cli/tnctl_create_configuration",title:"tnctl create configuration",description:"tnctl create configuration",source:"@site/docs/terranetes-controller/cli/tnctl_create_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_create_configuration",permalink:"/terranetes-controller/cli/tnctl_create_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_create_configuration.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl create configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl create cloudresource",permalink:"/terranetes-controller/cli/tnctl_create_cloudresource"},next:{title:"tnctl create revision",permalink:"/terranetes-controller/cli/tnctl_create_revision"}},l={},u=[{value:"tnctl create configuration",id:"tnctl-create-configuration",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:u};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-create-configuration"},"tnctl create configuration"),(0,o.kt)("p",null,"Can be used to package up the terraform module for consumption"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Used to automatically generate a compatible terraform configuration\nfrom a given terraform module. The source for the module can be a\nlocal directory, a git repository, s3 bucket or so forth. As long\nas you have the credentials and required CLI binaries installed."),(0,o.kt)("p",null,"Generate a terraform configuration a Github repository\n$ tnctl create configuration github.com/terraform-aws-modules/terraform-aws-vpc"),(0,o.kt)("p",null,"Generate a terraform configuration from a local directory\n$ tnctl create configuration /path/to/terraform-aws-vpc"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl create configuration SOURCE [OPTIONS] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --enable-auto-approval Automatically approve the configuration\n --enable-defaults Indicates any defaults with values from the terraform module are included (default true)\n --enable-drift-detection Detect drift in the configuration (default true)\n --enable-sensitive Indicates any sensitive variables from the module should be placed into secrets (default true)\n -h, --help help for configuration\n --name string The name of the configuration resource (default "test")\n --namespace string The namespace for the configuration (default "default")\n --provider string Name of the credentials provider to use\n --secret string Name of the secret any outputs from the resource are kept\n --source string The path to the terraform module (default ".")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_create"},"tnctl create"),"\t - Used to create a resource")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/850cb230.e8723eb8.js b/assets/js/850cb230.e8723eb8.js new file mode 100644 index 00000000..d2af7449 --- /dev/null +++ b/assets/js/850cb230.e8723eb8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[1815],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),u=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),f=u(r),d=o,m=f["".concat(l,".").concat(d)]||f[d]||p[d]||a;return r?n.createElement(m,i(i({ref:t},s),{},{components:r})):n.createElement(m,i({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl create configuration"},i=void 0,c={unversionedId:"cli/tnctl_create_configuration",id:"cli/tnctl_create_configuration",title:"tnctl create configuration",description:"tnctl create configuration",source:"@site/docs/terranetes-controller/cli/tnctl_create_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_create_configuration",permalink:"/terranetes-controller/cli/tnctl_create_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_create_configuration.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl create configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl create cloudresource",permalink:"/terranetes-controller/cli/tnctl_create_cloudresource"},next:{title:"tnctl create revision",permalink:"/terranetes-controller/cli/tnctl_create_revision"}},l={},u=[{value:"tnctl create configuration",id:"tnctl-create-configuration",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:u};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-create-configuration"},"tnctl create configuration"),(0,o.kt)("p",null,"Can be used to package up the terraform module for consumption"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Used to automatically generate a compatible terraform configuration\nfrom a given terraform module. The source for the module can be a\nlocal directory, a git repository, s3 bucket or so forth. As long\nas you have the credentials and required CLI binaries installed."),(0,o.kt)("p",null,"Generate a terraform configuration a Github repository\n$ tnctl create configuration github.com/terraform-aws-modules/terraform-aws-vpc"),(0,o.kt)("p",null,"Generate a terraform configuration from a local directory\n$ tnctl create configuration /path/to/terraform-aws-vpc"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl create configuration SOURCE [OPTIONS] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --enable-auto-approval Automatically approve the configuration\n --enable-defaults Indicates any defaults with values from the terraform module are included (default true)\n --enable-drift-detection Detect drift in the configuration (default true)\n --enable-sensitive Indicates any sensitive variables from the module should be placed into secrets (default true)\n -h, --help help for configuration\n --name string The name of the configuration resource (default "test")\n --namespace string The namespace for the configuration (default "default")\n --provider string Name of the credentials provider to use\n --secret string Name of the secret any outputs from the resource are kept\n --source string The path to the terraform module (default ".")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_create"},"tnctl create"),"\t - Used to create a resource")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/874cc520.16ad3cb2.js b/assets/js/874cc520.16ad3cb2.js deleted file mode 100644 index 4823879d..00000000 --- a/assets/js/874cc520.16ad3cb2.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[7371],{3905:(e,t,s)=>{s.d(t,{Zo:()=>n,kt:()=>h});var r=s(7294);function p(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function a(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,r)}return s}function o(e){for(var t=1;t=0||(p[s]=e[s]);return p}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(p[s]=e[s])}return p}var c=r.createContext({}),l=function(e){var t=r.useContext(c),s=t;return e&&(s="function"==typeof e?e(t):o(o({},t),e)),s},n=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},y=r.forwardRef((function(e,t){var s=e.components,p=e.mdxType,a=e.originalType,c=e.parentName,n=i(e,["components","mdxType","originalType","parentName"]),y=l(s),h=p,k=y["".concat(c,".").concat(h)]||y[h]||d[h]||a;return s?r.createElement(k,o(o({ref:t},n),{},{components:s})):r.createElement(k,o({ref:t},n))}));function h(e,t){var s=arguments,p=t&&t.mdxType;if("string"==typeof e||p){var a=s.length,o=new Array(a);o[0]=y;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:p,o[1]=i;for(var l=2;l{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var r=s(7462),p=(s(7294),s(3905));const a={title:"providers.terraform.appvia.io",linkTitle:"Provider",sidebar_position:1},o="Provider",i={unversionedId:"reference/providers.terraform.appvia.io",id:"reference/providers.terraform.appvia.io",title:"providers.terraform.appvia.io",description:"Provider is the schema for provider definitions in terraform controller",source:"@site/docs/terranetes-controller/reference/providers.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/providers.terraform.appvia.io",permalink:"/terranetes-controller/reference/providers.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/providers.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"providers.terraform.appvia.io",linkTitle:"Provider",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"policies.terraform.appvia.io",permalink:"/terranetes-controller/reference/policies.terraform.appvia.io"},next:{title:"revisions.terraform.appvia.io",permalink:"/terranetes-controller/reference/revisions.terraform.appvia.io"}},c={},l=[],n={toc:l};function d(e){let{components:t,...s}=e;return(0,p.kt)("wrapper",(0,r.Z)({},n,s,{components:t,mdxType:"MDXLayout"}),(0,p.kt)("h1",{id:"provider"},"Provider"),(0,p.kt)("p",{class:"crd-description"},"Provider is the schema for provider definitions in terraform controller"),(0,p.kt)("dl",{class:"crd-meta"},(0,p.kt)("dt",{class:"fullname"},"Full name:"),(0,p.kt)("dd",{class:"fullname"},"providers.terraform.appvia.io"),(0,p.kt)("dt",{class:"groupname"},"Group:"),(0,p.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,p.kt)("dt",{class:"singularname"},"Singular name:"),(0,p.kt)("dd",{class:"singularname"},"provider"),(0,p.kt)("dt",{class:"pluralname"},"Plural name:"),(0,p.kt)("dd",{class:"pluralname"},"providers"),(0,p.kt)("dt",{class:"scope"},"Scope:"),(0,p.kt)("dd",{class:"scope"},"Cluster"),(0,p.kt)("dt",{class:"versions"},"Versions:"),(0,p.kt)("dd",{class:"versions"},(0,p.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,p.kt)("div",{class:"crd-schema-version"},(0,p.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,p.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,p.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,p.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ProviderSpec defines the desired state of a provider")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration"},".spec.configuration")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Configuration is optional configuration to the provider. This is terraform provider specific.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.preload"},".spec.preload")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Preload defines the configuration for the preloading of contextual data from the cloud vendor.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.preload.cluster"},".spec.preload.cluster")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Cluster is the name of the kubernetes cluster we use to pivot the data around")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.preload.context"},".spec.preload.context")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Context is the context name of the Context we should create from the preload implementation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.preload.enabled"},".spec.preload.enabled")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"boolean")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Enabled indicates if the preloader is enabled")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.preload.interval"},".spec.preload.interval")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Interval is the interval to run the preloader")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.preload.region"},".spec.preload.region")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Region is the cloud region the cluster is location in")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.provider"},".spec.provider")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ProviderType defines the cloud provider which is being used, currently supported providers are aws, google or azurerm.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.secretRef"},".spec.secretRef")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"SecretRef is a reference to a kubernetes secret. This is required only when using the source: secret. The secret should include the environment variables required to by the terraform provider.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.secretRef.name"},".spec.secretRef.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"name is unique within a namespace to reference a secret resource.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.secretRef.namespace"},".spec.secretRef.namespace")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"namespace defines the space within which the secret name must be unique.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector"},".spec.selector")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Selector provider the ability to filter who can use this provider. If empty, all users in the cluster is permitted to use the provider. Otherrise you can specify a selector which can use namespace and resource labels")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace"},".spec.selector.namespace")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Namespace is used to filter a configuration based on the namespace labels of where it exists")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchExpressions"},".spec.selector.namespace.matchExpressions")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchExpressions[*]"},".spec.selector.namespace.matchExpressions[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,p.kt)("div",{class:"property depth-5"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchExpressions[*].key"},".spec.selector.namespace.matchExpressions[*].key")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"key is the label key that the selector applies to.")))),(0,p.kt)("div",{class:"property depth-5"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchExpressions[*].operator"},".spec.selector.namespace.matchExpressions[*].operator")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,p.kt)("div",{class:"property depth-5"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchExpressions[*].values"},".spec.selector.namespace.matchExpressions[*].values")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,p.kt)("div",{class:"property depth-6"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchExpressions[*].values[*]"},".spec.selector.namespace.matchExpressions[*].values[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchLabels"},".spec.selector.namespace.matchLabels")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource"},".spec.selector.resource")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Resource provides the ability to filter a configuration based on it\u2019s labels")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchExpressions"},".spec.selector.resource.matchExpressions")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchExpressions[*]"},".spec.selector.resource.matchExpressions[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,p.kt)("div",{class:"property depth-5"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchExpressions[*].key"},".spec.selector.resource.matchExpressions[*].key")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"key is the label key that the selector applies to.")))),(0,p.kt)("div",{class:"property depth-5"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchExpressions[*].operator"},".spec.selector.resource.matchExpressions[*].operator")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,p.kt)("div",{class:"property depth-5"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchExpressions[*].values"},".spec.selector.resource.matchExpressions[*].values")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,p.kt)("div",{class:"property depth-6"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchExpressions[*].values[*]"},".spec.selector.resource.matchExpressions[*].values[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchLabels"},".spec.selector.resource.matchLabels")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.serviceAccount"},".spec.serviceAccount")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ServiceAccount is the name of a service account to use when the provider source is \u2018injected\u2019. The service account should exist in the terraform controller namespace and be configure per cloud vendor requirements for pod identity.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.source"},".spec.source")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Source defines the type of credentials the provider is wrapper, this could be wrapping a static secret or using a managed identity. The currently supported values are secret and injected.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.summary"},".spec.summary")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Summary provides a human readable description of the provider")))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ProviderStatus defines the observed state of a provider")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastPreloadTime"},".status.lastPreloadTime")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastPreloadTime is the last time the provider was used to run a preload job")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Time is the last time the resource was reconciled"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/874cc520.1b6b8cc0.js b/assets/js/874cc520.1b6b8cc0.js new file mode 100644 index 00000000..23360478 --- /dev/null +++ b/assets/js/874cc520.1b6b8cc0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[7371],{3905:(e,t,s)=>{s.d(t,{Zo:()=>n,kt:()=>h});var r=s(7294);function p(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function a(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,r)}return s}function o(e){for(var t=1;t=0||(p[s]=e[s]);return p}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(p[s]=e[s])}return p}var c=r.createContext({}),l=function(e){var t=r.useContext(c),s=t;return e&&(s="function"==typeof e?e(t):o(o({},t),e)),s},n=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},y=r.forwardRef((function(e,t){var s=e.components,p=e.mdxType,a=e.originalType,c=e.parentName,n=i(e,["components","mdxType","originalType","parentName"]),y=l(s),h=p,k=y["".concat(c,".").concat(h)]||y[h]||d[h]||a;return s?r.createElement(k,o(o({ref:t},n),{},{components:s})):r.createElement(k,o({ref:t},n))}));function h(e,t){var s=arguments,p=t&&t.mdxType;if("string"==typeof e||p){var a=s.length,o=new Array(a);o[0]=y;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:p,o[1]=i;for(var l=2;l{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>i,toc:()=>l});var r=s(7462),p=(s(7294),s(3905));const a={title:"providers.terraform.appvia.io",linkTitle:"Provider",sidebar_position:1},o="Provider",i={unversionedId:"reference/providers.terraform.appvia.io",id:"reference/providers.terraform.appvia.io",title:"providers.terraform.appvia.io",description:"Provider is the schema for provider definitions in terraform controller",source:"@site/docs/terranetes-controller/reference/providers.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/providers.terraform.appvia.io",permalink:"/terranetes-controller/reference/providers.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/providers.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"providers.terraform.appvia.io",linkTitle:"Provider",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"policies.terraform.appvia.io",permalink:"/terranetes-controller/reference/policies.terraform.appvia.io"},next:{title:"revisions.terraform.appvia.io",permalink:"/terranetes-controller/reference/revisions.terraform.appvia.io"}},c={},l=[],n={toc:l};function d(e){let{components:t,...s}=e;return(0,p.kt)("wrapper",(0,r.Z)({},n,s,{components:t,mdxType:"MDXLayout"}),(0,p.kt)("h1",{id:"provider"},"Provider"),(0,p.kt)("p",{class:"crd-description"},"Provider is the schema for provider definitions in terraform controller"),(0,p.kt)("dl",{class:"crd-meta"},(0,p.kt)("dt",{class:"fullname"},"Full name:"),(0,p.kt)("dd",{class:"fullname"},"providers.terraform.appvia.io"),(0,p.kt)("dt",{class:"groupname"},"Group:"),(0,p.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,p.kt)("dt",{class:"singularname"},"Singular name:"),(0,p.kt)("dd",{class:"singularname"},"provider"),(0,p.kt)("dt",{class:"pluralname"},"Plural name:"),(0,p.kt)("dd",{class:"pluralname"},"providers"),(0,p.kt)("dt",{class:"scope"},"Scope:"),(0,p.kt)("dd",{class:"scope"},"Cluster"),(0,p.kt)("dt",{class:"versions"},"Versions:"),(0,p.kt)("dd",{class:"versions"},(0,p.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,p.kt)("div",{class:"crd-schema-version"},(0,p.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,p.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,p.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,p.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ProviderSpec defines the desired state of a provider")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.configuration"},".spec.configuration")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Configuration is optional configuration to the provider. This is terraform provider specific.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.preload"},".spec.preload")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Preload defines the configuration for the preloading of contextual data from the cloud vendor.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.preload.cluster"},".spec.preload.cluster")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Cluster is the name of the kubernetes cluster we use to pivot the data around")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.preload.context"},".spec.preload.context")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Context is the context name of the Context we should create from the preload implementation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.preload.enabled"},".spec.preload.enabled")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"boolean")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Enabled indicates if the preloader is enabled")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.preload.interval"},".spec.preload.interval")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Interval is the interval to run the preloader")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.preload.region"},".spec.preload.region")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Region is the cloud region the cluster is location in")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.provider"},".spec.provider")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ProviderType defines the cloud provider which is being used, currently supported providers are aws, google or azurerm.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.secretRef"},".spec.secretRef")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"SecretRef is a reference to a kubernetes secret. This is required only when using the source: secret. The secret should include the environment variables required to by the terraform provider.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.secretRef.name"},".spec.secretRef.name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"name is unique within a namespace to reference a secret resource.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.secretRef.namespace"},".spec.secretRef.namespace")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"namespace defines the space within which the secret name must be unique.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector"},".spec.selector")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Selector provider the ability to filter who can use this provider. If empty, all users in the cluster is permitted to use the provider. Otherrise you can specify a selector which can use namespace and resource labels")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace"},".spec.selector.namespace")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Namespace is used to filter a configuration based on the namespace labels of where it exists")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchExpressions"},".spec.selector.namespace.matchExpressions")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchExpressions[*]"},".spec.selector.namespace.matchExpressions[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,p.kt)("div",{class:"property depth-5"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchExpressions[*].key"},".spec.selector.namespace.matchExpressions[*].key")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"key is the label key that the selector applies to.")))),(0,p.kt)("div",{class:"property depth-5"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchExpressions[*].operator"},".spec.selector.namespace.matchExpressions[*].operator")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,p.kt)("div",{class:"property depth-5"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchExpressions[*].values"},".spec.selector.namespace.matchExpressions[*].values")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,p.kt)("div",{class:"property depth-6"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchExpressions[*].values[*]"},".spec.selector.namespace.matchExpressions[*].values[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.namespace.matchLabels"},".spec.selector.namespace.matchLabels")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource"},".spec.selector.resource")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Resource provides the ability to filter a configuration based on it\u2019s labels")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchExpressions"},".spec.selector.resource.matchExpressions")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"matchExpressions is a list of label selector requirements. The requirements are ANDed.")))),(0,p.kt)("div",{class:"property depth-4"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchExpressions[*]"},".spec.selector.resource.matchExpressions[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.")))),(0,p.kt)("div",{class:"property depth-5"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchExpressions[*].key"},".spec.selector.resource.matchExpressions[*].key")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"key is the label key that the selector applies to.")))),(0,p.kt)("div",{class:"property depth-5"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchExpressions[*].operator"},".spec.selector.resource.matchExpressions[*].operator")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"operator represents a key\u2019s relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist.")))),(0,p.kt)("div",{class:"property depth-5"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchExpressions[*].values"},".spec.selector.resource.matchExpressions[*].values")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.")))),(0,p.kt)("div",{class:"property depth-6"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchExpressions[*].values[*]"},".spec.selector.resource.matchExpressions[*].values[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.selector.resource.matchLabels"},".spec.selector.resource.matchLabels")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is \u201ckey\u201d, the operator is \u201cIn\u201d, and the values array contains only \u201cvalue\u201d. The requirements are ANDed.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.serviceAccount"},".spec.serviceAccount")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ServiceAccount is the name of a service account to use when the provider source is \u2018injected\u2019. The service account should exist in the terraform controller namespace and be configure per cloud vendor requirements for pod identity.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.source"},".spec.source")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Source defines the type of credentials the provider is wrapper, this could be wrapping a static secret or using a managed identity. The currently supported values are secret and injected.")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.summary"},".spec.summary")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Summary provides a human readable description of the provider")))),(0,p.kt)("div",{class:"property depth-0"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ProviderStatus defines the observed state of a provider")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"array")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,p.kt)("div",{class:"property depth-3"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string"),(0,p.kt)("span",{class:"property-required"},"Required")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastPreloadTime"},".status.lastPreloadTime")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastPreloadTime is the last time the provider was used to run a preload job")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,p.kt)("div",{class:"property depth-1"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"object")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"integer")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,p.kt)("div",{class:"property depth-2"},(0,p.kt)("div",{class:"property-header"},(0,p.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,p.kt)("div",{class:"property-body"},(0,p.kt)("div",{class:"property-meta"},(0,p.kt)("span",{class:"property-type"},"string")),(0,p.kt)("div",{class:"property-description"},(0,p.kt)("p",null,"Time is the last time the resource was reconciled"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8825a319.1ffe7433.js b/assets/js/8825a319.1ffe7433.js deleted file mode 100644 index c474c522..00000000 --- a/assets/js/8825a319.1ffe7433.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8933],{3905:(t,e,r)=>{r.d(e,{Zo:()=>l,kt:()=>h});var s=r(7294);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function p(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,s)}return r}function o(t){for(var e=1;e=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(t);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}var n=s.createContext({}),c=function(t){var e=s.useContext(n),r=e;return t&&(r="function"==typeof t?t(e):o(o({},e),t)),r},l=function(t){var e=c(t.components);return s.createElement(n.Provider,{value:e},t.children)},d={inlineCode:"code",wrapper:function(t){var e=t.children;return s.createElement(s.Fragment,{},e)}},y=s.forwardRef((function(t,e){var r=t.components,a=t.mdxType,p=t.originalType,n=t.parentName,l=i(t,["components","mdxType","originalType","parentName"]),y=c(r),h=a,k=y["".concat(n,".").concat(h)]||y[h]||d[h]||p;return r?s.createElement(k,o(o({ref:e},l),{},{components:r})):s.createElement(k,o({ref:e},l))}));function h(t,e){var r=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var p=r.length,o=new Array(p);o[0]=y;var i={};for(var n in e)hasOwnProperty.call(e,n)&&(i[n]=e[n]);i.originalType=t,i.mdxType="string"==typeof t?t:a,o[1]=i;for(var c=2;c{r.r(e),r.d(e,{assets:()=>n,contentTitle:()=>o,default:()=>d,frontMatter:()=>p,metadata:()=>i,toc:()=>c});var s=r(7462),a=(r(7294),r(3905));const p={title:"configurations.terraform.appvia.io",linkTitle:"Configuration",sidebar_position:1},o="Configuration",i={unversionedId:"reference/configurations.terraform.appvia.io",id:"reference/configurations.terraform.appvia.io",title:"configurations.terraform.appvia.io",description:"Configuration is the schema for terraform definitions in terraform controller",source:"@site/docs/terranetes-controller/reference/configurations.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/configurations.terraform.appvia.io",permalink:"/terranetes-controller/reference/configurations.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/configurations.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"configurations.terraform.appvia.io",linkTitle:"Configuration",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"cloudresources.terraform.appvia.io",permalink:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},next:{title:"contexts.terraform.appvia.io",permalink:"/terranetes-controller/reference/contexts.terraform.appvia.io"}},n={},c=[],l={toc:c};function d(t){let{components:e,...r}=t;return(0,a.kt)("wrapper",(0,s.Z)({},l,r,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"configuration"},"Configuration"),(0,a.kt)("p",{class:"crd-description"},"Configuration is the schema for terraform definitions in terraform controller"),(0,a.kt)("dl",{class:"crd-meta"},(0,a.kt)("dt",{class:"fullname"},"Full name:"),(0,a.kt)("dd",{class:"fullname"},"configurations.terraform.appvia.io"),(0,a.kt)("dt",{class:"groupname"},"Group:"),(0,a.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,a.kt)("dt",{class:"singularname"},"Singular name:"),(0,a.kt)("dd",{class:"singularname"},"configuration"),(0,a.kt)("dt",{class:"pluralname"},"Plural name:"),(0,a.kt)("dd",{class:"pluralname"},"configurations"),(0,a.kt)("dt",{class:"scope"},"Scope:"),(0,a.kt)("dd",{class:"scope"},"Namespaced"),(0,a.kt)("dt",{class:"versions"},"Versions:"),(0,a.kt)("dd",{class:"versions"},(0,a.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,a.kt)("div",{class:"crd-schema-version"},(0,a.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,a.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ConfigurationSpec defines the desired state of a terraform")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.auth"},".spec.auth")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Auth is used to configure any options required when the source of the terraform module is private or requires credentials to retrieve. This could be SSH keys or git user/pass or AWS credentials for an s3 bucket.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.auth.name"},".spec.auth.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"name is unique within a namespace to reference a secret resource.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.auth.namespace"},".spec.auth.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"namespace defines the space within which the secret name must be unique.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.enableAutoApproval"},".spec.enableAutoApproval")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"EnableAutoApproval when enabled indicates the configuration does not need to be manually approved. On a change to the configuration, the controller will automatically approve the configuration. Note it still needs to adhere to any checks or policies.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.enableDriftDetection"},".spec.enableDriftDetection")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"EnableDriftDetection when enabled run periodic reconciliation configurations looking for any drift between the expected and current state. If any drift is detected the status is changed and a kubernetes event raised.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.module"},".spec.module")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Module is the URL to the source of the terraform module. The format of the URL is a direct implementation of terraform\u2019s module reference. Please see the following repository for more details ",(0,a.kt)("a",{href:"https://github.com/hashicorp/go-getter"},"https://github.com/hashicorp/go-getter"))))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan"},".spec.plan")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Plan is an optional reference to a plan this configuration is associated with. If not set and a policy exists to enforce a plan, the configuration will be rejected.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.name"},".spec.plan.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name of the plan this configuration is associated with")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.revision"},".spec.plan.revision")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Revision is the revision of the plan this configuration is associated with")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.providerRef"},".spec.providerRef")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ProviderRef is the reference to the provider which should be used to execute this configuration.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.providerRef.name"},".spec.providerRef.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name of the provider which contains the credentials to use for this configuration.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.providerRef.namespace"},".spec.providerRef.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Namespace is the namespace of the provider itself.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.terraformVersion"},".spec.terraformVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"TerraformVersion provides the ability to override the default terraform version. Before changing this field its best to consult with platform administrator. As the value of this field is used to change the tag of the terraform container image.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom"},".spec.valueFrom")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ValueFromSource is a collection of value from sources, where the source of the value is taken from a secret")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*]"},".spec.valueFrom[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ValueFromSource defines a value which is taken from a secret")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].context"},".spec.valueFrom[*].context")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Context is the context is the name of the terraform context where the value should be retrieved from")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].key"},".spec.valueFrom[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Key is the key in the secret which we should used for the value")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].name"},".spec.valueFrom[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name which we use when injecting the value into the terraform code i.e. the secret may contain data.DB_HOST but you call this database_hostname. Note, for backwards compatiability if no name is provided, we using the key at the name")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].optional"},".spec.valueFrom[*].optional")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Optional indicates the secret can be optional, i.e if the secret does not exist, or the key is not contained in the secret, we ignore the error")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].secret"},".spec.valueFrom[*].secret")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Secret is the name of the secret in the configuration namespace")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.variables"},".spec.variables")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Variables provides the inputs for the terraform module itself. These are passed to the terraform executor and used to execute the plan, apply and destroy phases.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef"},".spec.writeConnectionSecretToRef")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"WriteConnectionSecretToRef is the name for a secret. On execution of the terraform module any module outputs are written to this secret. The outputs are automatically uppercased and ready to be consumed as environment variables. WriteConnectionSecretRef is the secret where the terraform outputs will be written.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef.keys"},".spec.writeConnectionSecretToRef.keys")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Keys is a collection of name used to filter the terraform output. By default all keys from the output of the terraform state are written to the connection secret. Here we can define exactly which keys we want from that output.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef.keys[*]"},".spec.writeConnectionSecretToRef.keys[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef.name"},".spec.writeConnectionSecretToRef.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the of the secret where you want to the terraform output to be written. The terraform outputs will be written to the secret as a key value pair. All are uppercased can read to be consumed by the workload.")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ConfigurationStatus defines the observed state of a terraform")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs"},".status.costs")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Costs is the predicted costs of this configuration. Note this field is only populated when the integration has been configured by the administrator.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs.enabled"},".status.costs.enabled")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Enabled indicates if the cost integration was enabled when this configuration was last executed.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs.hourly"},".status.costs.hourly")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Hourly is the hourly estimated cost of the configuration")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs.monthly"},".status.costs.monthly")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Monthly is the monthly estimated cost of the configuration")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.driftTimestamp"},".status.driftTimestamp")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"DriftTimestamp is the timestamp of the last drift detection")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.resourceStatus"},".status.resourceStatus")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ResourceStatus indicates the status of the resources and if the resources are insync with the configuration")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.resources"},".status.resources")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Resources is the number of managed cloud resources which are currently under management. This field is taken from the terraform state itself.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.terraformVersion"},".status.terraformVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"TerraformVersion is the version of terraform which was last used to run this configuration"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8825a319.99002e93.js b/assets/js/8825a319.99002e93.js new file mode 100644 index 00000000..06a1587d --- /dev/null +++ b/assets/js/8825a319.99002e93.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8933],{3905:(t,e,r)=>{r.d(e,{Zo:()=>l,kt:()=>h});var s=r(7294);function a(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function p(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(t);e&&(s=s.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,s)}return r}function o(t){for(var e=1;e=0||(a[r]=t[r]);return a}(t,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(t);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(a[r]=t[r])}return a}var n=s.createContext({}),c=function(t){var e=s.useContext(n),r=e;return t&&(r="function"==typeof t?t(e):o(o({},e),t)),r},l=function(t){var e=c(t.components);return s.createElement(n.Provider,{value:e},t.children)},d={inlineCode:"code",wrapper:function(t){var e=t.children;return s.createElement(s.Fragment,{},e)}},y=s.forwardRef((function(t,e){var r=t.components,a=t.mdxType,p=t.originalType,n=t.parentName,l=i(t,["components","mdxType","originalType","parentName"]),y=c(r),h=a,k=y["".concat(n,".").concat(h)]||y[h]||d[h]||p;return r?s.createElement(k,o(o({ref:e},l),{},{components:r})):s.createElement(k,o({ref:e},l))}));function h(t,e){var r=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var p=r.length,o=new Array(p);o[0]=y;var i={};for(var n in e)hasOwnProperty.call(e,n)&&(i[n]=e[n]);i.originalType=t,i.mdxType="string"==typeof t?t:a,o[1]=i;for(var c=2;c{r.r(e),r.d(e,{assets:()=>n,contentTitle:()=>o,default:()=>d,frontMatter:()=>p,metadata:()=>i,toc:()=>c});var s=r(7462),a=(r(7294),r(3905));const p={title:"configurations.terraform.appvia.io",linkTitle:"Configuration",sidebar_position:1},o="Configuration",i={unversionedId:"reference/configurations.terraform.appvia.io",id:"reference/configurations.terraform.appvia.io",title:"configurations.terraform.appvia.io",description:"Configuration is the schema for terraform definitions in terraform controller",source:"@site/docs/terranetes-controller/reference/configurations.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/configurations.terraform.appvia.io",permalink:"/terranetes-controller/reference/configurations.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/configurations.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"configurations.terraform.appvia.io",linkTitle:"Configuration",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"cloudresources.terraform.appvia.io",permalink:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},next:{title:"contexts.terraform.appvia.io",permalink:"/terranetes-controller/reference/contexts.terraform.appvia.io"}},n={},c=[],l={toc:c};function d(t){let{components:e,...r}=t;return(0,a.kt)("wrapper",(0,s.Z)({},l,r,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"configuration"},"Configuration"),(0,a.kt)("p",{class:"crd-description"},"Configuration is the schema for terraform definitions in terraform controller"),(0,a.kt)("dl",{class:"crd-meta"},(0,a.kt)("dt",{class:"fullname"},"Full name:"),(0,a.kt)("dd",{class:"fullname"},"configurations.terraform.appvia.io"),(0,a.kt)("dt",{class:"groupname"},"Group:"),(0,a.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,a.kt)("dt",{class:"singularname"},"Singular name:"),(0,a.kt)("dd",{class:"singularname"},"configuration"),(0,a.kt)("dt",{class:"pluralname"},"Plural name:"),(0,a.kt)("dd",{class:"pluralname"},"configurations"),(0,a.kt)("dt",{class:"scope"},"Scope:"),(0,a.kt)("dd",{class:"scope"},"Namespaced"),(0,a.kt)("dt",{class:"versions"},"Versions:"),(0,a.kt)("dd",{class:"versions"},(0,a.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,a.kt)("div",{class:"crd-schema-version"},(0,a.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,a.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ConfigurationSpec defines the desired state of a terraform")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.auth"},".spec.auth")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Auth is used to configure any options required when the source of the terraform module is private or requires credentials to retrieve. This could be SSH keys or git user/pass or AWS credentials for an s3 bucket.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.auth.name"},".spec.auth.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"name is unique within a namespace to reference a secret resource.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.auth.namespace"},".spec.auth.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"namespace defines the space within which the secret name must be unique.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.enableAutoApproval"},".spec.enableAutoApproval")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"EnableAutoApproval when enabled indicates the configuration does not need to be manually approved. On a change to the configuration, the controller will automatically approve the configuration. Note it still needs to adhere to any checks or policies.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.enableDriftDetection"},".spec.enableDriftDetection")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"EnableDriftDetection when enabled run periodic reconciliation configurations looking for any drift between the expected and current state. If any drift is detected the status is changed and a kubernetes event raised.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.module"},".spec.module")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Module is the URL to the source of the terraform module. The format of the URL is a direct implementation of terraform\u2019s module reference. Please see the following repository for more details ",(0,a.kt)("a",{href:"https://github.com/hashicorp/go-getter"},"https://github.com/hashicorp/go-getter"))))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan"},".spec.plan")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Plan is an optional reference to a plan this configuration is associated with. If not set and a policy exists to enforce a plan, the configuration will be rejected.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.name"},".spec.plan.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name of the plan this configuration is associated with")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.revision"},".spec.plan.revision")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Revision is the revision of the plan this configuration is associated with")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.providerRef"},".spec.providerRef")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ProviderRef is the reference to the provider which should be used to execute this configuration.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.providerRef.name"},".spec.providerRef.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name of the provider which contains the credentials to use for this configuration.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.providerRef.namespace"},".spec.providerRef.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Namespace is the namespace of the provider itself.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.terraformVersion"},".spec.terraformVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"TerraformVersion provides the ability to override the default terraform version. Before changing this field its best to consult with platform administrator. As the value of this field is used to change the tag of the terraform container image.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom"},".spec.valueFrom")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ValueFromSource is a collection of value from sources, where the source of the value is taken from a secret")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*]"},".spec.valueFrom[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ValueFromSource defines a value which is taken from a secret")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].context"},".spec.valueFrom[*].context")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Context is the context is the name of the terraform context where the value should be retrieved from")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].key"},".spec.valueFrom[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Key is the key in the secret which we should used for the value")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].name"},".spec.valueFrom[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name which we use when injecting the value into the terraform code i.e. the secret may contain data.DB_HOST but you call this database_hostname. Note, for backwards compatiability if no name is provided, we using the key at the name")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].optional"},".spec.valueFrom[*].optional")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Optional indicates the secret can be optional, i.e if the secret does not exist, or the key is not contained in the secret, we ignore the error")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].secret"},".spec.valueFrom[*].secret")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Secret is the name of the secret in the configuration namespace")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.variables"},".spec.variables")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Variables provides the inputs for the terraform module itself. These are passed to the terraform executor and used to execute the plan, apply and destroy phases.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef"},".spec.writeConnectionSecretToRef")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"WriteConnectionSecretToRef is the name for a secret. On execution of the terraform module any module outputs are written to this secret. The outputs are automatically uppercased and ready to be consumed as environment variables. WriteConnectionSecretRef is the secret where the terraform outputs will be written.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef.keys"},".spec.writeConnectionSecretToRef.keys")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Keys is a collection of name used to filter the terraform output. By default all keys from the output of the terraform state are written to the connection secret. Here we can define exactly which keys we want from that output.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef.keys[*]"},".spec.writeConnectionSecretToRef.keys[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef.name"},".spec.writeConnectionSecretToRef.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the of the secret where you want to the terraform output to be written. The terraform outputs will be written to the secret as a key value pair. All are uppercased can read to be consumed by the workload.")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ConfigurationStatus defines the observed state of a terraform")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs"},".status.costs")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Costs is the predicted costs of this configuration. Note this field is only populated when the integration has been configured by the administrator.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs.enabled"},".status.costs.enabled")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Enabled indicates if the cost integration was enabled when this configuration was last executed.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs.hourly"},".status.costs.hourly")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Hourly is the hourly estimated cost of the configuration")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs.monthly"},".status.costs.monthly")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Monthly is the monthly estimated cost of the configuration")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.driftTimestamp"},".status.driftTimestamp")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"DriftTimestamp is the timestamp of the last drift detection")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.resourceStatus"},".status.resourceStatus")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ResourceStatus indicates the status of the resources and if the resources are insync with the configuration")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.resources"},".status.resources")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Resources is the number of managed cloud resources which are currently under management. This field is taken from the terraform state itself.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.terraformVersion"},".status.terraformVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"TerraformVersion is the version of terraform which was last used to run this configuration"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8b529933.38844f05.js b/assets/js/8b529933.38844f05.js deleted file mode 100644 index d3a4eea3..00000000 --- a/assets/js/8b529933.38844f05.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[231],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),p=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),u=p(n),d=o,f=u["".concat(c,".").concat(d)]||u[d]||m[d]||l;return n?r.createElement(f,i(i({ref:t},s),{},{components:n})):r.createElement(f,i({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,i=new Array(l);i[0]=u;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a.mdxType="string"==typeof e?e:o,i[1]=a;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>a,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl completion bash"},i=void 0,a={unversionedId:"cli/tnctl_completion_bash",id:"cli/tnctl_completion_bash",title:"tnctl completion bash",description:"tnctl completion bash",source:"@site/docs/terranetes-controller/cli/tnctl_completion_bash.md",sourceDirName:"cli",slug:"/cli/tnctl_completion_bash",permalink:"/terranetes-controller/cli/tnctl_completion_bash",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_completion_bash.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl completion bash"},sidebar:"tutorialSidebar",previous:{title:"tnctl completion",permalink:"/terranetes-controller/cli/tnctl_completion"},next:{title:"tnctl completion fish",permalink:"/terranetes-controller/cli/tnctl_completion_fish"}},c={},p=[{value:"tnctl completion bash",id:"tnctl-completion-bash",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Linux:",id:"linux",level:4},{value:"macOS:",id:"macos",level:4},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-completion-bash"},"tnctl completion bash"),(0,o.kt)("p",null,"Generate the autocompletion script for bash"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Generate the autocompletion script for the bash shell."),(0,o.kt)("p",null,"This script depends on the 'bash-completion' package.\nIf it is not installed already, you can install it via your OS's package manager."),(0,o.kt)("p",null,"To load completions in your current shell session:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"source <(tnctl completion bash)\n")),(0,o.kt)("p",null,"To load completions for every new session, execute once:"),(0,o.kt)("h4",{id:"linux"},"Linux:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion bash > /etc/bash_completion.d/tnctl\n")),(0,o.kt)("h4",{id:"macos"},"macOS:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion bash > $(brew --prefix)/etc/bash_completion.d/tnctl\n")),(0,o.kt)("p",null,"You will need to start a new shell for this setup to take effect."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion bash\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for bash\n --no-descriptions disable completion descriptions\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion"},"tnctl completion"),"\t - Generate the autocompletion script for the specified shell")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8b529933.5bcca701.js b/assets/js/8b529933.5bcca701.js new file mode 100644 index 00000000..a2a3248d --- /dev/null +++ b/assets/js/8b529933.5bcca701.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[231],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var c=r.createContext({}),p=function(e){var t=r.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(c.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),u=p(n),d=o,h=u["".concat(c,".").concat(d)]||u[d]||m[d]||l;return n?r.createElement(h,i(i({ref:t},s),{},{components:n})):r.createElement(h,i({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,i=new Array(l);i[0]=u;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a.mdxType="string"==typeof e?e:o,i[1]=a;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>l,metadata:()=>a,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl completion bash"},i=void 0,a={unversionedId:"cli/tnctl_completion_bash",id:"cli/tnctl_completion_bash",title:"tnctl completion bash",description:"tnctl completion bash",source:"@site/docs/terranetes-controller/cli/tnctl_completion_bash.md",sourceDirName:"cli",slug:"/cli/tnctl_completion_bash",permalink:"/terranetes-controller/cli/tnctl_completion_bash",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_completion_bash.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl completion bash"},sidebar:"tutorialSidebar",previous:{title:"tnctl completion",permalink:"/terranetes-controller/cli/tnctl_completion"},next:{title:"tnctl completion fish",permalink:"/terranetes-controller/cli/tnctl_completion_fish"}},c={},p=[{value:"tnctl completion bash",id:"tnctl-completion-bash",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Linux:",id:"linux",level:4},{value:"macOS:",id:"macos",level:4},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function m(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-completion-bash"},"tnctl completion bash"),(0,o.kt)("p",null,"Generate the autocompletion script for bash"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Generate the autocompletion script for the bash shell."),(0,o.kt)("p",null,"This script depends on the 'bash-completion' package.\nIf it is not installed already, you can install it via your OS's package manager."),(0,o.kt)("p",null,"To load completions in your current shell session:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"source <(tnctl completion bash)\n")),(0,o.kt)("p",null,"To load completions for every new session, execute once:"),(0,o.kt)("h4",{id:"linux"},"Linux:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion bash > /etc/bash_completion.d/tnctl\n")),(0,o.kt)("h4",{id:"macos"},"macOS:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion bash > $(brew --prefix)/etc/bash_completion.d/tnctl\n")),(0,o.kt)("p",null,"You will need to start a new shell for this setup to take effect."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion bash\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for bash\n --no-descriptions disable completion descriptions\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion"},"tnctl completion"),"\t - Generate the autocompletion script for the specified shell")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8ef418ea.04000d8d.js b/assets/js/8ef418ea.04000d8d.js new file mode 100644 index 00000000..5b4680f2 --- /dev/null +++ b/assets/js/8ef418ea.04000d8d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8381],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),s=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(a.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,a=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=s(r),f=o,m=p["".concat(a,".").concat(f)]||p[f]||d[f]||c;return r?n.createElement(m,i(i({ref:t},u),{},{components:r})):n.createElement(m,i({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,i=new Array(c);i[0]=p;var l={};for(var a in t)hasOwnProperty.call(t,a)&&(l[a]=t[a]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>d,frontMatter:()=>c,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl describe cloudresource"},i=void 0,l={unversionedId:"cli/tnctl_describe_cloudresource",id:"cli/tnctl_describe_cloudresource",title:"tnctl describe cloudresource",description:"tnctl describe cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_describe_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_describe_cloudresource",permalink:"/terranetes-controller/cli/tnctl_describe_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_describe_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl describe cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl describe",permalink:"/terranetes-controller/cli/tnctl_describe"},next:{title:"tnctl describe configuration",permalink:"/terranetes-controller/cli/tnctl_describe_configuration"}},a={},s=[{value:"tnctl describe cloudresource",id:"tnctl-describe-cloudresource",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-describe-cloudresource"},"tnctl describe cloudresource"),(0,o.kt)("p",null,"Used to describe the current state of the resources"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Retrieves the definition and current state of one or more of the\nterraform configurations, displaying in a human friendly format.\nThe command also extracts any integration details which have been\nproduced by infracosts or checkov scans."),(0,o.kt)("p",null,"Describe a configuration in a namespace\n$ tnctl describe configuration -n apps NAME"),(0,o.kt)("p",null,"Describe a cloudresource in a namespace\n$ tnctl describe cloudresource -n apps NAME"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl describe cloudresource [OPTIONS] NAME [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -h, --help help for cloudresource\n -n, --namespace string Namespace of the resource/s (default "default")\n --show-passed-checks Indicates we should show passed checks (default true)\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_describe"},"tnctl describe"),"\t - Used to describe the current state of the configuration")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8ef418ea.fa067ce6.js b/assets/js/8ef418ea.fa067ce6.js deleted file mode 100644 index a0daabb5..00000000 --- a/assets/js/8ef418ea.fa067ce6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8381],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),s=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(a.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,a=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=s(r),f=o,m=p["".concat(a,".").concat(f)]||p[f]||d[f]||c;return r?n.createElement(m,l(l({ref:t},u),{},{components:r})):n.createElement(m,l({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,l=new Array(c);l[0]=p;var i={};for(var a in t)hasOwnProperty.call(t,a)&&(i[a]=t[a]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>l,default:()=>d,frontMatter:()=>c,metadata:()=>i,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl describe cloudresource"},l=void 0,i={unversionedId:"cli/tnctl_describe_cloudresource",id:"cli/tnctl_describe_cloudresource",title:"tnctl describe cloudresource",description:"tnctl describe cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_describe_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_describe_cloudresource",permalink:"/terranetes-controller/cli/tnctl_describe_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_describe_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl describe cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl describe",permalink:"/terranetes-controller/cli/tnctl_describe"},next:{title:"tnctl describe configuration",permalink:"/terranetes-controller/cli/tnctl_describe_configuration"}},a={},s=[{value:"tnctl describe cloudresource",id:"tnctl-describe-cloudresource",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-describe-cloudresource"},"tnctl describe cloudresource"),(0,o.kt)("p",null,"Used to describe the current state of the resources"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Retrieves the definition and current state of one or more of the\nterraform configurations, displaying in a human friendly format.\nThe command also extracts any integration details which have been\nproduced by infracosts or checkov scans."),(0,o.kt)("p",null,"Describe a configuration in a namespace\n$ tnctl describe configuration -n apps NAME"),(0,o.kt)("p",null,"Describe a cloudresource in a namespace\n$ tnctl describe cloudresource -n apps NAME"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl describe cloudresource [OPTIONS] NAME [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -h, --help help for cloudresource\n -n, --namespace string Namespace of the resource/s (default "default")\n --show-passed-checks Indicates we should show passed checks (default true)\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_describe"},"tnctl describe"),"\t - Used to describe the current state of the configuration")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8fed0ecf.898e6afe.js b/assets/js/8fed0ecf.898e6afe.js deleted file mode 100644 index e93b7e5a..00000000 --- a/assets/js/8fed0ecf.898e6afe.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[342],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i=r.createContext({}),p=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,i=e.parentName,s=a(e,["components","mdxType","originalType","parentName"]),d=p(n),m=o,f=d["".concat(i,".").concat(m)]||d[m]||u[m]||l;return n?r.createElement(f,c(c({ref:t},s),{},{components:n})):r.createElement(f,c({ref:t},s))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,c=new Array(l);c[0]=d;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:o,c[1]=a;for(var p=2;p{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>u,frontMatter:()=>l,metadata:()=>a,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl get context"},c=void 0,a={unversionedId:"cli/tnctl_get_context",id:"cli/tnctl_get_context",title:"tnctl get context",description:"tnctl get context",source:"@site/docs/terranetes-controller/cli/tnctl_get_context.md",sourceDirName:"cli",slug:"/cli/tnctl_get_context",permalink:"/terranetes-controller/cli/tnctl_get_context",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get_context.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get context"},sidebar:"tutorialSidebar",previous:{title:"tnctl get configuration",permalink:"/terranetes-controller/cli/tnctl_get_configuration"},next:{title:"tnctl get plan",permalink:"/terranetes-controller/cli/tnctl_get_plan"}},i={},p=[{value:"tnctl get context",id:"tnctl-get-context",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-get-context"},"tnctl get context"),(0,o.kt)("p",null,"Used to retrieve context/s from the cluster"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl get context [OPTIONS] [NAME] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -A, --all-namespaces Retrieve cloud resources from all namespaces\n -h, --help help for context\n -n, --namespace string Namespace to retrieve the resource from\n -o, --output string The output format. Supported formats are: json|yaml|wide\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8fed0ecf.8d6b6eb4.js b/assets/js/8fed0ecf.8d6b6eb4.js new file mode 100644 index 00000000..088f4036 --- /dev/null +++ b/assets/js/8fed0ecf.8d6b6eb4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[342],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i=r.createContext({}),p=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,i=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),m=p(n),d=o,f=m["".concat(i,".").concat(d)]||m[d]||u[d]||l;return n?r.createElement(f,a(a({ref:t},s),{},{components:n})):r.createElement(f,a({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,a=new Array(l);a[0]=m;var c={};for(var i in t)hasOwnProperty.call(t,i)&&(c[i]=t[i]);c.originalType=e,c.mdxType="string"==typeof e?e:o,a[1]=c;for(var p=2;p{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl get context"},a=void 0,c={unversionedId:"cli/tnctl_get_context",id:"cli/tnctl_get_context",title:"tnctl get context",description:"tnctl get context",source:"@site/docs/terranetes-controller/cli/tnctl_get_context.md",sourceDirName:"cli",slug:"/cli/tnctl_get_context",permalink:"/terranetes-controller/cli/tnctl_get_context",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get_context.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get context"},sidebar:"tutorialSidebar",previous:{title:"tnctl get configuration",permalink:"/terranetes-controller/cli/tnctl_get_configuration"},next:{title:"tnctl get plan",permalink:"/terranetes-controller/cli/tnctl_get_plan"}},i={},p=[{value:"tnctl get context",id:"tnctl-get-context",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-get-context"},"tnctl get context"),(0,o.kt)("p",null,"Used to retrieve context/s from the cluster"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl get context [OPTIONS] [NAME] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -A, --all-namespaces Retrieve cloud resources from all namespaces\n -h, --help help for context\n -n, --namespace string Namespace to retrieve the resource from\n -o, --output string The output format. Supported formats are: json|yaml|wide\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.858ea062.js b/assets/js/935f2afb.858ea062.js new file mode 100644 index 00000000..e6a45f71 --- /dev/null +++ b/assets/js/935f2afb.858ea062.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"What is Terranetes?","href":"/terranetes-controller/","docId":"index"},{"type":"link","label":"Quick start","href":"/terranetes-controller/quick_start","docId":"quick_start"},{"type":"link","label":"Releases","href":"/terranetes-controller/releases","docId":"releases"},{"type":"link","label":"Architecture","href":"/terranetes-controller/architecture","docId":"architecture"},{"type":"category","label":"Workflows","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"What are workflows","href":"/terranetes-controller/workflows/intro","docId":"workflows/intro"},{"type":"link","label":"Platform Team","href":"/terranetes-controller/workflows/platform","docId":"workflows/platform"},{"type":"link","label":"Developer","href":"/terranetes-controller/workflows/developer","docId":"workflows/developer"}],"href":"/terranetes-controller/category/workflows"},{"type":"category","label":"Administration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configure Providers","href":"/terranetes-controller/admin/providers","className":"green","docId":"admin/providers"},{"type":"category","label":"Define Guardrails","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction","href":"/terranetes-controller/admin/policy/intro","className":"green","docId":"admin/policy/intro"},{"type":"link","label":"Module Restrictions","href":"/terranetes-controller/admin/policy/modules","className":"green","docId":"admin/policy/modules"},{"type":"link","label":"Checkov Policy","href":"/terranetes-controller/admin/policy/checkov","className":"green","docId":"admin/policy/checkov"}],"href":"/terranetes-controller/category/define-guardrails"},{"type":"link","label":"Contexts","href":"/terranetes-controller/admin/contexts","className":"green","docId":"admin/contexts"},{"type":"link","label":"Cloud Resources","href":"/terranetes-controller/admin/cloudresource","className":"green","docId":"admin/cloudresource"},{"type":"category","label":"Observability","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Metrics","href":"/terranetes-controller/admin/observability/metrics","docId":"admin/observability/metrics"}],"href":"/terranetes-controller/category/observability"},{"type":"link","label":"Expose Costs","href":"/terranetes-controller/admin/costs","className":"green","docId":"admin/costs"},{"type":"link","label":"Injecting Defaults","href":"/terranetes-controller/admin/defaults","docId":"admin/defaults"},{"type":"link","label":"Drift Detection","href":"/terranetes-controller/admin/drift","docId":"admin/drift"},{"type":"link","label":"Terraform State","href":"/terranetes-controller/admin/state","docId":"admin/state"},{"type":"link","label":"Kubernetes RBAC","href":"/terranetes-controller/admin/rbac","className":"green","docId":"admin/rbac"},{"type":"link","label":"Customize Job Template","href":"/terranetes-controller/admin/template","docId":"admin/template"},{"type":"link","label":"Additional Secrets","href":"/terranetes-controller/admin/secrets","docId":"admin/secrets"}],"href":"/terranetes-controller/category/administration"},{"type":"category","label":"Developer Docs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Provisioning a Resource","href":"/terranetes-controller/developer/provision","docId":"developer/provision"},{"type":"link","label":"Terranetes CLI","href":"/terranetes-controller/developer/tnctl","docId":"developer/tnctl"},{"type":"link","label":"Using Private Repositories","href":"/terranetes-controller/developer/private","docId":"developer/private"},{"type":"link","label":"Configuration Contexts","href":"/terranetes-controller/developer/contexts","docId":"developer/contexts"},{"type":"link","label":"Enabling Drift Protection","href":"/terranetes-controller/developer/drift","docId":"developer/drift"},{"type":"link","label":"Using Flux as Source","href":"/terranetes-controller/developer/flux","docId":"developer/flux"}],"href":"/terranetes-controller/category/developer-docs"},{"type":"category","label":"Walk Throughs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Provisioning an Database in AWS","href":"/terranetes-controller/walkthroughs/database","docId":"walkthroughs/database"}],"href":"/terranetes-controller/category/walk-throughs"},{"type":"category","label":"API Reference","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"cloudresources.terraform.appvia.io","href":"/terranetes-controller/reference/cloudresources.terraform.appvia.io","docId":"reference/cloudresources.terraform.appvia.io"},{"type":"link","label":"configurations.terraform.appvia.io","href":"/terranetes-controller/reference/configurations.terraform.appvia.io","docId":"reference/configurations.terraform.appvia.io"},{"type":"link","label":"contexts.terraform.appvia.io","href":"/terranetes-controller/reference/contexts.terraform.appvia.io","docId":"reference/contexts.terraform.appvia.io"},{"type":"link","label":"plans.terraform.appvia.io","href":"/terranetes-controller/reference/plans.terraform.appvia.io","docId":"reference/plans.terraform.appvia.io"},{"type":"link","label":"policies.terraform.appvia.io","href":"/terranetes-controller/reference/policies.terraform.appvia.io","docId":"reference/policies.terraform.appvia.io"},{"type":"link","label":"providers.terraform.appvia.io","href":"/terranetes-controller/reference/providers.terraform.appvia.io","docId":"reference/providers.terraform.appvia.io"},{"type":"link","label":"revisions.terraform.appvia.io","href":"/terranetes-controller/reference/revisions.terraform.appvia.io","docId":"reference/revisions.terraform.appvia.io"}],"href":"/terranetes-controller/category/api-reference"},{"type":"category","label":"CLI Reference","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"tnctl","href":"/terranetes-controller/cli/tnctl","docId":"cli/tnctl"},{"type":"link","label":"tnctl apply","href":"/terranetes-controller/cli/tnctl_apply","docId":"cli/tnctl_apply"},{"type":"link","label":"tnctl approve","href":"/terranetes-controller/cli/tnctl_approve","docId":"cli/tnctl_approve"},{"type":"link","label":"tnctl approve cloudresource","href":"/terranetes-controller/cli/tnctl_approve_cloudresource","docId":"cli/tnctl_approve_cloudresource"},{"type":"link","label":"tnctl approve configuration","href":"/terranetes-controller/cli/tnctl_approve_configuration","docId":"cli/tnctl_approve_configuration"},{"type":"link","label":"tnctl build","href":"/terranetes-controller/cli/tnctl_build","docId":"cli/tnctl_build"},{"type":"link","label":"tnctl completion","href":"/terranetes-controller/cli/tnctl_completion","docId":"cli/tnctl_completion"},{"type":"link","label":"tnctl completion bash","href":"/terranetes-controller/cli/tnctl_completion_bash","docId":"cli/tnctl_completion_bash"},{"type":"link","label":"tnctl completion fish","href":"/terranetes-controller/cli/tnctl_completion_fish","docId":"cli/tnctl_completion_fish"},{"type":"link","label":"tnctl completion powershell","href":"/terranetes-controller/cli/tnctl_completion_powershell","docId":"cli/tnctl_completion_powershell"},{"type":"link","label":"tnctl completion zsh","href":"/terranetes-controller/cli/tnctl_completion_zsh","docId":"cli/tnctl_completion_zsh"},{"type":"link","label":"tnctl config","href":"/terranetes-controller/cli/tnctl_config","docId":"cli/tnctl_config"},{"type":"link","label":"tnctl config sources","href":"/terranetes-controller/cli/tnctl_config_sources","docId":"cli/tnctl_config_sources"},{"type":"link","label":"tnctl config sources add","href":"/terranetes-controller/cli/tnctl_config_sources_add","docId":"cli/tnctl_config_sources_add"},{"type":"link","label":"tnctl config sources list","href":"/terranetes-controller/cli/tnctl_config_sources_list","docId":"cli/tnctl_config_sources_list"},{"type":"link","label":"tnctl config sources remove","href":"/terranetes-controller/cli/tnctl_config_sources_remove","docId":"cli/tnctl_config_sources_remove"},{"type":"link","label":"tnctl config view","href":"/terranetes-controller/cli/tnctl_config_view","docId":"cli/tnctl_config_view"},{"type":"link","label":"tnctl convert","href":"/terranetes-controller/cli/tnctl_convert","docId":"cli/tnctl_convert"},{"type":"link","label":"tnctl convert cloudresource","href":"/terranetes-controller/cli/tnctl_convert_cloudresource","docId":"cli/tnctl_convert_cloudresource"},{"type":"link","label":"tnctl convert configuration","href":"/terranetes-controller/cli/tnctl_convert_configuration","docId":"cli/tnctl_convert_configuration"},{"type":"link","label":"tnctl convert revision","href":"/terranetes-controller/cli/tnctl_convert_revision","docId":"cli/tnctl_convert_revision"},{"type":"link","label":"tnctl create","href":"/terranetes-controller/cli/tnctl_create","docId":"cli/tnctl_create"},{"type":"link","label":"tnctl create cloudresource","href":"/terranetes-controller/cli/tnctl_create_cloudresource","docId":"cli/tnctl_create_cloudresource"},{"type":"link","label":"tnctl create configuration","href":"/terranetes-controller/cli/tnctl_create_configuration","docId":"cli/tnctl_create_configuration"},{"type":"link","label":"tnctl create revision","href":"/terranetes-controller/cli/tnctl_create_revision","docId":"cli/tnctl_create_revision"},{"type":"link","label":"tnctl create workflow","href":"/terranetes-controller/cli/tnctl_create_workflow","docId":"cli/tnctl_create_workflow"},{"type":"link","label":"tnctl delete","href":"/terranetes-controller/cli/tnctl_delete","docId":"cli/tnctl_delete"},{"type":"link","label":"tnctl describe","href":"/terranetes-controller/cli/tnctl_describe","docId":"cli/tnctl_describe"},{"type":"link","label":"tnctl describe cloudresource","href":"/terranetes-controller/cli/tnctl_describe_cloudresource","docId":"cli/tnctl_describe_cloudresource"},{"type":"link","label":"tnctl describe configuration","href":"/terranetes-controller/cli/tnctl_describe_configuration","docId":"cli/tnctl_describe_configuration"},{"type":"link","label":"tnctl get","href":"/terranetes-controller/cli/tnctl_get","docId":"cli/tnctl_get"},{"type":"link","label":"tnctl get cloudresource","href":"/terranetes-controller/cli/tnctl_get_cloudresource","docId":"cli/tnctl_get_cloudresource"},{"type":"link","label":"tnctl get configuration","href":"/terranetes-controller/cli/tnctl_get_configuration","docId":"cli/tnctl_get_configuration"},{"type":"link","label":"tnctl get context","href":"/terranetes-controller/cli/tnctl_get_context","docId":"cli/tnctl_get_context"},{"type":"link","label":"tnctl get plan","href":"/terranetes-controller/cli/tnctl_get_plan","docId":"cli/tnctl_get_plan"},{"type":"link","label":"tnctl get policy","href":"/terranetes-controller/cli/tnctl_get_policy","docId":"cli/tnctl_get_policy"},{"type":"link","label":"tnctl get revision","href":"/terranetes-controller/cli/tnctl_get_revision","docId":"cli/tnctl_get_revision"},{"type":"link","label":"tnctl kubectl","href":"/terranetes-controller/cli/tnctl_kubectl","docId":"cli/tnctl_kubectl"},{"type":"link","label":"tnctl kubectl plugin","href":"/terranetes-controller/cli/tnctl_kubectl_plugin","docId":"cli/tnctl_kubectl_plugin"},{"type":"link","label":"tnctl logs","href":"/terranetes-controller/cli/tnctl_logs","docId":"cli/tnctl_logs"},{"type":"link","label":"tnctl logs cloudresource","href":"/terranetes-controller/cli/tnctl_logs_cloudresource","docId":"cli/tnctl_logs_cloudresource"},{"type":"link","label":"tnctl logs configuration","href":"/terranetes-controller/cli/tnctl_logs_configuration","docId":"cli/tnctl_logs_configuration"},{"type":"link","label":"tnctl retry","href":"/terranetes-controller/cli/tnctl_retry","docId":"cli/tnctl_retry"},{"type":"link","label":"tnctl retry cloudresource","href":"/terranetes-controller/cli/tnctl_retry_cloudresource","docId":"cli/tnctl_retry_cloudresource"},{"type":"link","label":"tnctl retry configuration","href":"/terranetes-controller/cli/tnctl_retry_configuration","docId":"cli/tnctl_retry_configuration"},{"type":"link","label":"tnctl search","href":"/terranetes-controller/cli/tnctl_search","docId":"cli/tnctl_search"},{"type":"link","label":"tnctl state","href":"/terranetes-controller/cli/tnctl_state","docId":"cli/tnctl_state"},{"type":"link","label":"tnctl state clean","href":"/terranetes-controller/cli/tnctl_state_clean","docId":"cli/tnctl_state_clean"},{"type":"link","label":"tnctl state list","href":"/terranetes-controller/cli/tnctl_state_list","docId":"cli/tnctl_state_list"},{"type":"link","label":"tnctl verify","href":"/terranetes-controller/cli/tnctl_verify","docId":"cli/tnctl_verify"},{"type":"link","label":"tnctl verify revision","href":"/terranetes-controller/cli/tnctl_verify_revision","docId":"cli/tnctl_verify_revision"},{"type":"link","label":"tnctl workflow","href":"/terranetes-controller/cli/tnctl_workflow","docId":"cli/tnctl_workflow"},{"type":"link","label":"tnctl workflow create","href":"/terranetes-controller/cli/tnctl_workflow_create","docId":"cli/tnctl_workflow_create"}],"href":"/terranetes-controller/category/cli-reference"}]},"docs":{"admin/cloudresource":{"id":"admin/cloudresource","title":"Cloud Resources","description":"This feature is only available from >= v0.4.0 releases","sidebar":"tutorialSidebar"},"admin/contexts":{"id":"admin/contexts","title":"Contexts","description":"Contexts provide a means to share common configuration between Configurations. The resource type is Cluster scoped and can be used by any Configuration in the cluster.","sidebar":"tutorialSidebar"},"admin/costs":{"id":"admin/costs","title":"Expose Costs","description":"The costs integration allows developers to see their associated costs before applying the terraform. This controller currently uses infracost to extract the predicted costs of a configuration, exposing the cost within the status of the Kubernetes object. It is viewable by running kubectl get configuration.","sidebar":"tutorialSidebar"},"admin/defaults":{"id":"admin/defaults","title":"Injecting Defaults","description":"Currently via policies platform administrators have the ability to inject both variables and or secrets into developer Configurations, common use cases","sidebar":"tutorialSidebar"},"admin/drift":{"id":"admin/drift","title":"Drift Detection","description":"Drift detection periodically runs a terraform plan on a Configuration, ensuring the expected state (terraform state) and the actual cloud resources are in sync. Currently Configurations must opt in for drift detection via their spec;","sidebar":"tutorialSidebar"},"admin/observability/metrics":{"id":"admin/observability/metrics","title":"Metrics","description":"The controller exposes a number of prometheus metrics that can be utilized for tracking operational conditions and usage metrics (i.e. configurations).","sidebar":"tutorialSidebar"},"admin/policy/checkov":{"id":"admin/policy/checkov","title":"Checkov Policy","description":"Security policy allows platform teams to be assured what they are allowing to be self-serviced follows what they and the organization deem to be best practice. All terraform configurations are funnelled through a security check as part of the plan stage.","sidebar":"tutorialSidebar"},"admin/policy/intro":{"id":"admin/policy/intro","title":"Introduction","description":"The controller comes with a number of controls and safeguards that the platform team can utilize to:","sidebar":"tutorialSidebar"},"admin/policy/modules":{"id":"admin/policy/modules","title":"Module Restrictions","description":"You can control the source of the terraform modules permitted to run through the Policy resource. The following policy enforces that only modules sourced from the Appvia Github Organization can be used.","sidebar":"tutorialSidebar"},"admin/providers":{"id":"admin/providers","title":"Configure Providers","description":"Credentials to access the cloud are represented by Providers in the controller, a cluster scoped resource. When defining a terraform module developers reference a provider using spec.providerRef, tying together the resource and credentials.","sidebar":"tutorialSidebar"},"admin/rbac":{"id":"admin/rbac","title":"Kubernetes RBAC","description":"The following gives some guidance around the suggested roles and permissions in Kubernetes for consumers. In all cases, to remove duplication, the permissions are defined as a ClusterRole and bound locally within a namespace.","sidebar":"tutorialSidebar"},"admin/secrets":{"id":"admin/secrets","title":"Additional Secrets","description":"The controller supports the ability to inject additional secrets into the terraform execution. A common use case to provide additional credentials, api tokens or custom configuration into the jobs.","sidebar":"tutorialSidebar"},"admin/state":{"id":"admin/state","title":"Terraform State","description":"Terraform stores state about your managed infrastructure and configuration. This state is used by Terraform to map real world resources to your configuration, keep track of metadata, and to improve performance for large infrastructures. For a detailed understanding of terraform state, please visit the official docs.","sidebar":"tutorialSidebar"},"admin/template":{"id":"admin/template","title":"Customize Job Template","description":"When a configuration is changed (i.e. for plan, apply or destroy), the controller uses a template to render the final job configuration, taking the options provided on the controller command line, custom policies and the terraform configuration itself. A batch job is created from all the options and ordered to execute the change. You can find the default template for this here.","sidebar":"tutorialSidebar"},"architecture":{"id":"architecture","title":"Architecture","description":"The following diagram demos the architecture for the terraform controller.","sidebar":"tutorialSidebar"},"cli/tnctl":{"id":"cli/tnctl","title":"tnctl","description":"tnctl","sidebar":"tutorialSidebar"},"cli/tnctl_apply":{"id":"cli/tnctl_apply","title":"tnctl apply","description":"tnctl apply","sidebar":"tutorialSidebar"},"cli/tnctl_approve":{"id":"cli/tnctl_approve","title":"tnctl approve","description":"tnctl approve","sidebar":"tutorialSidebar"},"cli/tnctl_approve_cloudresource":{"id":"cli/tnctl_approve_cloudresource","title":"tnctl approve cloudresource","description":"tnctl approve cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_approve_configuration":{"id":"cli/tnctl_approve_configuration","title":"tnctl approve configuration","description":"tnctl approve configuration","sidebar":"tutorialSidebar"},"cli/tnctl_build":{"id":"cli/tnctl_build","title":"tnctl build","description":"tnctl build","sidebar":"tutorialSidebar"},"cli/tnctl_completion":{"id":"cli/tnctl_completion","title":"tnctl completion","description":"tnctl completion","sidebar":"tutorialSidebar"},"cli/tnctl_completion_bash":{"id":"cli/tnctl_completion_bash","title":"tnctl completion bash","description":"tnctl completion bash","sidebar":"tutorialSidebar"},"cli/tnctl_completion_fish":{"id":"cli/tnctl_completion_fish","title":"tnctl completion fish","description":"tnctl completion fish","sidebar":"tutorialSidebar"},"cli/tnctl_completion_powershell":{"id":"cli/tnctl_completion_powershell","title":"tnctl completion powershell","description":"tnctl completion powershell","sidebar":"tutorialSidebar"},"cli/tnctl_completion_zsh":{"id":"cli/tnctl_completion_zsh","title":"tnctl completion zsh","description":"tnctl completion zsh","sidebar":"tutorialSidebar"},"cli/tnctl_config":{"id":"cli/tnctl_config","title":"tnctl config","description":"tnctl config","sidebar":"tutorialSidebar"},"cli/tnctl_config_sources":{"id":"cli/tnctl_config_sources","title":"tnctl config sources","description":"tnctl config sources","sidebar":"tutorialSidebar"},"cli/tnctl_config_sources_add":{"id":"cli/tnctl_config_sources_add","title":"tnctl config sources add","description":"tnctl config sources add","sidebar":"tutorialSidebar"},"cli/tnctl_config_sources_list":{"id":"cli/tnctl_config_sources_list","title":"tnctl config sources list","description":"tnctl config sources list","sidebar":"tutorialSidebar"},"cli/tnctl_config_sources_remove":{"id":"cli/tnctl_config_sources_remove","title":"tnctl config sources remove","description":"tnctl config sources remove","sidebar":"tutorialSidebar"},"cli/tnctl_config_view":{"id":"cli/tnctl_config_view","title":"tnctl config view","description":"tnctl config view","sidebar":"tutorialSidebar"},"cli/tnctl_convert":{"id":"cli/tnctl_convert","title":"tnctl convert","description":"tnctl convert","sidebar":"tutorialSidebar"},"cli/tnctl_convert_cloudresource":{"id":"cli/tnctl_convert_cloudresource","title":"tnctl convert cloudresource","description":"tnctl convert cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_convert_configuration":{"id":"cli/tnctl_convert_configuration","title":"tnctl convert configuration","description":"tnctl convert configuration","sidebar":"tutorialSidebar"},"cli/tnctl_convert_revision":{"id":"cli/tnctl_convert_revision","title":"tnctl convert revision","description":"tnctl convert revision","sidebar":"tutorialSidebar"},"cli/tnctl_create":{"id":"cli/tnctl_create","title":"tnctl create","description":"tnctl create","sidebar":"tutorialSidebar"},"cli/tnctl_create_cloudresource":{"id":"cli/tnctl_create_cloudresource","title":"tnctl create cloudresource","description":"tnctl create cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_create_configuration":{"id":"cli/tnctl_create_configuration","title":"tnctl create configuration","description":"tnctl create configuration","sidebar":"tutorialSidebar"},"cli/tnctl_create_revision":{"id":"cli/tnctl_create_revision","title":"tnctl create revision","description":"tnctl create revision","sidebar":"tutorialSidebar"},"cli/tnctl_create_workflow":{"id":"cli/tnctl_create_workflow","title":"tnctl create workflow","description":"tnctl create workflow","sidebar":"tutorialSidebar"},"cli/tnctl_delete":{"id":"cli/tnctl_delete","title":"tnctl delete","description":"tnctl delete","sidebar":"tutorialSidebar"},"cli/tnctl_describe":{"id":"cli/tnctl_describe","title":"tnctl describe","description":"tnctl describe","sidebar":"tutorialSidebar"},"cli/tnctl_describe_cloudresource":{"id":"cli/tnctl_describe_cloudresource","title":"tnctl describe cloudresource","description":"tnctl describe cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_describe_configuration":{"id":"cli/tnctl_describe_configuration","title":"tnctl describe configuration","description":"tnctl describe configuration","sidebar":"tutorialSidebar"},"cli/tnctl_get":{"id":"cli/tnctl_get","title":"tnctl get","description":"tnctl get","sidebar":"tutorialSidebar"},"cli/tnctl_get_cloudresource":{"id":"cli/tnctl_get_cloudresource","title":"tnctl get cloudresource","description":"tnctl get cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_get_configuration":{"id":"cli/tnctl_get_configuration","title":"tnctl get configuration","description":"tnctl get configuration","sidebar":"tutorialSidebar"},"cli/tnctl_get_context":{"id":"cli/tnctl_get_context","title":"tnctl get context","description":"tnctl get context","sidebar":"tutorialSidebar"},"cli/tnctl_get_plan":{"id":"cli/tnctl_get_plan","title":"tnctl get plan","description":"tnctl get plan","sidebar":"tutorialSidebar"},"cli/tnctl_get_policy":{"id":"cli/tnctl_get_policy","title":"tnctl get policy","description":"tnctl get policy","sidebar":"tutorialSidebar"},"cli/tnctl_get_revision":{"id":"cli/tnctl_get_revision","title":"tnctl get revision","description":"tnctl get revision","sidebar":"tutorialSidebar"},"cli/tnctl_kubectl":{"id":"cli/tnctl_kubectl","title":"tnctl kubectl","description":"tnctl kubectl","sidebar":"tutorialSidebar"},"cli/tnctl_kubectl_plugin":{"id":"cli/tnctl_kubectl_plugin","title":"tnctl kubectl plugin","description":"tnctl kubectl plugin","sidebar":"tutorialSidebar"},"cli/tnctl_logs":{"id":"cli/tnctl_logs","title":"tnctl logs","description":"tnctl logs","sidebar":"tutorialSidebar"},"cli/tnctl_logs_cloudresource":{"id":"cli/tnctl_logs_cloudresource","title":"tnctl logs cloudresource","description":"tnctl logs cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_logs_configuration":{"id":"cli/tnctl_logs_configuration","title":"tnctl logs configuration","description":"tnctl logs configuration","sidebar":"tutorialSidebar"},"cli/tnctl_retry":{"id":"cli/tnctl_retry","title":"tnctl retry","description":"tnctl retry","sidebar":"tutorialSidebar"},"cli/tnctl_retry_cloudresource":{"id":"cli/tnctl_retry_cloudresource","title":"tnctl retry cloudresource","description":"tnctl retry cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_retry_configuration":{"id":"cli/tnctl_retry_configuration","title":"tnctl retry configuration","description":"tnctl retry configuration","sidebar":"tutorialSidebar"},"cli/tnctl_search":{"id":"cli/tnctl_search","title":"tnctl search","description":"tnctl search","sidebar":"tutorialSidebar"},"cli/tnctl_state":{"id":"cli/tnctl_state","title":"tnctl state","description":"tnctl state","sidebar":"tutorialSidebar"},"cli/tnctl_state_clean":{"id":"cli/tnctl_state_clean","title":"tnctl state clean","description":"tnctl state clean","sidebar":"tutorialSidebar"},"cli/tnctl_state_list":{"id":"cli/tnctl_state_list","title":"tnctl state list","description":"tnctl state list","sidebar":"tutorialSidebar"},"cli/tnctl_verify":{"id":"cli/tnctl_verify","title":"tnctl verify","description":"tnctl verify","sidebar":"tutorialSidebar"},"cli/tnctl_verify_revision":{"id":"cli/tnctl_verify_revision","title":"tnctl verify revision","description":"tnctl verify revision","sidebar":"tutorialSidebar"},"cli/tnctl_workflow":{"id":"cli/tnctl_workflow","title":"tnctl workflow","description":"tnctl workflow","sidebar":"tutorialSidebar"},"cli/tnctl_workflow_create":{"id":"cli/tnctl_workflow_create","title":"tnctl workflow create","description":"tnctl workflow create","sidebar":"tutorialSidebar"},"developer/contexts":{"id":"developer/contexts","title":"Configuration Contexts","description":"Configuration Contexts are a means to share common configuration (inputs) between Configurations in the cluster.","sidebar":"tutorialSidebar"},"developer/drift":{"id":"developer/drift","title":"Enabling Drift Protection","description":"Drift protection instructs the controller to periodically check for drift between the desired state and the upstream cloud provider; this could occur due to someone or something changing the configuration outside of the scope of terraform i.e. on the cloud console, API and so forth. The time frame is configured by the platform team, see Drift Detection for details.","sidebar":"tutorialSidebar"},"developer/flux":{"id":"developer/flux","title":"Using Flux as Source","description":"Flux is a flexible and popular framework used for Gitops. You can take advantage of any Flux install while still retaining the full feature set of the terraform controller.","sidebar":"tutorialSidebar"},"developer/private":{"id":"developer/private","title":"Using Private Repositories","description":"If the repository containing the terraform module is private and requires credentials to retrieve, you can add the authentication details to a secret held within the namespace.","sidebar":"tutorialSidebar"},"developer/provision":{"id":"developer/provision","title":"Provisioning a Resource","description":"There are two interfaces for provisioning cloud resources in terranetes","sidebar":"tutorialSidebar"},"developer/tnctl":{"id":"developer/tnctl","title":"Terranetes CLI","description":"Terranetes comes bundled with a tnctl command (see Releases for downloads) which has ability to search for cloud resources. The search subcommand supports iterating through","sidebar":"tutorialSidebar"},"index":{"id":"index","title":"What is Terranetes?","description":"The terranetes controller manages the life-cycle of terraform resources defined and built inside Kubernetes. This allows teams running workloads inside the cluster to self-serve application dependencies and reuse the wealth of terraform modules already written.","sidebar":"tutorialSidebar"},"quick_start":{"id":"quick_start","title":"Quick start","description":"While all actions can be performed via kubectl, Terranetes comes bundled with a CLI tool to make operations quicker. You can find the download on releases","sidebar":"tutorialSidebar"},"reference/cloudresources.terraform.appvia.io":{"id":"reference/cloudresources.terraform.appvia.io","title":"cloudresources.terraform.appvia.io","description":"CloudResource is the schema for terraform definitions in terraform controller","sidebar":"tutorialSidebar"},"reference/configurations.terraform.appvia.io":{"id":"reference/configurations.terraform.appvia.io","title":"configurations.terraform.appvia.io","description":"Configuration is the schema for terraform definitions in terraform controller","sidebar":"tutorialSidebar"},"reference/contexts.terraform.appvia.io":{"id":"reference/contexts.terraform.appvia.io","title":"contexts.terraform.appvia.io","description":"Context is the schema for the context type","sidebar":"tutorialSidebar"},"reference/plans.terraform.appvia.io":{"id":"reference/plans.terraform.appvia.io","title":"plans.terraform.appvia.io","description":"Plan is the schema for the plan type","sidebar":"tutorialSidebar"},"reference/policies.terraform.appvia.io":{"id":"reference/policies.terraform.appvia.io","title":"policies.terraform.appvia.io","description":"Policy is the schema for provider definitions in terraform controller","sidebar":"tutorialSidebar"},"reference/providers.terraform.appvia.io":{"id":"reference/providers.terraform.appvia.io","title":"providers.terraform.appvia.io","description":"Provider is the schema for provider definitions in terraform controller","sidebar":"tutorialSidebar"},"reference/revisions.terraform.appvia.io":{"id":"reference/revisions.terraform.appvia.io","title":"revisions.terraform.appvia.io","description":"Revision is the schema for a revision","sidebar":"tutorialSidebar"},"releases":{"id":"releases","title":"Releases","description":"Release v0.4.0","sidebar":"tutorialSidebar"},"walkthroughs/database":{"id":"walkthroughs/database","title":"Provisioning an Database in AWS","description":"The following tries to encompass a walk-through of the feature set, from a platform admin and developer consumption for self-serving a database resource in the cloud.","sidebar":"tutorialSidebar"},"workflows/developer":{"id":"workflows/developer","title":"Developer","description":"Please read here for the developer workflow","sidebar":"tutorialSidebar"},"workflows/intro":{"id":"workflows/intro","title":"What are workflows","description":"\ud83d\udcac \\"In essence an opinion on a piece of paper\\"","sidebar":"tutorialSidebar"},"workflows/platform":{"id":"workflows/platform","title":"Platform Team","description":"Setting up workflows","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.a4110782.js b/assets/js/935f2afb.a4110782.js deleted file mode 100644 index d9ba945e..00000000 --- a/assets/js/935f2afb.a4110782.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"link","label":"What is Terranetes?","href":"/terranetes-controller/","docId":"index"},{"type":"link","label":"Quick start","href":"/terranetes-controller/quick_start","docId":"quick_start"},{"type":"link","label":"Releases","href":"/terranetes-controller/releases","docId":"releases"},{"type":"link","label":"Architecture","href":"/terranetes-controller/architecture","docId":"architecture"},{"type":"category","label":"Workflows","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"What are workflows","href":"/terranetes-controller/workflows/intro","docId":"workflows/intro"},{"type":"link","label":"Platform Team","href":"/terranetes-controller/workflows/platform","docId":"workflows/platform"},{"type":"link","label":"Developer","href":"/terranetes-controller/workflows/developer","docId":"workflows/developer"}],"href":"/terranetes-controller/category/workflows"},{"type":"category","label":"Administration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configure Providers","href":"/terranetes-controller/admin/providers","className":"green","docId":"admin/providers"},{"type":"category","label":"Define Guardrails","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Introduction","href":"/terranetes-controller/admin/policy/intro","className":"green","docId":"admin/policy/intro"},{"type":"link","label":"Module Restrictions","href":"/terranetes-controller/admin/policy/modules","className":"green","docId":"admin/policy/modules"},{"type":"link","label":"Checkov Policy","href":"/terranetes-controller/admin/policy/checkov","className":"green","docId":"admin/policy/checkov"}],"href":"/terranetes-controller/category/define-guardrails"},{"type":"link","label":"Contexts","href":"/terranetes-controller/admin/contexts","className":"green","docId":"admin/contexts"},{"type":"link","label":"Cloud Resources","href":"/terranetes-controller/admin/cloudresource","className":"green","docId":"admin/cloudresource"},{"type":"category","label":"Observability","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Metrics","href":"/terranetes-controller/admin/observability/metrics","docId":"admin/observability/metrics"}],"href":"/terranetes-controller/category/observability"},{"type":"link","label":"Expose Costs","href":"/terranetes-controller/admin/costs","className":"green","docId":"admin/costs"},{"type":"link","label":"Injecting Defaults","href":"/terranetes-controller/admin/defaults","docId":"admin/defaults"},{"type":"link","label":"Drift Detection","href":"/terranetes-controller/admin/drift","docId":"admin/drift"},{"type":"link","label":"Terraform State","href":"/terranetes-controller/admin/state","docId":"admin/state"},{"type":"link","label":"Kubernetes RBAC","href":"/terranetes-controller/admin/rbac","className":"green","docId":"admin/rbac"},{"type":"link","label":"Customize Job Template","href":"/terranetes-controller/admin/template","docId":"admin/template"},{"type":"link","label":"Additional Secrets","href":"/terranetes-controller/admin/secrets","docId":"admin/secrets"}],"href":"/terranetes-controller/category/administration"},{"type":"category","label":"Developer Docs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Provisioning a Resource","href":"/terranetes-controller/developer/provision","docId":"developer/provision"},{"type":"link","label":"Terranetes CLI","href":"/terranetes-controller/developer/tnctl","docId":"developer/tnctl"},{"type":"link","label":"Using Private Repositories","href":"/terranetes-controller/developer/private","docId":"developer/private"},{"type":"link","label":"Configuration Contexts","href":"/terranetes-controller/developer/contexts","docId":"developer/contexts"},{"type":"link","label":"Enabling Drift Protection","href":"/terranetes-controller/developer/drift","docId":"developer/drift"},{"type":"link","label":"Using Flux as Source","href":"/terranetes-controller/developer/flux","docId":"developer/flux"}],"href":"/terranetes-controller/category/developer-docs"},{"type":"category","label":"Walk Throughs","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Provisioning an Database in AWS","href":"/terranetes-controller/walkthroughs/database","docId":"walkthroughs/database"}],"href":"/terranetes-controller/category/walk-throughs"},{"type":"category","label":"API Reference","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"cloudresources.terraform.appvia.io","href":"/terranetes-controller/reference/cloudresources.terraform.appvia.io","docId":"reference/cloudresources.terraform.appvia.io"},{"type":"link","label":"configurations.terraform.appvia.io","href":"/terranetes-controller/reference/configurations.terraform.appvia.io","docId":"reference/configurations.terraform.appvia.io"},{"type":"link","label":"contexts.terraform.appvia.io","href":"/terranetes-controller/reference/contexts.terraform.appvia.io","docId":"reference/contexts.terraform.appvia.io"},{"type":"link","label":"plans.terraform.appvia.io","href":"/terranetes-controller/reference/plans.terraform.appvia.io","docId":"reference/plans.terraform.appvia.io"},{"type":"link","label":"policies.terraform.appvia.io","href":"/terranetes-controller/reference/policies.terraform.appvia.io","docId":"reference/policies.terraform.appvia.io"},{"type":"link","label":"providers.terraform.appvia.io","href":"/terranetes-controller/reference/providers.terraform.appvia.io","docId":"reference/providers.terraform.appvia.io"},{"type":"link","label":"revisions.terraform.appvia.io","href":"/terranetes-controller/reference/revisions.terraform.appvia.io","docId":"reference/revisions.terraform.appvia.io"}],"href":"/terranetes-controller/category/api-reference"},{"type":"category","label":"CLI Reference","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"tnctl","href":"/terranetes-controller/cli/tnctl","docId":"cli/tnctl"},{"type":"link","label":"tnctl apply","href":"/terranetes-controller/cli/tnctl_apply","docId":"cli/tnctl_apply"},{"type":"link","label":"tnctl approve","href":"/terranetes-controller/cli/tnctl_approve","docId":"cli/tnctl_approve"},{"type":"link","label":"tnctl approve cloudresource","href":"/terranetes-controller/cli/tnctl_approve_cloudresource","docId":"cli/tnctl_approve_cloudresource"},{"type":"link","label":"tnctl approve configuration","href":"/terranetes-controller/cli/tnctl_approve_configuration","docId":"cli/tnctl_approve_configuration"},{"type":"link","label":"tnctl build","href":"/terranetes-controller/cli/tnctl_build","docId":"cli/tnctl_build"},{"type":"link","label":"tnctl completion","href":"/terranetes-controller/cli/tnctl_completion","docId":"cli/tnctl_completion"},{"type":"link","label":"tnctl completion bash","href":"/terranetes-controller/cli/tnctl_completion_bash","docId":"cli/tnctl_completion_bash"},{"type":"link","label":"tnctl completion fish","href":"/terranetes-controller/cli/tnctl_completion_fish","docId":"cli/tnctl_completion_fish"},{"type":"link","label":"tnctl completion powershell","href":"/terranetes-controller/cli/tnctl_completion_powershell","docId":"cli/tnctl_completion_powershell"},{"type":"link","label":"tnctl completion zsh","href":"/terranetes-controller/cli/tnctl_completion_zsh","docId":"cli/tnctl_completion_zsh"},{"type":"link","label":"tnctl config","href":"/terranetes-controller/cli/tnctl_config","docId":"cli/tnctl_config"},{"type":"link","label":"tnctl config sources","href":"/terranetes-controller/cli/tnctl_config_sources","docId":"cli/tnctl_config_sources"},{"type":"link","label":"tnctl config sources add","href":"/terranetes-controller/cli/tnctl_config_sources_add","docId":"cli/tnctl_config_sources_add"},{"type":"link","label":"tnctl config sources list","href":"/terranetes-controller/cli/tnctl_config_sources_list","docId":"cli/tnctl_config_sources_list"},{"type":"link","label":"tnctl config sources remove","href":"/terranetes-controller/cli/tnctl_config_sources_remove","docId":"cli/tnctl_config_sources_remove"},{"type":"link","label":"tnctl config view","href":"/terranetes-controller/cli/tnctl_config_view","docId":"cli/tnctl_config_view"},{"type":"link","label":"tnctl convert","href":"/terranetes-controller/cli/tnctl_convert","docId":"cli/tnctl_convert"},{"type":"link","label":"tnctl convert cloudresource","href":"/terranetes-controller/cli/tnctl_convert_cloudresource","docId":"cli/tnctl_convert_cloudresource"},{"type":"link","label":"tnctl convert configuration","href":"/terranetes-controller/cli/tnctl_convert_configuration","docId":"cli/tnctl_convert_configuration"},{"type":"link","label":"tnctl convert revision","href":"/terranetes-controller/cli/tnctl_convert_revision","docId":"cli/tnctl_convert_revision"},{"type":"link","label":"tnctl create","href":"/terranetes-controller/cli/tnctl_create","docId":"cli/tnctl_create"},{"type":"link","label":"tnctl create cloudresource","href":"/terranetes-controller/cli/tnctl_create_cloudresource","docId":"cli/tnctl_create_cloudresource"},{"type":"link","label":"tnctl create configuration","href":"/terranetes-controller/cli/tnctl_create_configuration","docId":"cli/tnctl_create_configuration"},{"type":"link","label":"tnctl create revision","href":"/terranetes-controller/cli/tnctl_create_revision","docId":"cli/tnctl_create_revision"},{"type":"link","label":"tnctl create workflow","href":"/terranetes-controller/cli/tnctl_create_workflow","docId":"cli/tnctl_create_workflow"},{"type":"link","label":"tnctl delete","href":"/terranetes-controller/cli/tnctl_delete","docId":"cli/tnctl_delete"},{"type":"link","label":"tnctl describe","href":"/terranetes-controller/cli/tnctl_describe","docId":"cli/tnctl_describe"},{"type":"link","label":"tnctl describe cloudresource","href":"/terranetes-controller/cli/tnctl_describe_cloudresource","docId":"cli/tnctl_describe_cloudresource"},{"type":"link","label":"tnctl describe configuration","href":"/terranetes-controller/cli/tnctl_describe_configuration","docId":"cli/tnctl_describe_configuration"},{"type":"link","label":"tnctl get","href":"/terranetes-controller/cli/tnctl_get","docId":"cli/tnctl_get"},{"type":"link","label":"tnctl get cloudresource","href":"/terranetes-controller/cli/tnctl_get_cloudresource","docId":"cli/tnctl_get_cloudresource"},{"type":"link","label":"tnctl get configuration","href":"/terranetes-controller/cli/tnctl_get_configuration","docId":"cli/tnctl_get_configuration"},{"type":"link","label":"tnctl get context","href":"/terranetes-controller/cli/tnctl_get_context","docId":"cli/tnctl_get_context"},{"type":"link","label":"tnctl get plan","href":"/terranetes-controller/cli/tnctl_get_plan","docId":"cli/tnctl_get_plan"},{"type":"link","label":"tnctl get policy","href":"/terranetes-controller/cli/tnctl_get_policy","docId":"cli/tnctl_get_policy"},{"type":"link","label":"tnctl get revision","href":"/terranetes-controller/cli/tnctl_get_revision","docId":"cli/tnctl_get_revision"},{"type":"link","label":"tnctl kubectl","href":"/terranetes-controller/cli/tnctl_kubectl","docId":"cli/tnctl_kubectl"},{"type":"link","label":"tnctl kubectl plugin","href":"/terranetes-controller/cli/tnctl_kubectl_plugin","docId":"cli/tnctl_kubectl_plugin"},{"type":"link","label":"tnctl logs","href":"/terranetes-controller/cli/tnctl_logs","docId":"cli/tnctl_logs"},{"type":"link","label":"tnctl logs cloudresource","href":"/terranetes-controller/cli/tnctl_logs_cloudresource","docId":"cli/tnctl_logs_cloudresource"},{"type":"link","label":"tnctl logs configuration","href":"/terranetes-controller/cli/tnctl_logs_configuration","docId":"cli/tnctl_logs_configuration"},{"type":"link","label":"tnctl retry","href":"/terranetes-controller/cli/tnctl_retry","docId":"cli/tnctl_retry"},{"type":"link","label":"tnctl retry cloudresource","href":"/terranetes-controller/cli/tnctl_retry_cloudresource","docId":"cli/tnctl_retry_cloudresource"},{"type":"link","label":"tnctl retry configuration","href":"/terranetes-controller/cli/tnctl_retry_configuration","docId":"cli/tnctl_retry_configuration"},{"type":"link","label":"tnctl search","href":"/terranetes-controller/cli/tnctl_search","docId":"cli/tnctl_search"},{"type":"link","label":"tnctl state","href":"/terranetes-controller/cli/tnctl_state","docId":"cli/tnctl_state"},{"type":"link","label":"tnctl state clean","href":"/terranetes-controller/cli/tnctl_state_clean","docId":"cli/tnctl_state_clean"},{"type":"link","label":"tnctl state list","href":"/terranetes-controller/cli/tnctl_state_list","docId":"cli/tnctl_state_list"},{"type":"link","label":"tnctl verify","href":"/terranetes-controller/cli/tnctl_verify","docId":"cli/tnctl_verify"},{"type":"link","label":"tnctl verify revision","href":"/terranetes-controller/cli/tnctl_verify_revision","docId":"cli/tnctl_verify_revision"},{"type":"link","label":"tnctl workflow","href":"/terranetes-controller/cli/tnctl_workflow","docId":"cli/tnctl_workflow"},{"type":"link","label":"tnctl workflow create","href":"/terranetes-controller/cli/tnctl_workflow_create","docId":"cli/tnctl_workflow_create"}],"href":"/terranetes-controller/category/cli-reference"}]},"docs":{"admin/cloudresource":{"id":"admin/cloudresource","title":"Cloud Resources","description":"This feature is only available from >= v0.3.32 releases","sidebar":"tutorialSidebar"},"admin/contexts":{"id":"admin/contexts","title":"Contexts","description":"Contexts provide a means to share common configuration between Configurations. The resource type is Cluster scoped and can be used by any Configuration in the cluster.","sidebar":"tutorialSidebar"},"admin/costs":{"id":"admin/costs","title":"Expose Costs","description":"The costs integration allows developers to see their associated costs before applying the terraform. This controller currently uses infracost to extract the predicted costs of a configuration, exposing the cost within the status of the Kubernetes object. It is viewable by running kubectl get configuration.","sidebar":"tutorialSidebar"},"admin/defaults":{"id":"admin/defaults","title":"Injecting Defaults","description":"Currently via policies platform administrators have the ability to inject both variables and or secrets into developer Configurations, common use cases","sidebar":"tutorialSidebar"},"admin/drift":{"id":"admin/drift","title":"Drift Detection","description":"Drift detection periodically runs a terraform plan on a Configuration, ensuring the expected state (terraform state) and the actual cloud resources are in sync. Currently Configurations must opt in for drift detection via their spec;","sidebar":"tutorialSidebar"},"admin/observability/metrics":{"id":"admin/observability/metrics","title":"Metrics","description":"The controller exposes a number of prometheus metrics that can be utilized for tracking operational conditions and usage metrics (i.e. configurations).","sidebar":"tutorialSidebar"},"admin/policy/checkov":{"id":"admin/policy/checkov","title":"Checkov Policy","description":"Security policy allows platform teams to be assured what they are allowing to be self-serviced follows what they and the organization deem to be best practice. All terraform configurations are funnelled through a security check as part of the plan stage.","sidebar":"tutorialSidebar"},"admin/policy/intro":{"id":"admin/policy/intro","title":"Introduction","description":"The controller comes with a number of controls and safeguards that the platform team can utilize to:","sidebar":"tutorialSidebar"},"admin/policy/modules":{"id":"admin/policy/modules","title":"Module Restrictions","description":"You can control the source of the terraform modules permitted to run through the Policy resource. The following policy enforces that only modules sourced from the Appvia Github Organization can be used.","sidebar":"tutorialSidebar"},"admin/providers":{"id":"admin/providers","title":"Configure Providers","description":"Credentials to access the cloud are represented by Providers in the controller, a cluster scoped resource. When defining a terraform module developers reference a provider using spec.providerRef, tying together the resource and credentials.","sidebar":"tutorialSidebar"},"admin/rbac":{"id":"admin/rbac","title":"Kubernetes RBAC","description":"The following gives some guidance around the suggested roles and permissions in Kubernetes for consumers. In all cases, to remove duplication, the permissions are defined as a ClusterRole and bound locally within a namespace.","sidebar":"tutorialSidebar"},"admin/secrets":{"id":"admin/secrets","title":"Additional Secrets","description":"The controller supports the ability to inject additional secrets into the terraform execution. A common use case to provide additional credentials, api tokens or custom configuration into the jobs.","sidebar":"tutorialSidebar"},"admin/state":{"id":"admin/state","title":"Terraform State","description":"Terraform stores state about your managed infrastructure and configuration. This state is used by Terraform to map real world resources to your configuration, keep track of metadata, and to improve performance for large infrastructures. For a detailed understanding of terraform state, please visit the official docs.","sidebar":"tutorialSidebar"},"admin/template":{"id":"admin/template","title":"Customize Job Template","description":"When a configuration is changed (i.e. for plan, apply or destroy), the controller uses a template to render the final job configuration, taking the options provided on the controller command line, custom policies and the terraform configuration itself. A batch job is created from all the options and ordered to execute the change. You can find the default template for this here.","sidebar":"tutorialSidebar"},"architecture":{"id":"architecture","title":"Architecture","description":"The following diagram demos the architecture for the terraform controller.","sidebar":"tutorialSidebar"},"cli/tnctl":{"id":"cli/tnctl","title":"tnctl","description":"tnctl","sidebar":"tutorialSidebar"},"cli/tnctl_apply":{"id":"cli/tnctl_apply","title":"tnctl apply","description":"tnctl apply","sidebar":"tutorialSidebar"},"cli/tnctl_approve":{"id":"cli/tnctl_approve","title":"tnctl approve","description":"tnctl approve","sidebar":"tutorialSidebar"},"cli/tnctl_approve_cloudresource":{"id":"cli/tnctl_approve_cloudresource","title":"tnctl approve cloudresource","description":"tnctl approve cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_approve_configuration":{"id":"cli/tnctl_approve_configuration","title":"tnctl approve configuration","description":"tnctl approve configuration","sidebar":"tutorialSidebar"},"cli/tnctl_build":{"id":"cli/tnctl_build","title":"tnctl build","description":"tnctl build","sidebar":"tutorialSidebar"},"cli/tnctl_completion":{"id":"cli/tnctl_completion","title":"tnctl completion","description":"tnctl completion","sidebar":"tutorialSidebar"},"cli/tnctl_completion_bash":{"id":"cli/tnctl_completion_bash","title":"tnctl completion bash","description":"tnctl completion bash","sidebar":"tutorialSidebar"},"cli/tnctl_completion_fish":{"id":"cli/tnctl_completion_fish","title":"tnctl completion fish","description":"tnctl completion fish","sidebar":"tutorialSidebar"},"cli/tnctl_completion_powershell":{"id":"cli/tnctl_completion_powershell","title":"tnctl completion powershell","description":"tnctl completion powershell","sidebar":"tutorialSidebar"},"cli/tnctl_completion_zsh":{"id":"cli/tnctl_completion_zsh","title":"tnctl completion zsh","description":"tnctl completion zsh","sidebar":"tutorialSidebar"},"cli/tnctl_config":{"id":"cli/tnctl_config","title":"tnctl config","description":"tnctl config","sidebar":"tutorialSidebar"},"cli/tnctl_config_sources":{"id":"cli/tnctl_config_sources","title":"tnctl config sources","description":"tnctl config sources","sidebar":"tutorialSidebar"},"cli/tnctl_config_sources_add":{"id":"cli/tnctl_config_sources_add","title":"tnctl config sources add","description":"tnctl config sources add","sidebar":"tutorialSidebar"},"cli/tnctl_config_sources_list":{"id":"cli/tnctl_config_sources_list","title":"tnctl config sources list","description":"tnctl config sources list","sidebar":"tutorialSidebar"},"cli/tnctl_config_sources_remove":{"id":"cli/tnctl_config_sources_remove","title":"tnctl config sources remove","description":"tnctl config sources remove","sidebar":"tutorialSidebar"},"cli/tnctl_config_view":{"id":"cli/tnctl_config_view","title":"tnctl config view","description":"tnctl config view","sidebar":"tutorialSidebar"},"cli/tnctl_convert":{"id":"cli/tnctl_convert","title":"tnctl convert","description":"tnctl convert","sidebar":"tutorialSidebar"},"cli/tnctl_convert_cloudresource":{"id":"cli/tnctl_convert_cloudresource","title":"tnctl convert cloudresource","description":"tnctl convert cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_convert_configuration":{"id":"cli/tnctl_convert_configuration","title":"tnctl convert configuration","description":"tnctl convert configuration","sidebar":"tutorialSidebar"},"cli/tnctl_convert_revision":{"id":"cli/tnctl_convert_revision","title":"tnctl convert revision","description":"tnctl convert revision","sidebar":"tutorialSidebar"},"cli/tnctl_create":{"id":"cli/tnctl_create","title":"tnctl create","description":"tnctl create","sidebar":"tutorialSidebar"},"cli/tnctl_create_cloudresource":{"id":"cli/tnctl_create_cloudresource","title":"tnctl create cloudresource","description":"tnctl create cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_create_configuration":{"id":"cli/tnctl_create_configuration","title":"tnctl create configuration","description":"tnctl create configuration","sidebar":"tutorialSidebar"},"cli/tnctl_create_revision":{"id":"cli/tnctl_create_revision","title":"tnctl create revision","description":"tnctl create revision","sidebar":"tutorialSidebar"},"cli/tnctl_create_workflow":{"id":"cli/tnctl_create_workflow","title":"tnctl create workflow","description":"tnctl create workflow","sidebar":"tutorialSidebar"},"cli/tnctl_delete":{"id":"cli/tnctl_delete","title":"tnctl delete","description":"tnctl delete","sidebar":"tutorialSidebar"},"cli/tnctl_describe":{"id":"cli/tnctl_describe","title":"tnctl describe","description":"tnctl describe","sidebar":"tutorialSidebar"},"cli/tnctl_describe_cloudresource":{"id":"cli/tnctl_describe_cloudresource","title":"tnctl describe cloudresource","description":"tnctl describe cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_describe_configuration":{"id":"cli/tnctl_describe_configuration","title":"tnctl describe configuration","description":"tnctl describe configuration","sidebar":"tutorialSidebar"},"cli/tnctl_get":{"id":"cli/tnctl_get","title":"tnctl get","description":"tnctl get","sidebar":"tutorialSidebar"},"cli/tnctl_get_cloudresource":{"id":"cli/tnctl_get_cloudresource","title":"tnctl get cloudresource","description":"tnctl get cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_get_configuration":{"id":"cli/tnctl_get_configuration","title":"tnctl get configuration","description":"tnctl get configuration","sidebar":"tutorialSidebar"},"cli/tnctl_get_context":{"id":"cli/tnctl_get_context","title":"tnctl get context","description":"tnctl get context","sidebar":"tutorialSidebar"},"cli/tnctl_get_plan":{"id":"cli/tnctl_get_plan","title":"tnctl get plan","description":"tnctl get plan","sidebar":"tutorialSidebar"},"cli/tnctl_get_policy":{"id":"cli/tnctl_get_policy","title":"tnctl get policy","description":"tnctl get policy","sidebar":"tutorialSidebar"},"cli/tnctl_get_revision":{"id":"cli/tnctl_get_revision","title":"tnctl get revision","description":"tnctl get revision","sidebar":"tutorialSidebar"},"cli/tnctl_kubectl":{"id":"cli/tnctl_kubectl","title":"tnctl kubectl","description":"tnctl kubectl","sidebar":"tutorialSidebar"},"cli/tnctl_kubectl_plugin":{"id":"cli/tnctl_kubectl_plugin","title":"tnctl kubectl plugin","description":"tnctl kubectl plugin","sidebar":"tutorialSidebar"},"cli/tnctl_logs":{"id":"cli/tnctl_logs","title":"tnctl logs","description":"tnctl logs","sidebar":"tutorialSidebar"},"cli/tnctl_logs_cloudresource":{"id":"cli/tnctl_logs_cloudresource","title":"tnctl logs cloudresource","description":"tnctl logs cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_logs_configuration":{"id":"cli/tnctl_logs_configuration","title":"tnctl logs configuration","description":"tnctl logs configuration","sidebar":"tutorialSidebar"},"cli/tnctl_retry":{"id":"cli/tnctl_retry","title":"tnctl retry","description":"tnctl retry","sidebar":"tutorialSidebar"},"cli/tnctl_retry_cloudresource":{"id":"cli/tnctl_retry_cloudresource","title":"tnctl retry cloudresource","description":"tnctl retry cloudresource","sidebar":"tutorialSidebar"},"cli/tnctl_retry_configuration":{"id":"cli/tnctl_retry_configuration","title":"tnctl retry configuration","description":"tnctl retry configuration","sidebar":"tutorialSidebar"},"cli/tnctl_search":{"id":"cli/tnctl_search","title":"tnctl search","description":"tnctl search","sidebar":"tutorialSidebar"},"cli/tnctl_state":{"id":"cli/tnctl_state","title":"tnctl state","description":"tnctl state","sidebar":"tutorialSidebar"},"cli/tnctl_state_clean":{"id":"cli/tnctl_state_clean","title":"tnctl state clean","description":"tnctl state clean","sidebar":"tutorialSidebar"},"cli/tnctl_state_list":{"id":"cli/tnctl_state_list","title":"tnctl state list","description":"tnctl state list","sidebar":"tutorialSidebar"},"cli/tnctl_verify":{"id":"cli/tnctl_verify","title":"tnctl verify","description":"tnctl verify","sidebar":"tutorialSidebar"},"cli/tnctl_verify_revision":{"id":"cli/tnctl_verify_revision","title":"tnctl verify revision","description":"tnctl verify revision","sidebar":"tutorialSidebar"},"cli/tnctl_workflow":{"id":"cli/tnctl_workflow","title":"tnctl workflow","description":"tnctl workflow","sidebar":"tutorialSidebar"},"cli/tnctl_workflow_create":{"id":"cli/tnctl_workflow_create","title":"tnctl workflow create","description":"tnctl workflow create","sidebar":"tutorialSidebar"},"developer/contexts":{"id":"developer/contexts","title":"Configuration Contexts","description":"Configuration Contexts are a means to share common configuration (inputs) between Configurations in the cluster.","sidebar":"tutorialSidebar"},"developer/drift":{"id":"developer/drift","title":"Enabling Drift Protection","description":"Drift protection instructs the controller to periodically check for drift between the desired state and the upstream cloud provider; this could occur due to someone or something changing the configuration outside of the scope of terraform i.e. on the cloud console, API and so forth. The time frame is configured by the platform team, see Drift Detection for details.","sidebar":"tutorialSidebar"},"developer/flux":{"id":"developer/flux","title":"Using Flux as Source","description":"Flux is a flexible and popular framework used for Gitops. You can take advantage of any Flux install while still retaining the full feature set of the terraform controller.","sidebar":"tutorialSidebar"},"developer/private":{"id":"developer/private","title":"Using Private Repositories","description":"If the repository containing the terraform module is private and requires credentials to retrieve, you can add the authentication details to a secret held within the namespace.","sidebar":"tutorialSidebar"},"developer/provision":{"id":"developer/provision","title":"Provisioning a Resource","description":"There are two interfaces for provisioning cloud resources in terranetes","sidebar":"tutorialSidebar"},"developer/tnctl":{"id":"developer/tnctl","title":"Terranetes CLI","description":"Terranetes comes bundled with a tnctl command (see Releases for downloads) which has ability to search for cloud resources. The search subcommand supports iterating through","sidebar":"tutorialSidebar"},"index":{"id":"index","title":"What is Terranetes?","description":"The terranetes controller manages the life-cycle of terraform resources defined and built inside Kubernetes. This allows teams running workloads inside the cluster to self-serve application dependencies and reuse the wealth of terraform modules already written.","sidebar":"tutorialSidebar"},"quick_start":{"id":"quick_start","title":"Quick start","description":"While all actions can be performed via kubectl, Terranetes comes bundled with a CLI tool to make operations quicker. You can find the download on releases","sidebar":"tutorialSidebar"},"reference/cloudresources.terraform.appvia.io":{"id":"reference/cloudresources.terraform.appvia.io","title":"cloudresources.terraform.appvia.io","description":"CloudResource is the schema for terraform definitions in terraform controller","sidebar":"tutorialSidebar"},"reference/configurations.terraform.appvia.io":{"id":"reference/configurations.terraform.appvia.io","title":"configurations.terraform.appvia.io","description":"Configuration is the schema for terraform definitions in terraform controller","sidebar":"tutorialSidebar"},"reference/contexts.terraform.appvia.io":{"id":"reference/contexts.terraform.appvia.io","title":"contexts.terraform.appvia.io","description":"Context is the schema for the context type","sidebar":"tutorialSidebar"},"reference/plans.terraform.appvia.io":{"id":"reference/plans.terraform.appvia.io","title":"plans.terraform.appvia.io","description":"Plan is the schema for the plan type","sidebar":"tutorialSidebar"},"reference/policies.terraform.appvia.io":{"id":"reference/policies.terraform.appvia.io","title":"policies.terraform.appvia.io","description":"Policy is the schema for provider definitions in terraform controller","sidebar":"tutorialSidebar"},"reference/providers.terraform.appvia.io":{"id":"reference/providers.terraform.appvia.io","title":"providers.terraform.appvia.io","description":"Provider is the schema for provider definitions in terraform controller","sidebar":"tutorialSidebar"},"reference/revisions.terraform.appvia.io":{"id":"reference/revisions.terraform.appvia.io","title":"revisions.terraform.appvia.io","description":"Revision is the schema for a revision","sidebar":"tutorialSidebar"},"releases":{"id":"releases","title":"Releases","description":"Release v0.4.0","sidebar":"tutorialSidebar"},"walkthroughs/database":{"id":"walkthroughs/database","title":"Provisioning an Database in AWS","description":"The following tries to encompass a walk-through of the feature set, from a platform admin and developer consumption for self-serving a database resource in the cloud.","sidebar":"tutorialSidebar"},"workflows/developer":{"id":"workflows/developer","title":"Developer","description":"Please read here for the developer workflow","sidebar":"tutorialSidebar"},"workflows/intro":{"id":"workflows/intro","title":"What are workflows","description":"\ud83d\udcac \\"In essence an opinion on a piece of paper\\"","sidebar":"tutorialSidebar"},"workflows/platform":{"id":"workflows/platform","title":"Platform Team","description":"Setting up workflows","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/94624a21.2f2ce8e4.js b/assets/js/94624a21.2f2ce8e4.js deleted file mode 100644 index d83cce35..00000000 --- a/assets/js/94624a21.2f2ce8e4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2917],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,i=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),f=s(r),d=o,m=f["".concat(i,".").concat(d)]||f[d]||p[d]||c;return r?n.createElement(m,l(l({ref:t},u),{},{components:r})):n.createElement(m,l({ref:t},u))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,l=new Array(c);l[0]=f;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:o,l[1]=a;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>p,frontMatter:()=>c,metadata:()=>a,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl config sources"},l=void 0,a={unversionedId:"cli/tnctl_config_sources",id:"cli/tnctl_config_sources",title:"tnctl config sources",description:"tnctl config sources",source:"@site/docs/terranetes-controller/cli/tnctl_config_sources.md",sourceDirName:"cli",slug:"/cli/tnctl_config_sources",permalink:"/terranetes-controller/cli/tnctl_config_sources",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_config_sources.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl config sources"},sidebar:"tutorialSidebar",previous:{title:"tnctl config",permalink:"/terranetes-controller/cli/tnctl_config"},next:{title:"tnctl config sources add",permalink:"/terranetes-controller/cli/tnctl_config_sources_add"}},i={},s=[{value:"tnctl config sources",id:"tnctl-config-sources",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-config-sources"},"tnctl config sources"),(0,o.kt)("p",null,"Used to manage the sources of the terraform modules"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl config sources [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for sources\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config"},"tnctl config"),"\t - Used to manage the CLI configuration"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources_add"},"tnctl config sources add"),"\t - Adds a terraform module source to the configuration"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources_list"},"tnctl config sources list"),"\t - Shows the current sources of the terraform modules"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources_remove"},"tnctl config sources remove"),"\t - Removes a terraform module source to the configuration")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/94624a21.effbad47.js b/assets/js/94624a21.effbad47.js new file mode 100644 index 00000000..939337d8 --- /dev/null +++ b/assets/js/94624a21.effbad47.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2917],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,i=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),p=s(r),d=o,m=p["".concat(i,".").concat(d)]||p[d]||f[d]||c;return r?n.createElement(m,l(l({ref:t},u),{},{components:r})):n.createElement(m,l({ref:t},u))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,l=new Array(c);l[0]=p;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:o,l[1]=a;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>l,default:()=>f,frontMatter:()=>c,metadata:()=>a,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl config sources"},l=void 0,a={unversionedId:"cli/tnctl_config_sources",id:"cli/tnctl_config_sources",title:"tnctl config sources",description:"tnctl config sources",source:"@site/docs/terranetes-controller/cli/tnctl_config_sources.md",sourceDirName:"cli",slug:"/cli/tnctl_config_sources",permalink:"/terranetes-controller/cli/tnctl_config_sources",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_config_sources.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl config sources"},sidebar:"tutorialSidebar",previous:{title:"tnctl config",permalink:"/terranetes-controller/cli/tnctl_config"},next:{title:"tnctl config sources add",permalink:"/terranetes-controller/cli/tnctl_config_sources_add"}},i={},s=[{value:"tnctl config sources",id:"tnctl-config-sources",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function f(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-config-sources"},"tnctl config sources"),(0,o.kt)("p",null,"Used to manage the sources of the terraform modules"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl config sources [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for sources\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config"},"tnctl config"),"\t - Used to manage the CLI configuration"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources_add"},"tnctl config sources add"),"\t - Adds a terraform module source to the configuration"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources_list"},"tnctl config sources list"),"\t - Shows the current sources of the terraform modules"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_config_sources_remove"},"tnctl config sources remove"),"\t - Removes a terraform module source to the configuration")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/95101b21.074efea1.js b/assets/js/95101b21.074efea1.js deleted file mode 100644 index e24fe4c3..00000000 --- a/assets/js/95101b21.074efea1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2721],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(n),d=a,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||o;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));const o={sidebar_position:2,sidebar_class_name:"green"},i="Module Restrictions",l={unversionedId:"admin/policy/modules",id:"admin/policy/modules",title:"Module Restrictions",description:"You can control the source of the terraform modules permitted to run through the Policy resource. The following policy enforces that only modules sourced from the Appvia Github Organization can be used.",source:"@site/docs/terranetes-controller/admin/policy/modules.md",sourceDirName:"admin/policy",slug:"/admin/policy/modules",permalink:"/terranetes-controller/admin/policy/modules",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/policy/modules.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/terranetes-controller/admin/policy/intro"},next:{title:"Checkov Policy",permalink:"/terranetes-controller/admin/policy/checkov"}},s={},c=[],p={toc:c};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"module-restrictions"},"Module Restrictions"),(0,a.kt)("p",null,"You can control the source of the terraform modules permitted to run through the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/policies.terraform.appvia.io"},"Policy")," resource. The following policy enforces that only modules sourced from the Appvia Github Organization can be used."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"This control is applied to the primary module (i.e. ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.module"),") inside the Configuration CRD. Modules that incorporate other modules are not enforced.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: permitted-modules\nspec:\n constraints:\n modules:\n selector:\n namespace:\n matchLabels: {}\n matchExpressions: []\n resource:\n matchLabels: {}\n matchExpressions: []\n allowed:\n - "https://github.com/appvia/.*"\n')),(0,a.kt)("p",null,"The allowed list (",(0,a.kt)("inlineCode",{parentName:"p"},"spec.constraints.modules.allowed"),") is a collection of Golang regexes which a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," must match at least one."),(0,a.kt)("p",null,"The policy may also include an optional selector (",(0,a.kt)("inlineCode",{parentName:"p"},"spec.constraints.modules.selector"),") that can be used to match against namespace and resource labels of the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration"),". As with all selectors in the controller, leaving this field empty implies you want to match against all. You can take advantage of the selectors by providing overrides."),(0,a.kt)("p",null,"Lets use the following requirements."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"All teams may use terraform from the companies Github repositories at ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/appvia"},"https://github.com/appvia")),(0,a.kt)("li",{parentName:"ul"},"The teams using namespace ",(0,a.kt)("inlineCode",{parentName:"li"},"infra")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"ci")," can use additional modules from ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/elsewhere"},"https://github.com/elsewhere"))),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Create the default policy (i.e no selector)")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: default\nspec:\n constraints:\n modules:\n allowed:\n - "https://github.com/appvia/.*"\n')),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"Create the additional policy for namespace ",(0,a.kt)("inlineCode",{parentName:"li"},"infra")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"ci"),".")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: default\nspec:\n constraints:\n modules:\n selector:\n namespace:\n matchExpressions:\n - key: kubernetes.io/metadata.name\n operator: In\n values: [infra, ci]\n allowed:\n - "https://github.com/elsewhere/.*"\n')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/95101b21.07aa5b82.js b/assets/js/95101b21.07aa5b82.js new file mode 100644 index 00000000..0d0fcaed --- /dev/null +++ b/assets/js/95101b21.07aa5b82.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2721],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},u=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(n),d=a,f=u["".concat(s,".").concat(d)]||u[d]||m[d]||o;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var r=n(7462),a=(n(7294),n(3905));const o={sidebar_position:2,sidebar_class_name:"green"},i="Module Restrictions",l={unversionedId:"admin/policy/modules",id:"admin/policy/modules",title:"Module Restrictions",description:"You can control the source of the terraform modules permitted to run through the Policy resource. The following policy enforces that only modules sourced from the Appvia Github Organization can be used.",source:"@site/docs/terranetes-controller/admin/policy/modules.md",sourceDirName:"admin/policy",slug:"/admin/policy/modules",permalink:"/terranetes-controller/admin/policy/modules",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/policy/modules.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:2,frontMatter:{sidebar_position:2,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Introduction",permalink:"/terranetes-controller/admin/policy/intro"},next:{title:"Checkov Policy",permalink:"/terranetes-controller/admin/policy/checkov"}},s={},c=[],p={toc:c};function m(e){let{components:t,...n}=e;return(0,a.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"module-restrictions"},"Module Restrictions"),(0,a.kt)("p",null,"You can control the source of the terraform modules permitted to run through the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/policies.terraform.appvia.io"},"Policy")," resource. The following policy enforces that only modules sourced from the Appvia Github Organization can be used."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"This control is applied to the primary module (i.e. ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.module"),") inside the Configuration CRD. Modules that incorporate other modules are not enforced.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: permitted-modules\nspec:\n constraints:\n modules:\n selector:\n namespace:\n matchLabels: {}\n matchExpressions: []\n resource:\n matchLabels: {}\n matchExpressions: []\n allowed:\n - "https://github.com/appvia/.*"\n')),(0,a.kt)("p",null,"The allowed list (",(0,a.kt)("inlineCode",{parentName:"p"},"spec.constraints.modules.allowed"),") is a collection of Golang regexes which a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," must match at least one."),(0,a.kt)("p",null,"The policy may also include an optional selector (",(0,a.kt)("inlineCode",{parentName:"p"},"spec.constraints.modules.selector"),") that can be used to match against namespace and resource labels of the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration"),". As with all selectors in the controller, leaving this field empty implies you want to match against all. You can take advantage of the selectors by providing overrides."),(0,a.kt)("p",null,"Lets use the following requirements."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"All teams may use terraform from the companies Github repositories at ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/appvia"},"https://github.com/appvia")),(0,a.kt)("li",{parentName:"ul"},"The teams using namespace ",(0,a.kt)("inlineCode",{parentName:"li"},"infra")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"ci")," can use additional modules from ",(0,a.kt)("a",{parentName:"li",href:"https://github.com/elsewhere"},"https://github.com/elsewhere"))),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Create the default policy (i.e no selector)")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: default\nspec:\n constraints:\n modules:\n allowed:\n - "https://github.com/appvia/.*"\n')),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"Create the additional policy for namespace ",(0,a.kt)("inlineCode",{parentName:"li"},"infra")," and ",(0,a.kt)("inlineCode",{parentName:"li"},"ci"),".")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},'apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: default\nspec:\n constraints:\n modules:\n selector:\n namespace:\n matchExpressions:\n - key: kubernetes.io/metadata.name\n operator: In\n values: [infra, ci]\n allowed:\n - "https://github.com/elsewhere/.*"\n')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/975371ff.ef624bd0.js b/assets/js/975371ff.33429847.js similarity index 57% rename from assets/js/975371ff.ef624bd0.js rename to assets/js/975371ff.33429847.js index 46532eb8..418b201e 100644 --- a/assets/js/975371ff.ef624bd0.js +++ b/assets/js/975371ff.33429847.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6546],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},s=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,c=e.originalType,l=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),s=u(n),d=o,v=s["".concat(l,".").concat(d)]||s[d]||f[d]||c;return n?r.createElement(v,i(i({ref:t},p),{},{components:n})):r.createElement(v,i({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=n.length,i=new Array(c);i[0]=s;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a.mdxType="string"==typeof e?e:o,i[1]=a;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>f,frontMatter:()=>c,metadata:()=>a,toc:()=>u});var r=n(7462),o=(n(7294),n(3905));const c={title:"tnctl convert configuration"},i=void 0,a={unversionedId:"cli/tnctl_convert_configuration",id:"cli/tnctl_convert_configuration",title:"tnctl convert configuration",description:"tnctl convert configuration",source:"@site/docs/terranetes-controller/cli/tnctl_convert_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_convert_configuration",permalink:"/terranetes-controller/cli/tnctl_convert_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_convert_configuration.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl convert configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl convert cloudresource",permalink:"/terranetes-controller/cli/tnctl_convert_cloudresource"},next:{title:"tnctl convert revision",permalink:"/terranetes-controller/cli/tnctl_convert_revision"}},l={},u=[{value:"tnctl convert configuration",id:"tnctl-convert-configuration",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:u};function f(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-convert-configuration"},"tnctl convert configuration"),(0,o.kt)("p",null,"Converts configuration back to a terraform module"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl convert configuration [OPTIONS] [NAME|-f FILE] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -f, --file string Path to the configuration file\n -h, --help help for configuration\n --include-checkov Include checkov in the output (default true)\n --include-provider Include provider in the output (default true)\n --include-terraform Include terraform in the output (default true)\n -n, --namespace string Namespace of the resource (default "default")\n -p, --path string The path to write the files to (default ".")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_convert"},"tnctl convert"),"\t - Used to convert between different formats")))}f.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6546],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},s=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,c=e.originalType,l=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),s=u(n),d=o,v=s["".concat(l,".").concat(d)]||s[d]||f[d]||c;return n?r.createElement(v,i(i({ref:t},p),{},{components:n})):r.createElement(v,i({ref:t},p))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=n.length,i=new Array(c);i[0]=s;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a.mdxType="string"==typeof e?e:o,i[1]=a;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>f,frontMatter:()=>c,metadata:()=>a,toc:()=>u});var r=n(7462),o=(n(7294),n(3905));const c={title:"tnctl convert configuration"},i=void 0,a={unversionedId:"cli/tnctl_convert_configuration",id:"cli/tnctl_convert_configuration",title:"tnctl convert configuration",description:"tnctl convert configuration",source:"@site/docs/terranetes-controller/cli/tnctl_convert_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_convert_configuration",permalink:"/terranetes-controller/cli/tnctl_convert_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_convert_configuration.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl convert configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl convert cloudresource",permalink:"/terranetes-controller/cli/tnctl_convert_cloudresource"},next:{title:"tnctl convert revision",permalink:"/terranetes-controller/cli/tnctl_convert_revision"}},l={},u=[{value:"tnctl convert configuration",id:"tnctl-convert-configuration",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:u};function f(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-convert-configuration"},"tnctl convert configuration"),(0,o.kt)("p",null,"Converts configuration back to a terraform module"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl convert configuration [OPTIONS] [NAME|-f FILE] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -f, --file string Path to the configuration file\n -h, --help help for configuration\n --include-checkov Include checkov in the output (default true)\n --include-provider Include provider in the output (default true)\n --include-terraform Include terraform in the output (default true)\n -n, --namespace string Namespace of the resource (default "default")\n -p, --path string The path to write the files to (default ".")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_convert"},"tnctl convert"),"\t - Used to convert between different formats")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9b391930.af6521aa.js b/assets/js/9b391930.af6521aa.js deleted file mode 100644 index 2cc103bd..00000000 --- a/assets/js/9b391930.af6521aa.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6975],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var a=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=a.createContext({}),p=function(e){var t=a.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=p(e.components);return a.createElement(i.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,o=e.mdxType,n=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(r),m=o,h=d["".concat(i,".").concat(m)]||d[m]||c[m]||n;return r?a.createElement(h,s(s({ref:t},u),{},{components:r})):a.createElement(h,s({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=r.length,s=new Array(n);s[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:o,s[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>c,frontMatter:()=>n,metadata:()=>l,toc:()=>p});var a=r(7462),o=(r(7294),r(3905));const n={sidebar_position:3,title:"Frequently Asked Questions"},s="Frequently Asked Questions (FAQs)",l={unversionedId:"faqs",id:"faqs",title:"Frequently Asked Questions",description:"How does it work?",source:"@site/docs/tf2helm/faqs.md",sourceDirName:".",slug:"/faqs",permalink:"/tf2helm/faqs",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/tf2helm/faqs.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3,title:"Frequently Asked Questions"},sidebar:"tutorialSidebar",previous:{title:"Creating Helm Packages",permalink:"/tf2helm/create-your-own-packages"}},i={},p=[{value:"How does it work?",id:"how-does-it-work",level:2},{value:"What are the benefits to this approach?",id:"what-are-the-benefits-to-this-approach",level:2},{value:"What if my cloud resource depends on another?",id:"what-if-my-cloud-resource-depends-on-another",level:2},{value:"How is the state managed?",id:"how-is-the-state-managed",level:2},{value:"How does this compare to other similar tools?",id:"how-does-this-compare-to-other-similar-tools",level:2}],u={toc:p};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"frequently-asked-questions-faqs"},"Frequently Asked Questions (FAQs)"),(0,o.kt)("h2",{id:"how-does-it-work"},"How does it work?"),(0,o.kt)("p",null,"The solution leverages ",(0,o.kt)("a",{parentName:"p",href:"https://www.terraform.io/"},"Terraform")," and ",(0,o.kt)("a",{parentName:"p",href:"https://helm.sh/"},"Helm")," to create a Kubernetes Custom Resource Definition (CRD) object, watched and understood by the ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller"},"Appvia Terraform Controller"),". This then triggers a workflow that applies a referenced Terraform module. We have aligned these CRD objects to cloud resources that Kubernetes workloads often depend on, and published them to ",(0,o.kt)("a",{parentName:"p",href:"https://artifacthub.io/packages/search?ts_query_web=appvia"},"artifacthub.io"),". You can either choose one of them or create your own package."),(0,o.kt)("h2",{id:"what-are-the-benefits-to-this-approach"},"What are the benefits to this approach?"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Clear separation of concerns for infrastructure operators and application developers"),(0,o.kt)("li",{parentName:"ol"},"Developer self-service of consumable cloud resource packages with minimal user input"),(0,o.kt)("li",{parentName:"ol"},"Leverages Helm as a package manager and its rich ecosystem"),(0,o.kt)("li",{parentName:"ol"},"Leverages Terraform as the de facto tool for infrastructure provisioning")),(0,o.kt)("h2",{id:"what-if-my-cloud-resource-depends-on-another"},"What if my cloud resource depends on another?"),(0,o.kt)("p",null,"It is common for a cloud resource to depend on other cloud resources as input arguments when being provisioned. These arguments or cloud resource attributes can be retrieved by querying the cloud API or Terraform state."),(0,o.kt)("p",null,"Here are some possible ways to address this if you are creating your own package:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Create a Terraform module that creates and/or references the dependent cloud resources."),(0,o.kt)("li",{parentName:"ol"},"Create a Terraform module based on organisational boundaries that accept user inputs and/or sensible default values as arguments."),(0,o.kt)("li",{parentName:"ol"},"Create a Helm Chart that uses the Helm Lookup function to query the Kubernetes API for Terraform outputs generated by dependent Helm Charts stored in a Kubernetes secret.")),(0,o.kt)("p",null,"Each ",(0,o.kt)("a",{parentName:"p",href:"https://artifacthub.io/packages/search?ts_query_web=appvia"},"appvia-community package")," represents a single cloud resource with some appropriate default parameters. This follows the second option above, and allows consumers to add minimal input."),(0,o.kt)("h2",{id:"how-is-the-state-managed"},"How is the state managed?"),(0,o.kt)("p",null,"Terraform includes a built-in ",(0,o.kt)("a",{parentName:"p",href:"https://www.terraform.io/language/settings/backends"},"selection of backends")," that define where Terraform's state snapshots are stored. The Terraform Controller defaults to using the Kubernetes backend for storing and managing state."),(0,o.kt)("p",null,"Some key points around the usage of the Kubernetes backend:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"It supports state locking, which means that Terraform will lock the state for all operations that write state."),(0,o.kt)("li",{parentName:"ul"},"It is limited by Kubernetes' maximum secret size of 1MB, which must be considered when creating larger Terraform modules."),(0,o.kt)("li",{parentName:"ul"},"The Terraform Controller stores sensitive data as plaintext within Kubernetes secrets.")),(0,o.kt)("h2",{id:"how-does-this-compare-to-other-similar-tools"},"How does this compare to other similar tools?"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"left"},"Key areas"),(0,o.kt)("th",{parentName:"tr",align:"left"},"Terranetes"),(0,o.kt)("th",{parentName:"tr",align:"left"},"Kubeform"),(0,o.kt)("th",{parentName:"tr",align:"left"},"Crossplane"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"Architecture"),(0,o.kt)("td",{parentName:"tr",align:"left"},"The ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/appvia/terranetes-controller"},"Terraform Controller")," component has a single controller and single CRD referencing a Terraform module"),(0,o.kt)("td",{parentName:"tr",align:"left"},"One controller per cloud provider and one CRD per cloud resource"),(0,o.kt)("td",{parentName:"tr",align:"left"},"One controller per cloud provider and one CRD per cloud resource")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"State management"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Kubernetes etcd store"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Kubernetes etcd store"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Kubernetes etcd store")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"Ease of use"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Simplified consumption of cloud resources with minimal user input"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Steep learning curve to understand cloud infrastructure and multiple CRDs"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Steep learning curve of cloud infrastructure, multiple CRDs and concepts")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9b391930.e338da0f.js b/assets/js/9b391930.e338da0f.js new file mode 100644 index 00000000..8667dec6 --- /dev/null +++ b/assets/js/9b391930.e338da0f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6975],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var a=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=a.createContext({}),p=function(e){var t=a.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=p(e.components);return a.createElement(i.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,o=e.mdxType,n=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(r),m=o,h=d["".concat(i,".").concat(m)]||d[m]||c[m]||n;return r?a.createElement(h,s(s({ref:t},u),{},{components:r})):a.createElement(h,s({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=r.length,s=new Array(n);s[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l.mdxType="string"==typeof e?e:o,s[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>c,frontMatter:()=>n,metadata:()=>l,toc:()=>p});var a=r(7462),o=(r(7294),r(3905));const n={sidebar_position:3,title:"Frequently Asked Questions"},s="Frequently Asked Questions (FAQs)",l={unversionedId:"faqs",id:"faqs",title:"Frequently Asked Questions",description:"How does it work?",source:"@site/docs/tf2helm/faqs.md",sourceDirName:".",slug:"/faqs",permalink:"/tf2helm/faqs",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/tf2helm/faqs.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3,title:"Frequently Asked Questions"},sidebar:"tutorialSidebar",previous:{title:"Creating Helm Packages",permalink:"/tf2helm/create-your-own-packages"}},i={},p=[{value:"How does it work?",id:"how-does-it-work",level:2},{value:"What are the benefits to this approach?",id:"what-are-the-benefits-to-this-approach",level:2},{value:"What if my cloud resource depends on another?",id:"what-if-my-cloud-resource-depends-on-another",level:2},{value:"How is the state managed?",id:"how-is-the-state-managed",level:2},{value:"How does this compare to other similar tools?",id:"how-does-this-compare-to-other-similar-tools",level:2}],u={toc:p};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"frequently-asked-questions-faqs"},"Frequently Asked Questions (FAQs)"),(0,o.kt)("h2",{id:"how-does-it-work"},"How does it work?"),(0,o.kt)("p",null,"The solution leverages ",(0,o.kt)("a",{parentName:"p",href:"https://www.terraform.io/"},"Terraform")," and ",(0,o.kt)("a",{parentName:"p",href:"https://helm.sh/"},"Helm")," to create a Kubernetes Custom Resource Definition (CRD) object, watched and understood by the ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller"},"Appvia Terraform Controller"),". This then triggers a workflow that applies a referenced Terraform module. We have aligned these CRD objects to cloud resources that Kubernetes workloads often depend on, and published them to ",(0,o.kt)("a",{parentName:"p",href:"https://artifacthub.io/packages/search?ts_query_web=appvia"},"artifacthub.io"),". You can either choose one of them or create your own package."),(0,o.kt)("h2",{id:"what-are-the-benefits-to-this-approach"},"What are the benefits to this approach?"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Clear separation of concerns for infrastructure operators and application developers"),(0,o.kt)("li",{parentName:"ol"},"Developer self-service of consumable cloud resource packages with minimal user input"),(0,o.kt)("li",{parentName:"ol"},"Leverages Helm as a package manager and its rich ecosystem"),(0,o.kt)("li",{parentName:"ol"},"Leverages Terraform as the de facto tool for infrastructure provisioning")),(0,o.kt)("h2",{id:"what-if-my-cloud-resource-depends-on-another"},"What if my cloud resource depends on another?"),(0,o.kt)("p",null,"It is common for a cloud resource to depend on other cloud resources as input arguments when being provisioned. These arguments or cloud resource attributes can be retrieved by querying the cloud API or Terraform state."),(0,o.kt)("p",null,"Here are some possible ways to address this if you are creating your own package:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Create a Terraform module that creates and/or references the dependent cloud resources."),(0,o.kt)("li",{parentName:"ol"},"Create a Terraform module based on organisational boundaries that accept user inputs and/or sensible default values as arguments."),(0,o.kt)("li",{parentName:"ol"},"Create a Helm Chart that uses the Helm Lookup function to query the Kubernetes API for Terraform outputs generated by dependent Helm Charts stored in a Kubernetes secret.")),(0,o.kt)("p",null,"Each ",(0,o.kt)("a",{parentName:"p",href:"https://artifacthub.io/packages/search?ts_query_web=appvia"},"appvia-community package")," represents a single cloud resource with some appropriate default parameters. This follows the second option above, and allows consumers to add minimal input."),(0,o.kt)("h2",{id:"how-is-the-state-managed"},"How is the state managed?"),(0,o.kt)("p",null,"Terraform includes a built-in ",(0,o.kt)("a",{parentName:"p",href:"https://www.terraform.io/language/settings/backends"},"selection of backends")," that define where Terraform's state snapshots are stored. The Terraform Controller defaults to using the Kubernetes backend for storing and managing state."),(0,o.kt)("p",null,"Some key points around the usage of the Kubernetes backend:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"It supports state locking, which means that Terraform will lock the state for all operations that write state."),(0,o.kt)("li",{parentName:"ul"},"It is limited by Kubernetes' maximum secret size of 1MB, which must be considered when creating larger Terraform modules."),(0,o.kt)("li",{parentName:"ul"},"The Terraform Controller stores sensitive data as plaintext within Kubernetes secrets.")),(0,o.kt)("h2",{id:"how-does-this-compare-to-other-similar-tools"},"How does this compare to other similar tools?"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:"left"},"Key areas"),(0,o.kt)("th",{parentName:"tr",align:"left"},"Terranetes"),(0,o.kt)("th",{parentName:"tr",align:"left"},"Kubeform"),(0,o.kt)("th",{parentName:"tr",align:"left"},"Crossplane"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"Architecture"),(0,o.kt)("td",{parentName:"tr",align:"left"},"The ",(0,o.kt)("a",{parentName:"td",href:"https://github.com/appvia/terranetes-controller"},"Terraform Controller")," component has a single controller and single CRD referencing a Terraform module"),(0,o.kt)("td",{parentName:"tr",align:"left"},"One controller per cloud provider and one CRD per cloud resource"),(0,o.kt)("td",{parentName:"tr",align:"left"},"One controller per cloud provider and one CRD per cloud resource")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"State management"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Kubernetes etcd store"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Kubernetes etcd store"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Kubernetes etcd store")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:"left"},"Ease of use"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Simplified consumption of cloud resources with minimal user input"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Steep learning curve to understand cloud infrastructure and multiple CRDs"),(0,o.kt)("td",{parentName:"tr",align:"left"},"Steep learning curve of cloud infrastructure, multiple CRDs and concepts")))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9c509d98.ce8d5e80.js b/assets/js/9c509d98.ce8d5e80.js deleted file mode 100644 index 77c31c9c..00000000 --- a/assets/js/9c509d98.ce8d5e80.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9032],{3905:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>d});var n=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(o),d=a,m=u["".concat(s,".").concat(d)]||u[d]||h[d]||r;return o?n.createElement(m,i(i({ref:t},p),{},{components:o})):n.createElement(m,i({ref:t},p))}));function d(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=o.length,i=new Array(r);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=o(7462),a=(o(7294),o(3905));const r={sidebar_position:3,sidebar_class_name:"green"},i="Checkov Policy",l={unversionedId:"admin/policy/checkov",id:"admin/policy/checkov",title:"Checkov Policy",description:"Security policy allows platform teams to be assured what they are allowing to be self-serviced follows what they and the organization deem to be best practice. All terraform configurations are funnelled through a security check as part of the plan stage.",source:"@site/docs/terranetes-controller/admin/policy/checkov.md",sourceDirName:"admin/policy",slug:"/admin/policy/checkov",permalink:"/terranetes-controller/admin/policy/checkov",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/policy/checkov.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Module Restrictions",permalink:"/terranetes-controller/admin/policy/modules"},next:{title:"Contexts",permalink:"/terranetes-controller/admin/contexts"}},s={},c=[{value:"Using External Policy Source",id:"using-external-policy-source",level:2},{value:"Using Checkov Policy Defaults",id:"using-checkov-policy-defaults",level:2},{value:"Using External Checks",id:"using-external-checks",level:3},{value:"Rules for selecting the security policy",id:"rules-for-selecting-the-security-policy",level:2}],p={toc:c};function h(e){let{components:t,...o}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"checkov-policy"},"Checkov Policy"),(0,a.kt)("p",null,"Security policy allows platform teams to be assured what they are allowing to be self-serviced follows what they and the organization deem to be best practice. All terraform configurations are funnelled through a security check as part of the plan stage."),(0,a.kt)("p",null,"Once the security plan is performed the report is processed and, assuming no failed checks, is allowed to continue on to be applied (either automatically or via the annotation)."),(0,a.kt)("h2",{id:"using-external-policy-source"},"Using External Policy Source"),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"This the recommended method for implementing Checkov policy as it stitches together the various elements in the chain; from authoring to consumption. As the same policies can be referenced by your CI and runtime enforcement. ",(0,a.kt)("strong",{parentName:"p"},"Note this option is only available from >= v0.3.7"))),(0,a.kt)("p",null,"The controller has the ability to source in an external repository used to house the Checkov policies. A common scenario would be a shared policy repository with Checkov configuration and external checks and shared between the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/workflows/intro/"},"Workflows")," and this runtime enforcement."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: checkov\nspec:\n constraints:\n # Optional: allows you to filter on which configurations the policy should apply. If left\n # blank, this policy is a catch-all and applied to all terraform configurations.\n selector:\n # Used to filter on namespace labels\n namespace:\n matchLabels: {}\n matchExpressions: []\n # Used to filter on the configuration labels\n resource:\n matchLabels: {}\n matchExpressions: []\n\n checkov:\n source:\n # Is the path of the configuration file which holds the Checkov config i.e\n # .checkov.yaml or config.yaml\n configuration: PATH\n # Is the source of the repository; the syntax for this follows the same\n # format as for modules.\n url: SOURCE\n # Is an optional reference to a secret which contains credentials used to\n # source the external repository. Note, as it stands this must be within the\n # same namespace as the controller.\n secret:\n name: NAME\n namespace: NAMESPACE\n")),(0,a.kt)("h2",{id:"using-checkov-policy-defaults"},"Using Checkov Policy Defaults"),(0,a.kt)("p",null,"An alternative approach is to rely on the product default and use toggles, ",(0,a.kt)("inlineCode",{parentName:"p"},"skipChecks")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"checks")," to enable or disable checks. The downside from this method is the lack of central policy; under these conditions the enforcement policy is arbitrary to the configuration of the policies in said cluster."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: checkov\nspec:\n constraints:\n # Allows you to filter on which configurations the policy should apply. If left\n # blank, this policy is a catch-all and applied to all terraform configurations.\n selector:\n # Used to filter on namespace labels\n namespace:\n matchLabels: {}\n matchExpressions: []\n # Used to filter on the configuration labels\n resource:\n matchLabels: {}\n matchExpressions: []\n\n checkov:\n # See: https://www.checkov.io/5.Policy%20Index/terraform.html\n checks: []\n # See: https://www.checkov.io/5.Policy%20Index/terraform.html\n skipChecks: []\n")),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},"If no ",(0,a.kt)("inlineCode",{parentName:"li"},"checkov.checks")," are defined, the entire checkov suite is evaluated."),(0,a.kt)("li",{parentName:"ul"},"If ",(0,a.kt)("inlineCode",{parentName:"li"},"checkov.skipChecks")," are defined, those will be ignored during evaluation."))),(0,a.kt)("h3",{id:"using-external-checks"},"Using External Checks"),(0,a.kt)("p",null,"The controller also has the ability to source multiple ",(0,a.kt)("a",{parentName:"p",href:"https://www.checkov.io/3.Custom%20Policies/Custom%20Policies%20Overview.html"},"custom policies"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: checkov\nspec:\n constraints:\n checkov:\n external:\n - name: custom\n url: https://[LOCATION]\n secretRef:\n name: [SECRET]\n")),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"The URL uses the same format at the ","[Configuration]","(/terranetes-controller/reference/configurations.terraform.appvia.io] CRD."),(0,a.kt)("li",{parentName:"ol"},"The secretRef is optional and used to store any credentials used to retrieves the assets. Like ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," we support object stores, git repositories and so forth."),(0,a.kt)("li",{parentName:"ol"},"All assets found in the source are retrieved and used an ",(0,a.kt)("a",{parentName:"li",href:"https://www.checkov.io/2.Basics/CLI%20Command%20Reference.html"},"external-checks-dir")," option to the scan.")),(0,a.kt)("h2",{id:"rules-for-selecting-the-security-policy"},"Rules for selecting the security policy"),(0,a.kt)("p",null,"You can define multiple checkov policies using selectors to target specific workloads, however, only can match. The selection process for this is as follows:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"If the checkov policy does not have a selector it is applied to all resources."),(0,a.kt)("li",{parentName:"ol"},"If the checkov policy has a matching namespace selector it adds additional priority/weight."),(0,a.kt)("li",{parentName:"ol"},"If the checkov policy has a matching resource selector it adds even more priority/weight."),(0,a.kt)("li",{parentName:"ol"},"The total weights are added up and the highest matching checkov policy is used."),(0,a.kt)("li",{parentName:"ol"},"If you have checkov policies with the same weight, the controller throws an error.")),(0,a.kt)("p",null,"At the end we have selected the checkov policy which is most specific to our Configuration."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Why not merge multiple policies?")),(0,a.kt)("p",null,"We had the same idea, whereby we'd simply merge multiple policies together. The reasoning here is that adding an additional policy is needed to allow for an exception to the rule. For example, if we define that all RDS databases must use encryption, but project 'A' can't do that, we need an exception. But policies are enforced because they strengthen security, so adding exceptions should be difficult/annoying in order to push for the better solution: fixing project A's lack of compliance."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9c509d98.f971696c.js b/assets/js/9c509d98.f971696c.js new file mode 100644 index 00000000..7f9e63dc --- /dev/null +++ b/assets/js/9c509d98.f971696c.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9032],{3905:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>d});var n=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},h={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(o),d=a,m=u["".concat(s,".").concat(d)]||u[d]||h[d]||r;return o?n.createElement(m,i(i({ref:t},p),{},{components:o})):n.createElement(m,i({ref:t},p))}));function d(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=o.length,i=new Array(r);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c{o.r(t),o.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=o(7462),a=(o(7294),o(3905));const r={sidebar_position:3,sidebar_class_name:"green"},i="Checkov Policy",l={unversionedId:"admin/policy/checkov",id:"admin/policy/checkov",title:"Checkov Policy",description:"Security policy allows platform teams to be assured what they are allowing to be self-serviced follows what they and the organization deem to be best practice. All terraform configurations are funnelled through a security check as part of the plan stage.",source:"@site/docs/terranetes-controller/admin/policy/checkov.md",sourceDirName:"admin/policy",slug:"/admin/policy/checkov",permalink:"/terranetes-controller/admin/policy/checkov",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/policy/checkov.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Module Restrictions",permalink:"/terranetes-controller/admin/policy/modules"},next:{title:"Contexts",permalink:"/terranetes-controller/admin/contexts"}},s={},c=[{value:"Using External Policy Source",id:"using-external-policy-source",level:2},{value:"Using Checkov Policy Defaults",id:"using-checkov-policy-defaults",level:2},{value:"Using External Checks",id:"using-external-checks",level:3},{value:"Rules for selecting the security policy",id:"rules-for-selecting-the-security-policy",level:2}],p={toc:c};function h(e){let{components:t,...o}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"checkov-policy"},"Checkov Policy"),(0,a.kt)("p",null,"Security policy allows platform teams to be assured what they are allowing to be self-serviced follows what they and the organization deem to be best practice. All terraform configurations are funnelled through a security check as part of the plan stage."),(0,a.kt)("p",null,"Once the security plan is performed the report is processed and, assuming no failed checks, is allowed to continue on to be applied (either automatically or via the annotation)."),(0,a.kt)("h2",{id:"using-external-policy-source"},"Using External Policy Source"),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"This the recommended method for implementing Checkov policy as it stitches together the various elements in the chain; from authoring to consumption. As the same policies can be referenced by your CI and runtime enforcement. ",(0,a.kt)("strong",{parentName:"p"},"Note this option is only available from >= v0.3.7"))),(0,a.kt)("p",null,"The controller has the ability to source in an external repository used to house the Checkov policies. A common scenario would be a shared policy repository with Checkov configuration and external checks and shared between the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/workflows/intro/"},"Workflows")," and this runtime enforcement."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: checkov\nspec:\n constraints:\n # Optional: allows you to filter on which configurations the policy should apply. If left\n # blank, this policy is a catch-all and applied to all terraform configurations.\n selector:\n # Used to filter on namespace labels\n namespace:\n matchLabels: {}\n matchExpressions: []\n # Used to filter on the configuration labels\n resource:\n matchLabels: {}\n matchExpressions: []\n\n checkov:\n source:\n # Is the path of the configuration file which holds the Checkov config i.e\n # .checkov.yaml or config.yaml\n configuration: PATH\n # Is the source of the repository; the syntax for this follows the same\n # format as for modules.\n url: SOURCE\n # Is an optional reference to a secret which contains credentials used to\n # source the external repository. Note, as it stands this must be within the\n # same namespace as the controller.\n secret:\n name: NAME\n namespace: NAMESPACE\n")),(0,a.kt)("h2",{id:"using-checkov-policy-defaults"},"Using Checkov Policy Defaults"),(0,a.kt)("p",null,"An alternative approach is to rely on the product default and use toggles, ",(0,a.kt)("inlineCode",{parentName:"p"},"skipChecks")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"checks")," to enable or disable checks. The downside from this method is the lack of central policy; under these conditions the enforcement policy is arbitrary to the configuration of the policies in said cluster."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: checkov\nspec:\n constraints:\n # Allows you to filter on which configurations the policy should apply. If left\n # blank, this policy is a catch-all and applied to all terraform configurations.\n selector:\n # Used to filter on namespace labels\n namespace:\n matchLabels: {}\n matchExpressions: []\n # Used to filter on the configuration labels\n resource:\n matchLabels: {}\n matchExpressions: []\n\n checkov:\n # See: https://www.checkov.io/5.Policy%20Index/terraform.html\n checks: []\n # See: https://www.checkov.io/5.Policy%20Index/terraform.html\n skipChecks: []\n")),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("ul",{parentName:"admonition"},(0,a.kt)("li",{parentName:"ul"},"If no ",(0,a.kt)("inlineCode",{parentName:"li"},"checkov.checks")," are defined, the entire checkov suite is evaluated."),(0,a.kt)("li",{parentName:"ul"},"If ",(0,a.kt)("inlineCode",{parentName:"li"},"checkov.skipChecks")," are defined, those will be ignored during evaluation."))),(0,a.kt)("h3",{id:"using-external-checks"},"Using External Checks"),(0,a.kt)("p",null,"The controller also has the ability to source multiple ",(0,a.kt)("a",{parentName:"p",href:"https://www.checkov.io/3.Custom%20Policies/Custom%20Policies%20Overview.html"},"custom policies"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1\nkind: Policy\nmetadata:\n name: checkov\nspec:\n constraints:\n checkov:\n external:\n - name: custom\n url: https://[LOCATION]\n secretRef:\n name: [SECRET]\n")),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"The URL uses the same format at the ","[Configuration]","(/terranetes-controller/reference/configurations.terraform.appvia.io] CRD."),(0,a.kt)("li",{parentName:"ol"},"The secretRef is optional and used to store any credentials used to retrieves the assets. Like ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," we support object stores, git repositories and so forth."),(0,a.kt)("li",{parentName:"ol"},"All assets found in the source are retrieved and used an ",(0,a.kt)("a",{parentName:"li",href:"https://www.checkov.io/2.Basics/CLI%20Command%20Reference.html"},"external-checks-dir")," option to the scan.")),(0,a.kt)("h2",{id:"rules-for-selecting-the-security-policy"},"Rules for selecting the security policy"),(0,a.kt)("p",null,"You can define multiple checkov policies using selectors to target specific workloads, however, only can match. The selection process for this is as follows:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"If the checkov policy does not have a selector it is applied to all resources."),(0,a.kt)("li",{parentName:"ol"},"If the checkov policy has a matching namespace selector it adds additional priority/weight."),(0,a.kt)("li",{parentName:"ol"},"If the checkov policy has a matching resource selector it adds even more priority/weight."),(0,a.kt)("li",{parentName:"ol"},"The total weights are added up and the highest matching checkov policy is used."),(0,a.kt)("li",{parentName:"ol"},"If you have checkov policies with the same weight, the controller throws an error.")),(0,a.kt)("p",null,"At the end we have selected the checkov policy which is most specific to our Configuration."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Why not merge multiple policies?")),(0,a.kt)("p",null,"We had the same idea, whereby we'd simply merge multiple policies together. The reasoning here is that adding an additional policy is needed to allow for an exception to the rule. For example, if we define that all RDS databases must use encryption, but project 'A' can't do that, we need an exception. But policies are enforced because they strengthen security, so adding exceptions should be difficult/annoying in order to push for the better solution: fixing project A's lack of compliance."))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9d4ded2b.5f4addac.js b/assets/js/9d4ded2b.6d9cfc6c.js similarity index 52% rename from assets/js/9d4ded2b.5f4addac.js rename to assets/js/9d4ded2b.6d9cfc6c.js index fff4844d..9335f102 100644 --- a/assets/js/9d4ded2b.5f4addac.js +++ b/assets/js/9d4ded2b.6d9cfc6c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5926],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,i=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),d=s(r),f=o,y=d["".concat(i,".").concat(f)]||d[f]||p[f]||l;return r?n.createElement(y,c(c({ref:t},u),{},{components:r})):n.createElement(y,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,c=new Array(l);c[0]=d;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:o,c[1]=a;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>p,frontMatter:()=>l,metadata:()=>a,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl retry cloudresource"},c=void 0,a={unversionedId:"cli/tnctl_retry_cloudresource",id:"cli/tnctl_retry_cloudresource",title:"tnctl retry cloudresource",description:"tnctl retry cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_retry_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_retry_cloudresource",permalink:"/terranetes-controller/cli/tnctl_retry_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_retry_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl retry cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl retry",permalink:"/terranetes-controller/cli/tnctl_retry"},next:{title:"tnctl retry configuration",permalink:"/terranetes-controller/cli/tnctl_retry_configuration"}},i={},s=[{value:"tnctl retry cloudresource",id:"tnctl-retry-cloudresource",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-retry-cloudresource"},"tnctl retry cloudresource"),(0,o.kt)("p",null,"Attempts to restart a cloud resource"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"By default a Configuration is only run on a change to the specification. Its\nuseful however to be able to restart the process without changing the\nspec - i.e. the credentials were incorrect and out-of-band error occurred or\nso forth."),(0,o.kt)("p",null,"This command will restart the process by tagging the configuration with a\nannotation. By default the restarted process will be watched for logs."),(0,o.kt)("p",null,"Restart the Configuration:\n$ tnctl retry NAME"),(0,o.kt)("p",null,"Restart the Configuration but do not watch the logs:\n$ tnctl retry NAME --watch=false"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl retry cloudresource [OPTIONS] NAME [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -h, --help help for cloudresource\n -n, --namespace string The namespace the resource resides (default "default")\n -w, --watch Watch the logs after restarting the resource (default true)\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_retry"},"tnctl retry"),"\t - Attempts to trigger the resource to retry")))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5926],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=n.createContext({}),s=function(e){var t=n.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(i.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,i=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),d=s(r),f=o,y=d["".concat(i,".").concat(f)]||d[f]||p[f]||l;return r?n.createElement(y,c(c({ref:t},u),{},{components:r})):n.createElement(y,c({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,c=new Array(l);c[0]=d;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:o,c[1]=a;for(var s=2;s{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>p,frontMatter:()=>l,metadata:()=>a,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl retry cloudresource"},c=void 0,a={unversionedId:"cli/tnctl_retry_cloudresource",id:"cli/tnctl_retry_cloudresource",title:"tnctl retry cloudresource",description:"tnctl retry cloudresource",source:"@site/docs/terranetes-controller/cli/tnctl_retry_cloudresource.md",sourceDirName:"cli",slug:"/cli/tnctl_retry_cloudresource",permalink:"/terranetes-controller/cli/tnctl_retry_cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_retry_cloudresource.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl retry cloudresource"},sidebar:"tutorialSidebar",previous:{title:"tnctl retry",permalink:"/terranetes-controller/cli/tnctl_retry"},next:{title:"tnctl retry configuration",permalink:"/terranetes-controller/cli/tnctl_retry_configuration"}},i={},s=[{value:"tnctl retry cloudresource",id:"tnctl-retry-cloudresource",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-retry-cloudresource"},"tnctl retry cloudresource"),(0,o.kt)("p",null,"Attempts to restart a cloud resource"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"By default a Configuration is only run on a change to the specification. Its\nuseful however to be able to restart the process without changing the\nspec - i.e. the credentials were incorrect and out-of-band error occurred or\nso forth."),(0,o.kt)("p",null,"This command will restart the process by tagging the configuration with a\nannotation. By default the restarted process will be watched for logs."),(0,o.kt)("p",null,"Restart the Configuration:\n$ tnctl retry NAME"),(0,o.kt)("p",null,"Restart the Configuration but do not watch the logs:\n$ tnctl retry NAME --watch=false"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl retry cloudresource [OPTIONS] NAME [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -h, --help help for cloudresource\n -n, --namespace string The namespace the resource resides (default "default")\n -w, --watch Watch the logs after restarting the resource (default true)\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_retry"},"tnctl retry"),"\t - Attempts to trigger the resource to retry")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a0577439.67db0e65.js b/assets/js/a0577439.67db0e65.js deleted file mode 100644 index 28b1ba52..00000000 --- a/assets/js/a0577439.67db0e65.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5050],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=c(r),m=a,h=d["".concat(s,".").concat(m)]||d[m]||u[m]||o;return r?n.createElement(h,i(i({ref:t},p),{},{components:r})):n.createElement(h,i({ref:t},p))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:3,sidebar_class_name:"green"},i="Contexts",l={unversionedId:"admin/contexts",id:"admin/contexts",title:"Contexts",description:"Contexts provide a means to share common configuration between Configurations. The resource type is Cluster scoped and can be used by any Configuration in the cluster.",source:"@site/docs/terranetes-controller/admin/contexts.md",sourceDirName:"admin",slug:"/admin/contexts",permalink:"/terranetes-controller/admin/contexts",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/contexts.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Checkov Policy",permalink:"/terranetes-controller/admin/policy/checkov"},next:{title:"Cloud Resources",permalink:"/terranetes-controller/admin/cloudresource"}},s={},c=[{value:"Create a Context",id:"create-a-context",level:2},{value:"Configure Preloading",id:"configure-preloading",level:2},{value:"How to reference a Context",id:"how-to-reference-a-context",level:2},{value:"Using a Custom Preload",id:"using-a-custom-preload",level:2}],p={toc:c};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"contexts"},"Contexts"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Contexts")," provide a means to share common configuration between ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations"),". The resource type is Cluster scoped and can be used by any Configuration in the cluster."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"This feature is only available from v0.3.25 onwards")),(0,a.kt)("h2",{id:"create-a-context"},"Create a Context"),(0,a.kt)("p",null,"You can create a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," like so."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: terraform.appvia.io/v1alpha1\nkind: Context\nmetadata:\n name: default\nspec:\n #\n ## All variables MUST follow the pattern of 'description' and 'value'. The\n ## value can be any complex or simple type (boolean, int, map, object etc)\n #\n variables:\n # Is the name of the variable\n vpc_id:\n # Provides a description to the consumer of the input\n description: Is the network identifier we are residing\n # The value of the value\n value: vpc-1223133113\n public_subnets_ids:\n # Provides a description to the consumer of the input\n description: |\n Is a collection of subnet id's which are publicly available i.e.\n they are attached to an internet gateway\n # The value of the value\n value:\n - subnet-12312312312\n - subnet-32332321312\n")),(0,a.kt)("p",null,"The resource contains a map of variables; note each variable MUST have a ",(0,a.kt)("inlineCode",{parentName:"p"},"description")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"value"),", with the value being any simple (integer, boolean, string) or complex type (maps, list, maps or maps and so forth)."),(0,a.kt)("h2",{id:"configure-preloading"},"Configure Preloading"),(0,a.kt)("admonition",{type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"Currently the cloud which has support for automatic preloading is ",(0,a.kt)("strong",{parentName:"p"},"AWS"),". Other providers are on the roadmap, but they have not been implemented yet.")),(0,a.kt)("p",null,"Terranetes has the ability to populate a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," automatically; retrieving details about the cluster the controller resides and populating them into a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context"),". Currently this feature is limited to AWS only."),(0,a.kt)("p",null,"In order to use the feature we need to update the configuration of a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider"),"; It is the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Providers")," credentials which the preloading will use to retrieve the information from the cloud vendor."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: terraform.appvia.io/v1alpha1\nkind: Provider\nmetadata:\n name: aws\nspec:\n # Source and be 'secret' or 'injected'. When using a 'secret' you\n # must specify the spec.secretRef which defines the name of the\n # secret in the controller namespace containing the credentials.\n source: secret\n # Provider can be google, aws, azurerm, alicloud, azurestack, googleworkspace etc\n provider: aws\n # Provides configuration for the contextual data preloader (currently only\n # available for aws)\n preload:\n # Indicates if the preloading should be enabled\n enabled: true\n # Is the EKS cluster we use to pivot network and settings around\n cluster: eks\n # Is the cloud region the cluster above resides\n region: eu-west-2\n # Is the terranetes context resource we should provision\n context: default\n # Used when spec.source is secret.\n secretRef:\n namespace: terraform-system\n name: aws\n")),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.preload")," in the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," needs the following information."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"enabled")," Indicates if we should preload any data into a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"cluster")," Is the cloud name of the cluster we reside in i.e. the EKS cluster name."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"region")," Is the cloud region the cluster (",(0,a.kt)("inlineCode",{parentName:"li"},"spec.preload.cluster"),") resides in."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"context")," Is the name of the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," you wish to populate the values into.")),(0,a.kt)("p",null,"Once this information has been defined, a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," resource be automatically provisioned and preloaded with details, as such;"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"$ k get contexts.terraform.appvia.io default -o yaml\napiVersion: terraform.appvia.io/v1alpha1\nkind: Context\nmetadata:\n generation: 1\n labels:\n terranetes.appvia.io/preload-provider-name: aws\n name: default\nspec:\n variables:\n eks:\n description: AWS ARN for the Kubernetes cluster\n value: arn:aws:eks:eu-west-2:XXXXXXXXX:cluster/eks-test\n eks_cluster_security_group_id:\n description: The security group ID attached to the EKS cluster\n value: sg-XXXXXXXXX\n eks_endpoint:\n description: The endpoint for the EKS cluster\n value: https://XXXXXXXXXXXXXXXX.sk1.eu-west-2.eks.amazonaws.com\n eks_name:\n description: The name of the EKS cluster\n value: eks\n eks_platform_version:\n description: The platform version of the EKS cluster\n value: eks.6\n eks_private_access:\n description: Indicates whether or not the EKS cluster has private access enabled\n value: true\n eks_public_access:\n description: Indicates whether or not the EKS cluster has public access enabled\n value: false\n eks_public_access_cidrs:\n description: The CIDR blocks that are allowed access to the EKS cluster\n value:\n - 0.0.0.0/0\n eks_role_arn:\n description: The ARN of the IAM role that provides permissions for the EKS cluster\n value: arn:aws:iam::XXXXXXXXXX:role/eks-test-role\n eks_route_tables_ids:\n description: A list of all route tables id associate to the subnets which are\n part of the EKS cluster\n value:\n - rtb-04dbff51b83821XXX\n ....MORE VARIABLES\n vpc_id:\n description: The ID of the VPC used by the EKS cluster\n value: vpc-0a6f4fbb4bXXXXXXX\n")),(0,a.kt)("h2",{id:"how-to-reference-a-context"},"How to reference a Context"),(0,a.kt)("p",null,"Contexts can be referenced from any ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," like so"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"}," ---\n apiVersion: terraform.appvia.io/v1alpha1\n kind: Configuration\n metadata:\n name: bucket\n spec:\n module: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.10.1\n providerRef:\n name: aws\n valueFrom:\n - context: default\n key: vpc_id\n name: vpc_id\n")),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.valueFrom")," requires the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," name, the key is the name of the variable in the context and the name is the variable you need to present this as to the terraform module. The optional field simply means both the context and any value reference, if they don't exist, can continue without failure. By default, anything missing (context or value) will defer the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," until they are present."),(0,a.kt)("h2",{id:"using-a-custom-preload"},"Using a Custom Preload"),(0,a.kt)("p",null,"Terranetes comes prebuilt with a loader to extract details from the cloud vendor, but perhaps it doesn't contain the details you need. You can solve this in two ways"),(0,a.kt)("p",null,"a) Configuration can reference multiple ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," resources, so you can provision with additional details / values.\nb) Override the preload image in the controller and run your own custom loader."),(0,a.kt)("p",null,"The first one is simple and can achieved in multiple ways; manually, ci, helm and so forth. The second option, overloading the controller's preload images requires you update the ",(0,a.kt)("inlineCode",{parentName:"p"},"--preload-image")," argument. In the helm chart, this can be done via"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"controller:\n images:\n preload: IMAGE:TAG\n")),(0,a.kt)("p",null,"Note, the entrypoint when using this image is currently hardcoded, so you have to ensure in the image we have an executable at ",(0,a.kt)("inlineCode",{parentName:"p"},"/bin/preload"),". The following arguments will also be passed, via environment variables to the execution"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CLOUD")," is the cloud vendor designation from the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," the preload is configured on i.e. ",(0,a.kt)("inlineCode",{parentName:"li"},"spec.provider"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CLUSTER")," is the cluster name from the preload configuration i.e ",(0,a.kt)("inlineCode",{parentName:"li"},"spec.preload.cluster"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CONTEXT")," is the name of the context (",(0,a.kt)("inlineCode",{parentName:"li"},"spec.preload.context"),") defined in the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," configuration."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"PROVIDER")," is the name of the provider the preload was configured on ",(0,a.kt)("inlineCode",{parentName:"li"},"metadata.name")," on the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," resource."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"REGION")," is the cloud region configured in the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," preload configuration i.e ",(0,a.kt)("inlineCode",{parentName:"li"},"spec.preload.region"),".")),(0,a.kt)("p",null,"When using a custom loader the executable is responsible for two things"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Retrieving the cloud details and constructing a valid ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," resource."),(0,a.kt)("li",{parentName:"ul"},"Creating or updating the ",(0,a.kt)("inlineCode",{parentName:"li"},"CONTEXT")," in the Kubernetes cluster itself.")),(0,a.kt)("p",null,"The controller is responsible for ensuring execution occurs, handing jobs fails and configuring the job with ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," credentials."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a0577439.fe963920.js b/assets/js/a0577439.fe963920.js new file mode 100644 index 00000000..d2828115 --- /dev/null +++ b/assets/js/a0577439.fe963920.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5050],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=c(r),m=a,h=d["".concat(s,".").concat(m)]||d[m]||u[m]||o;return r?n.createElement(h,i(i({ref:t},p),{},{components:r})):n.createElement(h,i({ref:t},p))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:a,i[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:3,sidebar_class_name:"green"},i="Contexts",l={unversionedId:"admin/contexts",id:"admin/contexts",title:"Contexts",description:"Contexts provide a means to share common configuration between Configurations. The resource type is Cluster scoped and can be used by any Configuration in the cluster.",source:"@site/docs/terranetes-controller/admin/contexts.md",sourceDirName:"admin",slug:"/admin/contexts",permalink:"/terranetes-controller/admin/contexts",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/contexts.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Checkov Policy",permalink:"/terranetes-controller/admin/policy/checkov"},next:{title:"Cloud Resources",permalink:"/terranetes-controller/admin/cloudresource"}},s={},c=[{value:"Create a Context",id:"create-a-context",level:2},{value:"Configure Preloading",id:"configure-preloading",level:2},{value:"How to reference a Context",id:"how-to-reference-a-context",level:2},{value:"Using a Custom Preload",id:"using-a-custom-preload",level:2}],p={toc:c};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"contexts"},"Contexts"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Contexts")," provide a means to share common configuration between ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations"),". The resource type is Cluster scoped and can be used by any Configuration in the cluster."),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"This feature is only available from v0.3.25 onwards")),(0,a.kt)("h2",{id:"create-a-context"},"Create a Context"),(0,a.kt)("p",null,"You can create a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," like so."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: terraform.appvia.io/v1alpha1\nkind: Context\nmetadata:\n name: default\nspec:\n #\n ## All variables MUST follow the pattern of 'description' and 'value'. The\n ## value can be any complex or simple type (boolean, int, map, object etc)\n #\n variables:\n # Is the name of the variable\n vpc_id:\n # Provides a description to the consumer of the input\n description: Is the network identifier we are residing\n # The value of the value\n value: vpc-1223133113\n public_subnets_ids:\n # Provides a description to the consumer of the input\n description: |\n Is a collection of subnet id's which are publicly available i.e.\n they are attached to an internet gateway\n # The value of the value\n value:\n - subnet-12312312312\n - subnet-32332321312\n")),(0,a.kt)("p",null,"The resource contains a map of variables; note each variable MUST have a ",(0,a.kt)("inlineCode",{parentName:"p"},"description")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"value"),", with the value being any simple (integer, boolean, string) or complex type (maps, list, maps or maps and so forth)."),(0,a.kt)("h2",{id:"configure-preloading"},"Configure Preloading"),(0,a.kt)("admonition",{type:"warning"},(0,a.kt)("p",{parentName:"admonition"},"Currently the cloud which has support for automatic preloading is ",(0,a.kt)("strong",{parentName:"p"},"AWS"),". Other providers are on the roadmap, but they have not been implemented yet.")),(0,a.kt)("p",null,"Terranetes has the ability to populate a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," automatically; retrieving details about the cluster the controller resides and populating them into a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context"),". Currently this feature is limited to AWS only."),(0,a.kt)("p",null,"In order to use the feature we need to update the configuration of a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider"),"; It is the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Providers")," credentials which the preloading will use to retrieve the information from the cloud vendor."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: terraform.appvia.io/v1alpha1\nkind: Provider\nmetadata:\n name: aws\nspec:\n # Source and be 'secret' or 'injected'. When using a 'secret' you\n # must specify the spec.secretRef which defines the name of the\n # secret in the controller namespace containing the credentials.\n source: secret\n # Provider can be google, aws, azurerm, alicloud, azurestack, googleworkspace etc\n provider: aws\n # Provides configuration for the contextual data preloader (currently only\n # available for aws)\n preload:\n # Indicates if the preloading should be enabled\n enabled: true\n # Is the EKS cluster we use to pivot network and settings around\n cluster: eks\n # Is the cloud region the cluster above resides\n region: eu-west-2\n # Is the terranetes context resource we should provision\n context: default\n # Used when spec.source is secret.\n secretRef:\n namespace: terraform-system\n name: aws\n")),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.preload")," in the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," needs the following information."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"enabled")," Indicates if we should preload any data into a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"cluster")," Is the cloud name of the cluster we reside in i.e. the EKS cluster name."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"region")," Is the cloud region the cluster (",(0,a.kt)("inlineCode",{parentName:"li"},"spec.preload.cluster"),") resides in."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"context")," Is the name of the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," you wish to populate the values into.")),(0,a.kt)("p",null,"Once this information has been defined, a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," resource be automatically provisioned and preloaded with details, as such;"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"$ k get contexts.terraform.appvia.io default -o yaml\napiVersion: terraform.appvia.io/v1alpha1\nkind: Context\nmetadata:\n generation: 1\n labels:\n terranetes.appvia.io/preload-provider-name: aws\n name: default\nspec:\n variables:\n eks:\n description: AWS ARN for the Kubernetes cluster\n value: arn:aws:eks:eu-west-2:XXXXXXXXX:cluster/eks-test\n eks_cluster_security_group_id:\n description: The security group ID attached to the EKS cluster\n value: sg-XXXXXXXXX\n eks_endpoint:\n description: The endpoint for the EKS cluster\n value: https://XXXXXXXXXXXXXXXX.sk1.eu-west-2.eks.amazonaws.com\n eks_name:\n description: The name of the EKS cluster\n value: eks\n eks_platform_version:\n description: The platform version of the EKS cluster\n value: eks.6\n eks_private_access:\n description: Indicates whether or not the EKS cluster has private access enabled\n value: true\n eks_public_access:\n description: Indicates whether or not the EKS cluster has public access enabled\n value: false\n eks_public_access_cidrs:\n description: The CIDR blocks that are allowed access to the EKS cluster\n value:\n - 0.0.0.0/0\n eks_role_arn:\n description: The ARN of the IAM role that provides permissions for the EKS cluster\n value: arn:aws:iam::XXXXXXXXXX:role/eks-test-role\n eks_route_tables_ids:\n description: A list of all route tables id associate to the subnets which are\n part of the EKS cluster\n value:\n - rtb-04dbff51b83821XXX\n ....MORE VARIABLES\n vpc_id:\n description: The ID of the VPC used by the EKS cluster\n value: vpc-0a6f4fbb4bXXXXXXX\n")),(0,a.kt)("h2",{id:"how-to-reference-a-context"},"How to reference a Context"),(0,a.kt)("p",null,"Contexts can be referenced from any ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," like so"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"}," ---\n apiVersion: terraform.appvia.io/v1alpha1\n kind: Configuration\n metadata:\n name: bucket\n spec:\n module: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.10.1\n providerRef:\n name: aws\n valueFrom:\n - context: default\n key: vpc_id\n name: vpc_id\n")),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"spec.valueFrom")," requires the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," name, the key is the name of the variable in the context and the name is the variable you need to present this as to the terraform module. The optional field simply means both the context and any value reference, if they don't exist, can continue without failure. By default, anything missing (context or value) will defer the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," until they are present."),(0,a.kt)("h2",{id:"using-a-custom-preload"},"Using a Custom Preload"),(0,a.kt)("p",null,"Terranetes comes prebuilt with a loader to extract details from the cloud vendor, but perhaps it doesn't contain the details you need. You can solve this in two ways"),(0,a.kt)("p",null,"a) Configuration can reference multiple ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," resources, so you can provision with additional details / values.\nb) Override the preload image in the controller and run your own custom loader."),(0,a.kt)("p",null,"The first one is simple and can achieved in multiple ways; manually, ci, helm and so forth. The second option, overloading the controller's preload images requires you update the ",(0,a.kt)("inlineCode",{parentName:"p"},"--preload-image")," argument. In the helm chart, this can be done via"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"controller:\n images:\n preload: IMAGE:TAG\n")),(0,a.kt)("p",null,"Note, the entrypoint when using this image is currently hardcoded, so you have to ensure in the image we have an executable at ",(0,a.kt)("inlineCode",{parentName:"p"},"/bin/preload"),". The following arguments will also be passed, via environment variables to the execution"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CLOUD")," is the cloud vendor designation from the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," the preload is configured on i.e. ",(0,a.kt)("inlineCode",{parentName:"li"},"spec.provider"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CLUSTER")," is the cluster name from the preload configuration i.e ",(0,a.kt)("inlineCode",{parentName:"li"},"spec.preload.cluster"),"."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"CONTEXT")," is the name of the context (",(0,a.kt)("inlineCode",{parentName:"li"},"spec.preload.context"),") defined in the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," configuration."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"PROVIDER")," is the name of the provider the preload was configured on ",(0,a.kt)("inlineCode",{parentName:"li"},"metadata.name")," on the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," resource."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("inlineCode",{parentName:"li"},"REGION")," is the cloud region configured in the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," preload configuration i.e ",(0,a.kt)("inlineCode",{parentName:"li"},"spec.preload.region"),".")),(0,a.kt)("p",null,"When using a custom loader the executable is responsible for two things"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Retrieving the cloud details and constructing a valid ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/contexts.terraform.appvia.io"},"Context")," resource."),(0,a.kt)("li",{parentName:"ul"},"Creating or updating the ",(0,a.kt)("inlineCode",{parentName:"li"},"CONTEXT")," in the Kubernetes cluster itself.")),(0,a.kt)("p",null,"The controller is responsible for ensuring execution occurs, handing jobs fails and configuring the job with ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," credentials."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a17586cd.2061350d.js b/assets/js/a17586cd.2061350d.js deleted file mode 100644 index 980ceb79..00000000 --- a/assets/js/a17586cd.2061350d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9681],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var i=r.createContext({}),p=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,l=e.mdxType,o=e.originalType,i=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),d=p(n),m=l,f=d["".concat(i,".").concat(m)]||d[m]||s[m]||o;return n?r.createElement(f,c(c({ref:t},u),{},{components:n})):r.createElement(f,c({ref:t},u))}));function m(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=n.length,c=new Array(o);c[0]=d;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:l,c[1]=a;for(var p=2;p{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>c,default:()=>s,frontMatter:()=>o,metadata:()=>a,toc:()=>p});var r=n(7462),l=(n(7294),n(3905));const o={title:"tnctl kubectl"},c=void 0,a={unversionedId:"cli/tnctl_kubectl",id:"cli/tnctl_kubectl",title:"tnctl kubectl",description:"tnctl kubectl",source:"@site/docs/terranetes-controller/cli/tnctl_kubectl.md",sourceDirName:"cli",slug:"/cli/tnctl_kubectl",permalink:"/terranetes-controller/cli/tnctl_kubectl",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_kubectl.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl kubectl"},sidebar:"tutorialSidebar",previous:{title:"tnctl get revision",permalink:"/terranetes-controller/cli/tnctl_get_revision"},next:{title:"tnctl kubectl plugin",permalink:"/terranetes-controller/cli/tnctl_kubectl_plugin"}},i={},p=[{value:"tnctl kubectl",id:"tnctl-kubectl",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:p};function s(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-kubectl"},"tnctl kubectl"),(0,l.kt)("p",null,"Kubectl plugin related commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl kubectl COMMAND [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"}," -h, --help help for kubectl\n")),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_kubectl_plugin"},"tnctl kubectl plugin"),"\t - Generates the kubectl plugin integration")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a17586cd.5f25507b.js b/assets/js/a17586cd.5f25507b.js new file mode 100644 index 00000000..088a6d50 --- /dev/null +++ b/assets/js/a17586cd.5f25507b.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9681],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>m});var r=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function c(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var i=r.createContext({}),p=function(e){var t=r.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(i.Provider,{value:t},e.children)},s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,l=e.mdxType,c=e.originalType,i=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),d=p(n),m=l,f=d["".concat(i,".").concat(m)]||d[m]||s[m]||c;return n?r.createElement(f,o(o({ref:t},u),{},{components:n})):r.createElement(f,o({ref:t},u))}));function m(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var c=n.length,o=new Array(c);o[0]=d;var a={};for(var i in t)hasOwnProperty.call(t,i)&&(a[i]=t[i]);a.originalType=e,a.mdxType="string"==typeof e?e:l,o[1]=a;for(var p=2;p{n.r(t),n.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>s,frontMatter:()=>c,metadata:()=>a,toc:()=>p});var r=n(7462),l=(n(7294),n(3905));const c={title:"tnctl kubectl"},o=void 0,a={unversionedId:"cli/tnctl_kubectl",id:"cli/tnctl_kubectl",title:"tnctl kubectl",description:"tnctl kubectl",source:"@site/docs/terranetes-controller/cli/tnctl_kubectl.md",sourceDirName:"cli",slug:"/cli/tnctl_kubectl",permalink:"/terranetes-controller/cli/tnctl_kubectl",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_kubectl.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl kubectl"},sidebar:"tutorialSidebar",previous:{title:"tnctl get revision",permalink:"/terranetes-controller/cli/tnctl_get_revision"},next:{title:"tnctl kubectl plugin",permalink:"/terranetes-controller/cli/tnctl_kubectl_plugin"}},i={},p=[{value:"tnctl kubectl",id:"tnctl-kubectl",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:p};function s(e){let{components:t,...n}=e;return(0,l.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-kubectl"},"tnctl kubectl"),(0,l.kt)("p",null,"Kubectl plugin related commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl kubectl COMMAND [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"}," -h, --help help for kubectl\n")),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl_kubectl_plugin"},"tnctl kubectl plugin"),"\t - Generates the kubectl plugin integration")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a31cba67.254e97e5.js b/assets/js/a31cba67.faf880a9.js similarity index 54% rename from assets/js/a31cba67.254e97e5.js rename to assets/js/a31cba67.faf880a9.js index a39348ef..9d48a977 100644 --- a/assets/js/a31cba67.254e97e5.js +++ b/assets/js/a31cba67.faf880a9.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[314],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=p(r),d=o,m=u["".concat(c,".").concat(d)]||u[d]||f[d]||l;return r?n.createElement(m,a(a({ref:t},s),{},{components:r})):n.createElement(m,a({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,a=new Array(l);a[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>f,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl workflow create"},a=void 0,i={unversionedId:"cli/tnctl_workflow_create",id:"cli/tnctl_workflow_create",title:"tnctl workflow create",description:"tnctl workflow create",source:"@site/docs/terranetes-controller/cli/tnctl_workflow_create.md",sourceDirName:"cli",slug:"/cli/tnctl_workflow_create",permalink:"/terranetes-controller/cli/tnctl_workflow_create",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_workflow_create.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl workflow create"},sidebar:"tutorialSidebar",previous:{title:"tnctl workflow",permalink:"/terranetes-controller/cli/tnctl_workflow"}},c={},p=[{value:"tnctl workflow create",id:"tnctl-workflow-create",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function f(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-workflow-create"},"tnctl workflow create"),(0,o.kt)("p",null,"Generates a workflow used to lint, validate and publish the module"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Can be used to generate an opinionate pipeline for terraform modules.\nThe module command will generate a Github actions pipeline, integrating\nlinting, validating and security checks."),(0,o.kt)("p",null,"Generate a workflow for module\n$ tnctl workflow create PATH"),(0,o.kt)("p",null,"You can override the location of the template via the configuration\nfile ${HOME}/.tnctl/config.yaml (or TNCTL_CONFIG). Just add the\nfollowing"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"workflow: URL"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl workflow create PATH [OPTIONS] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --ensure-naming-linting Ensure the naming conventions of the repository (default true)\n -h, --help help for create\n --template string Repository to use for the template (default "git::ssh://git@github.com/appvia/terranetes-workflows?ref=master")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_workflow"},"tnctl workflow"),"\t - Can be used to generate a skelton CI pipeline")))}f.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[314],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),u=p(r),d=o,m=u["".concat(c,".").concat(d)]||u[d]||f[d]||l;return r?n.createElement(m,a(a({ref:t},s),{},{components:r})):n.createElement(m,a({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,a=new Array(l);a[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>f,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl workflow create"},a=void 0,i={unversionedId:"cli/tnctl_workflow_create",id:"cli/tnctl_workflow_create",title:"tnctl workflow create",description:"tnctl workflow create",source:"@site/docs/terranetes-controller/cli/tnctl_workflow_create.md",sourceDirName:"cli",slug:"/cli/tnctl_workflow_create",permalink:"/terranetes-controller/cli/tnctl_workflow_create",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_workflow_create.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl workflow create"},sidebar:"tutorialSidebar",previous:{title:"tnctl workflow",permalink:"/terranetes-controller/cli/tnctl_workflow"}},c={},p=[{value:"tnctl workflow create",id:"tnctl-workflow-create",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function f(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-workflow-create"},"tnctl workflow create"),(0,o.kt)("p",null,"Generates a workflow used to lint, validate and publish the module"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Can be used to generate an opinionate pipeline for terraform modules.\nThe module command will generate a Github actions pipeline, integrating\nlinting, validating and security checks."),(0,o.kt)("p",null,"Generate a workflow for module\n$ tnctl workflow create PATH"),(0,o.kt)("p",null,"You can override the location of the template via the configuration\nfile ${HOME}/.tnctl/config.yaml (or TNCTL_CONFIG). Just add the\nfollowing"),(0,o.kt)("hr",null),(0,o.kt)("p",null,"workflow: URL"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl workflow create PATH [OPTIONS] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --ensure-naming-linting Ensure the naming conventions of the repository (default true)\n -h, --help help for create\n --template string Repository to use for the template (default "git::ssh://git@github.com/appvia/terranetes-workflows?ref=master")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_workflow"},"tnctl workflow"),"\t - Can be used to generate a skelton CI pipeline")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a768274d.d2d6c2b9.js b/assets/js/a768274d.8a62fb79.js similarity index 54% rename from assets/js/a768274d.d2d6c2b9.js rename to assets/js/a768274d.8a62fb79.js index 1a6d364a..50062a5b 100644 --- a/assets/js/a768274d.d2d6c2b9.js +++ b/assets/js/a768274d.8a62fb79.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2928],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},u=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),d=s(n),f=o,m=d["".concat(l,".").concat(f)]||d[f]||p[f]||i;return n?r.createElement(m,c(c({ref:t},u),{},{components:n})):r.createElement(m,c({ref:t},u))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,c=new Array(i);c[0]=d;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a.mdxType="string"==typeof e?e:o,c[1]=a;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const i={title:"tnctl describe configuration"},c=void 0,a={unversionedId:"cli/tnctl_describe_configuration",id:"cli/tnctl_describe_configuration",title:"tnctl describe configuration",description:"tnctl describe configuration",source:"@site/docs/terranetes-controller/cli/tnctl_describe_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_describe_configuration",permalink:"/terranetes-controller/cli/tnctl_describe_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_describe_configuration.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl describe configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl describe cloudresource",permalink:"/terranetes-controller/cli/tnctl_describe_cloudresource"},next:{title:"tnctl get",permalink:"/terranetes-controller/cli/tnctl_get"}},l={},s=[{value:"tnctl describe configuration",id:"tnctl-describe-configuration",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-describe-configuration"},"tnctl describe configuration"),(0,o.kt)("p",null,"Used to describe the current state of the resources"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Retrieves the definition and current state of one or more of the\nterraform configurations, displaying in a human friendly format.\nThe command also extracts any integration details which have been\nproduced by infracosts or checkov scans."),(0,o.kt)("p",null,"Describe a configuration in a namespace\n$ tnctl describe configuration -n apps NAME"),(0,o.kt)("p",null,"Describe a cloudresource in a namespace\n$ tnctl describe cloudresource -n apps NAME"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl describe configuration [OPTIONS] NAME [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -h, --help help for configuration\n -n, --namespace string Namespace of the resource/s (default "default")\n --show-passed-checks Indicates we should show passed checks (default true)\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_describe"},"tnctl describe"),"\t - Used to describe the current state of the configuration")))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2928],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},u=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=a(e,["components","mdxType","originalType","parentName"]),d=s(n),f=o,m=d["".concat(l,".").concat(f)]||d[f]||p[f]||i;return n?r.createElement(m,c(c({ref:t},u),{},{components:n})):r.createElement(m,c({ref:t},u))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,c=new Array(i);c[0]=d;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a.mdxType="string"==typeof e?e:o,c[1]=a;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>c,default:()=>p,frontMatter:()=>i,metadata:()=>a,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const i={title:"tnctl describe configuration"},c=void 0,a={unversionedId:"cli/tnctl_describe_configuration",id:"cli/tnctl_describe_configuration",title:"tnctl describe configuration",description:"tnctl describe configuration",source:"@site/docs/terranetes-controller/cli/tnctl_describe_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_describe_configuration",permalink:"/terranetes-controller/cli/tnctl_describe_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_describe_configuration.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl describe configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl describe cloudresource",permalink:"/terranetes-controller/cli/tnctl_describe_cloudresource"},next:{title:"tnctl get",permalink:"/terranetes-controller/cli/tnctl_get"}},l={},s=[{value:"tnctl describe configuration",id:"tnctl-describe-configuration",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-describe-configuration"},"tnctl describe configuration"),(0,o.kt)("p",null,"Used to describe the current state of the resources"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Retrieves the definition and current state of one or more of the\nterraform configurations, displaying in a human friendly format.\nThe command also extracts any integration details which have been\nproduced by infracosts or checkov scans."),(0,o.kt)("p",null,"Describe a configuration in a namespace\n$ tnctl describe configuration -n apps NAME"),(0,o.kt)("p",null,"Describe a cloudresource in a namespace\n$ tnctl describe cloudresource -n apps NAME"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl describe configuration [OPTIONS] NAME [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -h, --help help for configuration\n -n, --namespace string Namespace of the resource/s (default "default")\n --show-passed-checks Indicates we should show passed checks (default true)\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_describe"},"tnctl describe"),"\t - Used to describe the current state of the configuration")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a7a91845.3094c46c.js b/assets/js/a7a91845.3094c46c.js deleted file mode 100644 index cbb80a93..00000000 --- a/assets/js/a7a91845.3094c46c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[3617],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(a),m=r,h=d["".concat(l,".").concat(m)]||d[m]||u[m]||o;return a?n.createElement(h,s(s({ref:t},c),{},{components:a})):n.createElement(h,s({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,s=new Array(o);s[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,s[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const o={sidebar_position:1},s="Provisioning an Database in AWS",i={unversionedId:"walkthroughs/database",id:"walkthroughs/database",title:"Provisioning an Database in AWS",description:"The following tries to encompass a walk-through of the feature set, from a platform admin and developer consumption for self-serving a database resource in the cloud.",source:"@site/docs/terranetes-controller/walkthroughs/database.md",sourceDirName:"walkthroughs",slug:"/walkthroughs/database",permalink:"/terranetes-controller/walkthroughs/database",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/walkthroughs/database.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Walk Throughs",permalink:"/terranetes-controller/category/walk-throughs"},next:{title:"API Reference",permalink:"/terranetes-controller/category/api-reference"}},l={},p=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Introduction",id:"introduction",level:2},{value:"Platform Setup",id:"platform-setup",level:2},{value:"Provision a Provider",id:"provision-a-provider",level:3},{value:"Developer Consumption",id:"developer-consumption",level:2}],c={toc:p};function u(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"provisioning-an-database-in-aws"},"Provisioning an Database in AWS"),(0,r.kt)("p",null,"The following tries to encompass a walk-through of the feature set, from a platform admin and developer consumption for self-serving a database resource in the cloud."),(0,r.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("p",null,"This guide is assuming the following"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"You have ",(0,r.kt)("a",{parentName:"li",href:"/terranetes-controller/quick_start"},"installed")," the terranetes-controller in a cluster."),(0,r.kt)("li",{parentName:"ul"},"You have the cluster name and region is resides in"),(0,r.kt)("li",{parentName:"ul"},"You have ",(0,r.kt)("a",{parentName:"li",href:"https://kubernetes.io/docs/tasks/tools/#kubectl"},"kubectl")," installed."),(0,r.kt)("li",{parentName:"ul"},"You have appropriate cloud credentials to provision an RDS in the account."),(0,r.kt)("li",{parentName:"ul"},"The nodegroups are using the EKS Cluster Security Group and not configured with custom groups ",(0,r.kt)("em",{parentName:"li"},"(though the data will be available in the context)"),".")),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"The guide tries to cover the step required from both a platform team perspective and developer consumption the cloud resource."),(0,r.kt)("h2",{id:"platform-setup"},"Platform Setup"),(0,r.kt)("h3",{id:"provision-a-provider"},"Provision a ",(0,r.kt)("a",{parentName:"h3",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")),(0,r.kt)("p",null,"First we need to setup credentials to speak cloud. For the purposes of the guide we will assume the controller is using static credentials (i.e IAM access keys), though see ",(0,r.kt)("a",{parentName:"p",href:"/terranetes-controller/admin/providers"},"here")," for workload identity."),(0,r.kt)("p",null,"a) Lets start by create a kubernetes secret contains the IAM credentials"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl -n terraform-system create secret generic aws \\\n --from-literal=AWS_ACCESS_KEY_ID= \\\n --from-literal=AWS_SECRET_ACCESS_KEY= \\\n --from-literal=AWS_REGION=\n")),(0,r.kt)("p",null,"b) Provision a ",(0,r.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," to use the credentials"),(0,r.kt)("p",null,"We will also use this ",(0,r.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," to preload any ",(0,r.kt)("a",{parentName:"p",href:"/terranetes-controller/admin/contexts"},"contextual data")," for us."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Lets export the name of the cluster and the region it's running\nexport CLUSTER_NAME=test\nexport CLUSTER_REGION=eu-west-2\n\ncat <{a.d(t,{Zo:()=>c,kt:()=>m});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function s(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):s(s({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(a),m=r,h=d["".concat(l,".").concat(m)]||d[m]||u[m]||o;return a?n.createElement(h,s(s({ref:t},c),{},{components:a})):n.createElement(h,s({ref:t},c))}));function m(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,s=new Array(o);s[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i.mdxType="string"==typeof e?e:r,s[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const o={sidebar_position:1},s="Provisioning an Database in AWS",i={unversionedId:"walkthroughs/database",id:"walkthroughs/database",title:"Provisioning an Database in AWS",description:"The following tries to encompass a walk-through of the feature set, from a platform admin and developer consumption for self-serving a database resource in the cloud.",source:"@site/docs/terranetes-controller/walkthroughs/database.md",sourceDirName:"walkthroughs",slug:"/walkthroughs/database",permalink:"/terranetes-controller/walkthroughs/database",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/walkthroughs/database.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"Walk Throughs",permalink:"/terranetes-controller/category/walk-throughs"},next:{title:"API Reference",permalink:"/terranetes-controller/category/api-reference"}},l={},p=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Introduction",id:"introduction",level:2},{value:"Platform Setup",id:"platform-setup",level:2},{value:"Provision a Provider",id:"provision-a-provider",level:3},{value:"Developer Consumption",id:"developer-consumption",level:2}],c={toc:p};function u(e){let{components:t,...a}=e;return(0,r.kt)("wrapper",(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"provisioning-an-database-in-aws"},"Provisioning an Database in AWS"),(0,r.kt)("p",null,"The following tries to encompass a walk-through of the feature set, from a platform admin and developer consumption for self-serving a database resource in the cloud."),(0,r.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("p",null,"This guide is assuming the following"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"You have ",(0,r.kt)("a",{parentName:"li",href:"/terranetes-controller/quick_start"},"installed")," the terranetes-controller in a cluster."),(0,r.kt)("li",{parentName:"ul"},"You have the cluster name and region is resides in"),(0,r.kt)("li",{parentName:"ul"},"You have ",(0,r.kt)("a",{parentName:"li",href:"https://kubernetes.io/docs/tasks/tools/#kubectl"},"kubectl")," installed."),(0,r.kt)("li",{parentName:"ul"},"You have appropriate cloud credentials to provision an RDS in the account."),(0,r.kt)("li",{parentName:"ul"},"The nodegroups are using the EKS Cluster Security Group and not configured with custom groups ",(0,r.kt)("em",{parentName:"li"},"(though the data will be available in the context)"),".")),(0,r.kt)("h2",{id:"introduction"},"Introduction"),(0,r.kt)("p",null,"The guide tries to cover the step required from both a platform team perspective and developer consumption the cloud resource."),(0,r.kt)("h2",{id:"platform-setup"},"Platform Setup"),(0,r.kt)("h3",{id:"provision-a-provider"},"Provision a ",(0,r.kt)("a",{parentName:"h3",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")),(0,r.kt)("p",null,"First we need to setup credentials to speak cloud. For the purposes of the guide we will assume the controller is using static credentials (i.e IAM access keys), though see ",(0,r.kt)("a",{parentName:"p",href:"/terranetes-controller/admin/providers"},"here")," for workload identity."),(0,r.kt)("p",null,"a) Lets start by create a kubernetes secret contains the IAM credentials"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl -n terraform-system create secret generic aws \\\n --from-literal=AWS_ACCESS_KEY_ID= \\\n --from-literal=AWS_SECRET_ACCESS_KEY= \\\n --from-literal=AWS_REGION=\n")),(0,r.kt)("p",null,"b) Provision a ",(0,r.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," to use the credentials"),(0,r.kt)("p",null,"We will also use this ",(0,r.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Provider")," to preload any ",(0,r.kt)("a",{parentName:"p",href:"/terranetes-controller/admin/contexts"},"contextual data")," for us."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-shell"},"# Lets export the name of the cluster and the region it's running\nexport CLUSTER_NAME=test\nexport CLUSTER_REGION=eu-west-2\n\ncat <{t.d(r,{Zo:()=>p,kt:()=>m});var n=t(7294);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 o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var r=1;r=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=n.createContext({}),c=function(e){var r=n.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},p=function(e){var r=c(e.components);return n.createElement(l.Provider,{value:r},e.children)},u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},d=n.forwardRef((function(e,r){var t=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(t),m=a,f=d["".concat(l,".").concat(m)]||d[m]||u[m]||o;return t?n.createElement(f,i(i({ref:r},p),{},{components:t})):n.createElement(f,i({ref:r},p))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var o=t.length,i=new Array(o);i[0]=d;var s={};for(var l in r)hasOwnProperty.call(r,l)&&(s[l]=r[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c{t.r(r),t.d(r,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var n=t(7462),a=(t(7294),t(3905));const o={sidebar_position:4,sidebar_class_name:"green"},i="Cloud Resources",s={unversionedId:"admin/cloudresource",id:"admin/cloudresource",title:"Cloud Resources",description:"This feature is only available from >= v0.4.0 releases",source:"@site/docs/terranetes-controller/admin/cloudresource.md",sourceDirName:"admin",slug:"/admin/cloudresource",permalink:"/terranetes-controller/admin/cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/cloudresource.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:4,frontMatter:{sidebar_position:4,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Contexts",permalink:"/terranetes-controller/admin/contexts"},next:{title:"Observability",permalink:"/terranetes-controller/category/observability"}},l={},c=[{value:"What are Revisions?",id:"what-are-revisions",level:2},{value:"Revision specification?",id:"revision-specification",level:2},{value:"Plan",id:"plan",level:3},{value:"Inputs",id:"inputs",level:3},{value:"Configuration",id:"configuration",level:3},{value:"How to create Revisions?",id:"how-to-create-revisions",level:2},{value:"How to validate a Revision?",id:"how-to-validate-a-revision",level:2}],p={toc:c};function u(e){let{components:r,...t}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"cloud-resources"},"Cloud Resources"),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"This feature is only available from >= v0.4.0 releases")),(0,a.kt)("p",null,"Terranetes supports two interfaces to provisioning cloud resources; ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," which are the legacy implementation and the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources"),". While ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," provides a one-to-one mapping to the Terraform module, ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," takes a more managed approach. Rather the exposing the entirety of options to the consumer, ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"CloudResources")," pick and choose which attributes are exposed, thus reducing the heavy lifting by the users and well and ensuring options do not diverge from a known path."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Note, while the user facing interface is the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResource"),", a managed ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," is created by the controller as the implementation detail. You can think of ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," as a means of creating a managed ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration"),".")),(0,a.kt)("h2",{id:"what-are-revisions"},"What are Revisions?"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revisions")," are the templates for ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources"),", each of these are versioned assets which has been curated and tested against, containing the defaults the organization requires and exposing only the functionality which is contextual. The basic gist is;"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revisions")," point to a terraform module."),(0,a.kt)("li",{parentName:"ul"},"They contain all the default options which the platform wants defaults to in the module."),(0,a.kt)("li",{parentName:"ul"},"They contain all the options which they want exposed to the consumer."),(0,a.kt)("li",{parentName:"ul"},"Versions can track the upstream terraform module, or move independently of it."),(0,a.kt)("li",{parentName:"ul"},"All ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," reference back to a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")," in the cluster."),(0,a.kt)("li",{parentName:"ul"},"To upgrade a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResource")," consumer update the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")," it points to.")),(0,a.kt)("p",null,"The following depicts the relations between Plans (a collection of ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revisions"),"), ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," and the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," it manages."),(0,a.kt)("img",{src:"/img/cloudresources.png"}),(0,a.kt)("h2",{id:"revision-specification"},"Revision specification?"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revisions")," are made up for ",(0,a.kt)("strong",{parentName:"p"},"three")," sections"),(0,a.kt)("h3",{id:"plan"},"Plan"),(0,a.kt)("p",null,"Describes the metadata associated to the Revisions; the version, description, categories and so forth."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n ## Defines we are a member of a package\n plan:\n ## Is the name of the package we are a part of\n name: fake\n ## Is a collection of categories\n categories: [mysql, aws, fake]\n ## Is a description for what this plan provides\n description: Provides a dummy terraform module for testing\n ## Is the version of the package\n revision: v0.0.3\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"name"),": is probably the most important field here, as all ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revisions")," are grouped by this field. ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revisions")," with the same ",(0,a.kt)("inlineCode",{parentName:"li"},"spec.plan.name")," are logically grouped into a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/plans.terraform.appvia.io"},"Plan"),". Plans order these Revisions using semvar. So when a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResource")," references a Plan ",(0,a.kt)("inlineCode",{parentName:"li"},"database"),", without specifying a version; it looks up the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/plans.terraform.appvia.io"},"Plan")," and retrieves the latest version. If it specifies a version, it looks up the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/plans.terraform.appvia.io"},"Plan")," and checks a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")," of said version exists."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"categories"),": is a collection of tags associated to the revision, these are user facing and largely used for searching."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"description"),": provides a human readable description of the intended use for the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"revision"),": is semvar version associated to this revision.")),(0,a.kt)("h3",{id:"inputs"},"Inputs"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/revisions.terraform.appvia.io#v1alpha1-.spec.configuration"},"Inputs")," are the options the platform team want to expose to the consumers."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n ## Is a list of inputs the user is permitted to override\n inputs:\n - key: sentence\n description: Is a sentence we want to print\n required: true\n default:\n value: hello from second additional\n - key: vpc_id\n description: Hello\n - key: list\n description: A list of names\n default:\n values: [a, b, c]\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"key"),": (required) maps to the terraform variable within the module the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")," is backing."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"description"),": (required) provides a human readable description to the variable."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"required"),": (optional) indicates if the user MUST specify a value."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"default.value"),": (optional) can be a string, number, list or map and is used as the default value for the variable.")),(0,a.kt)("h3",{id:"configuration"},"Configuration"),(0,a.kt)("p",null,"The last section is provides a template to the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration"),", determining the module source, default values, enabled features and so forth."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n configuration:\n ## Using a public repository\n module: https://github.com/appvia/terranetes-controller.git//test/e2e/assets/terraform/dummy?ref=master\n ## Where to write any secrets\n writeConnectionSecretToRef:\n name: outputs\n")),(0,a.kt)("p",null,"Thus the managed ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," at the end is a combination of this section plus the optional inputs from above."),(0,a.kt)("h2",{id:"how-to-create-revisions"},"How to create Revisions?"),(0,a.kt)("p",null,"By hand of course, a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")," is nothing more standard CRD; however using the ",(0,a.kt)("a",{parentName:"p",href:"../../cli/tnctl_create_revision/"},"tnctl create revision")," command."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl create revision https://github.com/terraform-aws-modules/terraform-aws-rds?ref=v5.9.0\n")),(0,a.kt)("h2",{id:"how-to-validate-a-revision"},"How to validate a Revision?"),(0,a.kt)("p",null,"Part of the responsibility model of using ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," is passing a known and tested asset to the consumer. Terranetes tries to make this workflow simpler by using the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl_verify_revision"},"tnctl verify revision"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},'$ tnctl verify revision revision.yaml\n? Input identifier is a mandatory input, what should it\'s value be? test\n\ud83d\udd30 Validating Revision Syntax\n \u25ab\ufe0f The Revision CRD is syntactically correct with no errors found \ud83d\udfe2\n\ud83d\udd30 Validating Revision Specification\n \u25ab\ufe0f The Revision does not have any categories defined \ud83d\udfe0\n \u25ab\ufe0f The Revision has a description defined \ud83d\udfe2\n \u25ab\ufe0f The Revision has the default description defined \ud83d\udfe0\n \u25ab\ufe0f The Revision has a changelog defined \ud83d\udfe2\n \u25ab\ufe0f The Revision has the default changelog defined \ud83d\udfe0\n\ud83d\udd30 Validating Revision Inputs\n \u25ab\ufe0f Checking input: backup_window \ud83d\udfe2\n \u25ab\ufe0f Checking input: allocated_storage \ud83d\udfe2\n \u25ab\ufe0f Checking input: identifier \ud83d\udfe2\n\ud83d\udd30 Retrieving Checkov Version\n \u25ab\ufe0f Discovered Checkov version: "bridgecrew/checkov:2.3.291" \ud83d\udfe2\n\ud83d\udd30 Retrieving Terraform Version\n \u25ab\ufe0f Discovered Terraform version: "hashicorp/terraform:1.5.6" \ud83d\udfe2\n\ud83d\udd30 Validating Module Policy permits Revision\n \u25ab\ufe0f Found 1 module constraint policies \ud83d\udfe2\n \u25ab\ufe0f Revision is not permitted by any policy \ud83d\udd34\n\ud83d\udd30 Validating Cloud Credentials Provider\n \u25ab\ufe0f Checking if we providers associated with the revision \ud83d\udfe2\n \u25ab\ufe0f Provider referenced exists in cluster \ud83d\udfe2\n\ud83d\udd30 Validating of Context References\n \u25ab\ufe0f Revision does not reference any values from context/s \ud83d\udfe2\n\ud83d\udd30 Validating against Checkov Security Policy\n \u25ab\ufe0f Checkov is using the code, not the plan, consider --use-terraform-plan \ud83d\udfe0\n \u25ab\ufe0f Found 1 security policies to validate against \ud83d\udfe2\n \u25ab\ufe0f Revision has passed 18 checks in policy: "checkov" \ud83d\udfe2\n \u25ab\ufe0f Check ID against documentation: https://docs.bridgecrew.io/docs \ud83d\udfe2\n \u25ab\ufe0f Ensure that RDS instances have Multi-AZ enabled \ud83d\udd34\n Check ID: CKV_AWS_157\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Ensure that RDS instances have performance insights enabled \ud83d\udd34\n Check ID: CKV_AWS_353\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Ensure that respective logs of Amazon Relational Database Service (Am \ud83d\udd34\n Check ID: CKV_AWS_129\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Ensure that AWS database instances have deletion protection enabled \ud83d\udd34\n Check ID: CKV_AWS_293\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Ensure that RDS instances has backup policy \ud83d\udd34\n Check ID: CKV_AWS_133\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Ensure that enhanced monitoring is enabled for Amazon RDS instances \ud83d\udd34\n Check ID: CKV_AWS_118\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Ensure CloudWatch log groups retains logs for at least 1 year \ud83d\udd34\n Check ID: CKV_AWS_338\n Resource: module.main.module.db_instance.aws_cloudwatch_log_group.this\n \u25ab\ufe0f Ensure RDS instance with copy tags to snapshots is enabled \ud83d\udd34\n Check ID: CKV2_AWS_60\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Revision will fail on security policy: "checkov" \ud83d\udd34\n\n\ud83d\udfe2 Passed: 8, Warning: 4\n\ud83d\udd34 Failed: 10\n[Error]: revision failed verification checks\n')),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"The default validation checks the codebase but not the terraform plan. For a more complete validation we'd recommend passing read-only credentials and using the ",(0,a.kt)("inlineCode",{parentName:"p"},"--use-terraform-plan")," flag, exporting the usual environment variable such as AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and so forth.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a9872a66.422fef0a.js b/assets/js/a9872a66.422fef0a.js deleted file mode 100644 index 8d349389..00000000 --- a/assets/js/a9872a66.422fef0a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[1380],{3905:(e,r,t)=>{t.d(r,{Zo:()=>p,kt:()=>m});var n=t(7294);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 o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var r=1;r=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var l=n.createContext({}),c=function(e){var r=n.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},p=function(e){var r=c(e.components);return n.createElement(l.Provider,{value:r},e.children)},u={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},d=n.forwardRef((function(e,r){var t=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=c(t),m=a,f=d["".concat(l,".").concat(m)]||d[m]||u[m]||o;return t?n.createElement(f,i(i({ref:r},p),{},{components:t})):n.createElement(f,i({ref:r},p))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var o=t.length,i=new Array(o);i[0]=d;var s={};for(var l in r)hasOwnProperty.call(r,l)&&(s[l]=r[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c{t.r(r),t.d(r,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var n=t(7462),a=(t(7294),t(3905));const o={sidebar_position:4,sidebar_class_name:"green"},i="Cloud Resources",s={unversionedId:"admin/cloudresource",id:"admin/cloudresource",title:"Cloud Resources",description:"This feature is only available from >= v0.3.32 releases",source:"@site/docs/terranetes-controller/admin/cloudresource.md",sourceDirName:"admin",slug:"/admin/cloudresource",permalink:"/terranetes-controller/admin/cloudresource",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/cloudresource.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:4,frontMatter:{sidebar_position:4,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Contexts",permalink:"/terranetes-controller/admin/contexts"},next:{title:"Observability",permalink:"/terranetes-controller/category/observability"}},l={},c=[{value:"What are Revisions?",id:"what-are-revisions",level:2},{value:"Revision specification?",id:"revision-specification",level:2},{value:"Plan",id:"plan",level:3},{value:"Inputs",id:"inputs",level:3},{value:"Configuration",id:"configuration",level:3},{value:"How to create Revisions?",id:"how-to-create-revisions",level:2},{value:"How to validate a Revision?",id:"how-to-validate-a-revision",level:2}],p={toc:c};function u(e){let{components:r,...t}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"cloud-resources"},"Cloud Resources"),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"This feature is only available from >= v0.3.32 releases")),(0,a.kt)("p",null,"Terranetes supports two interfaces to provisioning cloud resources; ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," which are the legacy implementation and the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources"),". While ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")," provides a one-to-one mapping to the Terraform module, ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," takes a more managed approach. Rather the exposing the entirety of options to the consumer, ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"CloudResources")," pick and choose which attributes are exposed, thus reducing the heavy lifting by the users and well and ensuring options do not diverge from a known path."),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},"Note, while the user facing interface is the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResource"),", a managed ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," is created by the controller as the implementation detail. You can think of ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," as a means of creating a managed ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration"),".")),(0,a.kt)("h2",{id:"what-are-revisions"},"What are Revisions?"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revisions")," are the templates for ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources"),", each of these are versioned assets which has been curated and tested against, containing the defaults the organization requires and exposing only the functionality which is contextual. The basic gist is;"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revisions")," point to a terraform module."),(0,a.kt)("li",{parentName:"ul"},"They contain all the default options which the platform wants defaults to in the module."),(0,a.kt)("li",{parentName:"ul"},"They contain all the options which they want exposed to the consumer."),(0,a.kt)("li",{parentName:"ul"},"Versions can track the upstream terraform module, or move independently of it."),(0,a.kt)("li",{parentName:"ul"},"All ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," reference back to a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")," in the cluster."),(0,a.kt)("li",{parentName:"ul"},"To upgrade a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResource")," consumer update the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")," it points to.")),(0,a.kt)("p",null,"The following depicts the relations between Plans (a collection of ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revisions"),"), ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," and the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," it manages."),(0,a.kt)("img",{src:"/img/cloudresources.png"}),(0,a.kt)("h2",{id:"revision-specification"},"Revision specification?"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revisions")," are made up for ",(0,a.kt)("strong",{parentName:"p"},"three")," sections"),(0,a.kt)("h3",{id:"plan"},"Plan"),(0,a.kt)("p",null,"Describes the metadata associated to the Revisions; the version, description, categories and so forth."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n ## Defines we are a member of a package\n plan:\n ## Is the name of the package we are a part of\n name: fake\n ## Is a collection of categories\n categories: [mysql, aws, fake]\n ## Is a description for what this plan provides\n description: Provides a dummy terraform module for testing\n ## Is the version of the package\n revision: v0.0.3\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"name"),": is probably the most important field here, as all ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revisions")," are grouped by this field. ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revisions")," with the same ",(0,a.kt)("inlineCode",{parentName:"li"},"spec.plan.name")," are logically grouped into a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/plans.terraform.appvia.io"},"Plan"),". Plans order these Revisions using semvar. So when a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResource")," references a Plan ",(0,a.kt)("inlineCode",{parentName:"li"},"database"),", without specifying a version; it looks up the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/plans.terraform.appvia.io"},"Plan")," and retrieves the latest version. If it specifies a version, it looks up the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/plans.terraform.appvia.io"},"Plan")," and checks a ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")," of said version exists."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"categories"),": is a collection of tags associated to the revision, these are user facing and largely used for searching."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"description"),": provides a human readable description of the intended use for the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"revision"),": is semvar version associated to this revision.")),(0,a.kt)("h3",{id:"inputs"},"Inputs"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/revisions.terraform.appvia.io#v1alpha1-.spec.configuration"},"Inputs")," are the options the platform team want to expose to the consumers."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n ## Is a list of inputs the user is permitted to override\n inputs:\n - key: sentence\n description: Is a sentence we want to print\n required: true\n default:\n value: hello from second additional\n - key: vpc_id\n description: Hello\n - key: list\n description: A list of names\n default:\n values: [a, b, c]\n")),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"key"),": (required) maps to the terraform variable within the module the ",(0,a.kt)("a",{parentName:"li",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")," is backing."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"description"),": (required) provides a human readable description to the variable."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"required"),": (optional) indicates if the user MUST specify a value."),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("strong",{parentName:"li"},"default.value"),": (optional) can be a string, number, list or map and is used as the default value for the variable.")),(0,a.kt)("h3",{id:"configuration"},"Configuration"),(0,a.kt)("p",null,"The last section is provides a template to the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration"),", determining the module source, default values, enabled features and so forth."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"spec:\n configuration:\n ## Using a public repository\n module: https://github.com/appvia/terranetes-controller.git//test/e2e/assets/terraform/dummy?ref=master\n ## Where to write any secrets\n writeConnectionSecretToRef:\n name: outputs\n")),(0,a.kt)("p",null,"Thus the managed ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," at the end is a combination of this section plus the optional inputs from above."),(0,a.kt)("h2",{id:"how-to-create-revisions"},"How to create Revisions?"),(0,a.kt)("p",null,"By hand of course, a ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/revisions.terraform.appvia.io"},"Revision")," is nothing more standard CRD; however using the ",(0,a.kt)("a",{parentName:"p",href:"../../cli/tnctl_create_revision/"},"tnctl create revision")," command."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl create revision https://github.com/terraform-aws-modules/terraform-aws-rds?ref=v5.9.0\n")),(0,a.kt)("h2",{id:"how-to-validate-a-revision"},"How to validate a Revision?"),(0,a.kt)("p",null,"Part of the responsibility model of using ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," is passing a known and tested asset to the consumer. Terranetes tries to make this workflow simpler by using the ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl_verify_revision"},"tnctl verify revision"),"."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},'$ tnctl verify revision revision.yaml\n? Input identifier is a mandatory input, what should it\'s value be? test\n\ud83d\udd30 Validating Revision Syntax\n \u25ab\ufe0f The Revision CRD is syntactically correct with no errors found \ud83d\udfe2\n\ud83d\udd30 Validating Revision Specification\n \u25ab\ufe0f The Revision does not have any categories defined \ud83d\udfe0\n \u25ab\ufe0f The Revision has a description defined \ud83d\udfe2\n \u25ab\ufe0f The Revision has the default description defined \ud83d\udfe0\n \u25ab\ufe0f The Revision has a changelog defined \ud83d\udfe2\n \u25ab\ufe0f The Revision has the default changelog defined \ud83d\udfe0\n\ud83d\udd30 Validating Revision Inputs\n \u25ab\ufe0f Checking input: backup_window \ud83d\udfe2\n \u25ab\ufe0f Checking input: allocated_storage \ud83d\udfe2\n \u25ab\ufe0f Checking input: identifier \ud83d\udfe2\n\ud83d\udd30 Retrieving Checkov Version\n \u25ab\ufe0f Discovered Checkov version: "bridgecrew/checkov:2.3.291" \ud83d\udfe2\n\ud83d\udd30 Retrieving Terraform Version\n \u25ab\ufe0f Discovered Terraform version: "hashicorp/terraform:1.5.6" \ud83d\udfe2\n\ud83d\udd30 Validating Module Policy permits Revision\n \u25ab\ufe0f Found 1 module constraint policies \ud83d\udfe2\n \u25ab\ufe0f Revision is not permitted by any policy \ud83d\udd34\n\ud83d\udd30 Validating Cloud Credentials Provider\n \u25ab\ufe0f Checking if we providers associated with the revision \ud83d\udfe2\n \u25ab\ufe0f Provider referenced exists in cluster \ud83d\udfe2\n\ud83d\udd30 Validating of Context References\n \u25ab\ufe0f Revision does not reference any values from context/s \ud83d\udfe2\n\ud83d\udd30 Validating against Checkov Security Policy\n \u25ab\ufe0f Checkov is using the code, not the plan, consider --use-terraform-plan \ud83d\udfe0\n \u25ab\ufe0f Found 1 security policies to validate against \ud83d\udfe2\n \u25ab\ufe0f Revision has passed 18 checks in policy: "checkov" \ud83d\udfe2\n \u25ab\ufe0f Check ID against documentation: https://docs.bridgecrew.io/docs \ud83d\udfe2\n \u25ab\ufe0f Ensure that RDS instances have Multi-AZ enabled \ud83d\udd34\n Check ID: CKV_AWS_157\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Ensure that RDS instances have performance insights enabled \ud83d\udd34\n Check ID: CKV_AWS_353\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Ensure that respective logs of Amazon Relational Database Service (Am \ud83d\udd34\n Check ID: CKV_AWS_129\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Ensure that AWS database instances have deletion protection enabled \ud83d\udd34\n Check ID: CKV_AWS_293\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Ensure that RDS instances has backup policy \ud83d\udd34\n Check ID: CKV_AWS_133\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Ensure that enhanced monitoring is enabled for Amazon RDS instances \ud83d\udd34\n Check ID: CKV_AWS_118\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Ensure CloudWatch log groups retains logs for at least 1 year \ud83d\udd34\n Check ID: CKV_AWS_338\n Resource: module.main.module.db_instance.aws_cloudwatch_log_group.this\n \u25ab\ufe0f Ensure RDS instance with copy tags to snapshots is enabled \ud83d\udd34\n Check ID: CKV2_AWS_60\n Resource: module.main.module.db_instance.aws_db_instance.this[0]\n \u25ab\ufe0f Revision will fail on security policy: "checkov" \ud83d\udd34\n\n\ud83d\udfe2 Passed: 8, Warning: 4\n\ud83d\udd34 Failed: 10\n[Error]: revision failed verification checks\n')),(0,a.kt)("admonition",{type:"tip"},(0,a.kt)("p",{parentName:"admonition"},"The default validation checks the codebase but not the terraform plan. For a more complete validation we'd recommend passing read-only credentials and using the ",(0,a.kt)("inlineCode",{parentName:"p"},"--use-terraform-plan")," flag, exporting the usual environment variable such as AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and so forth.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b63a1fad.50d5c500.js b/assets/js/b63a1fad.50d5c500.js new file mode 100644 index 00000000..4daa7bbc --- /dev/null +++ b/assets/js/b63a1fad.50d5c500.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9580],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>d});var a=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var r=e.components,o=e.mdxType,n=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=p(r),d=o,h=u["".concat(s,".").concat(d)]||u[d]||c[d]||n;return r?a.createElement(h,i(i({ref:t},m),{},{components:r})):a.createElement(h,i({ref:t},m))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=r.length,i=new Array(n);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>n,metadata:()=>l,toc:()=>p});var a=r(7462),o=(r(7294),r(3905));const n={sidebar_position:2},i="Platform Team",l={unversionedId:"workflows/platform",id:"workflows/platform",title:"Platform Team",description:"Setting up workflows",source:"@site/docs/terranetes-controller/workflows/platform.md",sourceDirName:"workflows",slug:"/workflows/platform",permalink:"/terranetes-controller/workflows/platform",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/workflows/platform.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"What are workflows",permalink:"/terranetes-controller/workflows/intro"},next:{title:"Developer",permalink:"/terranetes-controller/workflows/developer"}},s={},p=[{value:"Setting up workflows",id:"setting-up-workflows",level:2},{value:"Current Checks",id:"current-checks",level:3},{value:"On the Roadmap",id:"on-the-roadmap",level:3},{value:"Authoring a module",id:"authoring-a-module",level:2}],m={toc:p};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"platform-team"},"Platform Team"),(0,o.kt)("h2",{id:"setting-up-workflows"},"Setting up workflows"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"terranetes-workflows")," resides at ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-workflows"},"https://github.com/appvia/terranetes-workflows")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Clone the repository into the Github organization and update the repository settings to ",(0,o.kt)("a",{parentName:"li",href:"https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-new-repository"},"Github Template"),"."),(0,o.kt)("li",{parentName:"ol"},"If your organization has a central Checkov policies repository update the ",(0,o.kt)("inlineCode",{parentName:"li"},"POLICY_SOURCE")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"POLICY_VERSION")," in the Github workflows, pointing to the repository and tag ",(0,o.kt)("em",{parentName:"li"},"(tag is optional)"),". If you don't have a central repository, its fine, the security checks will use the default rules."),(0,o.kt)("li",{parentName:"ol"},"If you wish to enable ",(0,o.kt)("a",{parentName:"li",href:"https://www.infracost.io/"},"Infracost")," integration, add an organizational secret named ",(0,o.kt)("inlineCode",{parentName:"li"},"ORG_INFRACOST_API_KEY"),". On pull requests will be comment on the breakdown or the diff in predicted costs.")),(0,o.kt)("h3",{id:"current-checks"},"Current Checks"),(0,o.kt)("p",null,"Bundled in the template is a collection of Github workflows assessing;"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Checkov Security Rules"),(0,o.kt)("li",{parentName:"ul"},"Code Format"),(0,o.kt)("li",{parentName:"ul"},"Commit messages linting (consistent changelogs)"),(0,o.kt)("li",{parentName:"ul"},"Cost Estimations (Infracost)"),(0,o.kt)("li",{parentName:"ul"},"Module Docs (terraform-docs)"),(0,o.kt)("li",{parentName:"ul"},"Terraform Code Validation")),(0,o.kt)("p",null,"Currently we only support Github actions, though the intention is to replicate the actions for Gitlab and CircleCI."),(0,o.kt)("h3",{id:"on-the-roadmap"},"On the Roadmap"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Scheduled jobs to re-evaluate the security checks."),(0,o.kt)("li",{parentName:"ul"},"Automatically raising pull requests when central policy is updated.")),(0,o.kt)("h2",{id:"authoring-a-module"},"Authoring a module"),(0,o.kt)("p",null,"The following walks the iteration of provisioning a new terraform module using workflows."),(0,o.kt)("admonition",{type:"important"},(0,o.kt)("p",{parentName:"admonition"},"This is not a terraform tutorial, so for our purposes we will be wrapping an existing module\n::::"),(0,o.kt)("h3",{parentName:"admonition",id:"create-the-module"},"Create the module"),(0,o.kt)("p",{parentName:"admonition"},"Assuming you have cloned the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-workflows"},"repository")," to a ",(0,o.kt)("a",{parentName:"p",href:"https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-template-repository"},"Github template")," in your organization. Create a repository via the UI or the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cli/cli"},"Github CLI")),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"gh repo create appvia/terraform-aws-rds --template appvia/terranetes-workflows\n")),(0,o.kt)("p",{parentName:"admonition"},"Ensure you've added an appropriate description, as the ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl_search"},"tnctl search")," command uses the terms found here to filter on."),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-shell"},'gh repo edit appvia/terraform-aws-rds --description "Terraform module used to provision a RDS database"\n')),(0,o.kt)("p",{parentName:"admonition"},"Alternatively you can replicate via the ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl_workflow_create"},"tnctl workflow create")," command"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl workflow create terraform-aws-rds --template URL\n")),(0,o.kt)("h3",{parentName:"admonition",id:"adding-the-code"},"Adding the code"),(0,o.kt)("p",{parentName:"admonition"},"Your are now ready to start adding the terraform code. Open the branch and pull request"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git checkout -b feat_adding_code\n# add code and commit\ngh pr create\n")),(0,o.kt)("p",{parentName:"admonition"},"Github actions will assess, review and update the pull requests with appropriate comments."),(0,o.kt)("h3",{parentName:"admonition",id:"publish-the-artifact"},"Publish the artifact"),(0,o.kt)("p",{parentName:"admonition"},"By default all tags ",(0,o.kt)("inlineCode",{parentName:"p"},"v[SEMVER]")," automatically create a Github release and changelog. Assuming the ","[tnctl search]","(/terranetes-controller/cli/tnctl_search] is using your Github organization as a source the artifact is now immediately searchable."),(0,o.kt)("p",{parentName:"admonition"},"For public repositories the Terraform registry offers a nice solution to central point to distribute, view and search for resources. At present you must perform this on a per repository basis. Go to ",(0,o.kt)("a",{parentName:"p",href:"https://registry.terraform.io/sign-in"},"https://registry.terraform.io/sign-in")),(0,o.kt)("p",{parentName:"admonition"},"For private repositories take a look at"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/outsideris/citizen"},"https://github.com/outsideris/citizen")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/SwissArmyRonin/terraform-aws-registry"},"https://github.com/SwissArmyRonin/terraform-aws-registry"))),(0,o.kt)("h3",{parentName:"admonition",id:"find-the-artifact"},"Find the artifact"),(0,o.kt)("p",{parentName:"admonition"},"The release should now be available from your Github organization ",(0,o.kt)("inlineCode",{parentName:"p"},"tnctl search rds"),".")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b63a1fad.f3edc40a.js b/assets/js/b63a1fad.f3edc40a.js deleted file mode 100644 index e308cf26..00000000 --- a/assets/js/b63a1fad.f3edc40a.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9580],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>d});var a=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=a.createContext({}),p=function(e){var t=a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},m=function(e){var t=p(e.components);return a.createElement(s.Provider,{value:t},e.children)},c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var r=e.components,o=e.mdxType,n=e.originalType,s=e.parentName,m=l(e,["components","mdxType","originalType","parentName"]),u=p(r),d=o,h=u["".concat(s,".").concat(d)]||u[d]||c[d]||n;return r?a.createElement(h,i(i({ref:t},m),{},{components:r})):a.createElement(h,i({ref:t},m))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=r.length,i=new Array(n);i[0]=u;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>n,metadata:()=>l,toc:()=>p});var a=r(7462),o=(r(7294),r(3905));const n={sidebar_position:2},i="Platform Team",l={unversionedId:"workflows/platform",id:"workflows/platform",title:"Platform Team",description:"Setting up workflows",source:"@site/docs/terranetes-controller/workflows/platform.md",sourceDirName:"workflows",slug:"/workflows/platform",permalink:"/terranetes-controller/workflows/platform",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/workflows/platform.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"What are workflows",permalink:"/terranetes-controller/workflows/intro"},next:{title:"Developer",permalink:"/terranetes-controller/workflows/developer"}},s={},p=[{value:"Setting up workflows",id:"setting-up-workflows",level:2},{value:"Current Checks",id:"current-checks",level:3},{value:"On the Roadmap",id:"on-the-roadmap",level:3},{value:"Authoring a module",id:"authoring-a-module",level:2}],m={toc:p};function c(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"platform-team"},"Platform Team"),(0,o.kt)("h2",{id:"setting-up-workflows"},"Setting up workflows"),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"terranetes-workflows")," resides at ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-workflows"},"https://github.com/appvia/terranetes-workflows")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Clone the repository into the Github organization and update the repository settings to ",(0,o.kt)("a",{parentName:"li",href:"https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-new-repository"},"Github Template"),"."),(0,o.kt)("li",{parentName:"ol"},"If your organization has a central Checkov policies repository update the ",(0,o.kt)("inlineCode",{parentName:"li"},"POLICY_SOURCE")," and ",(0,o.kt)("inlineCode",{parentName:"li"},"POLICY_VERSION")," in the Github workflows, pointing to the repository and tag ",(0,o.kt)("em",{parentName:"li"},"(tag is optional)"),". If you don't have a central repository, its fine, the security checks will use the default rules."),(0,o.kt)("li",{parentName:"ol"},"If you wish to enable ",(0,o.kt)("a",{parentName:"li",href:"https://www.infracost.io/"},"Infracost")," integration, add an organizational secret named ",(0,o.kt)("inlineCode",{parentName:"li"},"ORG_INFRACOST_API_KEY"),". On pull requests will be comment on the breakdown or the diff in predicted costs.")),(0,o.kt)("h3",{id:"current-checks"},"Current Checks"),(0,o.kt)("p",null,"Bundled in the template is a collection of Github workflows assessing;"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Checkov Security Rules"),(0,o.kt)("li",{parentName:"ul"},"Code Format"),(0,o.kt)("li",{parentName:"ul"},"Commit messages linting (consistent changelogs)"),(0,o.kt)("li",{parentName:"ul"},"Cost Estimations (Infracost)"),(0,o.kt)("li",{parentName:"ul"},"Module Docs (terraform-docs)"),(0,o.kt)("li",{parentName:"ul"},"Terraform Code Validation")),(0,o.kt)("p",null,"Currently we only support Github actions, though the intention is to replicate the actions for Gitlab and CircleCI."),(0,o.kt)("h3",{id:"on-the-roadmap"},"On the Roadmap"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Scheduled jobs to re-evaluate the security checks."),(0,o.kt)("li",{parentName:"ul"},"Automatically raising pull requests when central policy is updated.")),(0,o.kt)("h2",{id:"authoring-a-module"},"Authoring a module"),(0,o.kt)("p",null,"The following walks the iteration of provisioning a new terraform module using workflows."),(0,o.kt)("admonition",{type:"important"},(0,o.kt)("p",{parentName:"admonition"},"This is not a terraform tutorial, so for our purposes we will be wrapping an existing module\n::::"),(0,o.kt)("h3",{parentName:"admonition",id:"create-the-module"},"Create the module"),(0,o.kt)("p",{parentName:"admonition"},"Assuming you have cloned the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/appvia/terranetes-workflows"},"repository")," to a ",(0,o.kt)("a",{parentName:"p",href:"https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-template-repository"},"Github template")," in your organization. Create a repository via the UI or the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/cli/cli"},"Github CLI")),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"gh repo create appvia/terraform-aws-rds --template appvia/terranetes-workflows\n")),(0,o.kt)("p",{parentName:"admonition"},"Ensure you've added an appropriate description, as the ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl_search"},"tnctl search")," command uses the terms found here to filter on."),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-shell"},'gh repo edit appvia/terraform-aws-rds --description "Terraform module used to provision a RDS database"\n')),(0,o.kt)("p",{parentName:"admonition"},"Alternatively you can replicate via the ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/cli/tnctl_workflow_create"},"tnctl workflow create")," command"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"tnctl workflow create terraform-aws-rds --template URL\n")),(0,o.kt)("h3",{parentName:"admonition",id:"adding-the-code"},"Adding the code"),(0,o.kt)("p",{parentName:"admonition"},"Your are now ready to start adding the terraform code. Open the branch and pull request"),(0,o.kt)("pre",{parentName:"admonition"},(0,o.kt)("code",{parentName:"pre",className:"language-shell"},"git checkout -b feat_adding_code\n# add code and commit\ngh pr create\n")),(0,o.kt)("p",{parentName:"admonition"},"Github actions will assess, review and update the pull requests with appropriate comments."),(0,o.kt)("h3",{parentName:"admonition",id:"publish-the-artifact"},"Publish the artifact"),(0,o.kt)("p",{parentName:"admonition"},"By default all tags ",(0,o.kt)("inlineCode",{parentName:"p"},"v[SEMVER]")," automatically create a Github release and changelog. Assuming the ","[tnctl search]","(/terranetes-controller/cli/tnctl_search] is using your Github organization as a source the artifact is now immediately searchable."),(0,o.kt)("p",{parentName:"admonition"},"For public repositories the Terraform registry offers a nice solution to central point to distribute, view and search for resources. At present you must perform this on a per repository basis. Go to ",(0,o.kt)("a",{parentName:"p",href:"https://registry.terraform.io/sign-in"},"https://registry.terraform.io/sign-in")),(0,o.kt)("p",{parentName:"admonition"},"For private repositories take a look at"),(0,o.kt)("ul",{parentName:"admonition"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/outsideris/citizen"},"https://github.com/outsideris/citizen")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/SwissArmyRonin/terraform-aws-registry"},"https://github.com/SwissArmyRonin/terraform-aws-registry"))),(0,o.kt)("h3",{parentName:"admonition",id:"find-the-artifact"},"Find the artifact"),(0,o.kt)("p",{parentName:"admonition"},"The release should now be available from your Github organization ",(0,o.kt)("inlineCode",{parentName:"p"},"tnctl search rds"),".")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bac124c8.28779b72.js b/assets/js/bac124c8.28779b72.js new file mode 100644 index 00000000..90d6f8cb --- /dev/null +++ b/assets/js/bac124c8.28779b72.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[863],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),h=c(r),d=a,m=h["".concat(l,".").concat(d)]||h[d]||u[d]||o;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const o={title:"tnctl search"},i=void 0,s={unversionedId:"cli/tnctl_search",id:"cli/tnctl_search",title:"tnctl search",description:"tnctl search",source:"@site/docs/terranetes-controller/cli/tnctl_search.md",sourceDirName:"cli",slug:"/cli/tnctl_search",permalink:"/terranetes-controller/cli/tnctl_search",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_search.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl search"},sidebar:"tutorialSidebar",previous:{title:"tnctl retry configuration",permalink:"/terranetes-controller/cli/tnctl_retry_configuration"},next:{title:"tnctl state",permalink:"/terranetes-controller/cli/tnctl_state"}},l={},c=[{value:"tnctl search",id:"tnctl-search",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:c};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"tnctl-search"},"tnctl search"),(0,a.kt)("p",null,"Searches for cloud resources to consume"),(0,a.kt)("h3",{id:"synopsis"},"Synopsis"),(0,a.kt)("p",null,"Searches the sources, determined by the configuration file (tnctl config view)\nfor modules which match the required terms. Once selected the command will\ngenerate the Configuration CRD required to use the module as a source."),(0,a.kt)("p",null,"At present we support using the Terraform registry and GitHub user / organizations\nas a source for terraform modules."),(0,a.kt)("p",null,"Note, you can lookup the available providers available to you by selecting the\n'check available' option. This option will use the currently configured kubeconfig\nto list providers available in that cluster."),(0,a.kt)("p",null,"Add the terraform registry\n$ tnctl config sources add ",(0,a.kt)("a",{parentName:"p",href:"https://registry.terraform.io"},"https://registry.terraform.io")),(0,a.kt)("p",null,"Scope the terraform registry searches to a specific namespace\n$ tnctl config sources add ",(0,a.kt)("a",{parentName:"p",href:"https://registry.terraform.io/namespaces/appvia"},"https://registry.terraform.io/namespaces/appvia")),(0,a.kt)("p",null,"Adding a GitHub user or organization\n$ tnctl config sources add ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/appvia"},"https://github.com/appvia")),(0,a.kt)("h1",{id:"search-for-all-modules-which-have-the-term-database-using-an-aws-provider"},"Search for all modules which have the term database using an 'aws' provider"),(0,a.kt)("p",null,"$ tnctl search database -p aws"),(0,a.kt)("p",null,"Write the generated output to a file\n$ tnctl search -o filename"),(0,a.kt)("p",null,"For private repositories on Github you will need to export your token\nto the environment variable GITHUB_TOKEN.\n$ export GITHUB_TOKEN=TOKEN"),(0,a.kt)("p",null,"This command assumes credentials have already been setup. For the Terraform\nregistry, nothing is required, but for private repositories on Github your\nenvironment must already be setup to git clone the repository."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"tnctl search [OPTIONS] [flags]\n")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"}," --enable-defaults Indicates any defaults with values from the terraform module are included\n -h, --help help for search\n --name string Is the name of the resource to create\n -o, --output string Optional filename to write the generated configuration (defaults: stdout)\n -p, --provider string Limit the search only to modules with the given provider\n -s, --source string Limit the scope of the search to a specific source\n --source-namespace string The namespace within the source registry to scope the search\n")),(0,a.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,a.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bac124c8.ed59de9b.js b/assets/js/bac124c8.ed59de9b.js deleted file mode 100644 index 29ee137c..00000000 --- a/assets/js/bac124c8.ed59de9b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[863],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),h=c(r),d=a,m=h["".concat(l,".").concat(d)]||h[d]||u[d]||o;return r?n.createElement(m,i(i({ref:t},p),{},{components:r})):n.createElement(m,i({ref:t},p))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const o={title:"tnctl search"},i=void 0,s={unversionedId:"cli/tnctl_search",id:"cli/tnctl_search",title:"tnctl search",description:"tnctl search",source:"@site/docs/terranetes-controller/cli/tnctl_search.md",sourceDirName:"cli",slug:"/cli/tnctl_search",permalink:"/terranetes-controller/cli/tnctl_search",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_search.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl search"},sidebar:"tutorialSidebar",previous:{title:"tnctl retry configuration",permalink:"/terranetes-controller/cli/tnctl_retry_configuration"},next:{title:"tnctl state",permalink:"/terranetes-controller/cli/tnctl_state"}},l={},c=[{value:"tnctl search",id:"tnctl-search",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:c};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h2",{id:"tnctl-search"},"tnctl search"),(0,a.kt)("p",null,"Searches for cloud resources to consume"),(0,a.kt)("h3",{id:"synopsis"},"Synopsis"),(0,a.kt)("p",null,"Searches the sources, determined by the configuration file (tnctl config view)\nfor modules which match the required terms. Once selected the command will\ngenerate the Configuration CRD required to use the module as a source."),(0,a.kt)("p",null,"At present we support using the Terraform registry and GitHub user / organizations\nas a source for terraform modules."),(0,a.kt)("p",null,"Note, you can lookup the available providers available to you by selecting the\n'check available' option. This option will use the currently configured kubeconfig\nto list providers available in that cluster."),(0,a.kt)("p",null,"Add the terraform registry\n$ tnctl config sources add ",(0,a.kt)("a",{parentName:"p",href:"https://registry.terraform.io"},"https://registry.terraform.io")),(0,a.kt)("p",null,"Scope the terraform registry searches to a specific namespace\n$ tnctl config sources add ",(0,a.kt)("a",{parentName:"p",href:"https://registry.terraform.io/namespaces/appvia"},"https://registry.terraform.io/namespaces/appvia")),(0,a.kt)("p",null,"Adding a GitHub user or organization\n$ tnctl config sources add ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/appvia"},"https://github.com/appvia")),(0,a.kt)("h1",{id:"search-for-all-modules-which-have-the-term-database-using-an-aws-provider"},"Search for all modules which have the term database using an 'aws' provider"),(0,a.kt)("p",null,"$ tnctl search database -p aws"),(0,a.kt)("p",null,"Write the generated output to a file\n$ tnctl search -o filename"),(0,a.kt)("p",null,"For private repositories on Github you will need to export your token\nto the environment variable GITHUB_TOKEN.\n$ export GITHUB_TOKEN=TOKEN"),(0,a.kt)("p",null,"This command assumes credentials have already been setup. For the Terraform\nregistry, nothing is required, but for private repositories on Github your\nenvironment must already be setup to git clone the repository."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"tnctl search [OPTIONS] [flags]\n")),(0,a.kt)("h3",{id:"options"},"Options"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"}," --enable-defaults Indicates any defaults with values from the terraform module are included\n -h, --help help for search\n --name string Is the name of the resource to create\n -o, --output string Optional filename to write the generated configuration (defaults: stdout)\n -p, --provider string Limit the search only to modules with the given provider\n -s, --source string Limit the scope of the search to a specific source\n --source-namespace string The namespace within the source registry to scope the search\n")),(0,a.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,a.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bb141dfd.b549b710.js b/assets/js/bb141dfd.de4e8334.js similarity index 56% rename from assets/js/bb141dfd.b549b710.js rename to assets/js/bb141dfd.de4e8334.js index 9dc23477..db9d9cf0 100644 --- a/assets/js/bb141dfd.b549b710.js +++ b/assets/js/bb141dfd.de4e8334.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8654],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(r),m=o,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:100},i="Additional Secrets",s={unversionedId:"admin/secrets",id:"admin/secrets",title:"Additional Secrets",description:"The controller supports the ability to inject additional secrets into the terraform execution. A common use case to provide additional credentials, api tokens or custom configuration into the jobs.",source:"@site/docs/terranetes-controller/admin/secrets.md",sourceDirName:"admin",slug:"/admin/secrets",permalink:"/terranetes-controller/admin/secrets",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/secrets.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:100,frontMatter:{sidebar_position:100},sidebar:"tutorialSidebar",previous:{title:"Customize Job Template",permalink:"/terranetes-controller/admin/template"},next:{title:"Developer Docs",permalink:"/terranetes-controller/category/developer-docs"}},c={},l=[{value:"Adding a custom secret",id:"adding-a-custom-secret",level:2}],p={toc:l};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"additional-secrets"},"Additional Secrets"),(0,o.kt)("p",null,"The controller supports the ability to inject additional secrets into the terraform execution. A common use case to provide additional credentials, api tokens or custom configuration into the jobs."),(0,o.kt)("p",null,"The platform team must create the Kubernetes secrets ahead of time, which are referenced on the command line of the controller."),(0,o.kt)("admonition",{type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"These secrets are added to all jobs so be prudent when using this feature. This intention is to add the feature on to ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Providers")," CRD to make it fine grained.")),(0,o.kt)("h2",{id:"adding-a-custom-secret"},"Adding a custom secret"),(0,o.kt)("p",null,"Update your Helm chart values to include the following. The secrets must exist in the controller namespace and contain environment variable i.e. uppercases key/values, as the secrets are sourced into the jobs via the ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/configuration/secret/#use-case-as-container-environment-variables"},"spec.envFrom")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"controller:\n # A collection of secret names which exist the controller namespace\n executorSecrets:\n - NAME\n")),(0,o.kt)("p",null,"Alternatively if you are not using the Helm chart, update the deployment yaml to include the ",(0,o.kt)("inlineCode",{parentName:"p"},"--executor-secret")," flags."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8654],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=l(r),m=o,f=u["".concat(c,".").concat(m)]||u[m]||d[m]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=u;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s.mdxType="string"==typeof e?e:o,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:100},i="Additional Secrets",s={unversionedId:"admin/secrets",id:"admin/secrets",title:"Additional Secrets",description:"The controller supports the ability to inject additional secrets into the terraform execution. A common use case to provide additional credentials, api tokens or custom configuration into the jobs.",source:"@site/docs/terranetes-controller/admin/secrets.md",sourceDirName:"admin",slug:"/admin/secrets",permalink:"/terranetes-controller/admin/secrets",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/secrets.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:100,frontMatter:{sidebar_position:100},sidebar:"tutorialSidebar",previous:{title:"Customize Job Template",permalink:"/terranetes-controller/admin/template"},next:{title:"Developer Docs",permalink:"/terranetes-controller/category/developer-docs"}},c={},l=[{value:"Adding a custom secret",id:"adding-a-custom-secret",level:2}],p={toc:l};function d(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"additional-secrets"},"Additional Secrets"),(0,o.kt)("p",null,"The controller supports the ability to inject additional secrets into the terraform execution. A common use case to provide additional credentials, api tokens or custom configuration into the jobs."),(0,o.kt)("p",null,"The platform team must create the Kubernetes secrets ahead of time, which are referenced on the command line of the controller."),(0,o.kt)("admonition",{type:"warning"},(0,o.kt)("p",{parentName:"admonition"},"These secrets are added to all jobs so be prudent when using this feature. This intention is to add the feature on to ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/providers.terraform.appvia.io"},"Providers")," CRD to make it fine grained.")),(0,o.kt)("h2",{id:"adding-a-custom-secret"},"Adding a custom secret"),(0,o.kt)("p",null,"Update your Helm chart values to include the following. The secrets must exist in the controller namespace and contain environment variable i.e. uppercases key/values, as the secrets are sourced into the jobs via the ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/configuration/secret/#use-case-as-container-environment-variables"},"spec.envFrom")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-yaml"},"controller:\n # A collection of secret names which exist the controller namespace\n executorSecrets:\n - NAME\n")),(0,o.kt)("p",null,"Alternatively if you are not using the Helm chart, update the deployment yaml to include the ",(0,o.kt)("inlineCode",{parentName:"p"},"--executor-secret")," flags."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c09a9939.2f4815b4.js b/assets/js/c09a9939.2f4815b4.js new file mode 100644 index 00000000..17909aae --- /dev/null +++ b/assets/js/c09a9939.2f4815b4.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[3833],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),u=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=u(e.components);return n.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),d=u(r),f=o,m=d["".concat(c,".").concat(f)]||d[f]||p[f]||a;return r?n.createElement(m,l(l({ref:t},s),{},{components:r})):n.createElement(m,l({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=d;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl build"},l=void 0,i={unversionedId:"cli/tnctl_build",id:"cli/tnctl_build",title:"tnctl build",description:"tnctl build",source:"@site/docs/terranetes-controller/cli/tnctl_build.md",sourceDirName:"cli",slug:"/cli/tnctl_build",permalink:"/terranetes-controller/cli/tnctl_build",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_build.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl build"},sidebar:"tutorialSidebar",previous:{title:"tnctl approve configuration",permalink:"/terranetes-controller/cli/tnctl_approve_configuration"},next:{title:"tnctl completion",permalink:"/terranetes-controller/cli/tnctl_completion"}},c={},u=[{value:"tnctl build",id:"tnctl-build",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:u};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-build"},"tnctl build"),(0,o.kt)("p",null,"Can be used to package up the terraform module for consumption"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Build is used to automatically generate a compatible terraform\nconfiguration from a given terraform module. The source for the\nmodule can be a local directory, a git repository, s3 bucket or\nso forth. As long as you have the credentials and required CLI\nbinaries installed."),(0,o.kt)("p",null,"Generate a terraform configuration a Github repository\n$ tnctl build github.com/terraform-aws-modules/terraform-aws-vpc"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl build SOURCE [OPTIONS] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --enable-auto-approval Automatically approve the configuration\n --enable-defaults Indicates any defaults with values from the terraform module are included (default true)\n --enable-drift-detection Detect drift in the configuration (default true)\n --enable-sensitive Indicates any sensitive variables from the module should be placed into secrets (default true)\n -h, --help help for build\n --name string The name of the configuration resource (default "test")\n --namespace string The namespace for the configuration (default "default")\n --provider string Name of the credentials provider to use\n --secret string Name of the secret any outputs from the resource are kept\n --source string The path to the terraform module (default ".")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c09a9939.2f8187b1.js b/assets/js/c09a9939.2f8187b1.js deleted file mode 100644 index 40fef766..00000000 --- a/assets/js/c09a9939.2f8187b1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[3833],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),u=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},s=function(e){var t=u(e.components);return n.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),d=u(r),f=o,m=d["".concat(c,".").concat(f)]||d[f]||p[f]||a;return r?n.createElement(m,l(l({ref:t},s),{},{components:r})):n.createElement(m,l({ref:t},s))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,l=new Array(a);l[0]=d;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl build"},l=void 0,i={unversionedId:"cli/tnctl_build",id:"cli/tnctl_build",title:"tnctl build",description:"tnctl build",source:"@site/docs/terranetes-controller/cli/tnctl_build.md",sourceDirName:"cli",slug:"/cli/tnctl_build",permalink:"/terranetes-controller/cli/tnctl_build",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_build.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl build"},sidebar:"tutorialSidebar",previous:{title:"tnctl approve configuration",permalink:"/terranetes-controller/cli/tnctl_approve_configuration"},next:{title:"tnctl completion",permalink:"/terranetes-controller/cli/tnctl_completion"}},c={},u=[{value:"tnctl build",id:"tnctl-build",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:u};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-build"},"tnctl build"),(0,o.kt)("p",null,"Can be used to package up the terraform module for consumption"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Build is used to automatically generate a compatible terraform\nconfiguration from a given terraform module. The source for the\nmodule can be a local directory, a git repository, s3 bucket or\nso forth. As long as you have the credentials and required CLI\nbinaries installed."),(0,o.kt)("p",null,"Generate a terraform configuration a Github repository\n$ tnctl build github.com/terraform-aws-modules/terraform-aws-vpc"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl build SOURCE [OPTIONS] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --enable-auto-approval Automatically approve the configuration\n --enable-defaults Indicates any defaults with values from the terraform module are included (default true)\n --enable-drift-detection Detect drift in the configuration (default true)\n --enable-sensitive Indicates any sensitive variables from the module should be placed into secrets (default true)\n -h, --help help for build\n --name string The name of the configuration resource (default "test")\n --namespace string The namespace for the configuration (default "default")\n --provider string Name of the credentials provider to use\n --secret string Name of the secret any outputs from the resource are kept\n --source string The path to the terraform module (default ".")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c0c32ec9.fdc5da0f.js b/assets/js/c0c32ec9.c1c94162.js similarity index 52% rename from assets/js/c0c32ec9.fdc5da0f.js rename to assets/js/c0c32ec9.c1c94162.js index 8d5ed195..c1c17258 100644 --- a/assets/js/c0c32ec9.fdc5da0f.js +++ b/assets/js/c0c32ec9.c1c94162.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8249],{3905:(t,e,r)=>{r.d(e,{Zo:()=>u,kt:()=>d});var n=r(7294);function o(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t){for(var e=1;e=0||(o[r]=t[r]);return o}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}var c=n.createContext({}),s=function(t){var e=n.useContext(c),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},u=function(t){var e=s(t.components);return n.createElement(c.Provider,{value:e},t.children)},p={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},f=n.forwardRef((function(t,e){var r=t.components,o=t.mdxType,a=t.originalType,c=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),f=s(r),d=o,y=f["".concat(c,".").concat(d)]||f[d]||p[d]||a;return r?n.createElement(y,i(i({ref:e},u),{},{components:r})):n.createElement(y,i({ref:e},u))}));function d(t,e){var r=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var a=r.length,i=new Array(a);i[0]=f;var l={};for(var c in e)hasOwnProperty.call(e,c)&&(l[c]=e[c]);l.originalType=t,l.mdxType="string"==typeof t?t:o,i[1]=l;for(var s=2;s{r.r(e),r.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl retry configuration"},i=void 0,l={unversionedId:"cli/tnctl_retry_configuration",id:"cli/tnctl_retry_configuration",title:"tnctl retry configuration",description:"tnctl retry configuration",source:"@site/docs/terranetes-controller/cli/tnctl_retry_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_retry_configuration",permalink:"/terranetes-controller/cli/tnctl_retry_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_retry_configuration.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl retry configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl retry cloudresource",permalink:"/terranetes-controller/cli/tnctl_retry_cloudresource"},next:{title:"tnctl search",permalink:"/terranetes-controller/cli/tnctl_search"}},c={},s=[{value:"tnctl retry configuration",id:"tnctl-retry-configuration",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(t){let{components:e,...r}=t;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-retry-configuration"},"tnctl retry configuration"),(0,o.kt)("p",null,"Attempts to restart a configuration"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"By default a Configuration is only run on a change to the specification. Its\nuseful however to be able to restart the process without changing the\nspec - i.e. the credentials were incorrect and out-of-band error occurred or\nso forth."),(0,o.kt)("p",null,"This command will restart the process by tagging the configuration with a\nannotation. By default the restarted process will be watched for logs."),(0,o.kt)("p",null,"Restart the Configuration:\n$ tnctl retry NAME"),(0,o.kt)("p",null,"Restart the Configuration but do not watch the logs:\n$ tnctl retry NAME --watch=false"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl retry configuration [OPTIONS] NAME [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -h, --help help for configuration\n -n, --namespace string The namespace the resource resides (default "default")\n -w, --watch Watch the logs after restarting the resource (default true)\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_retry"},"tnctl retry"),"\t - Attempts to trigger the resource to retry")))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8249],{3905:(t,e,r)=>{r.d(e,{Zo:()=>u,kt:()=>d});var n=r(7294);function o(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t){for(var e=1;e=0||(o[r]=t[r]);return o}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}var c=n.createContext({}),s=function(t){var e=n.useContext(c),r=e;return t&&(r="function"==typeof t?t(e):i(i({},e),t)),r},u=function(t){var e=s(t.components);return n.createElement(c.Provider,{value:e},t.children)},p={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},f=n.forwardRef((function(t,e){var r=t.components,o=t.mdxType,a=t.originalType,c=t.parentName,u=l(t,["components","mdxType","originalType","parentName"]),f=s(r),d=o,y=f["".concat(c,".").concat(d)]||f[d]||p[d]||a;return r?n.createElement(y,i(i({ref:e},u),{},{components:r})):n.createElement(y,i({ref:e},u))}));function d(t,e){var r=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var a=r.length,i=new Array(a);i[0]=f;var l={};for(var c in e)hasOwnProperty.call(e,c)&&(l[c]=e[c]);l.originalType=t,l.mdxType="string"==typeof t?t:o,i[1]=l;for(var s=2;s{r.r(e),r.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl retry configuration"},i=void 0,l={unversionedId:"cli/tnctl_retry_configuration",id:"cli/tnctl_retry_configuration",title:"tnctl retry configuration",description:"tnctl retry configuration",source:"@site/docs/terranetes-controller/cli/tnctl_retry_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_retry_configuration",permalink:"/terranetes-controller/cli/tnctl_retry_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_retry_configuration.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl retry configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl retry cloudresource",permalink:"/terranetes-controller/cli/tnctl_retry_cloudresource"},next:{title:"tnctl search",permalink:"/terranetes-controller/cli/tnctl_search"}},c={},s=[{value:"tnctl retry configuration",id:"tnctl-retry-configuration",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(t){let{components:e,...r}=t;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-retry-configuration"},"tnctl retry configuration"),(0,o.kt)("p",null,"Attempts to restart a configuration"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"By default a Configuration is only run on a change to the specification. Its\nuseful however to be able to restart the process without changing the\nspec - i.e. the credentials were incorrect and out-of-band error occurred or\nso forth."),(0,o.kt)("p",null,"This command will restart the process by tagging the configuration with a\nannotation. By default the restarted process will be watched for logs."),(0,o.kt)("p",null,"Restart the Configuration:\n$ tnctl retry NAME"),(0,o.kt)("p",null,"Restart the Configuration but do not watch the logs:\n$ tnctl retry NAME --watch=false"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl retry configuration [OPTIONS] NAME [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -h, --help help for configuration\n -n, --namespace string The namespace the resource resides (default "default")\n -w, --watch Watch the logs after restarting the resource (default true)\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_retry"},"tnctl retry"),"\t - Attempts to trigger the resource to retry")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c4ac0853.d8cebf18.js b/assets/js/c4ac0853.048aa8a6.js similarity index 76% rename from assets/js/c4ac0853.d8cebf18.js rename to assets/js/c4ac0853.048aa8a6.js index 7ca3a57e..9f2c9e69 100644 --- a/assets/js/c4ac0853.d8cebf18.js +++ b/assets/js/c4ac0853.048aa8a6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[4155],{3905:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>d});var n=t(7294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function c(e){for(var r=1;r=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=n.createContext({}),s=function(e){var r=n.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):c(c({},r),e)),t},u=function(e){var r=s(e.components);return n.createElement(l.Provider,{value:r},e.children)},p={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},f=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),f=s(t),d=o,m=f["".concat(l,".").concat(d)]||f[d]||p[d]||a;return t?n.createElement(m,c(c({ref:r},u),{},{components:t})):n.createElement(m,c({ref:r},u))}));function d(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=t.length,c=new Array(a);c[0]=f;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var s=2;s{t.r(r),t.d(r,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var n=t(7462),o=(t(7294),t(3905)),a=t(941),c=t(4996);const i={sidebar_position:3},l="Architecture",s={unversionedId:"architecture",id:"architecture",title:"Architecture",description:"The following diagram demos the architecture for the terraform controller.",source:"@site/docs/terranetes-controller/architecture.md",sourceDirName:".",slug:"/architecture",permalink:"/terranetes-controller/architecture",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/architecture.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Releases",permalink:"/terranetes-controller/releases"},next:{title:"Workflows",permalink:"/terranetes-controller/category/workflows"}},u={},p=[],f={toc:p};function d(e){let{components:r,...t}=e;return(0,o.kt)("wrapper",(0,n.Z)({},f,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"architecture"},"Architecture"),(0,o.kt)("p",null,"The following diagram demos the architecture for the terraform controller."),(0,o.kt)(a.Z,{alt:"Docusaurus themed image",sources:{light:(0,c.Z)("/img/terranetes-controller-arch.png"),dark:(0,c.Z)("/img/terranetes-controller-arch-dark.png")},mdxType:"ThemedImage"}))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[4155],{3905:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>d});var n=t(7294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function c(e){for(var r=1;r=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var l=n.createContext({}),s=function(e){var r=n.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):c(c({},r),e)),t},u=function(e){var r=s(e.components);return n.createElement(l.Provider,{value:r},e.children)},p={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},f=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),f=s(t),d=o,m=f["".concat(l,".").concat(d)]||f[d]||p[d]||a;return t?n.createElement(m,c(c({ref:r},u),{},{components:t})):n.createElement(m,c({ref:r},u))}));function d(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=t.length,c=new Array(a);c[0]=f;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var s=2;s{t.r(r),t.d(r,{assets:()=>u,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var n=t(7462),o=(t(7294),t(3905)),a=t(941),c=t(4996);const i={sidebar_position:3},l="Architecture",s={unversionedId:"architecture",id:"architecture",title:"Architecture",description:"The following diagram demos the architecture for the terraform controller.",source:"@site/docs/terranetes-controller/architecture.md",sourceDirName:".",slug:"/architecture",permalink:"/terranetes-controller/architecture",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/architecture.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Releases",permalink:"/terranetes-controller/releases"},next:{title:"Workflows",permalink:"/terranetes-controller/category/workflows"}},u={},p=[],f={toc:p};function d(e){let{components:r,...t}=e;return(0,o.kt)("wrapper",(0,n.Z)({},f,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"architecture"},"Architecture"),(0,o.kt)("p",null,"The following diagram demos the architecture for the terraform controller."),(0,o.kt)(a.Z,{alt:"Docusaurus themed image",sources:{light:(0,c.Z)("/img/terranetes-controller-arch.png"),dark:(0,c.Z)("/img/terranetes-controller-arch-dark.png")},mdxType:"ThemedImage"}))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c6861c30.be386bd1.js b/assets/js/c6861c30.3b30c8d5.js similarity index 59% rename from assets/js/c6861c30.be386bd1.js rename to assets/js/c6861c30.3b30c8d5.js index d72fad8f..7ab5a21f 100644 --- a/assets/js/c6861c30.be386bd1.js +++ b/assets/js/c6861c30.3b30c8d5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[7325],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(l[r]=e[r]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r])}return l}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,l=e.mdxType,o=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=s(r),f=l,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||o;return r?n.createElement(m,a(a({ref:t},p),{},{components:r})):n.createElement(m,a({ref:t},p))}));function f(e,t){var r=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=r.length,a=new Array(o);a[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:l,a[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var n=r(7462),l=(r(7294),r(3905));const o={title:"tnctl delete"},a=void 0,i={unversionedId:"cli/tnctl_delete",id:"cli/tnctl_delete",title:"tnctl delete",description:"tnctl delete",source:"@site/docs/terranetes-controller/cli/tnctl_delete.md",sourceDirName:"cli",slug:"/cli/tnctl_delete",permalink:"/terranetes-controller/cli/tnctl_delete",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_delete.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl delete"},sidebar:"tutorialSidebar",previous:{title:"tnctl create workflow",permalink:"/terranetes-controller/cli/tnctl_create_workflow"},next:{title:"tnctl describe",permalink:"/terranetes-controller/cli/tnctl_describe"}},c={},s=[{value:"tnctl delete",id:"tnctl-delete",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function d(e){let{components:t,...r}=e;return(0,l.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-delete"},"tnctl delete"),(0,l.kt)("p",null,"Used to delete resource by file or resource name"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl delete [OPTIONS] [-f PATH|NAME...] [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"}," -f, --file strings Path to file to apply\n --force If true, immediately remove resources from API and bypass graceful deletion\n -h, --help help for delete\n -n, --namespace string Namespace to apply to\n --wait If true, wait for resources to be gone before returning. This waits for finalizers. (default true)\n")),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[7325],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function l(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(l[r]=e[r]);return l}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(l[r]=e[r])}return l}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,l=e.mdxType,o=e.originalType,c=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),u=s(r),f=l,m=u["".concat(c,".").concat(f)]||u[f]||d[f]||o;return r?n.createElement(m,a(a({ref:t},p),{},{components:r})):n.createElement(m,a({ref:t},p))}));function f(e,t){var r=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var o=r.length,a=new Array(o);a[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:l,a[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var n=r(7462),l=(r(7294),r(3905));const o={title:"tnctl delete"},a=void 0,i={unversionedId:"cli/tnctl_delete",id:"cli/tnctl_delete",title:"tnctl delete",description:"tnctl delete",source:"@site/docs/terranetes-controller/cli/tnctl_delete.md",sourceDirName:"cli",slug:"/cli/tnctl_delete",permalink:"/terranetes-controller/cli/tnctl_delete",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_delete.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl delete"},sidebar:"tutorialSidebar",previous:{title:"tnctl create workflow",permalink:"/terranetes-controller/cli/tnctl_create_workflow"},next:{title:"tnctl describe",permalink:"/terranetes-controller/cli/tnctl_describe"}},c={},s=[{value:"tnctl delete",id:"tnctl-delete",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function d(e){let{components:t,...r}=e;return(0,l.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h2",{id:"tnctl-delete"},"tnctl delete"),(0,l.kt)("p",null,"Used to delete resource by file or resource name"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"tnctl delete [OPTIONS] [-f PATH|NAME...] [flags]\n")),(0,l.kt)("h3",{id:"options"},"Options"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"}," -f, --file strings Path to file to apply\n --force If true, immediately remove resources from API and bypass graceful deletion\n -h, --help help for delete\n -n, --namespace string Namespace to apply to\n --wait If true, wait for resources to be gone before returning. This waits for finalizers. (default true)\n")),(0,l.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,l.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c789fcd4.6e1d6c0d.js b/assets/js/c789fcd4.6e1d6c0d.js deleted file mode 100644 index a0121d8d..00000000 --- a/assets/js/c789fcd4.6e1d6c0d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[4291],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,c=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),u=s(r),d=i,v=u["".concat(c,".").concat(d)]||u[d]||f[d]||o;return r?n.createElement(v,l(l({ref:t},p),{},{components:r})):n.createElement(v,l({ref:t},p))}));function d(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,l=new Array(o);l[0]=u;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a.mdxType="string"==typeof e?e:i,l[1]=a;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>f,frontMatter:()=>o,metadata:()=>a,toc:()=>s});var n=r(7462),i=(r(7294),r(3905));const o={title:"tnctl verify"},l=void 0,a={unversionedId:"cli/tnctl_verify",id:"cli/tnctl_verify",title:"tnctl verify",description:"tnctl verify",source:"@site/docs/terranetes-controller/cli/tnctl_verify.md",sourceDirName:"cli",slug:"/cli/tnctl_verify",permalink:"/terranetes-controller/cli/tnctl_verify",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_verify.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl verify"},sidebar:"tutorialSidebar",previous:{title:"tnctl state list",permalink:"/terranetes-controller/cli/tnctl_state_list"},next:{title:"tnctl verify revision",permalink:"/terranetes-controller/cli/tnctl_verify_revision"}},c={},s=[{value:"tnctl verify",id:"tnctl-verify",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function f(e){let{components:t,...r}=e;return(0,i.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"tnctl-verify"},"tnctl verify"),(0,i.kt)("p",null,"Used to verify and validate resources"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"tnctl verify COMMAND [flags]\n")),(0,i.kt)("h3",{id:"options"},"Options"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"}," -h, --help help for verify\n")),(0,i.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,i.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"../tnctl_verify_revision"},"tnctl verify revision"),"\t - Performs a series of checks against a Revision to ensure it is ready for use")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c789fcd4.b2453596.js b/assets/js/c789fcd4.b2453596.js new file mode 100644 index 00000000..3a592608 --- /dev/null +++ b/assets/js/c789fcd4.b2453596.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[4291],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},f={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,l=e.originalType,c=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),u=s(r),d=i,v=u["".concat(c,".").concat(d)]||u[d]||f[d]||l;return r?n.createElement(v,o(o({ref:t},p),{},{components:r})):n.createElement(v,o({ref:t},p))}));function d(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=r.length,o=new Array(l);o[0]=u;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a.mdxType="string"==typeof e?e:i,o[1]=a;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>o,default:()=>f,frontMatter:()=>l,metadata:()=>a,toc:()=>s});var n=r(7462),i=(r(7294),r(3905));const l={title:"tnctl verify"},o=void 0,a={unversionedId:"cli/tnctl_verify",id:"cli/tnctl_verify",title:"tnctl verify",description:"tnctl verify",source:"@site/docs/terranetes-controller/cli/tnctl_verify.md",sourceDirName:"cli",slug:"/cli/tnctl_verify",permalink:"/terranetes-controller/cli/tnctl_verify",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_verify.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl verify"},sidebar:"tutorialSidebar",previous:{title:"tnctl state list",permalink:"/terranetes-controller/cli/tnctl_state_list"},next:{title:"tnctl verify revision",permalink:"/terranetes-controller/cli/tnctl_verify_revision"}},c={},s=[{value:"tnctl verify",id:"tnctl-verify",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function f(e){let{components:t,...r}=e;return(0,i.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h2",{id:"tnctl-verify"},"tnctl verify"),(0,i.kt)("p",null,"Used to verify and validate resources"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"tnctl verify COMMAND [flags]\n")),(0,i.kt)("h3",{id:"options"},"Options"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"}," -h, --help help for verify\n")),(0,i.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,i.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"../tnctl_verify_revision"},"tnctl verify revision"),"\t - Performs a series of checks against a Revision to ensure it is ready for use")))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c9df958a.9724b9db.js b/assets/js/c9df958a.9724b9db.js new file mode 100644 index 00000000..09481b58 --- /dev/null +++ b/assets/js/c9df958a.9724b9db.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5220],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=r.createContext({}),p=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=p(e.components);return r.createElement(a.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,l=e.originalType,a=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),m=p(n),d=o,f=m["".concat(a,".").concat(d)]||m[d]||u[d]||l;return n?r.createElement(f,i(i({ref:t},s),{},{components:n})):r.createElement(f,i({ref:t},s))}));function d(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=n.length,i=new Array(l);i[0]=m;var c={};for(var a in t)hasOwnProperty.call(t,a)&&(c[a]=t[a]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var p=2;p{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var r=n(7462),o=(n(7294),n(3905));const l={title:"tnctl completion zsh"},i=void 0,c={unversionedId:"cli/tnctl_completion_zsh",id:"cli/tnctl_completion_zsh",title:"tnctl completion zsh",description:"tnctl completion zsh",source:"@site/docs/terranetes-controller/cli/tnctl_completion_zsh.md",sourceDirName:"cli",slug:"/cli/tnctl_completion_zsh",permalink:"/terranetes-controller/cli/tnctl_completion_zsh",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_completion_zsh.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl completion zsh"},sidebar:"tutorialSidebar",previous:{title:"tnctl completion powershell",permalink:"/terranetes-controller/cli/tnctl_completion_powershell"},next:{title:"tnctl config",permalink:"/terranetes-controller/cli/tnctl_config"}},a={},p=[{value:"tnctl completion zsh",id:"tnctl-completion-zsh",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Linux:",id:"linux",level:4},{value:"macOS:",id:"macos",level:4},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function u(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-completion-zsh"},"tnctl completion zsh"),(0,o.kt)("p",null,"Generate the autocompletion script for zsh"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Generate the autocompletion script for the zsh shell."),(0,o.kt)("p",null,"If shell completion is not already enabled in your environment you will need\nto enable it. You can execute the following once:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'echo "autoload -U compinit; compinit" >> ~/.zshrc\n')),(0,o.kt)("p",null,"To load completions in your current shell session:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"source <(tnctl completion zsh)\n")),(0,o.kt)("p",null,"To load completions for every new session, execute once:"),(0,o.kt)("h4",{id:"linux"},"Linux:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'tnctl completion zsh > "${fpath[1]}/_tnctl"\n')),(0,o.kt)("h4",{id:"macos"},"macOS:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion zsh > $(brew --prefix)/share/zsh/site-functions/_tnctl\n")),(0,o.kt)("p",null,"You will need to start a new shell for this setup to take effect."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl completion zsh [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for zsh\n --no-descriptions disable completion descriptions\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_completion"},"tnctl completion"),"\t - Generate the autocompletion script for the specified shell")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c9df958a.d17c1ce0.js b/assets/js/c9df958a.d17c1ce0.js deleted file mode 100644 index 8779cffe..00000000 --- a/assets/js/c9df958a.d17c1ce0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[5220],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var a=o.createContext({}),p=function(e){var t=o.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=p(e.components);return o.createElement(a.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,a=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),m=p(n),d=r,f=m["".concat(a,".").concat(d)]||m[d]||u[d]||l;return n?o.createElement(f,i(i({ref:t},s),{},{components:n})):o.createElement(f,i({ref:t},s))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,i=new Array(l);i[0]=m;var c={};for(var a in t)hasOwnProperty.call(t,a)&&(c[a]=t[a]);c.originalType=e,c.mdxType="string"==typeof e?e:r,i[1]=c;for(var p=2;p{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>c,toc:()=>p});var o=n(7462),r=(n(7294),n(3905));const l={title:"tnctl completion zsh"},i=void 0,c={unversionedId:"cli/tnctl_completion_zsh",id:"cli/tnctl_completion_zsh",title:"tnctl completion zsh",description:"tnctl completion zsh",source:"@site/docs/terranetes-controller/cli/tnctl_completion_zsh.md",sourceDirName:"cli",slug:"/cli/tnctl_completion_zsh",permalink:"/terranetes-controller/cli/tnctl_completion_zsh",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_completion_zsh.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl completion zsh"},sidebar:"tutorialSidebar",previous:{title:"tnctl completion powershell",permalink:"/terranetes-controller/cli/tnctl_completion_powershell"},next:{title:"tnctl config",permalink:"/terranetes-controller/cli/tnctl_config"}},a={},p=[{value:"tnctl completion zsh",id:"tnctl-completion-zsh",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Linux:",id:"linux",level:4},{value:"macOS:",id:"macos",level:4},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function u(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"tnctl-completion-zsh"},"tnctl completion zsh"),(0,r.kt)("p",null,"Generate the autocompletion script for zsh"),(0,r.kt)("h3",{id:"synopsis"},"Synopsis"),(0,r.kt)("p",null,"Generate the autocompletion script for the zsh shell."),(0,r.kt)("p",null,"If shell completion is not already enabled in your environment you will need\nto enable it. You can execute the following once:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'echo "autoload -U compinit; compinit" >> ~/.zshrc\n')),(0,r.kt)("p",null,"To load completions in your current shell session:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"source <(tnctl completion zsh)\n")),(0,r.kt)("p",null,"To load completions for every new session, execute once:"),(0,r.kt)("h4",{id:"linux"},"Linux:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},'tnctl completion zsh > "${fpath[1]}/_tnctl"\n')),(0,r.kt)("h4",{id:"macos"},"macOS:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"tnctl completion zsh > $(brew --prefix)/share/zsh/site-functions/_tnctl\n")),(0,r.kt)("p",null,"You will need to start a new shell for this setup to take effect."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"tnctl completion zsh [flags]\n")),(0,r.kt)("h3",{id:"options"},"Options"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"}," -h, --help help for zsh\n --no-descriptions disable completion descriptions\n")),(0,r.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,r.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"../tnctl_completion"},"tnctl completion"),"\t - Generate the autocompletion script for the specified shell")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cbf2140f.d0aed567.js b/assets/js/cbf2140f.de888c59.js similarity index 60% rename from assets/js/cbf2140f.d0aed567.js rename to assets/js/cbf2140f.de888c59.js index ca63f4e0..f7939546 100644 --- a/assets/js/cbf2140f.d0aed567.js +++ b/assets/js/cbf2140f.de888c59.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2157],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=s(r),m=o,f=d["".concat(c,".").concat(m)]||d[m]||u[m]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:1,sidebar_class_name:"green"},i="Introduction",l={unversionedId:"admin/policy/intro",id:"admin/policy/intro",title:"Introduction",description:"The controller comes with a number of controls and safeguards that the platform team can utilize to:",source:"@site/docs/terranetes-controller/admin/policy/intro.md",sourceDirName:"admin/policy",slug:"/admin/policy/intro",permalink:"/terranetes-controller/admin/policy/intro",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/policy/intro.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Define Guardrails",permalink:"/terranetes-controller/category/define-guardrails"},next:{title:"Module Restrictions",permalink:"/terranetes-controller/admin/policy/modules"}},c={},s=[{value:"Policy Resource",id:"policy-resource",level:2}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"introduction"},"Introduction"),(0,o.kt)("p",null,"The controller comes with a number of controls and safeguards that the platform team can utilize to:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Enforce a security policy across the estate via ",(0,o.kt)("a",{parentName:"li",href:"https://www.checkov.io/"},"Checkov"),"."),(0,o.kt)("li",{parentName:"ul"},"Enforce the source of the terraform modules, for example locking down to only fetch terraform modules from your company's repositories."),(0,o.kt)("li",{parentName:"ul"},"Automatically inject environment-specific variables into the Configuration CRD, such as costs, project IDs, environment-specific labels or tags. This removes the need for teams consuming modules to know these details, and keeps the deployments environment agnostic.")),(0,o.kt)("h2",{id:"policy-resource"},"Policy Resource"),(0,o.kt)("p",null,"Not wishing to create a plethora of resource types to define all mechanics of policy, all the policies handled by the controller are defined via the ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/policies.terraform.appvia.io"},"Policy")," CRD."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"You can define Policy resources multiple times, as the definitions are pulled together and aggregated.")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2157],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=s(r),m=o,f=d["".concat(c,".").concat(m)]||d[m]||u[m]||a;return r?n.createElement(f,i(i({ref:t},p),{},{components:r})):n.createElement(f,i({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=d;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={sidebar_position:1,sidebar_class_name:"green"},i="Introduction",l={unversionedId:"admin/policy/intro",id:"admin/policy/intro",title:"Introduction",description:"The controller comes with a number of controls and safeguards that the platform team can utilize to:",source:"@site/docs/terranetes-controller/admin/policy/intro.md",sourceDirName:"admin/policy",slug:"/admin/policy/intro",permalink:"/terranetes-controller/admin/policy/intro",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/policy/intro.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Define Guardrails",permalink:"/terranetes-controller/category/define-guardrails"},next:{title:"Module Restrictions",permalink:"/terranetes-controller/admin/policy/modules"}},c={},s=[{value:"Policy Resource",id:"policy-resource",level:2}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"introduction"},"Introduction"),(0,o.kt)("p",null,"The controller comes with a number of controls and safeguards that the platform team can utilize to:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Enforce a security policy across the estate via ",(0,o.kt)("a",{parentName:"li",href:"https://www.checkov.io/"},"Checkov"),"."),(0,o.kt)("li",{parentName:"ul"},"Enforce the source of the terraform modules, for example locking down to only fetch terraform modules from your company's repositories."),(0,o.kt)("li",{parentName:"ul"},"Automatically inject environment-specific variables into the Configuration CRD, such as costs, project IDs, environment-specific labels or tags. This removes the need for teams consuming modules to know these details, and keeps the deployments environment agnostic.")),(0,o.kt)("h2",{id:"policy-resource"},"Policy Resource"),(0,o.kt)("p",null,"Not wishing to create a plethora of resource types to define all mechanics of policy, all the policies handled by the controller are defined via the ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/policies.terraform.appvia.io"},"Policy")," CRD."),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"You can define Policy resources multiple times, as the definitions are pulled together and aggregated.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d333aa35.a46a5c87.js b/assets/js/d333aa35.844e055c.js similarity index 61% rename from assets/js/d333aa35.a46a5c87.js rename to assets/js/d333aa35.844e055c.js index 3c4e4a2c..9a7a61e7 100644 --- a/assets/js/d333aa35.a46a5c87.js +++ b/assets/js/d333aa35.844e055c.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2864],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>p});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(r),p=a,f=u["".concat(l,".").concat(p)]||u[p]||m[p]||o;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function p(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>v,contentTitle:()=>g,default:()=>k,frontMatter:()=>f,metadata:()=>h,toc:()=>y});var n=r(7462),a=r(7294),o=r(3905),i=r(6010);const s="features__A6O",l="featureSvg_KQKn";var c=r(941),d=r(4996);const m=[{title:"Self Service Cloud Resources",imageLight:"/img/self-serve.svg",imageDark:"/img/self-serve-dark.svg",description:a.createElement(a.Fragment,null,"Allows developers and teams to self-serve their application dependencies independently, while being assured they are inline of company policy.")},{title:"Enforce Security Policy Checks",imageLight:"/img/security.svg",imageDark:"/img/security-dark.svg",description:a.createElement(a.Fragment,null,"Platform teams may enforce technical controls to verify resources meet their security guidelines. These controls are also applied to all terraform sub-modules, to ensure nothing gets missed.")},{title:"Predicted Cost Management",imageLight:"/img/costs.svg",imageDark:"/img/costs-dark.svg",description:a.createElement(a.Fragment,null,"Integrates with cost management tools, allowing developers to view and manage spend more efficiently.")}];function u(e){let{title:t,imageLight:r,imageDark:n,description:o}=e;const s=(0,d.Z)(n),m=(0,d.Z)(r);return a.createElement("div",{className:(0,i.Z)("col col--4")},a.createElement("div",{className:"text--center"},a.createElement(c.Z,{className:l,sources:{light:m,dark:s},alt:"Feature Image"})),a.createElement("div",{className:"text--center padding-horiz--md"},a.createElement("h3",null,t),a.createElement("p",null,o)))}function p(){return a.createElement("section",{className:s},a.createElement("div",{className:"container"},a.createElement("div",{className:"row"},m.map(((e,t)=>a.createElement(u,(0,n.Z)({key:t},e)))))))}const f={sidebar_position:1},g="What is Terranetes?",h={unversionedId:"index",id:"index",title:"What is Terranetes?",description:"The terranetes controller manages the life-cycle of terraform resources defined and built inside Kubernetes. This allows teams running workloads inside the cluster to self-serve application dependencies and reuse the wealth of terraform modules already written.",source:"@site/docs/terranetes-controller/index.md",sourceDirName:".",slug:"/",permalink:"/terranetes-controller/",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/index.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Quick start",permalink:"/terranetes-controller/quick_start"}},v={},y=[{value:"Additional features",id:"additional-features",level:2}],b={toc:y};function k(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},b,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"what-is-terranetes"},"What is Terranetes?"),(0,o.kt)("p",null,"The terranetes controller manages the life-cycle of terraform resources defined and built inside Kubernetes. This allows teams running workloads inside the cluster to self-serve application dependencies and reuse the wealth of terraform modules already written."),(0,o.kt)("p",null,'There\'s a number of open source controllers you could use that will run Terraform in Kubernetes. All of them deliver the developer outcome, however, none address the "consequences" of delivering that outcome in the first place; the risks, costs, security implications, the general lack of checks and balances. What sets the Terranetes controller apart is its opinion you first enable the platform team to deliver the outcome in a safe environment before it can be self-served by developers. Providing platform engineers with all the knobs, dials and levers to control and mitigate those risks is the key differentiator for Terranetes controller.'),(0,o.kt)(p,{mdxType:"Features"}),(0,o.kt)("h2",{id:"additional-features"},"Additional features"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Drift Detection:")," Automatically detect any upstream changes in the cloud provider and ensure the terraform state is inline with the resources it manages."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Module Security:")," Gives platform teams the means to control which terraform modules are permitted. This enables the organization to lock down to an approved collection of modules."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Targeted Configuration:")," Gives platform teams the ability to inject environment-specific variables into the terraform modules consumed downstream. For example, you could inject cost centers or project IDs, or environment-specific configuration like cloud tags and so forth.")))}k.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2864],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>p});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(r),p=a,f=u["".concat(l,".").concat(p)]||u[p]||m[p]||o;return r?n.createElement(f,i(i({ref:t},d),{},{components:r})):n.createElement(f,i({ref:t},d))}));function p(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=u;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>v,contentTitle:()=>h,default:()=>k,frontMatter:()=>f,metadata:()=>g,toc:()=>y});var n=r(7462),a=r(7294),o=r(3905),i=r(6010);const s="features__A6O",l="featureSvg_KQKn";var c=r(941),d=r(4996);const m=[{title:"Self Service Cloud Resources",imageLight:"/img/self-serve.svg",imageDark:"/img/self-serve-dark.svg",description:a.createElement(a.Fragment,null,"Allows developers and teams to self-serve their application dependencies independently, while being assured they are inline of company policy.")},{title:"Enforce Security Policy Checks",imageLight:"/img/security.svg",imageDark:"/img/security-dark.svg",description:a.createElement(a.Fragment,null,"Platform teams may enforce technical controls to verify resources meet their security guidelines. These controls are also applied to all terraform sub-modules, to ensure nothing gets missed.")},{title:"Predicted Cost Management",imageLight:"/img/costs.svg",imageDark:"/img/costs-dark.svg",description:a.createElement(a.Fragment,null,"Integrates with cost management tools, allowing developers to view and manage spend more efficiently.")}];function u(e){let{title:t,imageLight:r,imageDark:n,description:o}=e;const s=(0,d.Z)(n),m=(0,d.Z)(r);return a.createElement("div",{className:(0,i.Z)("col col--4")},a.createElement("div",{className:"text--center"},a.createElement(c.Z,{className:l,sources:{light:m,dark:s},alt:"Feature Image"})),a.createElement("div",{className:"text--center padding-horiz--md"},a.createElement("h3",null,t),a.createElement("p",null,o)))}function p(){return a.createElement("section",{className:s},a.createElement("div",{className:"container"},a.createElement("div",{className:"row"},m.map(((e,t)=>a.createElement(u,(0,n.Z)({key:t},e)))))))}const f={sidebar_position:1},h="What is Terranetes?",g={unversionedId:"index",id:"index",title:"What is Terranetes?",description:"The terranetes controller manages the life-cycle of terraform resources defined and built inside Kubernetes. This allows teams running workloads inside the cluster to self-serve application dependencies and reuse the wealth of terraform modules already written.",source:"@site/docs/terranetes-controller/index.md",sourceDirName:".",slug:"/",permalink:"/terranetes-controller/",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/index.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Quick start",permalink:"/terranetes-controller/quick_start"}},v={},y=[{value:"Additional features",id:"additional-features",level:2}],b={toc:y};function k(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},b,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"what-is-terranetes"},"What is Terranetes?"),(0,o.kt)("p",null,"The terranetes controller manages the life-cycle of terraform resources defined and built inside Kubernetes. This allows teams running workloads inside the cluster to self-serve application dependencies and reuse the wealth of terraform modules already written."),(0,o.kt)("p",null,'There\'s a number of open source controllers you could use that will run Terraform in Kubernetes. All of them deliver the developer outcome, however, none address the "consequences" of delivering that outcome in the first place; the risks, costs, security implications, the general lack of checks and balances. What sets the Terranetes controller apart is its opinion you first enable the platform team to deliver the outcome in a safe environment before it can be self-served by developers. Providing platform engineers with all the knobs, dials and levers to control and mitigate those risks is the key differentiator for Terranetes controller.'),(0,o.kt)(p,{mdxType:"Features"}),(0,o.kt)("h2",{id:"additional-features"},"Additional features"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Drift Detection:")," Automatically detect any upstream changes in the cloud provider and ensure the terraform state is inline with the resources it manages."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Module Security:")," Gives platform teams the means to control which terraform modules are permitted. This enables the organization to lock down to an approved collection of modules."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Targeted Configuration:")," Gives platform teams the ability to inject environment-specific variables into the terraform modules consumed downstream. For example, you could inject cost centers or project IDs, or environment-specific configuration like cloud tags and so forth.")))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d38161a6.5bdb7d61.js b/assets/js/d38161a6.5bdb7d61.js deleted file mode 100644 index 2352db6e..00000000 --- a/assets/js/d38161a6.5bdb7d61.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[122],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>f});var a=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=a.createContext({}),s=function(e){var t=a.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},m=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var r=e.components,o=e.mdxType,n=e.originalType,c=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),u=s(r),f=o,d=u["".concat(c,".").concat(f)]||u[f]||p[f]||n;return r?a.createElement(d,l(l({ref:t},m),{},{components:r})):a.createElement(d,l({ref:t},m))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=r.length,l=new Array(n);l[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>n,metadata:()=>i,toc:()=>s});var a=r(7462),o=(r(7294),r(3905));const n={sidebar_position:2,title:"Creating Helm Packages"},l="Creating Your Own Helm Packages",i={unversionedId:"create-your-own-packages",id:"create-your-own-packages",title:"Creating Helm Packages",description:"If you wish to adopt the Terranetes pattern, then you need to convert your Terraform module into a Helm package before storing it in a Helm repository, which can then be integrated with, and accessed from, artifacthub.io.",source:"@site/docs/tf2helm/create-your-own-packages.md",sourceDirName:".",slug:"/create-your-own-packages",permalink:"/tf2helm/create-your-own-packages",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/tf2helm/create-your-own-packages.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Creating Helm Packages"},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/tf2helm/"},next:{title:"Frequently Asked Questions",permalink:"/tf2helm/faqs"}},c={},s=[{value:"Automate Terraform to Helm conversion",id:"automate-terraform-to-helm-conversion",level:2},{value:"Convert a local Terraform module",id:"convert-a-local-terraform-module",level:3},{value:"Convert a remote Terraform module",id:"convert-a-remote-terraform-module",level:3}],m={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"creating-your-own-helm-packages"},"Creating Your Own Helm Packages"),(0,o.kt)("p",null,"If you wish to adopt the Terranetes pattern, then you need to convert your Terraform module into a Helm package before storing it in a ",(0,o.kt)("a",{parentName:"p",href:"https://helm.sh/docs/topics/chart_repository/#hosting-chart-repositories"},"Helm repository"),", which can then be integrated with, and accessed from, ",(0,o.kt)("a",{parentName:"p",href:"https://artifacthub.io/"},"artifacthub.io"),"."),(0,o.kt)("p",null,"Each Helm package or chart must include the following files:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},".\n\u251c\u2500\u2500 Chart.yaml # A YAML file containing information about the chart\n\u251c\u2500\u2500 templates\n\u2502 \u251c\u2500\u2500 _helpers.tpl # A file containing helper templates and partials\n\u2502 \u2514\u2500\u2500 CHART_NAME.yaml # A Terraform Operator Custom Resource Definition Object\n\u2514\u2500\u2500 values.yaml # Required and optional configuration values\n")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"CHART_NAME.yaml")," file contains a ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/"},"Kubernetes Custom Resource")," understood and managed by the ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller"},"Appvia Terraform Controller")," component."),(0,o.kt)("h2",{id:"automate-terraform-to-helm-conversion"},"Automate Terraform to Helm conversion"),(0,o.kt)("p",null,"You can use the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/appvia/tf2helm"},"tf2helm")," tool to automate the conversion of your Terraform module to a Helm package."),(0,o.kt)("h3",{id:"convert-a-local-terraform-module"},"Convert a local Terraform module"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'tf2helm --tf_module_path="path/to/local/terraform/module/appvia-tf-efs" --tf_version=1.1.7 --name=acp-tf-efs --version=0.1.0 --app_version=0.1.0 --output_dir=charts\n\u2714 Translate Terraform module\n\u2714 Create Helm Chart\n\u2714 Update Helm Chart with Terraform Custom Resource\n\ud83d\ude80 Helm Chart is available at charts/appvia-tf-efs\n')),(0,o.kt)("h3",{id:"convert-a-remote-terraform-module"},"Convert a remote Terraform module"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'tf2helm --tf_module_url="https://github.com/terraform-aws-modules/terraform-aws-s3-bucket?ref=v3.1.0" --tf_version=1.1.7 --name=aws-s3-bucket --version=0.1.0 --app_version=0.1.0 --output_dir=charts\n\u2714 Download Terraform module\n\u2714 Translate Terraform module\n\u2714 Create Helm Chart\n\u2714 Update Helm Chart with Terraform Custom Resource\n\ud83d\ude80 Helm Chart is available at charts/aws-s3-bucket\n')))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d38161a6.c329147d.js b/assets/js/d38161a6.c329147d.js new file mode 100644 index 00000000..9b053d64 --- /dev/null +++ b/assets/js/d38161a6.c329147d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[122],{3905:(e,t,r)=>{r.d(t,{Zo:()=>m,kt:()=>f});var a=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=a.createContext({}),s=function(e){var t=a.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},m=function(e){var t=s(e.components);return a.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},u=a.forwardRef((function(e,t){var r=e.components,o=e.mdxType,n=e.originalType,c=e.parentName,m=i(e,["components","mdxType","originalType","parentName"]),u=s(r),f=o,d=u["".concat(c,".").concat(f)]||u[f]||p[f]||n;return r?a.createElement(d,l(l({ref:t},m),{},{components:r})):a.createElement(d,l({ref:t},m))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=r.length,l=new Array(n);l[0]=u;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>p,frontMatter:()=>n,metadata:()=>i,toc:()=>s});var a=r(7462),o=(r(7294),r(3905));const n={sidebar_position:2,title:"Creating Helm Packages"},l="Creating Your Own Helm Packages",i={unversionedId:"create-your-own-packages",id:"create-your-own-packages",title:"Creating Helm Packages",description:"If you wish to adopt the Terranetes pattern, then you need to convert your Terraform module into a Helm package before storing it in a Helm repository, which can then be integrated with, and accessed from, artifacthub.io.",source:"@site/docs/tf2helm/create-your-own-packages.md",sourceDirName:".",slug:"/create-your-own-packages",permalink:"/tf2helm/create-your-own-packages",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/tf2helm/create-your-own-packages.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:2,frontMatter:{sidebar_position:2,title:"Creating Helm Packages"},sidebar:"tutorialSidebar",previous:{title:"Overview",permalink:"/tf2helm/"},next:{title:"Frequently Asked Questions",permalink:"/tf2helm/faqs"}},c={},s=[{value:"Automate Terraform to Helm conversion",id:"automate-terraform-to-helm-conversion",level:2},{value:"Convert a local Terraform module",id:"convert-a-local-terraform-module",level:3},{value:"Convert a remote Terraform module",id:"convert-a-remote-terraform-module",level:3}],m={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,a.Z)({},m,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"creating-your-own-helm-packages"},"Creating Your Own Helm Packages"),(0,o.kt)("p",null,"If you wish to adopt the Terranetes pattern, then you need to convert your Terraform module into a Helm package before storing it in a ",(0,o.kt)("a",{parentName:"p",href:"https://helm.sh/docs/topics/chart_repository/#hosting-chart-repositories"},"Helm repository"),", which can then be integrated with, and accessed from, ",(0,o.kt)("a",{parentName:"p",href:"https://artifacthub.io/"},"artifacthub.io"),"."),(0,o.kt)("p",null,"Each Helm package or chart must include the following files:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},".\n\u251c\u2500\u2500 Chart.yaml # A YAML file containing information about the chart\n\u251c\u2500\u2500 templates\n\u2502 \u251c\u2500\u2500 _helpers.tpl # A file containing helper templates and partials\n\u2502 \u2514\u2500\u2500 CHART_NAME.yaml # A Terraform Operator Custom Resource Definition Object\n\u2514\u2500\u2500 values.yaml # Required and optional configuration values\n")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"CHART_NAME.yaml")," file contains a ",(0,o.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/"},"Kubernetes Custom Resource")," understood and managed by the ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller"},"Appvia Terraform Controller")," component."),(0,o.kt)("h2",{id:"automate-terraform-to-helm-conversion"},"Automate Terraform to Helm conversion"),(0,o.kt)("p",null,"You can use the ",(0,o.kt)("a",{parentName:"p",href:"https://github.com/appvia/tf2helm"},"tf2helm")," tool to automate the conversion of your Terraform module to a Helm package."),(0,o.kt)("h3",{id:"convert-a-local-terraform-module"},"Convert a local Terraform module"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'tf2helm --tf_module_path="path/to/local/terraform/module/appvia-tf-efs" --tf_version=1.1.7 --name=acp-tf-efs --version=0.1.0 --app_version=0.1.0 --output_dir=charts\n\u2714 Translate Terraform module\n\u2714 Create Helm Chart\n\u2714 Update Helm Chart with Terraform Custom Resource\n\ud83d\ude80 Helm Chart is available at charts/appvia-tf-efs\n')),(0,o.kt)("h3",{id:"convert-a-remote-terraform-module"},"Convert a remote Terraform module"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'tf2helm --tf_module_url="https://github.com/terraform-aws-modules/terraform-aws-s3-bucket?ref=v3.1.0" --tf_version=1.1.7 --name=aws-s3-bucket --version=0.1.0 --app_version=0.1.0 --output_dir=charts\n\u2714 Download Terraform module\n\u2714 Translate Terraform module\n\u2714 Create Helm Chart\n\u2714 Update Helm Chart with Terraform Custom Resource\n\ud83d\ude80 Helm Chart is available at charts/aws-s3-bucket\n')))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d6e36502.b4e04e89.js b/assets/js/d6e36502.6bc224be.js similarity index 50% rename from assets/js/d6e36502.b4e04e89.js rename to assets/js/d6e36502.6bc224be.js index a663955a..d300b015 100644 --- a/assets/js/d6e36502.b4e04e89.js +++ b/assets/js/d6e36502.6bc224be.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[822],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),d=s(r),m=o,f=d["".concat(c,".").concat(m)]||d[m]||u[m]||i;return r?n.createElement(f,l(l({ref:t},p),{},{components:r})):n.createElement(f,l({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,l=new Array(i);l[0]=d;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a.mdxType="string"==typeof e?e:o,l[1]=a;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const i={title:"tnctl get revision"},l=void 0,a={unversionedId:"cli/tnctl_get_revision",id:"cli/tnctl_get_revision",title:"tnctl get revision",description:"tnctl get revision",source:"@site/docs/terranetes-controller/cli/tnctl_get_revision.md",sourceDirName:"cli",slug:"/cli/tnctl_get_revision",permalink:"/terranetes-controller/cli/tnctl_get_revision",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get_revision.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get revision"},sidebar:"tutorialSidebar",previous:{title:"tnctl get policy",permalink:"/terranetes-controller/cli/tnctl_get_policy"},next:{title:"tnctl kubectl",permalink:"/terranetes-controller/cli/tnctl_kubectl"}},c={},s=[{value:"tnctl get revision",id:"tnctl-get-revision",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-get-revision"},"tnctl get revision"),(0,o.kt)("p",null,"Used to retrieve revision/s from the cluster"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl get revision [OPTIONS] [NAME] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -A, --all-namespaces Retrieve cloud resources from all namespaces\n -h, --help help for revision\n -n, --namespace string Namespace to retrieve the resource from\n -o, --output string The output format. Supported formats are: json|yaml|wide\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[822],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),m=s(r),d=o,f=m["".concat(c,".").concat(d)]||m[d]||u[d]||i;return r?n.createElement(f,l(l({ref:t},p),{},{components:r})):n.createElement(f,l({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,l=new Array(i);l[0]=m;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a.mdxType="string"==typeof e?e:o,l[1]=a;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>l,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const i={title:"tnctl get revision"},l=void 0,a={unversionedId:"cli/tnctl_get_revision",id:"cli/tnctl_get_revision",title:"tnctl get revision",description:"tnctl get revision",source:"@site/docs/terranetes-controller/cli/tnctl_get_revision.md",sourceDirName:"cli",slug:"/cli/tnctl_get_revision",permalink:"/terranetes-controller/cli/tnctl_get_revision",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get_revision.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get revision"},sidebar:"tutorialSidebar",previous:{title:"tnctl get policy",permalink:"/terranetes-controller/cli/tnctl_get_policy"},next:{title:"tnctl kubectl",permalink:"/terranetes-controller/cli/tnctl_kubectl"}},c={},s=[{value:"tnctl get revision",id:"tnctl-get-revision",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-get-revision"},"tnctl get revision"),(0,o.kt)("p",null,"Used to retrieve revision/s from the cluster"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl get revision [OPTIONS] [NAME] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -A, --all-namespaces Retrieve cloud resources from all namespaces\n -h, --help help for revision\n -n, --namespace string Namespace to retrieve the resource from\n -o, --output string The output format. Supported formats are: json|yaml|wide\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d7f2e5de.99ce9c64.js b/assets/js/d7f2e5de.99ce9c64.js deleted file mode 100644 index 38ebfad9..00000000 --- a/assets/js/d7f2e5de.99ce9c64.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[89],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),s=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=s(e.components);return n.createElement(a.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,a=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=s(r),f=o,m=u["".concat(a,".").concat(f)]||u[f]||p[f]||c;return r?n.createElement(m,i(i({ref:t},d),{},{components:r})):n.createElement(m,i({ref:t},d))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,i=new Array(c);i[0]=u;var l={};for(var a in t)hasOwnProperty.call(t,a)&&(l[a]=t[a]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>p,frontMatter:()=>c,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl describe"},i=void 0,l={unversionedId:"cli/tnctl_describe",id:"cli/tnctl_describe",title:"tnctl describe",description:"tnctl describe",source:"@site/docs/terranetes-controller/cli/tnctl_describe.md",sourceDirName:"cli",slug:"/cli/tnctl_describe",permalink:"/terranetes-controller/cli/tnctl_describe",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_describe.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl describe"},sidebar:"tutorialSidebar",previous:{title:"tnctl delete",permalink:"/terranetes-controller/cli/tnctl_delete"},next:{title:"tnctl describe cloudresource",permalink:"/terranetes-controller/cli/tnctl_describe_cloudresource"}},a={},s=[{value:"tnctl describe",id:"tnctl-describe",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],d={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-describe"},"tnctl describe"),(0,o.kt)("p",null,"Used to describe the current state of the configuration"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Retrieves the definition and current state of one or more of the\nterraform configurations, displaying in a human friendly format.\nThe command also extracts any integration details which have been\nproduced by infracosts or checkov scans."),(0,o.kt)("p",null,"Describe a configuration in a namespace\n$ tnctl describe configuration -n apps NAME"),(0,o.kt)("p",null,"Describe a cloudresource in a namespace\n$ tnctl describe cloudresource -n apps NAME"),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for describe\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_describe_cloudresource"},"tnctl describe cloudresource"),"\t - Used to describe the current state of the resources"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_describe_configuration"},"tnctl describe configuration"),"\t - Used to describe the current state of the resources")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d7f2e5de.b7a8b75d.js b/assets/js/d7f2e5de.b7a8b75d.js new file mode 100644 index 00000000..9c1e9339 --- /dev/null +++ b/assets/js/d7f2e5de.b7a8b75d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[89],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,c=e.originalType,l=e.parentName,d=a(e,["components","mdxType","originalType","parentName"]),u=s(r),f=o,m=u["".concat(l,".").concat(f)]||u[f]||p[f]||c;return r?n.createElement(m,i(i({ref:t},d),{},{components:r})):n.createElement(m,i({ref:t},d))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var c=r.length,i=new Array(c);i[0]=u;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a.mdxType="string"==typeof e?e:o,i[1]=a;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>c,metadata:()=>a,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const c={title:"tnctl describe"},i=void 0,a={unversionedId:"cli/tnctl_describe",id:"cli/tnctl_describe",title:"tnctl describe",description:"tnctl describe",source:"@site/docs/terranetes-controller/cli/tnctl_describe.md",sourceDirName:"cli",slug:"/cli/tnctl_describe",permalink:"/terranetes-controller/cli/tnctl_describe",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_describe.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl describe"},sidebar:"tutorialSidebar",previous:{title:"tnctl delete",permalink:"/terranetes-controller/cli/tnctl_delete"},next:{title:"tnctl describe cloudresource",permalink:"/terranetes-controller/cli/tnctl_describe_cloudresource"}},l={},s=[{value:"tnctl describe",id:"tnctl-describe",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],d={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-describe"},"tnctl describe"),(0,o.kt)("p",null,"Used to describe the current state of the configuration"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Retrieves the definition and current state of one or more of the\nterraform configurations, displaying in a human friendly format.\nThe command also extracts any integration details which have been\nproduced by infracosts or checkov scans."),(0,o.kt)("p",null,"Describe a configuration in a namespace\n$ tnctl describe configuration -n apps NAME"),(0,o.kt)("p",null,"Describe a cloudresource in a namespace\n$ tnctl describe cloudresource -n apps NAME"),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -h, --help help for describe\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl"},"tnctl"),"\t - Terranetes CLI tool"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_describe_cloudresource"},"tnctl describe cloudresource"),"\t - Used to describe the current state of the resources"),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_describe_configuration"},"tnctl describe configuration"),"\t - Used to describe the current state of the resources")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d88f124c.1551305f.js b/assets/js/d88f124c.1551305f.js deleted file mode 100644 index 8f100f93..00000000 --- a/assets/js/d88f124c.1551305f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6550],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function c(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),p=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):c(c({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(a.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,a=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),d=p(r),m=o,f=d["".concat(a,".").concat(m)]||d[m]||u[m]||l;return r?n.createElement(f,c(c({ref:t},s),{},{components:r})):n.createElement(f,c({ref:t},s))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,c=new Array(l);c[0]=d;var i={};for(var a in t)hasOwnProperty.call(t,a)&&(i[a]=t[a]);i.originalType=e,i.mdxType="string"==typeof e?e:o,c[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl get policy"},c=void 0,i={unversionedId:"cli/tnctl_get_policy",id:"cli/tnctl_get_policy",title:"tnctl get policy",description:"tnctl get policy",source:"@site/docs/terranetes-controller/cli/tnctl_get_policy.md",sourceDirName:"cli",slug:"/cli/tnctl_get_policy",permalink:"/terranetes-controller/cli/tnctl_get_policy",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get_policy.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get policy"},sidebar:"tutorialSidebar",previous:{title:"tnctl get plan",permalink:"/terranetes-controller/cli/tnctl_get_plan"},next:{title:"tnctl get revision",permalink:"/terranetes-controller/cli/tnctl_get_revision"}},a={},p=[{value:"tnctl get policy",id:"tnctl-get-policy",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-get-policy"},"tnctl get policy"),(0,o.kt)("p",null,"Used to retrieve policy/s from the cluster"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl get policy [OPTIONS] [NAME] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -A, --all-namespaces Retrieve cloud resources from all namespaces\n -h, --help help for policy\n -n, --namespace string Namespace to retrieve the resource from\n -o, --output string The output format. Supported formats are: json|yaml|wide\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d88f124c.e5928040.js b/assets/js/d88f124c.e5928040.js new file mode 100644 index 00000000..73fda244 --- /dev/null +++ b/assets/js/d88f124c.e5928040.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[6550],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),p=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},s=function(e){var t=p(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,l=e.originalType,c=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),m=p(r),d=o,f=m["".concat(c,".").concat(d)]||m[d]||u[d]||l;return r?n.createElement(f,a(a({ref:t},s),{},{components:r})):n.createElement(f,a({ref:t},s))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var l=r.length,a=new Array(l);a[0]=m;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:o,a[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>u,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const l={title:"tnctl get policy"},a=void 0,i={unversionedId:"cli/tnctl_get_policy",id:"cli/tnctl_get_policy",title:"tnctl get policy",description:"tnctl get policy",source:"@site/docs/terranetes-controller/cli/tnctl_get_policy.md",sourceDirName:"cli",slug:"/cli/tnctl_get_policy",permalink:"/terranetes-controller/cli/tnctl_get_policy",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get_policy.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get policy"},sidebar:"tutorialSidebar",previous:{title:"tnctl get plan",permalink:"/terranetes-controller/cli/tnctl_get_plan"},next:{title:"tnctl get revision",permalink:"/terranetes-controller/cli/tnctl_get_revision"}},c={},p=[{value:"tnctl get policy",id:"tnctl-get-policy",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],s={toc:p};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-get-policy"},"tnctl get policy"),(0,o.kt)("p",null,"Used to retrieve policy/s from the cluster"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl get policy [OPTIONS] [NAME] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -A, --all-namespaces Retrieve cloud resources from all namespaces\n -h, --help help for policy\n -n, --namespace string Namespace to retrieve the resource from\n -o, --output string The output format. Supported formats are: json|yaml|wide\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d94921bd.7dafdd8b.js b/assets/js/d94921bd.7dafdd8b.js deleted file mode 100644 index 6f7de27e..00000000 --- a/assets/js/d94921bd.7dafdd8b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8641],{3905:(t,e,s)=>{s.d(e,{Zo:()=>l,kt:()=>h});var r=s(7294);function a(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}function p(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,r)}return s}function o(t){for(var e=1;e=0||(a[s]=t[s]);return a}(t,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,s)&&(a[s]=t[s])}return a}var n=r.createContext({}),c=function(t){var e=r.useContext(n),s=e;return t&&(s="function"==typeof t?t(e):o(o({},e),t)),s},l=function(t){var e=c(t.components);return r.createElement(n.Provider,{value:e},t.children)},d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},y=r.forwardRef((function(t,e){var s=t.components,a=t.mdxType,p=t.originalType,n=t.parentName,l=i(t,["components","mdxType","originalType","parentName"]),y=c(s),h=a,u=y["".concat(n,".").concat(h)]||y[h]||d[h]||p;return s?r.createElement(u,o(o({ref:e},l),{},{components:s})):r.createElement(u,o({ref:e},l))}));function h(t,e){var s=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var p=s.length,o=new Array(p);o[0]=y;var i={};for(var n in e)hasOwnProperty.call(e,n)&&(i[n]=e[n]);i.originalType=t,i.mdxType="string"==typeof t?t:a,o[1]=i;for(var c=2;c{s.r(e),s.d(e,{assets:()=>n,contentTitle:()=>o,default:()=>d,frontMatter:()=>p,metadata:()=>i,toc:()=>c});var r=s(7462),a=(s(7294),s(3905));const p={title:"cloudresources.terraform.appvia.io",linkTitle:"CloudResource",sidebar_position:1},o="CloudResource",i={unversionedId:"reference/cloudresources.terraform.appvia.io",id:"reference/cloudresources.terraform.appvia.io",title:"cloudresources.terraform.appvia.io",description:"CloudResource is the schema for terraform definitions in terraform controller",source:"@site/docs/terranetes-controller/reference/cloudresources.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/cloudresources.terraform.appvia.io",permalink:"/terranetes-controller/reference/cloudresources.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/cloudresources.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"cloudresources.terraform.appvia.io",linkTitle:"CloudResource",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"API Reference",permalink:"/terranetes-controller/category/api-reference"},next:{title:"configurations.terraform.appvia.io",permalink:"/terranetes-controller/reference/configurations.terraform.appvia.io"}},n={},c=[],l={toc:c};function d(t){let{components:e,...s}=t;return(0,a.kt)("wrapper",(0,r.Z)({},l,s,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"cloudresource"},"CloudResource"),(0,a.kt)("p",{class:"crd-description"},"CloudResource is the schema for terraform definitions in terraform controller"),(0,a.kt)("dl",{class:"crd-meta"},(0,a.kt)("dt",{class:"fullname"},"Full name:"),(0,a.kt)("dd",{class:"fullname"},"cloudresources.terraform.appvia.io"),(0,a.kt)("dt",{class:"groupname"},"Group:"),(0,a.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,a.kt)("dt",{class:"singularname"},"Singular name:"),(0,a.kt)("dd",{class:"singularname"},"cloudresource"),(0,a.kt)("dt",{class:"pluralname"},"Plural name:"),(0,a.kt)("dd",{class:"pluralname"},"cloudresources"),(0,a.kt)("dt",{class:"scope"},"Scope:"),(0,a.kt)("dd",{class:"scope"},"Namespaced"),(0,a.kt)("dt",{class:"versions"},"Versions:"),(0,a.kt)("dd",{class:"versions"},(0,a.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,a.kt)("div",{class:"crd-schema-version"},(0,a.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,a.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"CloudResourceSpec defines the desired state of a terraform")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.auth"},".spec.auth")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Auth is used to configure any options required when the source of the terraform module is private or requires credentials to retrieve. This could be SSH keys or git user/pass or AWS credentials for an s3 bucket.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.auth.name"},".spec.auth.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"name is unique within a namespace to reference a secret resource.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.auth.namespace"},".spec.auth.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"namespace defines the space within which the secret name must be unique.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.enableAutoApproval"},".spec.enableAutoApproval")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"EnableAutoApproval when enabled indicates the configuration does not need to be manually approved. On a change to the configuration, the controller will automatically approve the configuration. Note it still needs to adhere to any checks or policies.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.enableDriftDetection"},".spec.enableDriftDetection")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"EnableDriftDetection when enabled run periodic reconciliation configurations looking for any drift between the expected and current state. If any drift is detected the status is changed and a kubernetes event raised.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan"},".spec.plan")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Plan is the reference to the plan which this cloud resource is associated with. This field is required, and needs both the name and version the plan revision to use")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.name"},".spec.plan.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name of the plan this configuration is associated with")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.revision"},".spec.plan.revision")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Revision is the revision of the plan this configuration is associated with")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.providerRef"},".spec.providerRef")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ProviderRef is the reference to the provider which should be used to execute this configuration.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.providerRef.name"},".spec.providerRef.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name of the provider which contains the credentials to use for this configuration.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.providerRef.namespace"},".spec.providerRef.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Namespace is the namespace of the provider itself.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.terraformVersion"},".spec.terraformVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"TerraformVersion provides the ability to override the default terraform version. Before changing this field its best to consult with platform administrator. As the value of this field is used to change the tag of the terraform container image.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom"},".spec.valueFrom")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ValueFromSource is a collection of value from sources, where the source of the value is taken from a secret")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*]"},".spec.valueFrom[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ValueFromSource defines a value which is taken from a secret")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].context"},".spec.valueFrom[*].context")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Context is the context is the name of the terraform context where the value should be retrieved from")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].key"},".spec.valueFrom[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Key is the key in the secret which we should used for the value")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].name"},".spec.valueFrom[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name which we use when injecting the value into the terraform code i.e. the secret may contain data.DB_HOST but you call this database_hostname. Note, for backwards compatiability if no name is provided, we using the key at the name")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].optional"},".spec.valueFrom[*].optional")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Optional indicates the secret can be optional, i.e if the secret does not exist, or the key is not contained in the secret, we ignore the error")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].secret"},".spec.valueFrom[*].secret")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Secret is the name of the secret in the configuration namespace")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.variables"},".spec.variables")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Variables provides the inputs for the terraform module itself. These are passed to the terraform executor and used to execute the plan, apply and destroy phases.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef"},".spec.writeConnectionSecretToRef")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"WriteConnectionSecretToRef is the name for a secret. On execution of the terraform module any module outputs are written to this secret. The outputs are automatically uppercased and ready to be consumed as environment variables. WriteConnectionSecretRef is the secret where the terraform outputs will be written.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef.keys"},".spec.writeConnectionSecretToRef.keys")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Keys is a collection of name used to filter the terraform output. By default all keys from the output of the terraform state are written to the connection secret. Here we can define exactly which keys we want from that output.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef.keys[*]"},".spec.writeConnectionSecretToRef.keys[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef.name"},".spec.writeConnectionSecretToRef.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the of the secret where you want to the terraform output to be written. The terraform outputs will be written to the secret as a key value pair. All are uppercased can read to be consumed by the workload.")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"CloudResourceStatus defines the observed state of a terraform")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationName"},".status.configurationName")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ConfigurationName is the of the configuration this cloudresource is managing on behalf of")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus"},".status.configurationStatus")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Configuration is the state taken from the underlying configuration")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions"},".status.configurationStatus.conditions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*]"},".status.configurationStatus.conditions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].detail"},".status.configurationStatus.conditions[*].detail")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].lastTransitionTime"},".status.configurationStatus.conditions[*].lastTransitionTime")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].message"},".status.configurationStatus.conditions[*].message")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].name"},".status.configurationStatus.conditions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].observedGeneration"},".status.configurationStatus.conditions[*].observedGeneration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].reason"},".status.configurationStatus.conditions[*].reason")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].status"},".status.configurationStatus.conditions[*].status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].type"},".status.configurationStatus.conditions[*].type")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.costs"},".status.configurationStatus.costs")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Costs is the predicted costs of this configuration. Note this field is only populated when the integration has been configured by the administrator.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.costs.enabled"},".status.configurationStatus.costs.enabled")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Enabled indicates if the cost integration was enabled when this configuration was last executed.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.costs.hourly"},".status.configurationStatus.costs.hourly")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Hourly is the hourly estimated cost of the configuration")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.costs.monthly"},".status.configurationStatus.costs.monthly")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Monthly is the monthly estimated cost of the configuration")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.driftTimestamp"},".status.configurationStatus.driftTimestamp")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"DriftTimestamp is the timestamp of the last drift detection")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.lastReconcile"},".status.configurationStatus.lastReconcile")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.lastReconcile.generation"},".status.configurationStatus.lastReconcile.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.lastReconcile.time"},".status.configurationStatus.lastReconcile.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.lastSuccess"},".status.configurationStatus.lastSuccess")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.lastSuccess.generation"},".status.configurationStatus.lastSuccess.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.lastSuccess.time"},".status.configurationStatus.lastSuccess.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.resourceStatus"},".status.configurationStatus.resourceStatus")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ResourceStatus indicates the status of the resources and if the resources are insync with the configuration")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.resources"},".status.configurationStatus.resources")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Resources is the number of managed cloud resources which are currently under management. This field is taken from the terraform state itself.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.terraformVersion"},".status.configurationStatus.terraformVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"TerraformVersion is the version of terraform which was last used to run this configuration")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs"},".status.costs")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Costs is the predicted costs of this configuration. Note this field is only populated when the integration has been configured by the administrator.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs.enabled"},".status.costs.enabled")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Enabled indicates if the cost integration was enabled when this configuration was last executed.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs.hourly"},".status.costs.hourly")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Hourly is the hourly estimated cost of the configuration")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs.monthly"},".status.costs.monthly")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Monthly is the monthly estimated cost of the configuration")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.resourceStatus"},".status.resourceStatus")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ResourceStatus indicates the status of the resources and if the resources are insync with the configuration")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.resources"},".status.resources")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Resources is the number of managed cloud resources which are currently under management. This field is taken from the terraform state itself.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.updateAvailable"},".status.updateAvailable")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"UpdateAvailable indicates if there is a new version of the plan available"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d94921bd.e48810ce.js b/assets/js/d94921bd.e48810ce.js new file mode 100644 index 00000000..b2f8bc1f --- /dev/null +++ b/assets/js/d94921bd.e48810ce.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8641],{3905:(t,e,s)=>{s.d(e,{Zo:()=>l,kt:()=>h});var r=s(7294);function a(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}function p(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,r)}return s}function o(t){for(var e=1;e=0||(a[s]=t[s]);return a}(t,e);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,s)&&(a[s]=t[s])}return a}var n=r.createContext({}),c=function(t){var e=r.useContext(n),s=e;return t&&(s="function"==typeof t?t(e):o(o({},e),t)),s},l=function(t){var e=c(t.components);return r.createElement(n.Provider,{value:e},t.children)},d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},y=r.forwardRef((function(t,e){var s=t.components,a=t.mdxType,p=t.originalType,n=t.parentName,l=i(t,["components","mdxType","originalType","parentName"]),y=c(s),h=a,u=y["".concat(n,".").concat(h)]||y[h]||d[h]||p;return s?r.createElement(u,o(o({ref:e},l),{},{components:s})):r.createElement(u,o({ref:e},l))}));function h(t,e){var s=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var p=s.length,o=new Array(p);o[0]=y;var i={};for(var n in e)hasOwnProperty.call(e,n)&&(i[n]=e[n]);i.originalType=t,i.mdxType="string"==typeof t?t:a,o[1]=i;for(var c=2;c{s.r(e),s.d(e,{assets:()=>n,contentTitle:()=>o,default:()=>d,frontMatter:()=>p,metadata:()=>i,toc:()=>c});var r=s(7462),a=(s(7294),s(3905));const p={title:"cloudresources.terraform.appvia.io",linkTitle:"CloudResource",sidebar_position:1},o="CloudResource",i={unversionedId:"reference/cloudresources.terraform.appvia.io",id:"reference/cloudresources.terraform.appvia.io",title:"cloudresources.terraform.appvia.io",description:"CloudResource is the schema for terraform definitions in terraform controller",source:"@site/docs/terranetes-controller/reference/cloudresources.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/cloudresources.terraform.appvia.io",permalink:"/terranetes-controller/reference/cloudresources.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/cloudresources.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"cloudresources.terraform.appvia.io",linkTitle:"CloudResource",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"API Reference",permalink:"/terranetes-controller/category/api-reference"},next:{title:"configurations.terraform.appvia.io",permalink:"/terranetes-controller/reference/configurations.terraform.appvia.io"}},n={},c=[],l={toc:c};function d(t){let{components:e,...s}=t;return(0,a.kt)("wrapper",(0,r.Z)({},l,s,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"cloudresource"},"CloudResource"),(0,a.kt)("p",{class:"crd-description"},"CloudResource is the schema for terraform definitions in terraform controller"),(0,a.kt)("dl",{class:"crd-meta"},(0,a.kt)("dt",{class:"fullname"},"Full name:"),(0,a.kt)("dd",{class:"fullname"},"cloudresources.terraform.appvia.io"),(0,a.kt)("dt",{class:"groupname"},"Group:"),(0,a.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,a.kt)("dt",{class:"singularname"},"Singular name:"),(0,a.kt)("dd",{class:"singularname"},"cloudresource"),(0,a.kt)("dt",{class:"pluralname"},"Plural name:"),(0,a.kt)("dd",{class:"pluralname"},"cloudresources"),(0,a.kt)("dt",{class:"scope"},"Scope:"),(0,a.kt)("dd",{class:"scope"},"Namespaced"),(0,a.kt)("dt",{class:"versions"},"Versions:"),(0,a.kt)("dd",{class:"versions"},(0,a.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,a.kt)("div",{class:"crd-schema-version"},(0,a.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,a.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"CloudResourceSpec defines the desired state of a terraform")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.auth"},".spec.auth")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Auth is used to configure any options required when the source of the terraform module is private or requires credentials to retrieve. This could be SSH keys or git user/pass or AWS credentials for an s3 bucket.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.auth.name"},".spec.auth.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"name is unique within a namespace to reference a secret resource.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.auth.namespace"},".spec.auth.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"namespace defines the space within which the secret name must be unique.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.enableAutoApproval"},".spec.enableAutoApproval")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"EnableAutoApproval when enabled indicates the configuration does not need to be manually approved. On a change to the configuration, the controller will automatically approve the configuration. Note it still needs to adhere to any checks or policies.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.enableDriftDetection"},".spec.enableDriftDetection")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"EnableDriftDetection when enabled run periodic reconciliation configurations looking for any drift between the expected and current state. If any drift is detected the status is changed and a kubernetes event raised.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan"},".spec.plan")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Plan is the reference to the plan which this cloud resource is associated with. This field is required, and needs both the name and version the plan revision to use")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.name"},".spec.plan.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name of the plan this configuration is associated with")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.plan.revision"},".spec.plan.revision")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Revision is the revision of the plan this configuration is associated with")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.providerRef"},".spec.providerRef")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ProviderRef is the reference to the provider which should be used to execute this configuration.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.providerRef.name"},".spec.providerRef.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name of the provider which contains the credentials to use for this configuration.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.providerRef.namespace"},".spec.providerRef.namespace")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Namespace is the namespace of the provider itself.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.terraformVersion"},".spec.terraformVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"TerraformVersion provides the ability to override the default terraform version. Before changing this field its best to consult with platform administrator. As the value of this field is used to change the tag of the terraform container image.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom"},".spec.valueFrom")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ValueFromSource is a collection of value from sources, where the source of the value is taken from a secret")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*]"},".spec.valueFrom[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ValueFromSource defines a value which is taken from a secret")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].context"},".spec.valueFrom[*].context")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Context is the context is the name of the terraform context where the value should be retrieved from")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].key"},".spec.valueFrom[*].key")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Key is the key in the secret which we should used for the value")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].name"},".spec.valueFrom[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the name which we use when injecting the value into the terraform code i.e. the secret may contain data.DB_HOST but you call this database_hostname. Note, for backwards compatiability if no name is provided, we using the key at the name")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].optional"},".spec.valueFrom[*].optional")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Optional indicates the secret can be optional, i.e if the secret does not exist, or the key is not contained in the secret, we ignore the error")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.valueFrom[*].secret"},".spec.valueFrom[*].secret")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Secret is the name of the secret in the configuration namespace")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.variables"},".spec.variables")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Variables provides the inputs for the terraform module itself. These are passed to the terraform executor and used to execute the plan, apply and destroy phases.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef"},".spec.writeConnectionSecretToRef")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"WriteConnectionSecretToRef is the name for a secret. On execution of the terraform module any module outputs are written to this secret. The outputs are automatically uppercased and ready to be consumed as environment variables. WriteConnectionSecretRef is the secret where the terraform outputs will be written.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef.keys"},".spec.writeConnectionSecretToRef.keys")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Keys is a collection of name used to filter the terraform output. By default all keys from the output of the terraform state are written to the connection secret. Here we can define exactly which keys we want from that output.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef.keys[*]"},".spec.writeConnectionSecretToRef.keys[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.writeConnectionSecretToRef.name"},".spec.writeConnectionSecretToRef.name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is the of the secret where you want to the terraform output to be written. The terraform outputs will be written to the secret as a key value pair. All are uppercased can read to be consumed by the workload.")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"CloudResourceStatus defines the observed state of a terraform")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationName"},".status.configurationName")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ConfigurationName is the of the configuration this cloudresource is managing on behalf of")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus"},".status.configurationStatus")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Configuration is the state taken from the underlying configuration")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions"},".status.configurationStatus.conditions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*]"},".status.configurationStatus.conditions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].detail"},".status.configurationStatus.conditions[*].detail")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].lastTransitionTime"},".status.configurationStatus.conditions[*].lastTransitionTime")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].message"},".status.configurationStatus.conditions[*].message")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].name"},".status.configurationStatus.conditions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].observedGeneration"},".status.configurationStatus.conditions[*].observedGeneration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].reason"},".status.configurationStatus.conditions[*].reason")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].status"},".status.configurationStatus.conditions[*].status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,a.kt)("div",{class:"property depth-4"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.conditions[*].type"},".status.configurationStatus.conditions[*].type")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.costs"},".status.configurationStatus.costs")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Costs is the predicted costs of this configuration. Note this field is only populated when the integration has been configured by the administrator.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.costs.enabled"},".status.configurationStatus.costs.enabled")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Enabled indicates if the cost integration was enabled when this configuration was last executed.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.costs.hourly"},".status.configurationStatus.costs.hourly")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Hourly is the hourly estimated cost of the configuration")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.costs.monthly"},".status.configurationStatus.costs.monthly")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Monthly is the monthly estimated cost of the configuration")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.driftTimestamp"},".status.configurationStatus.driftTimestamp")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"DriftTimestamp is the timestamp of the last drift detection")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.lastReconcile"},".status.configurationStatus.lastReconcile")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.lastReconcile.generation"},".status.configurationStatus.lastReconcile.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.lastReconcile.time"},".status.configurationStatus.lastReconcile.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.lastSuccess"},".status.configurationStatus.lastSuccess")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.lastSuccess.generation"},".status.configurationStatus.lastSuccess.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.lastSuccess.time"},".status.configurationStatus.lastSuccess.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.resourceStatus"},".status.configurationStatus.resourceStatus")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ResourceStatus indicates the status of the resources and if the resources are insync with the configuration")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.resources"},".status.configurationStatus.resources")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Resources is the number of managed cloud resources which are currently under management. This field is taken from the terraform state itself.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.configurationStatus.terraformVersion"},".status.configurationStatus.terraformVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"TerraformVersion is the version of terraform which was last used to run this configuration")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs"},".status.costs")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Costs is the predicted costs of this configuration. Note this field is only populated when the integration has been configured by the administrator.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs.enabled"},".status.costs.enabled")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"boolean")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Enabled indicates if the cost integration was enabled when this configuration was last executed.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs.hourly"},".status.costs.hourly")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Hourly is the hourly estimated cost of the configuration")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.costs.monthly"},".status.costs.monthly")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Monthly is the monthly estimated cost of the configuration")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.resourceStatus"},".status.resourceStatus")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ResourceStatus indicates the status of the resources and if the resources are insync with the configuration")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.resources"},".status.resources")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Resources is the number of managed cloud resources which are currently under management. This field is taken from the terraform state itself.")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.updateAvailable"},".status.updateAvailable")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"UpdateAvailable indicates if there is a new version of the plan available"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f02b81d8.1f2f6d42.js b/assets/js/f02b81d8.1f2f6d42.js deleted file mode 100644 index 4303fb67..00000000 --- a/assets/js/f02b81d8.1f2f6d42.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2378],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>v});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=r.createContext({}),s=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},u=function(e){var t=s(e.components);return r.createElement(a.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,a=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=s(n),v=o,f=d["".concat(a,".").concat(v)]||d[v]||p[v]||i;return n?r.createElement(f,c(c({ref:t},u),{},{components:n})):r.createElement(f,c({ref:t},u))}));function v(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,c=new Array(i);c[0]=d;var l={};for(var a in t)hasOwnProperty.call(t,a)&&(l[a]=t[a]);l.originalType=e,l.mdxType="string"==typeof e?e:o,c[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const i={title:"tnctl convert revision"},c=void 0,l={unversionedId:"cli/tnctl_convert_revision",id:"cli/tnctl_convert_revision",title:"tnctl convert revision",description:"tnctl convert revision",source:"@site/docs/terranetes-controller/cli/tnctl_convert_revision.md",sourceDirName:"cli",slug:"/cli/tnctl_convert_revision",permalink:"/terranetes-controller/cli/tnctl_convert_revision",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_convert_revision.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl convert revision"},sidebar:"tutorialSidebar",previous:{title:"tnctl convert configuration",permalink:"/terranetes-controller/cli/tnctl_convert_configuration"},next:{title:"tnctl create",permalink:"/terranetes-controller/cli/tnctl_create"}},a={},s=[{value:"tnctl convert revision",id:"tnctl-convert-revision",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-convert-revision"},"tnctl convert revision"),(0,o.kt)("p",null,"Used to convert revision back to terraform"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Provides the ability to convert configurations and cloudresources back\ninto terraform modules."),(0,o.kt)("p",null,"Note, if you include --include-provider or --include-checkov, this\ncommand will use the current kubeconfig context to retrieve the provider\nand checkov policy from the cluster."),(0,o.kt)("p",null,"Convert a configuration in the cluster into a terraform module:\n$ tnctl convert configuration -n my-namespace my-configuration"),(0,o.kt)("p",null,"Convert a configuration file into a terraform module:\n$ tnctl convert configuration -f my-configuration.yaml"),(0,o.kt)("p",null,"Convert a cloudresource in the cluster into a terraform module:\n$ tnctl convert cloudresource -n my-namespace my-cloudresource"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl convert revision [OPTIONS] [NAME|--file PATH] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -f, --file string The path to the file containing the revision\n -h, --help help for revision\n --include-checkov Include checkov in the output (default true)\n --include-provider Include provider in the output (default true)\n --include-terraform Include terraform in the output (default true)\n -n, --namespace string The namespace of the revision\n -p, --path string The path to write the files to (default ".")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_convert"},"tnctl convert"),"\t - Used to convert between different formats")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f02b81d8.951fc1ef.js b/assets/js/f02b81d8.951fc1ef.js new file mode 100644 index 00000000..3c8aaacf --- /dev/null +++ b/assets/js/f02b81d8.951fc1ef.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2378],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>v});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var a=r.createContext({}),s=function(e){var t=r.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):c(c({},t),e)),n},u=function(e){var t=s(e.components);return r.createElement(a.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,a=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=s(n),v=o,f=d["".concat(a,".").concat(v)]||d[v]||p[v]||i;return n?r.createElement(f,c(c({ref:t},u),{},{components:n})):r.createElement(f,c({ref:t},u))}));function v(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,c=new Array(i);c[0]=d;var l={};for(var a in t)hasOwnProperty.call(t,a)&&(l[a]=t[a]);l.originalType=e,l.mdxType="string"==typeof e?e:o,c[1]=l;for(var s=2;s{n.r(t),n.d(t,{assets:()=>a,contentTitle:()=>c,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var r=n(7462),o=(n(7294),n(3905));const i={title:"tnctl convert revision"},c=void 0,l={unversionedId:"cli/tnctl_convert_revision",id:"cli/tnctl_convert_revision",title:"tnctl convert revision",description:"tnctl convert revision",source:"@site/docs/terranetes-controller/cli/tnctl_convert_revision.md",sourceDirName:"cli",slug:"/cli/tnctl_convert_revision",permalink:"/terranetes-controller/cli/tnctl_convert_revision",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_convert_revision.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl convert revision"},sidebar:"tutorialSidebar",previous:{title:"tnctl convert configuration",permalink:"/terranetes-controller/cli/tnctl_convert_configuration"},next:{title:"tnctl create",permalink:"/terranetes-controller/cli/tnctl_create"}},a={},s=[{value:"tnctl convert revision",id:"tnctl-convert-revision",level:2},{value:"Synopsis",id:"synopsis",level:3},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...n}=e;return(0,o.kt)("wrapper",(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-convert-revision"},"tnctl convert revision"),(0,o.kt)("p",null,"Used to convert revision back to terraform"),(0,o.kt)("h3",{id:"synopsis"},"Synopsis"),(0,o.kt)("p",null,"Provides the ability to convert configurations and cloudresources back\ninto terraform modules."),(0,o.kt)("p",null,"Note, if you include --include-provider or --include-checkov, this\ncommand will use the current kubeconfig context to retrieve the provider\nand checkov policy from the cluster."),(0,o.kt)("p",null,"Convert a configuration in the cluster into a terraform module:\n$ tnctl convert configuration -n my-namespace my-configuration"),(0,o.kt)("p",null,"Convert a configuration file into a terraform module:\n$ tnctl convert configuration -f my-configuration.yaml"),(0,o.kt)("p",null,"Convert a cloudresource in the cluster into a terraform module:\n$ tnctl convert cloudresource -n my-namespace my-cloudresource"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl convert revision [OPTIONS] [NAME|--file PATH] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' -f, --file string The path to the file containing the revision\n -h, --help help for revision\n --include-checkov Include checkov in the output (default true)\n --include-provider Include provider in the output (default true)\n --include-terraform Include terraform in the output (default true)\n -n, --namespace string The namespace of the revision\n -p, --path string The path to write the files to (default ".")\n')),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_convert"},"tnctl convert"),"\t - Used to convert between different formats")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f5cd5a84.bb75ad76.js b/assets/js/f5cd5a84.06a4987f.js similarity index 79% rename from assets/js/f5cd5a84.bb75ad76.js rename to assets/js/f5cd5a84.06a4987f.js index 177eb64e..387d3276 100644 --- a/assets/js/f5cd5a84.bb75ad76.js +++ b/assets/js/f5cd5a84.06a4987f.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2878],{3905:(e,r,t)=>{t.d(r,{Zo:()=>s,kt:()=>u});var n=t(7294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function l(e){for(var r=1;r=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var p=n.createContext({}),c=function(e){var r=n.useContext(p),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},s=function(e){var r=c(e.components);return n.createElement(p.Provider,{value:r},e.children)},f={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},d=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),d=c(t),u=o,m=d["".concat(p,".").concat(u)]||d[u]||f[u]||a;return t?n.createElement(m,l(l({ref:r},s),{},{components:t})):n.createElement(m,l({ref:r},s))}));function u(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=t.length,l=new Array(a);l[0]=d;var i={};for(var p in r)hasOwnProperty.call(r,p)&&(i[p]=r[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var c=2;c{t.r(r),t.d(r,{assets:()=>p,contentTitle:()=>l,default:()=>f,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var n=t(7462),o=(t(7294),t(3905));const a={sidebar_position:3},l="Developer",i={unversionedId:"workflows/developer",id:"workflows/developer",title:"Developer",description:"Please read here for the developer workflow",source:"@site/docs/terranetes-controller/workflows/developer.md",sourceDirName:"workflows",slug:"/workflows/developer",permalink:"/terranetes-controller/workflows/developer",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/workflows/developer.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Platform Team",permalink:"/terranetes-controller/workflows/platform"},next:{title:"Administration",permalink:"/terranetes-controller/category/administration"}},p={},c=[],s={toc:c};function f(e){let{components:r,...t}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"developer"},"Developer"),(0,o.kt)("p",null,"Please read ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/developer/tnctl"},"here")," for the developer workflow"))}f.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[2878],{3905:(e,r,t)=>{t.d(r,{Zo:()=>s,kt:()=>u});var n=t(7294);function o(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function l(e){for(var r=1;r=0||(o[t]=e[t]);return o}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var p=n.createContext({}),c=function(e){var r=n.useContext(p),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},s=function(e){var r=c(e.components);return n.createElement(p.Provider,{value:r},e.children)},f={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},d=n.forwardRef((function(e,r){var t=e.components,o=e.mdxType,a=e.originalType,p=e.parentName,s=i(e,["components","mdxType","originalType","parentName"]),d=c(t),u=o,m=d["".concat(p,".").concat(u)]||d[u]||f[u]||a;return t?n.createElement(m,l(l({ref:r},s),{},{components:t})):n.createElement(m,l({ref:r},s))}));function u(e,r){var t=arguments,o=r&&r.mdxType;if("string"==typeof e||o){var a=t.length,l=new Array(a);l[0]=d;var i={};for(var p in r)hasOwnProperty.call(r,p)&&(i[p]=r[p]);i.originalType=e,i.mdxType="string"==typeof e?e:o,l[1]=i;for(var c=2;c{t.r(r),t.d(r,{assets:()=>p,contentTitle:()=>l,default:()=>f,frontMatter:()=>a,metadata:()=>i,toc:()=>c});var n=t(7462),o=(t(7294),t(3905));const a={sidebar_position:3},l="Developer",i={unversionedId:"workflows/developer",id:"workflows/developer",title:"Developer",description:"Please read here for the developer workflow",source:"@site/docs/terranetes-controller/workflows/developer.md",sourceDirName:"workflows",slug:"/workflows/developer",permalink:"/terranetes-controller/workflows/developer",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/workflows/developer.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Platform Team",permalink:"/terranetes-controller/workflows/platform"},next:{title:"Administration",permalink:"/terranetes-controller/category/administration"}},p={},c=[],s={toc:c};function f(e){let{components:r,...t}=e;return(0,o.kt)("wrapper",(0,n.Z)({},s,t,{components:r,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"developer"},"Developer"),(0,o.kt)("p",null,"Please read ",(0,o.kt)("a",{parentName:"p",href:"/terranetes-controller/developer/tnctl"},"here")," for the developer workflow"))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f7a548db.a0ead9bf.js b/assets/js/f7a548db.cc51abc9.js similarity index 50% rename from assets/js/f7a548db.a0ead9bf.js rename to assets/js/f7a548db.cc51abc9.js index b800700a..8dcfa248 100644 --- a/assets/js/f7a548db.a0ead9bf.js +++ b/assets/js/f7a548db.cc51abc9.js @@ -1 +1 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[441],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},p=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),f=s(r),d=o,g=f["".concat(c,".").concat(d)]||f[d]||u[d]||a;return r?n.createElement(g,i(i({ref:t},p),{},{components:r})):n.createElement(g,i({ref:t},p))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl get configuration"},i=void 0,l={unversionedId:"cli/tnctl_get_configuration",id:"cli/tnctl_get_configuration",title:"tnctl get configuration",description:"tnctl get configuration",source:"@site/docs/terranetes-controller/cli/tnctl_get_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_get_configuration",permalink:"/terranetes-controller/cli/tnctl_get_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get_configuration.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl get cloudresource",permalink:"/terranetes-controller/cli/tnctl_get_cloudresource"},next:{title:"tnctl get context",permalink:"/terranetes-controller/cli/tnctl_get_context"}},c={},s=[{value:"tnctl get configuration",id:"tnctl-get-configuration",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],p={toc:s};function u(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-get-configuration"},"tnctl get configuration"),(0,o.kt)("p",null,"Used to retrieve configuration/s from the cluster"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl get configuration [OPTIONS] [NAME] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -A, --all-namespaces Retrieve cloud resources from all namespaces\n -h, --help help for configuration\n -n, --namespace string Namespace to retrieve the resource from\n -o, --output string The output format. Supported formats are: json|yaml|wide\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[441],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),s=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(c.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,c=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),f=s(r),d=o,g=f["".concat(c,".").concat(d)]||f[d]||p[d]||a;return r?n.createElement(g,i(i({ref:t},u),{},{components:r})):n.createElement(g,i({ref:t},u))}));function d(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l.mdxType="string"==typeof e?e:o,i[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>l,toc:()=>s});var n=r(7462),o=(r(7294),r(3905));const a={title:"tnctl get configuration"},i=void 0,l={unversionedId:"cli/tnctl_get_configuration",id:"cli/tnctl_get_configuration",title:"tnctl get configuration",description:"tnctl get configuration",source:"@site/docs/terranetes-controller/cli/tnctl_get_configuration.md",sourceDirName:"cli",slug:"/cli/tnctl_get_configuration",permalink:"/terranetes-controller/cli/tnctl_get_configuration",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/cli/tnctl_get_configuration.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",frontMatter:{title:"tnctl get configuration"},sidebar:"tutorialSidebar",previous:{title:"tnctl get cloudresource",permalink:"/terranetes-controller/cli/tnctl_get_cloudresource"},next:{title:"tnctl get context",permalink:"/terranetes-controller/cli/tnctl_get_context"}},c={},s=[{value:"tnctl get configuration",id:"tnctl-get-configuration",level:2},{value:"Options",id:"options",level:3},{value:"Options inherited from parent commands",id:"options-inherited-from-parent-commands",level:3},{value:"SEE ALSO",id:"see-also",level:3}],u={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h2",{id:"tnctl-get-configuration"},"tnctl get configuration"),(0,o.kt)("p",null,"Used to retrieve configuration/s from the cluster"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"tnctl get configuration [OPTIONS] [NAME] [flags]\n")),(0,o.kt)("h3",{id:"options"},"Options"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"}," -A, --all-namespaces Retrieve cloud resources from all namespaces\n -h, --help help for configuration\n -n, --namespace string Namespace to retrieve the resource from\n -o, --output string The output format. Supported formats are: json|yaml|wide\n")),(0,o.kt)("h3",{id:"options-inherited-from-parent-commands"},"Options inherited from parent commands"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},' --config string Path to the configuration file (default "HOME/.tnctl.yaml")\n --verbose Enable verbose logging\n')),(0,o.kt)("h3",{id:"see-also"},"SEE ALSO"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"../tnctl_get"},"tnctl get"),"\t - Used to retrieve a list of resources")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f8408644.93f1a201.js b/assets/js/f8408644.93f1a201.js deleted file mode 100644 index 23a63d56..00000000 --- a/assets/js/f8408644.93f1a201.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8275],{3905:(t,e,s)=>{s.d(e,{Zo:()=>l,kt:()=>h});var r=s(7294);function a(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}function o(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,r)}return s}function p(t){for(var e=1;e=0||(a[s]=t[s]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,s)&&(a[s]=t[s])}return a}var n=r.createContext({}),c=function(t){var e=r.useContext(n),s=e;return t&&(s="function"==typeof t?t(e):p(p({},e),t)),s},l=function(t){var e=c(t.components);return r.createElement(n.Provider,{value:e},t.children)},d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},y=r.forwardRef((function(t,e){var s=t.components,a=t.mdxType,o=t.originalType,n=t.parentName,l=i(t,["components","mdxType","originalType","parentName"]),y=c(s),h=a,k=y["".concat(n,".").concat(h)]||y[h]||d[h]||o;return s?r.createElement(k,p(p({ref:e},l),{},{components:s})):r.createElement(k,p({ref:e},l))}));function h(t,e){var s=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=s.length,p=new Array(o);p[0]=y;var i={};for(var n in e)hasOwnProperty.call(e,n)&&(i[n]=e[n]);i.originalType=t,i.mdxType="string"==typeof t?t:a,p[1]=i;for(var c=2;c{s.r(e),s.d(e,{assets:()=>n,contentTitle:()=>p,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=s(7462),a=(s(7294),s(3905));const o={title:"contexts.terraform.appvia.io",linkTitle:"Context",sidebar_position:1},p="Context",i={unversionedId:"reference/contexts.terraform.appvia.io",id:"reference/contexts.terraform.appvia.io",title:"contexts.terraform.appvia.io",description:"Context is the schema for the context type",source:"@site/docs/terranetes-controller/reference/contexts.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/contexts.terraform.appvia.io",permalink:"/terranetes-controller/reference/contexts.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/contexts.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"contexts.terraform.appvia.io",linkTitle:"Context",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"configurations.terraform.appvia.io",permalink:"/terranetes-controller/reference/configurations.terraform.appvia.io"},next:{title:"plans.terraform.appvia.io",permalink:"/terranetes-controller/reference/plans.terraform.appvia.io"}},n={},c=[],l={toc:c};function d(t){let{components:e,...s}=t;return(0,a.kt)("wrapper",(0,r.Z)({},l,s,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"context"},"Context"),(0,a.kt)("p",{class:"crd-description"},"Context is the schema for the context type"),(0,a.kt)("dl",{class:"crd-meta"},(0,a.kt)("dt",{class:"fullname"},"Full name:"),(0,a.kt)("dd",{class:"fullname"},"contexts.terraform.appvia.io"),(0,a.kt)("dt",{class:"groupname"},"Group:"),(0,a.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,a.kt)("dt",{class:"singularname"},"Singular name:"),(0,a.kt)("dd",{class:"singularname"},"context"),(0,a.kt)("dt",{class:"pluralname"},"Plural name:"),(0,a.kt)("dd",{class:"pluralname"},"contexts"),(0,a.kt)("dt",{class:"scope"},"Scope:"),(0,a.kt)("dd",{class:"scope"},"Cluster"),(0,a.kt)("dt",{class:"versions"},"Versions:"),(0,a.kt)("dd",{class:"versions"},(0,a.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,a.kt)("div",{class:"crd-schema-version"},(0,a.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,a.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ContextSpec defines the desired state for a context")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.variables"},".spec.variables")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Variables is a list of variables which can be used globally by Context resources. The structure of the variables is a map of key/value pairs, which MUST have both a description and a value.")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ContextStatus defines the observed state of a terraform")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f8408644.c29f800d.js b/assets/js/f8408644.c29f800d.js new file mode 100644 index 00000000..3115eb0a --- /dev/null +++ b/assets/js/f8408644.c29f800d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8275],{3905:(t,e,s)=>{s.d(e,{Zo:()=>l,kt:()=>h});var r=s(7294);function a(t,e,s){return e in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}function o(t,e){var s=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),s.push.apply(s,r)}return s}function p(t){for(var e=1;e=0||(a[s]=t[s]);return a}(t,e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,s)&&(a[s]=t[s])}return a}var n=r.createContext({}),c=function(t){var e=r.useContext(n),s=e;return t&&(s="function"==typeof t?t(e):p(p({},e),t)),s},l=function(t){var e=c(t.components);return r.createElement(n.Provider,{value:e},t.children)},d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},y=r.forwardRef((function(t,e){var s=t.components,a=t.mdxType,o=t.originalType,n=t.parentName,l=i(t,["components","mdxType","originalType","parentName"]),y=c(s),h=a,k=y["".concat(n,".").concat(h)]||y[h]||d[h]||o;return s?r.createElement(k,p(p({ref:e},l),{},{components:s})):r.createElement(k,p({ref:e},l))}));function h(t,e){var s=arguments,a=e&&e.mdxType;if("string"==typeof t||a){var o=s.length,p=new Array(o);p[0]=y;var i={};for(var n in e)hasOwnProperty.call(e,n)&&(i[n]=e[n]);i.originalType=t,i.mdxType="string"==typeof t?t:a,p[1]=i;for(var c=2;c{s.r(e),s.d(e,{assets:()=>n,contentTitle:()=>p,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>c});var r=s(7462),a=(s(7294),s(3905));const o={title:"contexts.terraform.appvia.io",linkTitle:"Context",sidebar_position:1},p="Context",i={unversionedId:"reference/contexts.terraform.appvia.io",id:"reference/contexts.terraform.appvia.io",title:"contexts.terraform.appvia.io",description:"Context is the schema for the context type",source:"@site/docs/terranetes-controller/reference/contexts.terraform.appvia.io.md",sourceDirName:"reference",slug:"/reference/contexts.terraform.appvia.io",permalink:"/terranetes-controller/reference/contexts.terraform.appvia.io",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/reference/contexts.terraform.appvia.io.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:1,frontMatter:{title:"contexts.terraform.appvia.io",linkTitle:"Context",sidebar_position:1},sidebar:"tutorialSidebar",previous:{title:"configurations.terraform.appvia.io",permalink:"/terranetes-controller/reference/configurations.terraform.appvia.io"},next:{title:"plans.terraform.appvia.io",permalink:"/terranetes-controller/reference/plans.terraform.appvia.io"}},n={},c=[],l={toc:c};function d(t){let{components:e,...s}=t;return(0,a.kt)("wrapper",(0,r.Z)({},l,s,{components:e,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"context"},"Context"),(0,a.kt)("p",{class:"crd-description"},"Context is the schema for the context type"),(0,a.kt)("dl",{class:"crd-meta"},(0,a.kt)("dt",{class:"fullname"},"Full name:"),(0,a.kt)("dd",{class:"fullname"},"contexts.terraform.appvia.io"),(0,a.kt)("dt",{class:"groupname"},"Group:"),(0,a.kt)("dd",{class:"groupname"},"terraform.appvia.io"),(0,a.kt)("dt",{class:"singularname"},"Singular name:"),(0,a.kt)("dd",{class:"singularname"},"context"),(0,a.kt)("dt",{class:"pluralname"},"Plural name:"),(0,a.kt)("dd",{class:"pluralname"},"contexts"),(0,a.kt)("dt",{class:"scope"},"Scope:"),(0,a.kt)("dd",{class:"scope"},"Cluster"),(0,a.kt)("dt",{class:"versions"},"Versions:"),(0,a.kt)("dd",{class:"versions"},(0,a.kt)("a",{class:"version",href:"#v1alpha1",title:"Show schema for version v1alpha1"},"v1alpha1"))),(0,a.kt)("div",{class:"crd-schema-version"},(0,a.kt)("h2",{id:"v1alpha1"},"Version v1alpha1"),(0,a.kt)("h3",{id:"property-details-v1alpha1"},"Properties"),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.apiVersion"},".apiVersion")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.kind"},".kind")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: ",(0,a.kt)("a",{href:"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"},"https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds"))))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.metadata"},".metadata")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec"},".spec")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ContextSpec defines the desired state for a context")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.spec.variables"},".spec.variables")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Variables is a list of variables which can be used globally by Context resources. The structure of the variables is a map of key/value pairs, which MUST have both a description and a value.")))),(0,a.kt)("div",{class:"property depth-0"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status"},".status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ContextStatus defines the observed state of a terraform")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions"},".status.conditions")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"array")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Conditions represents the observations of the resource\u2019s current state.")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*]"},".status.conditions[*]")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Condition is the current observed condition of some aspect of a resource")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].detail"},".status.conditions[*].detail")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Detail is any additional human-readable detail to understand this condition, for example, the full underlying error which caused an issue")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].lastTransitionTime"},".status.conditions[*].lastTransitionTime")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].message"},".status.conditions[*].message")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Message is a human readable message indicating details about the transition. This may be an empty string.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].name"},".status.conditions[*].name")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Name is a human-readable name for this condition.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].observedGeneration"},".status.conditions[*].observedGeneration")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"ObservedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].reason"},".status.conditions[*].reason")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Reason contains a programmatic identifier indicating the reason for the condition\u2019s last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].status"},".status.conditions[*].status")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Status of the condition, one of True, False, Unknown.")))),(0,a.kt)("div",{class:"property depth-3"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.conditions[*].type"},".status.conditions[*].type")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string"),(0,a.kt)("span",{class:"property-required"},"Required")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Type of condition in CamelCase or in foo.example.com/CamelCase. \u2014 Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt)")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile"},".status.lastReconcile")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastReconcile describes the generation and time of the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.generation"},".status.lastReconcile.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastReconcile.time"},".status.lastReconcile.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled")))),(0,a.kt)("div",{class:"property depth-1"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess"},".status.lastSuccess")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"object")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"LastSuccess descibes the generation and time of the last reconciliation which resulted in a Success status")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.generation"},".status.lastSuccess.generation")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"integer")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Generation is the generation reconciled on the last reconciliation")))),(0,a.kt)("div",{class:"property depth-2"},(0,a.kt)("div",{class:"property-header"},(0,a.kt)("h3",{class:"property-path",id:"v1alpha1-.status.lastSuccess.time"},".status.lastSuccess.time")),(0,a.kt)("div",{class:"property-body"},(0,a.kt)("div",{class:"property-meta"},(0,a.kt)("span",{class:"property-type"},"string")),(0,a.kt)("div",{class:"property-description"},(0,a.kt)("p",null,"Time is the last time the resource was reconciled"))))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f93c2983.3abec308.js b/assets/js/f93c2983.3abec308.js deleted file mode 100644 index 28fa9e05..00000000 --- a/assets/js/f93c2983.3abec308.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9916],{3905:(e,r,n)=>{n.d(r,{Zo:()=>c,kt:()=>m});var t=n(7294);function a(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function o(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function s(e){for(var r=1;r=0||(a[n]=e[n]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=t.createContext({}),u=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):s(s({},r),e)),n},c=function(e){var r=u(e.components);return t.createElement(l.Provider,{value:r},e.children)},p={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=u(n),m=a,f=d["".concat(l,".").concat(m)]||d[m]||p[m]||o;return n?t.createElement(f,s(s({ref:r},c),{},{components:n})):t.createElement(f,s({ref:r},c))}));function m(e,r){var n=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var o=n.length,s=new Array(o);s[0]=d;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i.mdxType="string"==typeof e?e:a,s[1]=i;for(var u=2;u{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>s,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var t=n(7462),a=(n(7294),n(3905));const o={sidebar_position:7,sidebar_class_name:"green"},s="Kubernetes RBAC",i={unversionedId:"admin/rbac",id:"admin/rbac",title:"Kubernetes RBAC",description:"The following gives some guidance around the suggested roles and permissions in Kubernetes for consumers. In all cases, to remove duplication, the permissions are defined as a ClusterRole and bound locally within a namespace.",source:"@site/docs/terranetes-controller/admin/rbac.md",sourceDirName:"admin",slug:"/admin/rbac",permalink:"/terranetes-controller/admin/rbac",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/rbac.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:7,frontMatter:{sidebar_position:7,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Terraform State",permalink:"/terranetes-controller/admin/state"},next:{title:"Customize Job Template",permalink:"/terranetes-controller/admin/template"}},l={},u=[],c={toc:u};function p(e){let{components:r,...n}=e;return(0,a.kt)("wrapper",(0,t.Z)({},c,n,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"kubernetes-rbac"},"Kubernetes RBAC"),(0,a.kt)("p",null,"The following gives some guidance around the suggested roles and permissions in Kubernetes for consumers. In all cases, to remove duplication, the permissions are defined as a ClusterRole and bound locally within a namespace."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Create the ClusterRoles used to scoped the ",(0,a.kt)("inlineCode",{parentName:"li"},"terraform.appvia.io")," resources.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n name: terranetes-users\nrules:\n - apiGroups:\n - terraform.appvia.io\n resources:\n - cloudresources\n - configurations\n - plans\n - providers\n - revisions\n verbs:\n - get\n - list\n - watch\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n name: terranetes-cr-user\nrules:\n - apiGroups:\n - terraform.appvia.io\n resources:\n - cloudresources\n verbs:\n - create\n - delete\n - update\n - patch\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n name: terranetes-cfg-user\nrules:\n - apiGroups:\n - terraform.appvia.io\n resources:\n - configurations\n verbs:\n - create\n - delete\n - update\n - patch\n")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"Depending whether you are using CloudResource or Configuration, bind the appropriate role within the namespace")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: terranetes-user\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: terranetes-user\nsubjects:\n - apiGroup: rbac.authorization.k8s.io\n kind: Group\n name: system:authenticated\n")),(0,a.kt)("p",null,"If you using ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," use the following role."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: terranetes-user\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: terranetes-cr-users\nsubjects: [] <-- Add subjects\n")),(0,a.kt)("p",null,"Else if your using ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: terranetes-user\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: terranetes-cfg-users\nsubjects: [] <-- Add subjects\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f93c2983.a4d19c70.js b/assets/js/f93c2983.a4d19c70.js new file mode 100644 index 00000000..4bcfe232 --- /dev/null +++ b/assets/js/f93c2983.a4d19c70.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[9916],{3905:(e,r,n)=>{n.d(r,{Zo:()=>c,kt:()=>m});var t=n(7294);function a(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function o(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function i(e){for(var r=1;r=0||(a[n]=e[n]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=t.createContext({}),u=function(e){var r=t.useContext(l),n=r;return e&&(n="function"==typeof e?e(r):i(i({},r),e)),n},c=function(e){var r=u(e.components);return t.createElement(l.Provider,{value:r},e.children)},p={inlineCode:"code",wrapper:function(e){var r=e.children;return t.createElement(t.Fragment,{},r)}},d=t.forwardRef((function(e,r){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=u(n),m=a,f=d["".concat(l,".").concat(m)]||d[m]||p[m]||o;return n?t.createElement(f,i(i({ref:r},c),{},{components:n})):t.createElement(f,i({ref:r},c))}));function m(e,r){var n=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=d;var s={};for(var l in r)hasOwnProperty.call(r,l)&&(s[l]=r[l]);s.originalType=e,s.mdxType="string"==typeof e?e:a,i[1]=s;for(var u=2;u{n.r(r),n.d(r,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var t=n(7462),a=(n(7294),n(3905));const o={sidebar_position:7,sidebar_class_name:"green"},i="Kubernetes RBAC",s={unversionedId:"admin/rbac",id:"admin/rbac",title:"Kubernetes RBAC",description:"The following gives some guidance around the suggested roles and permissions in Kubernetes for consumers. In all cases, to remove duplication, the permissions are defined as a ClusterRole and bound locally within a namespace.",source:"@site/docs/terranetes-controller/admin/rbac.md",sourceDirName:"admin",slug:"/admin/rbac",permalink:"/terranetes-controller/admin/rbac",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/admin/rbac.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:7,frontMatter:{sidebar_position:7,sidebar_class_name:"green"},sidebar:"tutorialSidebar",previous:{title:"Terraform State",permalink:"/terranetes-controller/admin/state"},next:{title:"Customize Job Template",permalink:"/terranetes-controller/admin/template"}},l={},u=[],c={toc:u};function p(e){let{components:r,...n}=e;return(0,a.kt)("wrapper",(0,t.Z)({},c,n,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"kubernetes-rbac"},"Kubernetes RBAC"),(0,a.kt)("p",null,"The following gives some guidance around the suggested roles and permissions in Kubernetes for consumers. In all cases, to remove duplication, the permissions are defined as a ClusterRole and bound locally within a namespace."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Create the ClusterRoles used to scoped the ",(0,a.kt)("inlineCode",{parentName:"li"},"terraform.appvia.io")," resources.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n name: terranetes-users\nrules:\n - apiGroups:\n - terraform.appvia.io\n resources:\n - cloudresources\n - configurations\n - plans\n - providers\n - revisions\n verbs:\n - get\n - list\n - watch\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n name: terranetes-cr-user\nrules:\n - apiGroups:\n - terraform.appvia.io\n resources:\n - cloudresources\n verbs:\n - create\n - delete\n - update\n - patch\n---\napiVersion: rbac.authorization.k8s.io/v1\nkind: ClusterRole\nmetadata:\n name: terranetes-cfg-user\nrules:\n - apiGroups:\n - terraform.appvia.io\n resources:\n - configurations\n verbs:\n - create\n - delete\n - update\n - patch\n")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"Depending whether you are using CloudResource or Configuration, bind the appropriate role within the namespace")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: terranetes-user\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: terranetes-user\nsubjects:\n - apiGroup: rbac.authorization.k8s.io\n kind: Group\n name: system:authenticated\n")),(0,a.kt)("p",null,"If you using ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/cloudresources.terraform.appvia.io"},"CloudResources")," use the following role."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: terranetes-user\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: terranetes-cr-users\nsubjects: [] <-- Add subjects\n")),(0,a.kt)("p",null,"Else if your using ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configurations")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"---\napiVersion: rbac.authorization.k8s.io/v1\nkind: RoleBinding\nmetadata:\n name: terranetes-user\nroleRef:\n apiGroup: rbac.authorization.k8s.io\n kind: ClusterRole\n name: terranetes-cfg-users\nsubjects: [] <-- Add subjects\n")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ff6dfb45.6bc375b6.js b/assets/js/ff6dfb45.6bc375b6.js deleted file mode 100644 index da24bf16..00000000 --- a/assets/js/ff6dfb45.6bc375b6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8812],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=p(r),d=a,f=m["".concat(s,".").concat(d)]||m[d]||u[d]||o;return r?n.createElement(f,l(l({ref:t},c),{},{components:r})):n.createElement(f,l({ref:t},c))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:4},l="Using Flux as Source",i={unversionedId:"developer/flux",id:"developer/flux",title:"Using Flux as Source",description:"Flux is a flexible and popular framework used for Gitops. You can take advantage of any Flux install while still retaining the full feature set of the terraform controller.",source:"@site/docs/terranetes-controller/developer/flux.md",sourceDirName:"developer",slug:"/developer/flux",permalink:"/terranetes-controller/developer/flux",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/developer/flux.md",tags:[],version:"current",lastUpdatedBy:"dependabot[bot]",lastUpdatedAt:1708602003,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Enabling Drift Protection",permalink:"/terranetes-controller/developer/drift"},next:{title:"Walk Throughs",permalink:"/terranetes-controller/category/walk-throughs"}},s={},p=[],c={toc:p};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"using-flux-as-source"},"Using Flux as Source"),(0,a.kt)("p",null,"Flux is a flexible and popular framework used for ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/DevOps#GitOps"},"Gitops"),". You can take advantage of any Flux install while still retaining the full feature set of the terraform controller."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"The following has assumed you have installed the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/fluxcd/source-controller"},"source-controller")," and any dependant components in the cluster already.")),(0,a.kt)("p",null,"Lets rework our common example to take advantage of Flux and source our terraform module via the source controller."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1m .\nkind: Configuration\nmetadata:\n name: bucket\nspec:\n module: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0\n\n providerRef:\n name: default\n\n writeConnectionSecretToRef:\n name: test\n\n variables:\n bucket: [BUCKET_NAME]\n")),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Now instead of pulling the terraform module direct as above we can use a ",(0,a.kt)("a",{parentName:"li",href:"https://fluxcd.io/docs/components/source/gitrepositories/"},"GitRepostory")," to represent the source module.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: source.toolkit.fluxcd.io/v1beta2\nkind: GitRepository\nmetadata:\n name: bucket\nspec:\n interval: 1m\n timeout: 60s\n url: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git\n")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"Wait for the source controller to retrieve the module and view the status.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl get gitrepositories bucket -o yaml\n")),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},"Look into the status of the resource")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"status:\n artifact:\n ...\n observedGeneration: 2\n url: http://source-controller.source-system.svc.cluster.local./gitrepository/apps/terraform-aws-s3-bucket.git/latest.tar.gz\n")),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Note the URL will change depending on which namespace the source controller was installed and any branch references.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Update you ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," resource to use the above URL. Note we have to force the protocol type by prefixing it with ",(0,a.kt)("inlineCode",{parentName:"p"},"http::")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1m .\nkind: Configuration\nmetadata:\n name: bucket\nspec:\n module: http::http://source-controller.source-system.svc.cluster.local/gitrepository/apps/terraform-aws-s3-bucket.git/latest.tar.gz\n")),(0,a.kt)("p",null,"The controller will retrieve the extract the archive for you."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"These steps don't need to be performed sequentially. Once you know the expected format of the URL the source controller is going to give you can apply the resources all at once.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ff6dfb45.df2f66a8.js b/assets/js/ff6dfb45.df2f66a8.js new file mode 100644 index 00000000..70f8e2f2 --- /dev/null +++ b/assets/js/ff6dfb45.df2f66a8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkterranetes=self.webpackChunkterranetes||[]).push([[8812],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,s=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),m=p(r),f=a,d=m["".concat(s,".").concat(f)]||m[f]||u[f]||o;return r?n.createElement(d,l(l({ref:t},c),{},{components:r})):n.createElement(d,l({ref:t},c))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,l=new Array(o);l[0]=m;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={sidebar_position:4},l="Using Flux as Source",i={unversionedId:"developer/flux",id:"developer/flux",title:"Using Flux as Source",description:"Flux is a flexible and popular framework used for Gitops. You can take advantage of any Flux install while still retaining the full feature set of the terraform controller.",source:"@site/docs/terranetes-controller/developer/flux.md",sourceDirName:"developer",slug:"/developer/flux",permalink:"/terranetes-controller/developer/flux",draft:!1,editUrl:"https://github.com/appvia/terranetes/tree/master/docs/terranetes-controller/developer/flux.md",tags:[],version:"current",lastUpdatedBy:"Rohith Jayawardene",lastUpdatedAt:1708602075,formattedLastUpdatedAt:"Feb 22, 2024",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Enabling Drift Protection",permalink:"/terranetes-controller/developer/drift"},next:{title:"Walk Throughs",permalink:"/terranetes-controller/category/walk-throughs"}},s={},p=[],c={toc:p};function u(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"using-flux-as-source"},"Using Flux as Source"),(0,a.kt)("p",null,"Flux is a flexible and popular framework used for ",(0,a.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/DevOps#GitOps"},"Gitops"),". You can take advantage of any Flux install while still retaining the full feature set of the terraform controller."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"The following has assumed you have installed the ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/fluxcd/source-controller"},"source-controller")," and any dependant components in the cluster already.")),(0,a.kt)("p",null,"Lets rework our common example to take advantage of Flux and source our terraform module via the source controller."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1m .\nkind: Configuration\nmetadata:\n name: bucket\nspec:\n module: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git?ref=v3.1.0\n\n providerRef:\n name: default\n\n writeConnectionSecretToRef:\n name: test\n\n variables:\n bucket: [BUCKET_NAME]\n")),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Now instead of pulling the terraform module direct as above we can use a ",(0,a.kt)("a",{parentName:"li",href:"https://fluxcd.io/docs/components/source/gitrepositories/"},"GitRepostory")," to represent the source module.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: source.toolkit.fluxcd.io/v1beta2\nkind: GitRepository\nmetadata:\n name: bucket\nspec:\n interval: 1m\n timeout: 60s\n url: https://github.com/terraform-aws-modules/terraform-aws-s3-bucket.git\n")),(0,a.kt)("ol",{start:2},(0,a.kt)("li",{parentName:"ol"},"Wait for the source controller to retrieve the module and view the status.")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-shell"},"$ kubectl get gitrepositories bucket -o yaml\n")),(0,a.kt)("ol",{start:3},(0,a.kt)("li",{parentName:"ol"},"Look into the status of the resource")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"status:\n artifact:\n ...\n observedGeneration: 2\n url: http://source-controller.source-system.svc.cluster.local./gitrepository/apps/terraform-aws-s3-bucket.git/latest.tar.gz\n")),(0,a.kt)("ol",{start:4},(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Note the URL will change depending on which namespace the source controller was installed and any branch references.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},"Update you ",(0,a.kt)("a",{parentName:"p",href:"/terranetes-controller/reference/configurations.terraform.appvia.io"},"Configuration")," resource to use the above URL. Note we have to force the protocol type by prefixing it with ",(0,a.kt)("inlineCode",{parentName:"p"},"http::")))),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: terraform.appvia.io/v1alpha1m .\nkind: Configuration\nmetadata:\n name: bucket\nspec:\n module: http::http://source-controller.source-system.svc.cluster.local/gitrepository/apps/terraform-aws-s3-bucket.git/latest.tar.gz\n")),(0,a.kt)("p",null,"The controller will retrieve the extract the archive for you."),(0,a.kt)("admonition",{type:"important"},(0,a.kt)("p",{parentName:"admonition"},"These steps don't need to be performed sequentially. Once you know the expected format of the URL the source controller is going to give you can apply the resources all at once.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.d43289eb.js b/assets/js/runtime~main.f9be9d52.js similarity index 78% rename from assets/js/runtime~main.d43289eb.js rename to assets/js/runtime~main.f9be9d52.js index ab1b65b5..13fc3be0 100644 --- a/assets/js/runtime~main.d43289eb.js +++ b/assets/js/runtime~main.f9be9d52.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,f,d,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=b,r.c=t,e=[],r.O=(a,f,d,c)=>{if(!f){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,d,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({32:"10637139",53:"935f2afb",89:"d7f2e5de",115:"32424a33",122:"d38161a6",199:"58acc4cf",231:"8b529933",256:"eb6848ad",314:"a31cba67",342:"8fed0ecf",441:"f7a548db",477:"92866de5",770:"1a72d528",822:"d6e36502",857:"0cfd853f",863:"bac124c8",867:"78fe1062",893:"2878cf51",930:"177cd14b",1048:"3a9c1a85",1184:"0af774bb",1380:"a9872a66",1410:"2559d39d",1458:"81fc0eae",1609:"73b951d4",1815:"850cb230",2157:"cbf2140f",2181:"43f34b2f",2188:"0e04b2f5",2378:"f02b81d8",2473:"f2c3edfe",2585:"0d5fce79",2661:"23615001",2713:"4882424c",2721:"95101b21",2737:"593f57b8",2779:"deaac934",2864:"d333aa35",2878:"f5cd5a84",2917:"94624a21",2928:"a768274d",3286:"a42b82fc",3323:"17aa6f83",3469:"546350c5",3617:"a7a91845",3833:"c09a9939",4032:"75489bf9",4155:"c4ac0853",4195:"c4f5d8e4",4291:"c789fcd4",4605:"2b941cda",4693:"03f10c7d",5038:"3b9a933f",5050:"a0577439",5160:"815f509d",5211:"6981e07d",5220:"c9df958a",5274:"65b1931a",5518:"31230563",5557:"2fccdf8c",5610:"7c405bef",5700:"2cdad165",5926:"9d4ded2b",6004:"3bd8b39a",6037:"5eca4dc9",6071:"f513a523",6346:"3f723aab",6410:"4472a7ee",6427:"35262849",6430:"4e00d4f0",6448:"4f26f5d6",6546:"975371ff",6550:"d88f124c",6701:"65ae04a0",6751:"cbdc141d",6975:"9b391930",7188:"821ac024",7325:"c6861c30",7371:"874cc520",7533:"5b589de6",7683:"370dbcd4",7726:"1aa16790",7734:"6dca928d",7918:"17896441",7920:"1a4e3797",8249:"c0c32ec9",8275:"f8408644",8300:"322e2069",8381:"8ef418ea",8387:"73b38786",8443:"76a64aa0",8569:"47f9d068",8577:"4635b07f",8641:"d94921bd",8654:"bb141dfd",8812:"ff6dfb45",8933:"8825a319",9032:"9c509d98",9217:"62d6a022",9323:"82fb7bb7",9514:"1be78505",9580:"b63a1fad",9615:"7f5abaf4",9664:"7d5b2696",9681:"a17586cd",9687:"3d35bbfd",9748:"7b6e6716",9796:"2360e3f2",9817:"14eb3368",9916:"f93c2983"}[e]||e)+"."+{32:"3da2697f",53:"a4110782",89:"99ce9c64",115:"a50f2f70",122:"5bdb7d61",199:"f8cc39f4",231:"38844f05",256:"fa48f02e",314:"254e97e5",342:"898e6afe",441:"a0ead9bf",477:"c7bffafa",614:"2f7840f6",770:"d394f409",822:"b4e04e89",857:"4f4aa7b4",863:"ed59de9b",867:"7fade4b1",893:"979b0cd0",930:"90f87ce6",1048:"74cf2805",1184:"d983efc6",1380:"422fef0a",1410:"526387cd",1426:"96576d5e",1458:"4cba3626",1609:"4b421cec",1815:"0735df60",2157:"d0aed567",2181:"8e356cb1",2188:"eaa2170e",2378:"1f2f6d42",2473:"6cdd1fbd",2585:"1b33910c",2661:"784184a2",2713:"423b3f57",2721:"074efea1",2737:"f395b814",2779:"f7e833dc",2864:"a46a5c87",2878:"bb75ad76",2917:"2f2ce8e4",2928:"d2d6c2b9",3286:"d7759a99",3323:"d3b1140d",3469:"44d3602a",3617:"3094c46c",3833:"2f8187b1",4032:"ed88eef2",4155:"d8cebf18",4195:"ad12dcad",4291:"6e1d6c0d",4605:"6fb02dd4",4693:"c1c85d77",4972:"f5e397f2",5038:"9135529d",5050:"67db0e65",5160:"a3541e40",5211:"3f7a2f39",5220:"d17c1ce0",5274:"21860503",5518:"0b524a64",5557:"1b932844",5610:"7b803bc4",5700:"9132581a",5926:"5f4addac",6004:"ea522986",6037:"2d312a0c",6071:"d18ec8ec",6346:"56086624",6410:"ea96cade",6427:"44616e24",6430:"4821f715",6448:"b18fa160",6546:"ef624bd0",6550:"1551305f",6701:"05f5dd15",6751:"298a7b5c",6945:"1feba914",6975:"af6521aa",7188:"9ffde2be",7325:"be386bd1",7371:"16ad3cb2",7533:"8e6634c4",7683:"80288bcd",7726:"72fd5a25",7734:"9bd4ca54",7918:"b1d7c0f8",7920:"730fc90a",8249:"fdc5da0f",8275:"93f1a201",8300:"e0214920",8381:"fa067ce6",8387:"74f50fda",8443:"0e0f1c36",8569:"51810f0d",8577:"93894c21",8641:"7dafdd8b",8654:"b549b710",8812:"6bc375b6",8894:"4c11f3e1",8933:"1ffe7433",9032:"ce8d5e80",9217:"f56ec2b7",9323:"325191e6",9514:"6febc485",9580:"f3edc40a",9615:"338325cb",9664:"9cd6c856",9681:"2061350d",9687:"25d23231",9748:"93606159",9796:"243579d5",9817:"67f1ccbc",9916:"3abec308"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},c="terranetes:",r.l=(e,a,f,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={10637139:"32",17896441:"7918",23615001:"2661",31230563:"5518",35262849:"6427","935f2afb":"53",d7f2e5de:"89","32424a33":"115",d38161a6:"122","58acc4cf":"199","8b529933":"231",eb6848ad:"256",a31cba67:"314","8fed0ecf":"342",f7a548db:"441","92866de5":"477","1a72d528":"770",d6e36502:"822","0cfd853f":"857",bac124c8:"863","78fe1062":"867","2878cf51":"893","177cd14b":"930","3a9c1a85":"1048","0af774bb":"1184",a9872a66:"1380","2559d39d":"1410","81fc0eae":"1458","73b951d4":"1609","850cb230":"1815",cbf2140f:"2157","43f34b2f":"2181","0e04b2f5":"2188",f02b81d8:"2378",f2c3edfe:"2473","0d5fce79":"2585","4882424c":"2713","95101b21":"2721","593f57b8":"2737",deaac934:"2779",d333aa35:"2864",f5cd5a84:"2878","94624a21":"2917",a768274d:"2928",a42b82fc:"3286","17aa6f83":"3323","546350c5":"3469",a7a91845:"3617",c09a9939:"3833","75489bf9":"4032",c4ac0853:"4155",c4f5d8e4:"4195",c789fcd4:"4291","2b941cda":"4605","03f10c7d":"4693","3b9a933f":"5038",a0577439:"5050","815f509d":"5160","6981e07d":"5211",c9df958a:"5220","65b1931a":"5274","2fccdf8c":"5557","7c405bef":"5610","2cdad165":"5700","9d4ded2b":"5926","3bd8b39a":"6004","5eca4dc9":"6037",f513a523:"6071","3f723aab":"6346","4472a7ee":"6410","4e00d4f0":"6430","4f26f5d6":"6448","975371ff":"6546",d88f124c:"6550","65ae04a0":"6701",cbdc141d:"6751","9b391930":"6975","821ac024":"7188",c6861c30:"7325","874cc520":"7371","5b589de6":"7533","370dbcd4":"7683","1aa16790":"7726","6dca928d":"7734","1a4e3797":"7920",c0c32ec9:"8249",f8408644:"8275","322e2069":"8300","8ef418ea":"8381","73b38786":"8387","76a64aa0":"8443","47f9d068":"8569","4635b07f":"8577",d94921bd:"8641",bb141dfd:"8654",ff6dfb45:"8812","8825a319":"8933","9c509d98":"9032","62d6a022":"9217","82fb7bb7":"9323","1be78505":"9514",b63a1fad:"9580","7f5abaf4":"9615","7d5b2696":"9664",a17586cd:"9681","3d35bbfd":"9687","7b6e6716":"9748","2360e3f2":"9796","14eb3368":"9817",f93c2983:"9916"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var c=new Promise(((f,c)=>d=e[a]=[f,c]));f.push(d[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,c,b=f[0],t=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n{"use strict";var e,a,f,d,c,b={},t={};function r(e){var a=t[e];if(void 0!==a)return a.exports;var f=t[e]={id:e,loaded:!1,exports:{}};return b[e].call(f.exports,f,f.exports,r),f.loaded=!0,f.exports}r.m=b,r.c=t,e=[],r.O=(a,f,d,c)=>{if(!f){var b=1/0;for(i=0;i=c)&&Object.keys(r.O).every((e=>r.O[e](f[o])))?f.splice(o--,1):(t=!1,c0&&e[i-1][2]>c;i--)e[i]=e[i-1];e[i]=[f,d,c]},r.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return r.d(a,{a:a}),a},f=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,r.t=function(e,d){if(1&d&&(e=this(e)),8&d)return e;if("object"==typeof e&&e){if(4&d&&e.__esModule)return e;if(16&d&&"function"==typeof e.then)return e}var c=Object.create(null);r.r(c);var b={};a=a||[null,f({}),f([]),f(f)];for(var t=2&d&&e;"object"==typeof t&&!~a.indexOf(t);t=f(t))Object.getOwnPropertyNames(t).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,r.d(c,b),c},r.d=(e,a)=>{for(var f in a)r.o(a,f)&&!r.o(e,f)&&Object.defineProperty(e,f,{enumerable:!0,get:a[f]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((a,f)=>(r.f[f](e,a),a)),[])),r.u=e=>"assets/js/"+({32:"10637139",53:"935f2afb",89:"d7f2e5de",115:"32424a33",122:"d38161a6",199:"58acc4cf",231:"8b529933",256:"eb6848ad",314:"a31cba67",342:"8fed0ecf",441:"f7a548db",477:"92866de5",770:"1a72d528",822:"d6e36502",857:"0cfd853f",863:"bac124c8",867:"78fe1062",893:"2878cf51",930:"177cd14b",1048:"3a9c1a85",1184:"0af774bb",1380:"a9872a66",1410:"2559d39d",1458:"81fc0eae",1609:"73b951d4",1815:"850cb230",2157:"cbf2140f",2181:"43f34b2f",2188:"0e04b2f5",2378:"f02b81d8",2473:"f2c3edfe",2585:"0d5fce79",2661:"23615001",2713:"4882424c",2721:"95101b21",2737:"593f57b8",2779:"deaac934",2864:"d333aa35",2878:"f5cd5a84",2917:"94624a21",2928:"a768274d",3286:"a42b82fc",3323:"17aa6f83",3469:"546350c5",3617:"a7a91845",3833:"c09a9939",4032:"75489bf9",4155:"c4ac0853",4195:"c4f5d8e4",4291:"c789fcd4",4605:"2b941cda",4693:"03f10c7d",5038:"3b9a933f",5050:"a0577439",5160:"815f509d",5211:"6981e07d",5220:"c9df958a",5274:"65b1931a",5518:"31230563",5557:"2fccdf8c",5610:"7c405bef",5700:"2cdad165",5926:"9d4ded2b",6004:"3bd8b39a",6037:"5eca4dc9",6071:"f513a523",6346:"3f723aab",6410:"4472a7ee",6427:"35262849",6430:"4e00d4f0",6448:"4f26f5d6",6546:"975371ff",6550:"d88f124c",6701:"65ae04a0",6751:"cbdc141d",6975:"9b391930",7188:"821ac024",7325:"c6861c30",7371:"874cc520",7533:"5b589de6",7683:"370dbcd4",7726:"1aa16790",7734:"6dca928d",7918:"17896441",7920:"1a4e3797",8249:"c0c32ec9",8275:"f8408644",8300:"322e2069",8381:"8ef418ea",8387:"73b38786",8443:"76a64aa0",8569:"47f9d068",8577:"4635b07f",8641:"d94921bd",8654:"bb141dfd",8812:"ff6dfb45",8933:"8825a319",9032:"9c509d98",9217:"62d6a022",9323:"82fb7bb7",9514:"1be78505",9580:"b63a1fad",9615:"7f5abaf4",9664:"7d5b2696",9681:"a17586cd",9687:"3d35bbfd",9748:"7b6e6716",9796:"2360e3f2",9817:"14eb3368",9916:"f93c2983"}[e]||e)+"."+{32:"a493b591",53:"858ea062",89:"b7a8b75d",115:"41427e84",122:"c329147d",199:"47fa09cd",231:"5bcca701",256:"fa48f02e",314:"faf880a9",342:"8d6b6eb4",441:"cc51abc9",477:"c7bffafa",614:"2f7840f6",770:"7442ce84",822:"6bc224be",857:"4f4aa7b4",863:"28779b72",867:"948f2343",893:"05b7be9c",930:"9203d018",1048:"74cf2805",1184:"4cd9e2de",1380:"02087078",1410:"c9a10a5e",1426:"96576d5e",1458:"d1815302",1609:"ae75e509",1815:"e8723eb8",2157:"de888c59",2181:"72917628",2188:"e3972bbc",2378:"951fc1ef",2473:"6cdd1fbd",2585:"de7bd9bd",2661:"93ea3bcb",2713:"c835e1dd",2721:"07aa5b82",2737:"bac19727",2779:"f7e833dc",2864:"844e055c",2878:"06a4987f",2917:"effbad47",2928:"8a62fb79",3286:"d7759a99",3323:"83457965",3469:"af39e6df",3617:"612055a2",3833:"2f4815b4",4032:"27c0cf1c",4155:"048aa8a6",4195:"ad12dcad",4291:"b2453596",4605:"725cec7a",4693:"dd3b78bc",4972:"f5e397f2",5038:"9135529d",5050:"fe963920",5160:"93677533",5211:"bce0d72e",5220:"9724b9db",5274:"b406dc2d",5518:"bb562721",5557:"1b932844",5610:"9e6af7b9",5700:"5b87cc97",5926:"6d9cfc6c",6004:"8cda0a41",6037:"6685c37d",6071:"d18ec8ec",6346:"f97ba99a",6410:"b0c5ca02",6427:"340f8acb",6430:"3b39d536",6448:"1ba461fa",6546:"33429847",6550:"e5928040",6701:"2d01e9e2",6751:"298a7b5c",6945:"1feba914",6975:"e338da0f",7188:"9ffde2be",7325:"3b30c8d5",7371:"1b6b8cc0",7533:"692f883a",7683:"893a240d",7726:"f259c73d",7734:"9bd4ca54",7918:"b1d7c0f8",7920:"730fc90a",8249:"c1c94162",8275:"c29f800d",8300:"40b3a685",8381:"04000d8d",8387:"291fca86",8443:"e4ca46af",8569:"c37a1bb0",8577:"679f399f",8641:"e48810ce",8654:"de4e8334",8812:"df2f66a8",8894:"4c11f3e1",8933:"99002e93",9032:"f971696c",9217:"653fc16f",9323:"eeb610cf",9514:"6febc485",9580:"50d5c500",9615:"b52ae588",9664:"5358ad29",9681:"5f25507b",9687:"bfb8fed1",9748:"c912450a",9796:"48748909",9817:"67f1ccbc",9916:"a4d19c70"}[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),d={},c="terranetes:",r.l=(e,a,f,b)=>{if(d[e])d[e].push(a);else{var t,o;if(void 0!==f)for(var n=document.getElementsByTagName("script"),i=0;i{t.onerror=t.onload=null,clearTimeout(s);var c=d[e];if(delete d[e],t.parentNode&&t.parentNode.removeChild(t),c&&c.forEach((e=>e(f))),a)return a(f)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:t}),12e4);t.onerror=l.bind(null,t.onerror),t.onload=l.bind(null,t.onload),o&&document.head.appendChild(t)}},r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.p="/",r.gca=function(e){return e={10637139:"32",17896441:"7918",23615001:"2661",31230563:"5518",35262849:"6427","935f2afb":"53",d7f2e5de:"89","32424a33":"115",d38161a6:"122","58acc4cf":"199","8b529933":"231",eb6848ad:"256",a31cba67:"314","8fed0ecf":"342",f7a548db:"441","92866de5":"477","1a72d528":"770",d6e36502:"822","0cfd853f":"857",bac124c8:"863","78fe1062":"867","2878cf51":"893","177cd14b":"930","3a9c1a85":"1048","0af774bb":"1184",a9872a66:"1380","2559d39d":"1410","81fc0eae":"1458","73b951d4":"1609","850cb230":"1815",cbf2140f:"2157","43f34b2f":"2181","0e04b2f5":"2188",f02b81d8:"2378",f2c3edfe:"2473","0d5fce79":"2585","4882424c":"2713","95101b21":"2721","593f57b8":"2737",deaac934:"2779",d333aa35:"2864",f5cd5a84:"2878","94624a21":"2917",a768274d:"2928",a42b82fc:"3286","17aa6f83":"3323","546350c5":"3469",a7a91845:"3617",c09a9939:"3833","75489bf9":"4032",c4ac0853:"4155",c4f5d8e4:"4195",c789fcd4:"4291","2b941cda":"4605","03f10c7d":"4693","3b9a933f":"5038",a0577439:"5050","815f509d":"5160","6981e07d":"5211",c9df958a:"5220","65b1931a":"5274","2fccdf8c":"5557","7c405bef":"5610","2cdad165":"5700","9d4ded2b":"5926","3bd8b39a":"6004","5eca4dc9":"6037",f513a523:"6071","3f723aab":"6346","4472a7ee":"6410","4e00d4f0":"6430","4f26f5d6":"6448","975371ff":"6546",d88f124c:"6550","65ae04a0":"6701",cbdc141d:"6751","9b391930":"6975","821ac024":"7188",c6861c30:"7325","874cc520":"7371","5b589de6":"7533","370dbcd4":"7683","1aa16790":"7726","6dca928d":"7734","1a4e3797":"7920",c0c32ec9:"8249",f8408644:"8275","322e2069":"8300","8ef418ea":"8381","73b38786":"8387","76a64aa0":"8443","47f9d068":"8569","4635b07f":"8577",d94921bd:"8641",bb141dfd:"8654",ff6dfb45:"8812","8825a319":"8933","9c509d98":"9032","62d6a022":"9217","82fb7bb7":"9323","1be78505":"9514",b63a1fad:"9580","7f5abaf4":"9615","7d5b2696":"9664",a17586cd:"9681","3d35bbfd":"9687","7b6e6716":"9748","2360e3f2":"9796","14eb3368":"9817",f93c2983:"9916"}[e]||e,r.p+r.u(e)},(()=>{var e={1303:0,532:0};r.f.j=(a,f)=>{var d=r.o(e,a)?e[a]:void 0;if(0!==d)if(d)f.push(d[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var c=new Promise(((f,c)=>d=e[a]=[f,c]));f.push(d[2]=c);var b=r.p+r.u(a),t=new Error;r.l(b,(f=>{if(r.o(e,a)&&(0!==(d=e[a])&&(e[a]=void 0),d)){var c=f&&("load"===f.type?"missing":f.type),b=f&&f.target&&f.target.src;t.message="Loading chunk "+a+" failed.\n("+c+": "+b+")",t.name="ChunkLoadError",t.type=c,t.request=b,d[1](t)}}),"chunk-"+a,a)}},r.O.j=a=>0===e[a];var a=(a,f)=>{var d,c,b=f[0],t=f[1],o=f[2],n=0;if(b.some((a=>0!==e[a]))){for(d in t)r.o(t,d)&&(r.m[d]=t[d]);if(o)var i=o(r)}for(a&&a(f);n