{"id":1213,"date":"2022-03-20T02:38:32","date_gmt":"2022-03-19T13:38:32","guid":{"rendered":"https:\/\/blog.wiseowls.co.nz\/?p=1213"},"modified":"2026-03-08T00:48:08","modified_gmt":"2026-03-07T11:48:08","slug":"building-terraform-quick-start-repo-part-3-azure-devops-api","status":"publish","type":"post","link":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/","title":{"rendered":"Building Terraform Quick Start repo part 3 \u2013 Azure DevOps API"},"content":{"rendered":"<p><em>This is the third part of the series following our humble endeavors to automate Terraform deployment tasks. <a href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/01\/13\/terraform-quick-start-repo-part-1-azure-remote-state\/\">First part here<\/a>, <a href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/02\/19\/building-terraform-quick-start-repo-zero-touch-pipeline\/\">second part here<\/a>.  With housekeeping out of the way, let&#8217;s get on to the content.<\/em><\/p>\n<p>Now that we&#8217;ve got the Terraform part sorted, we&#8217;d like to take this project to a logical conclusion and build a reusable template for our future endeavors. <\/p>\n<h2 class=\"wp-block-heading\">Compile or script?<\/h2>\n<p>Our initial idea was to write a small console app that would gather parameters and make all API calls. But <a href=\"https:\/\/docs.microsoft.com\/en-us\/rest\/api\/azure\/devops\/?view=azure-devops-rest-7.1\">this repository<\/a> got us thinking, that it&#8217;s way more efficient to be able to just run the script off GitHub. So, we went to the drawing board and ended up with a Bash script. It ain&#8217;t much but it&#8217;s honest work.<\/p>\n<p>Ultimately the script goes to create an ADO Project, imports its own GitHub repo into a newly created project and proceeds to set up the pipeline. <\/p>\n<h2 class=\"wp-block-heading\">Streamlining process<\/h2>\n<p>With this tooling, we can now automate most of our process. We&#8217;d start by obtaining the parameters and setting up required credentials:<\/p>\n<ol class=\"wp-block-list\">\n<li>In ADO we&#8217;ll need to <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/organizations\/accounts\/use-personal-access-tokens-to-authenticate?view=azure-devops&amp;tabs=Windows\">create and grab a PAT<\/a> of a user with permissions to manage the organization <\/li>\n<\/ol>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"626\" height=\"351\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image.png\" alt=\"Azure DevOps project creation API response\" class=\"wp-image-1218\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image.png 626w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-300x168.png 300w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n<ol class=\"wp-block-list\" start=\"2\">\n<li>In target Azure environment we need to start with <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/active-directory\/fundamentals\/active-directory-how-to-find-tenant\">finding the tenant id<\/a><\/li>\n<li>While we&#8217;re collecting intel, we&#8217;d also grab target Subscription Name and Id.<\/li>\n<li>Next step would be <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/active-directory\/develop\/howto-create-service-principal-portal\">creating a Service Principal<\/a> for Terraform. <\/li>\n<\/ol>\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"604\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/aad-create-service-principal-1024x604.gif\" alt=\"Creating an Azure AD service principal for pipeline authentication\" class=\"wp-image-1226\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/aad-create-service-principal-1024x604.gif 1024w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/aad-create-service-principal-300x177.gif 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/aad-create-service-principal-768x453.gif 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n<ol class=\"wp-block-list\" start=\"5\">\n<li>By default, the principal has no permissions, so we&#8217;ll need to give it something like <code>Contributor<\/code> access on a <code>Subscription<\/code> we want to manage<\/li>\n<\/ol>\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"467\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-1-1024x467.png\" alt=\"Script execution output showing project setup progress\" class=\"wp-image-1220\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-1-1024x467.png 1024w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-1-300x137.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-1-768x350.png 768w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-1.png 1090w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n<ol class=\"wp-block-list\" start=\"6\">\n<li>Finally, it&#8217;s good practice to name Azure resources in such a way that it makes sense later. We come up with a distinct prefix for Terraform state storage account. Since storage accounts have strict naming policies, our prefix must be 2-13 characters long and must only contain alphanumerics. <\/li>\n<\/ol>\n<p>Once all prep work is done, running script should produce an ADO project:<\/p>\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"574\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-3-1024x574.png\" alt=\"Script execution output showing project setup progress\" class=\"wp-image-1229\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-3-1024x574.png 1024w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-3-300x168.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-3-768x430.png 768w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-3-1200x673.png 1200w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-3.png 1274w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n<p>And running a <code>default<\/code> pipeline there should deploy Terraform management resource group (this is where state file will sit) and an actual workload &#8211; in our case it&#8217;s a Static Web App<\/p>\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"336\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-2.png\" alt=\"Script execution output showing project setup progress\" class=\"wp-image-1224\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-2.png 936w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-2-300x108.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/03\/image-2-768x276.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n<p><a href=\"https:\/\/github.com\/tkhadimullin\/ado-tf-kickstart\">This repository<\/a> gives us a good starting point in our engagements with clients using ADO. As more clients start to pick GitHub as their platform of choice, we may have to upgrade it to use Actions. Until then, happy infrastructure-as-coding!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is the third part of the series following our humble endeavors to automate Terraform deployment tasks. First part here, second part here. With housekeeping out of the way, let&#8217;s get on to the content. Now that we&#8217;ve got the Terraform part sorted, we&#8217;d like to take this project to a logical conclusion and build &hellip; <a href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Building Terraform Quick Start repo part 3 \u2013 Azure DevOps API&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1186,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[50,7],"tags":[58,57],"class_list":["post-1213","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud","category-infrastructure","tag-azure-devops","tag-terraform"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Building Terraform Quick Start repo part 3 \u2013 Azure DevOps API - Timur and associates<\/title>\n<meta name=\"description\" content=\"Third part of our infrastructure as code journey will see us through using Azure DevOps APIs to create a project and set up the pipeline.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Building Terraform Quick Start repo part 3 \u2013 Azure DevOps API - Timur and associates\" \/>\n<meta property=\"og:description\" content=\"Third part of our infrastructure as code journey will see us through using Azure DevOps APIs to create a project and set up the pipeline.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Timur and associates\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-19T13:38:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-07T11:48:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/02\/rocket-launch-g30a0082b3_1920.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"563\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"timur\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@TimurKh\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/\"},\"author\":{\"name\":\"timur\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\"},\"headline\":\"Building Terraform Quick Start repo part 3 \u2013 Azure DevOps API\",\"datePublished\":\"2022-03-19T13:38:32+00:00\",\"dateModified\":\"2026-03-07T11:48:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/\"},\"wordCount\":406,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2022\\\/02\\\/rocket-launch-g30a0082b3_1920.jpg\",\"keywords\":[\"azure-devops\",\"terraform\"],\"articleSection\":[\"Cloud\",\"Infrastructure\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/\",\"name\":\"Building Terraform Quick Start repo part 3 \u2013 Azure DevOps API - Timur and associates\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2022\\\/02\\\/rocket-launch-g30a0082b3_1920.jpg\",\"datePublished\":\"2022-03-19T13:38:32+00:00\",\"dateModified\":\"2026-03-07T11:48:08+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\"},\"description\":\"Third part of our infrastructure as code journey will see us through using Azure DevOps APIs to create a project and set up the pipeline.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2022\\\/02\\\/rocket-launch-g30a0082b3_1920.jpg\",\"contentUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2022\\\/02\\\/rocket-launch-g30a0082b3_1920.jpg\",\"width\":1920,\"height\":563},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2022\\\/03\\\/20\\\/building-terraform-quick-start-repo-part-3-azure-devops-api\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Building Terraform Quick Start repo part 3 \u2013 Azure DevOps API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#website\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/\",\"name\":\"Timur and associates\",\"description\":\"Notes of an IT contractor\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\",\"name\":\"timur\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"caption\":\"timur\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/TimurKh\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Building Terraform Quick Start repo part 3 \u2013 Azure DevOps API - Timur and associates","description":"Third part of our infrastructure as code journey will see us through using Azure DevOps APIs to create a project and set up the pipeline.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/","og_locale":"en_US","og_type":"article","og_title":"Building Terraform Quick Start repo part 3 \u2013 Azure DevOps API - Timur and associates","og_description":"Third part of our infrastructure as code journey will see us through using Azure DevOps APIs to create a project and set up the pipeline.","og_url":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/","og_site_name":"Timur and associates","article_published_time":"2022-03-19T13:38:32+00:00","article_modified_time":"2026-03-07T11:48:08+00:00","og_image":[{"width":1920,"height":563,"url":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/02\/rocket-launch-g30a0082b3_1920.jpg","type":"image\/jpeg"}],"author":"timur","twitter_card":"summary_large_image","twitter_creator":"@TimurKh","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/#article","isPartOf":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/"},"author":{"name":"timur","@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59"},"headline":"Building Terraform Quick Start repo part 3 \u2013 Azure DevOps API","datePublished":"2022-03-19T13:38:32+00:00","dateModified":"2026-03-07T11:48:08+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/"},"wordCount":406,"commentCount":0,"image":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/02\/rocket-launch-g30a0082b3_1920.jpg","keywords":["azure-devops","terraform"],"articleSection":["Cloud","Infrastructure"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/","url":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/","name":"Building Terraform Quick Start repo part 3 \u2013 Azure DevOps API - Timur and associates","isPartOf":{"@id":"https:\/\/blog.wiseowls.co.nz\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/#primaryimage"},"image":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/02\/rocket-launch-g30a0082b3_1920.jpg","datePublished":"2022-03-19T13:38:32+00:00","dateModified":"2026-03-07T11:48:08+00:00","author":{"@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59"},"description":"Third part of our infrastructure as code journey will see us through using Azure DevOps APIs to create a project and set up the pipeline.","breadcrumb":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/#primaryimage","url":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/02\/rocket-launch-g30a0082b3_1920.jpg","contentUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2022\/02\/rocket-launch-g30a0082b3_1920.jpg","width":1920,"height":563},{"@type":"BreadcrumbList","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2022\/03\/20\/building-terraform-quick-start-repo-part-3-azure-devops-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.wiseowls.co.nz\/"},{"@type":"ListItem","position":2,"name":"Building Terraform Quick Start repo part 3 \u2013 Azure DevOps API"}]},{"@type":"WebSite","@id":"https:\/\/blog.wiseowls.co.nz\/#website","url":"https:\/\/blog.wiseowls.co.nz\/","name":"Timur and associates","description":"Notes of an IT contractor","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.wiseowls.co.nz\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59","name":"timur","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","caption":"timur"},"sameAs":["https:\/\/x.com\/TimurKh"]}]}},"_links":{"self":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/1213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/comments?post=1213"}],"version-history":[{"count":11,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/1213\/revisions"}],"predecessor-version":[{"id":1354,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/1213\/revisions\/1354"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/media\/1186"}],"wp:attachment":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/media?parent=1213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/categories?post=1213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/tags?post=1213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}