{"id":304,"date":"2022-07-29T20:52:25","date_gmt":"2022-07-30T01:52:25","guid":{"rendered":"https:\/\/cloudlearning365.com\/?p=304"},"modified":"2022-10-14T09:40:26","modified_gmt":"2022-10-14T14:40:26","slug":"publish-module-to-terraform-registry","status":"publish","type":"post","link":"https:\/\/cloudlearning365.com\/?p=304","title":{"rendered":"Publish module to Terraform Registry"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Why?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">git repository is distributed in nature, also there are tons of repositories not using terraform. You have just created a killer terraform solution and cannot wait to share with world, instead of trying to send people the git repo link, how about publish it to terraform registry, and now everyone can search and simply use it as a module? After all, let&#8217;s keep it DRY (Don&#8217;t repeat yourself) as much as possible.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Integration with GitHub<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before you can publish your module to terraform, you must have a <a href=\"https:\/\/github.com\/\">GitHub <\/a>account.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sign-in to your GitHub accout. Then navigate to <a href=\"https:\/\/registry.terraform.io\">https:\/\/registry.terraform.io<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On top right side, click on <strong>Publish <\/strong>-&gt; <strong>Module<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"224\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-31-1024x224.png\" alt=\"\" class=\"wp-image-305\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-31-1024x224.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-31-300x66.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-31-768x168.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-31-1536x336.png 1536w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-31.png 1763w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Click on <strong>Sign in with GitHub<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"566\" height=\"452\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-32.png\" alt=\"\" class=\"wp-image-306\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-32.png 566w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-32-300x240.png 300w\" sizes=\"auto, (max-width: 566px) 100vw, 566px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Click on the green <strong><mark style=\"background-color:#0ccd00\" class=\"has-inline-color has-background-color\">Authorize hashicorp<\/mark><\/strong> button<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"867\" height=\"1024\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-33-867x1024.png\" alt=\"\" class=\"wp-image-307\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-33-867x1024.png 867w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-33-254x300.png 254w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-33-768x907.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-33.png 1207w\" sizes=\"auto, (max-width: 867px) 100vw, 867px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The screen returns to registry.terraform.io, but note on top right side, you have been signed in as your GitHub account.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"317\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-34-1024x317.png\" alt=\"\" class=\"wp-image-308\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-34-1024x317.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-34-300x93.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-34-768x238.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-34-1536x476.png 1536w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-34.png 1874w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Create a test repository in GitHub<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Switch to github.com Let&#8217;s create a test respository:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Repository name<\/strong> format: terraform-&lt;PROVIDER&gt;-&lt;NAME&gt;. In the example, Provider = jye, Name = test<\/li><li>Give it a description<\/li><li>The repository must be <strong>Public<\/strong><\/li><li>Choose to <strong>Add a README<\/strong> file, terraform registry will scan and publish the content of README file automatically<\/li><li>Choose .gitignore template, since we are publishing terraform module, select <strong>Terraform<\/strong><\/li><\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"842\" height=\"1024\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-35-842x1024.png\" alt=\"\" class=\"wp-image-309\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-35-842x1024.png 842w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-35-247x300.png 247w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-35-768x934.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-35.png 1086w\" sizes=\"auto, (max-width: 842px) 100vw, 842px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This creates an initial repository contains two files:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>.gitignore<\/li><li>README.md<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"591\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-36-1024x591.png\" alt=\"\" class=\"wp-image-310\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-36-1024x591.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-36-300x173.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-36-768x444.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-36.png 1110w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Note<\/strong>: You may want to spend a bit more time to decide <a href=\"https:\/\/gist.github.com\/nicolasdao\/a7adda51f2f185e8d2700e1573d8a633\">type of license<\/a> you want to apply to your code.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Publish GitHub repository to registry.terraform.io<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Switch back to registry.terraform.io, on top right side, click on <strong>Publish <\/strong>-&gt; <strong>Module<\/strong>. Only public github repo with naming format of terraform-&lt;PROVIDER&gt;-&lt;NAME&gt; will be listed here, select the repo just created. Check on <strong>I agree to the Term of Use<\/strong>, then click on <strong>Publish module<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"681\" height=\"677\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-37.png\" alt=\"\" class=\"wp-image-311\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-37.png 681w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-37-300x298.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-37-150x150.png 150w\" sizes=\"auto, (max-width: 681px) 100vw, 681px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You should get an error, basically terraform registry is expecting you to provide a version\/release tag that&#8217;s in the format of <strong>v1.2.3<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Version number format MAJOR.MINOR.PATCH, increment the:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>MAJOR version when you make incompatible API changes<\/li><li>MINOR version when you add functionality in a backwards compatible manner<\/li><li>PATCH version when you make backwards compatible bug fixes<\/li><\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"563\" height=\"678\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-38.png\" alt=\"\" class=\"wp-image-312\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-38.png 563w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-38-249x300.png 249w\" sizes=\"auto, (max-width: 563px) 100vw, 563px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s head back to GitHub.com and give our test repo a version number<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Click on the 0 tags<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"461\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-39-1024x461.png\" alt=\"\" class=\"wp-image-313\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-39-1024x461.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-39-300x135.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-39-768x346.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-39.png 1372w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A tag requires a release, <strong>Create a new release<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"379\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-40-1024x379.png\" alt=\"\" class=\"wp-image-314\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-40-1024x379.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-40-300x111.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-40-768x284.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-40.png 1070w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Click on <strong>Choose a tag<\/strong>, enter <strong>v1.0.0<\/strong> as the version number, then click on Create new tag: v1.0.0 on publish<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"816\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-42-1024x816.png\" alt=\"\" class=\"wp-image-316\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-42-1024x816.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-42-300x239.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-42-768x612.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-42.png 1398w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Note <strong>v1.0.0<\/strong> now shows up as the tag, enter description and detail, then click on <strong>Publish release<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"810\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-43-1024x810.png\" alt=\"\" class=\"wp-image-317\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-43-1024x810.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-43-300x237.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-43-768x608.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-43.png 1395w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You have now created a release v1.0.0<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"394\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-44-1024x394.png\" alt=\"\" class=\"wp-image-318\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-44-1024x394.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-44-300x116.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-44-768x296.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-44-1536x591.png 1536w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-44.png 1844w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Head back to registry.terraform.io, you should still be in the screen of publishing, click <strong>Publish module<\/strong> again<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"564\" height=\"514\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-45.png\" alt=\"\" class=\"wp-image-319\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-45.png 564w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-45-300x273.png 300w\" sizes=\"auto, (max-width: 564px) 100vw, 564px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You have published your github repo to terraform registry!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note the name of the test repository was: terraform-jye-test, you can see JYE is marked as provider, and test has been marked as name of the registry<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Also note the URL is: <br>https:\/\/registry.terraform.io\/modules\/jye-aviatrix\/test\/jye\/1.0.0<br>Which in the format of: <br>https:\/\/registry.terraform.io\/modules\/&lt;github-handle&gt;\/&lt;registry-name&gt;\/&lt;provider-name&gt;\/&lt;version&gt;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note the version is marked as Version 1.0.0, which is the current latest version<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Note the content of README.md is displayed in the bottom.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"995\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-46-1024x995.png\" alt=\"\" class=\"wp-image-320\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-46-1024x995.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-46-300x292.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-46-768x746.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-46-1536x1493.png 1536w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-46.png 1806w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Also note that we have no terraform file created in the root directory, hence it has a yellow warning above README.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Let&#8217;s add some real code<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The minimum recommended module would need following files:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">README.md<br>main.tf<br>variables.tf<br>outputs.tf<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"> If you want submodules or examples, consider spending a bit more time read <a href=\"https:\/\/www.terraform.io\/language\/modules\/develop\/structure\">this article<\/a> about how to structure your code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this example, lets create the three .tf files.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">variables.tf<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>variable \"x\" {\n  type = number\n}\n\nvariable \"y\" {\n  type = number\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">main.tf<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>locals {\n  sum = var.x + var.y\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">outputs.tf<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>output \"sum\" {\n  value = local.sum\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Pretty straightforward, getting the sum of input variables x and y, then write the local variable sum to output.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In your repo on github.com, click on <strong>Add file<\/strong> -&gt; <strong>Create new file<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"462\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-47-1024x462.png\" alt=\"\" class=\"wp-image-324\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-47-1024x462.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-47-300x135.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-47-768x347.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-47.png 1141w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"> Provide file name and content of the file, as following example. Scroll down and click on <strong>Commit new file<\/strong> (by default directly to main branch)<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"589\" height=\"335\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-48.png\" alt=\"\" class=\"wp-image-325\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-48.png 589w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-48-300x171.png 300w\" sizes=\"auto, (max-width: 589px) 100vw, 589px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Repeat for all three files:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"340\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-49-1024x340.png\" alt=\"\" class=\"wp-image-326\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-49-1024x340.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-49-300x100.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-49-768x255.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-49.png 1140w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s create a new release\/tag v1.0.1<br>Click on <strong>1 tag<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"343\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-50-1024x343.png\" alt=\"\" class=\"wp-image-327\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-50-1024x343.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-50-300x101.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-50-768x257.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-50.png 1137w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Switch to <strong>Releases <\/strong>tab, then click on <strong>Draft a new release<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"387\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-51-1024x387.png\" alt=\"\" class=\"wp-image-328\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-51-1024x387.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-51-300x113.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-51-768x290.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-51.png 1415w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This part now is similar to what accomplished earlier, click on <strong>Choose a tag<\/strong>, then enter <strong>v1.0.1<\/strong>, then click <strong>Create new tag: v1.0.1 on publish<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"590\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-52-1024x590.png\" alt=\"\" class=\"wp-image-329\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-52-1024x590.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-52-300x173.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-52-768x442.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-52.png 1153w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Add description and details, then click on <strong>Publish release<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"802\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-53-1024x802.png\" alt=\"\" class=\"wp-image-330\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-53-1024x802.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-53-300x235.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-53-768x601.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-53.png 1152w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now switch back to registry.terraform.io, you can quickly search your module by providing your github handle and module name<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"203\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-54-1024x203.png\" alt=\"\" class=\"wp-image-331\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-54-1024x203.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-54-300x59.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-54-768x152.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-54.png 1267w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You will see the latest version gets updated to 1.0.1 automatically, and instruction automatically tells you to insert 2 required variables. In the bottom it lists the 2 inputs and 1 output. Nice!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"623\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-55-1024x623.png\" alt=\"\" class=\"wp-image-332\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-55-1024x623.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-55-300x183.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-55-768x468.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-55-1536x935.png 1536w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-55.png 1580w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Let&#8217;s give your new module a spin!<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;m going to use Visual Studio Code for this part for easier demonstration<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First create a folder called <strong>test<\/strong>, and populate it with <strong>main.tf<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Copy the Provision instructions code from registry.terraform.io to VS Code<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"623\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-56-1024x623.png\" alt=\"\" class=\"wp-image-333\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-56-1024x623.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-56-300x183.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-56-768x468.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-56-1536x935.png 1536w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-56.png 1580w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"968\" height=\"231\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-58.png\" alt=\"\" class=\"wp-image-335\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-58.png 968w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-58-300x72.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-58-768x183.png 768w\" sizes=\"auto, (max-width: 968px) 100vw, 968px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Look at inputs section, and enter the two inputs in VS Code<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"765\" height=\"629\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-57.png\" alt=\"\" class=\"wp-image-334\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-57.png 765w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-57-300x247.png 300w\" sizes=\"auto, (max-width: 765px) 100vw, 765px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"174\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-59-1024x174.png\" alt=\"\" class=\"wp-image-336\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-59-1024x174.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-59-300x51.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-59-768x130.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-59-1536x260.png 1536w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-59.png 1658w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Your code would look like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>module \"test\" {\n  source  = \"jye-aviatrix\/test\/jye\"\n  version = \"1.0.1\"\n  # insert the 2 required variables here\n  x = 20\n  y = 6\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Add <strong>outputs.tf<\/strong>, it references the output <strong>sum <\/strong>from the module<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>output \"sum\" {\n  value = module.test.sum\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Run: <strong>terraform init<\/strong><br>Since we didn&#8217;t specify any version constrain, it automatically downloaded latest version<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"806\" height=\"361\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-60.png\" alt=\"\" class=\"wp-image-337\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-60.png 806w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-60-300x134.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-60-768x344.png 768w\" sizes=\"auto, (max-width: 806px) 100vw, 806px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Then run: <strong>terraform apply &#8211;auto-approve<\/strong><br>Looking great!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"204\" src=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-61-1024x204.png\" alt=\"\" class=\"wp-image-338\" srcset=\"https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-61-1024x204.png 1024w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-61-300x60.png 300w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-61-768x153.png 768w, https:\/\/cloudlearning365.com\/wp-content\/uploads\/2022\/07\/image-61.png 1215w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Why? git repository is distributed in nature, also there are tons of repositories not using terraform. You have just created a killer terraform solution and cannot wait to share with world, instead of trying to send people the git repo &hellip; <a href=\"https:\/\/cloudlearning365.com\/?p=304\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-304","post","type-post","status-publish","format-standard","hentry","category-terraform"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/cloudlearning365.com\/index.php?rest_route=\/wp\/v2\/posts\/304","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudlearning365.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudlearning365.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudlearning365.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudlearning365.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=304"}],"version-history":[{"count":6,"href":"https:\/\/cloudlearning365.com\/index.php?rest_route=\/wp\/v2\/posts\/304\/revisions"}],"predecessor-version":[{"id":698,"href":"https:\/\/cloudlearning365.com\/index.php?rest_route=\/wp\/v2\/posts\/304\/revisions\/698"}],"wp:attachment":[{"href":"https:\/\/cloudlearning365.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudlearning365.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudlearning365.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}